28
 Unit Testin g IL E Procedures How to Produce Reports of Your Unit Test Results Author: Greg Helton Countrywide Home Loans email: ghelton@countrywide.com

Ile Procedures

Embed Size (px)

Citation preview

Page 1: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 1/28

 

Unit Testing ILE Procedures

How to Produce Reports of 

Your Unit Test Results

Author: Greg Helton Countrywide Home Loans email: [email protected]

Page 2: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 2/28

 

The three most expensive  programming errors ever made cost $1.6 billion, $900 million and $245million. Each error was caused by achange to a previously correct 

 program(Weinberg. Infosystems, August 1983). 

Page 3: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 3/28

Page 4: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 4/28

 

Overview (continued)

Unit Testing ILE Procedures allows you to

• identify bugs more precisely

• test code as soon as it is written

This presentation will show you how you can create a test

script, compile it and link it to your module and produce a

  printout of you procedure’s inputs, expected results and

actual test results. This script is RPG source code that once

written may be saved and reused at any later date.

Page 5: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 5/28

 

Terminology

Acceptance Test - A specified level of testing in which allaspects of the product are thoroughly and systematicallyverified by the user and/or system owner that the product performs as expected.

Black Box Testing - An approach to testing that examines

 product function based on requirements or specification andnot on knowledge of the implementation of the program it is anexternal view of the system.

End-to-End Test – system test; testing across applicationsfrom the inception to the destruction of the objects.

Integration Testing - An orderly progression of testing inwhich software and/or hardware elements are combined andtested until the entire system has been combined.

Process Test - The Integration/System tests that are run on theentire process.

Page 6: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 6/28

 

Terminology (continued)

Regression Test - the process of validating modified parts of the software and ensuring that no new errors are introducedinto previously tested code.

Testing – a process performed at the end of a failing projector, alternatively, a process performed in all stages of asuccessful project.

Unit Test Level - The first verification of new or changeddevice in the process to determine if all new or modifieddevices function correctly. This is generally the white boxtesting of the module or device, but not their calls (using stubs,

instead). New or changed data conversion or bridge programsshould also be Unit Tested.

White Box Testing – tests derived from the detailed designwith knowledge of the internal structure of the component.

Page 7: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 7/28

Page 8: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 8/28

Page 9: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 9/28

 

What is an ILE Procedure?

An ILE procedure is a discrete unit of work 

  providing a simple interface to a more complex

 process. The simple interface allows the developer to easily discern the purpose of the procedure and

the inputs and results.

These features of procedures not only simplify the

development and maintenance of code, they alsosimplify testing.

Page 10: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 10/28

Page 11: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 11/28

 

Starting Unit Test Scripts

 Note: you must use the

EXPORT keyword to export

your procedures in order to

 perform unit tests using this

technique.

This allows other modules to

call the procedure. This is how“sharing” is implemented.

For our example test script, we will test this procedure.

Page 12: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 12/28

 

Write the test script as a

 program, making calls to the

 procedure to be tested and to

the UnitTest procedures.

Four tests are run in this

script. Each produces the

 printed results differently.

Each test will be explainedindividually in slides to

come.

Writing The

Test Script

Each procedure tested will

require its prototype to beadded to the test program.

Page 13: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 13/28

Page 14: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 14/28

 

Formatting the Output

The printed line shown here will be produced in the test results report spoolfile. The

 printer file is defined in the UnitTest module and all printer file operations are coded

there.

  Notice that the procedure name, the parameter, the expected result and the actualresult are shown. With these values you can determine if your procedure passed or 

failed the unit test.

Example 1

Page 15: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 15/28

 

Formatting the Output

The printTest procedure requires four parameters.

Store the name of the procedure you are testing in the procName variable.

Set inputValue equal to the character values of the input parameters.

Set plannedResult to the character value of the value(s) you expect.

Obtain the procedure result(s) by calling it as shown on line 22. If the results are

numeric, convert to character using the built-in function %char (see line 23).

Call the printTest procedure passing the parameters in the order shown.

Example 1

Page 16: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 16/28

 

Formatting the Output

The format of this line is similar but, it is produced a little differently. The next slide

will show a more convenient way to produce this format. 

Example 2

Page 17: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 17/28

 

Formatting the Output

