Post on 30-May-2018
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: ghelton@countrywide.com
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).
8/14/2019 Ile Procedures
http://slidepdf.com/reader/full/ile-procedures 3/28
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.
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.
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.
8/14/2019 Ile Procedures
http://slidepdf.com/reader/full/ile-procedures 7/28
8/14/2019 Ile Procedures
http://slidepdf.com/reader/full/ile-procedures 8/28
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.
8/14/2019 Ile Procedures
http://slidepdf.com/reader/full/ile-procedures 10/28
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.
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.
8/14/2019 Ile Procedures
http://slidepdf.com/reader/full/ile-procedures 13/28
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
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
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
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
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
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
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
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.
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.
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
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)
8/14/2019 Ile Procedures
http://slidepdf.com/reader/full/ile-procedures 25/28
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
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.
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.