The printTest procedure will accept literals for the first three parameters.

You can pass literal values for procedure name, input value(s) and planned

result. Instead of coding seven lines to print a unit test, we can get the same

result coding only four lines!

Literal values won’t work as the actual result - that would be cheating!

Call your procedure passing the input value, convert the output if necessary

and pass actualResult as the fourth parameter. (Lines 29 - 32.)

Example 2

Page 18: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 18/28

 

Formatting the Output

Calling the procedure “printFormattedTest” prints elements of the unit test

in four lines on the report. This gives you more room to print more or 

longer parameters. It may make viewing the Test Scripts report easier.

Example 3

Page 19: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 19/28

 

Formatting the Output

Append one or more argument(s) to the argument list by calling

appendArgument.

Append one or more expected result(s) by calling appendExpectedResult.

Append actual results by calling appendActualResult.Call printFormattedTest passing only the name of your procedure. (Lines

37 - 41.)

Example 3

Page 20: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 20/28

 

Formatting the Output

 printFormattedTest can also be called with four parameters and omitting the use of the append… functions. Literals may be used for the procedure name, input value(s)

and expected result(s).

Example 4

Page 21: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 21/28

 

Writing the Test Script - Finish

End your test script by closing the print file with a call to endTest. Then set on

indicator LR and return.

Page 22: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 22/28

 

Test Script ResultsResulting output from the four tests run by the test script.

Page 23: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 23/28

 

Save your test script so it can be reused in

future tests. You and your team should agree

on a naming convention for your test scripts so

that they may be identified when needed.

The name of the module being test is

EPS9CKDR. The test script was saved as

EPS9CKDR.T, the name of the module to be

tested with “dot T” appended.

The “dot T” is one convention for telling

everyone that this is a test script source

member. Your team may want to use another 

convention.

Reusing Unit Test Scripts

Page 24: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 24/28

 

 Note: Please see the slide Compiling For Production to see differences

 between compiling for unit test and compiling for production.

crtrpgmod yourLib/EPS9CKDR dbgview(*list) replace(*yes)

crtrpgmod yourLib/EPS9CKDR.T dbgview(*list) replace(*yes)

Create the module that

contains the procedures to be

tested. Replace EPS9CKDR 

with your module.

Create the test script module.

Replace EPS9CKDR.T with

the name of your test script

module.

Create the test script

  program. Be sure to include

at least three modules - list

the test script first followed

  by the module to be tested

and then UnitTest.

Compiling the Test ScriptEnsure your library list

includes the library that theUnitTest module is in.

crtpgm yourLib/EPS9CKDR.Tmodule(EPS9CKDR.T EPS9CKDR QGPL/UNITTEST)

Page 25: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 25/28

Page 26: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 26/28

 

Runtime Interactions Between

Modules

Module To Be Tested

EPS9CKDR 

getCheckDigit

Test Script

EPS9CKDR.T

 

callp startTest

result = getCheckDigit(100)

callp printTest

callp endTest

Test Script Support

Module

UNITTEST

startTest

 printTest

endTest

5

67

8

1

2

3

4

Page 27: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 27/28

 

Compiling For Production

1. Do not include modules

or programs created from

the test script on your 

Turnover form.

2. Do not include the

UnitTest module on your 

Turnover form.3. In the Turnover program

creation instructions, do not

  bind your program to the

UnitTest module or to your 

test script module.

CRTRPGMOD MODULE(YourLib/YourModule)

SRCFILE(QRPGLESRC)

CRTPGM PGM(YourLib/YourModule)

MODULE(YourModule)

We do not want to add testobjects to the production

environment.

Page 28: Ile Procedures

8/14/2019 Ile Procedures

http://slidepdf.com/reader/full/ile-procedures 28/28

 

Conclusion

With Unit Test Scripts you can also:

• Reduce project risk by scheduling complex componentsfor construction and testing early in the project. You no

longer require a complete system in order to begin testing.

• Test emergency fixes quickly to ensure the fix hasn’t

 broken other functionality.

• Reduce the cost of subsequent modification by analyzing

Test Scripts to determine procedure functionality.

If you create software in a component style using ILE

 procedures you will have software that is has a high level of 

Quality Assurance, is easily retested and produces

documented test results.