To: C.K. Houston who wrote (665 ) 7/12/1998 8:58:00 PM From: James Strauss Respond to of 810
Mathematical Solution to the Year 2000 Problem This paper introduces a mathematical solution to the year 2000 date problem and compares it with two current solution approaches to the year 2000 date problem. The Millennium SolutionO, which uses a mathematical approach called Dynamic CenturiesO, provides many advantages over the currently used approaches of date expansion and windowing. Background Using two digits to represent the year in computer programs and databases has created a serious date recognition problem when we enter the 21st century. Before this mathematical solution, there were three available solutions: (1)expansion of all years to four digits (CCYY), (2)windowing - the insertion of logical tests of the two digit year and temporarily converting the year to 4 digits by adding either 19 or 20 as the two leading digits, and (3)specialized schemes such as, replacing the 2 digit year with hex-decimal or binary values, encapsulation, replacing all date formats with sequential numbers where day 1 is January 1, 1900, etc. These specialized techniques are not covered in this paper. The year 2000 problem is usually divided into three phases: find, fix and test. All solutions require first identifying the date variables and then fixing the program. The size of the testing effort is determined by the number and complexity of the changes. The magnitude of the assessment task is proportional to the applications intradependencies and the interdependencies between applications. To demonstrate how the Millennium SolutionO works, sample code was selected and a comparison of changes required by the three different alternatives to fix the code are presented. Figure 1 shows an example of existing working storage data definitions, a Subtract command and an If command, compared with the changes needed for full date expansion. Figure 2 shows the changes to working storage data definition and instructions if windowing is used. Figure 3 shows the changes required if the Millennium SolutionO is used. Full Date Expansion Full date expansion requires the expansion of all databases and changes to file definitions in all programs, working storage data definitions in all programs, and copybooks (Figure 1). Full expansion also requires all program modules in the application be converted at the same time. Ideally, all applications using the converted databases should be changed at the same time. The ideal is never met and unconverted applications require the addition of wrappers and bridges to interface with the new databases. This means fixing and testing most programs twice. Testing is more extensive because it requires testing programs as well as database changes and structures. If access to archive data is required, then archive databases must be updated or multiple versions of the software must be maintained. Full expansion is perceived to be the only complete permanent fix to the millennium problem. Full expansion is also the most expensive and time consuming of the alternatives. Full expansion requires the highest level of management control and the most testing. It could also require additional hardware and systems software. Windowing Windowing creates temporary four digit century and year variables within working storage of the program and does not change the database structure. These variables are created each time the program is run. The use of windowing requires modification of data definitions in working storage and program logic. Because windowing only changes the programs and not the databases it requires less total time than full expansion. There are no database changes, therefore applications can be fixed independently of each other and fixed only once. Windowing requires less testing than full date expansion. The disadvantages of windowing are that it requires the most changes to data definitions and code modifications for variable name changes, and inserts logical changes within the program. Windowing requires changing all date variables used in calculations and compares and the associated moves in all modules within an application and requires all modules within the application to be changed before system testing can begin. The data definitions for date variables are increased from 50% (dates already defined as a group variable consisting of YY, MM, and DD) to 300% (variables defined as a complete date, YYMMDD) (Figure 2). Each changed date variable requires the addition of code to test the two year digits against the window setting and add the appropriate two digits century. Windowing needs to identify all instances of date variables in mathematical operations, moves, sorts, and compares and variable names within those commands changed to agree with the data definition changes. Modules within an application sharing copybooks that are changed also require fixes even if they do not use the date variable in a math operation or compare. Experience to date indicates windowing requires changing between 6 and 10% of the lines of code within an application. Windowing also requires updating when its limits are reached. Millennium SolutionO Dynamic Centuries has all the advantages of windowing and none of the disadvantages. Dynamic Centuries only inserts a call routine to correct date variables in a module if they are used in a mathematical operation or compare. The only procedural changes required occurs when an instruction containing an identified date variable is replaced by a call to the Millennium SolutionO subroutine (Figure 3). Millennium SolutionO adds special variables to the working storage definitions. By not changing data definitions and program logic, Dynamic Centuries impacts less than 1% of the lines of code within an application. Dynamic Centuries eliminates the need for impact analysis of the interaction between modules within an application and between applications because changes to a program module are independent of changes to all other modules. There are no database changes, no data definition changes, and no logical changes required in programs. Furthermore, Dynamic Centuries allows the fixing of applications and modules within applications in any sequence. Fewer changes in programming also reduces the amount and extent of testing required. Dynamic Centuries requires the fewest number of procedure code changes. By not changing copybooks and shared data definitions Dynamic Centuries impacts fewer modules, further reducing total test requirements. With Dynamic Centuries, assessment and fix occur at the same time and changes are automatically created, eliminating possibilities of typing or data entry errors. Millennium SolutionO requires the least amount of testing of the three alternatives. Summary The amount of and level of changes made for year 2000 readiness equates to the level of risk an organization takes on for completion of the project. Each approach discussed has varying degrees of impact on: inter- and intra-applications dependencies to resolve staffing required to make changes and test number of changes number and types of tests the overall schedule level of management effort Millennium Solution has the least and full date expansion has the most impact. Figure 4 is a summary comparison of Millennium SolutionO, windowing and date expansion. Figure 1 Comparison of Changes Needed for Full Expansion Implementation Existing Data Definitions in Working Storage 05 I-PT-ACT-DT PIC S9(6). 03 WA-ACH-FROM-YMD PIC 9(6). 015241 01 WA-L-CURR-YMD PIC 9(6). 015242 01 FILLER REDEFINES WA-L-CURR-YMD. 015243 05 WA-L-CURR-YR PIC 99. 015244 05 WA-L-CURR-MO PIC 99. 015245 05 WA-L-CURR-DA PIC 99. 015246 01 WA-TEST-DATE-1. 015247 05 WA-TEST-YR-1 PIC 99. 015248 05 WA-TEST-MO-1 PIC 99. 015249 05 WA-TEST-DA-1 PIC 99. Existing Procedures 017160 SUBTRACT 1 FROM WA-L-CURR-YR GIVING WA-TEST-YR-1 029740 IF I-PT-ACT-DT LESS THAN WA-ACH-FROM-YMD Expansion Data Definitions in both file, input/output sections as well as working storage need to be changed to reflect changes in the database structures. System software changes are not shown as well. Data Definitions in Working Storage 05 I-PT-ACT-DT PIC S9(8). 03 WA-ACH-FROM-YMD PIC 9(8). 015241 01 WA-L-CURR-YMD PIC 9(8). 015242 01 FILLER REDEFINES WA-L-CURR-YMD. 015244 05 WA-L-CURR-YR PIC 9999. 015245 05 WA-L-CURR-MO PIC 99. 015246 05 WA-L-CURR-DA PIC 99. 015247 01 WA-TEST-DATE-1. 015249 05 WA-TEST-YR-1 PIC 9999. 015250 05 WA-TEST-MO-1 PIC 99. 015251 05 WA-TEST-DA-1 PIC 99. Procedures 017160 SUBTRACT 1 FROM WA-L-CURR-YR GIVING WA-TEST-YR-1 029740 IF I-PT-ACT-DT LESS THAN WA-ACH-FROM-YMD Changes in bold Figure 2 Comparison of Changes Needed for Windowing Implementation Existing Data Definitions in Working Storage 05 I-PT-ACT-DT PIC S9(6). 03 WA-ACH-FROM-YMD PIC 9(6). 015241 01 WA-L-CURR-YMD PIC 9(6). 015242 01 FILLER REDEFINES WA-L-CURR-YMD. 015243 05 WA-L-CURR-YR PIC 99. 015244 05 WA-L-CURR-MO PIC 99. 015245 05 WA-L-CURR-DA PIC 99. 015246 01 WA-TEST-DATE-1. 015247 05 WA-TEST-YR-1 PIC 99. 015248 05 WA-TEST-MO-1 PIC 99. 015249 05 WA-TEST-DA-1 PIC 99. Existing procedures shown on next page Windowing Data Definitions in File and input descriptions are unchanged. System software changes are not shown as well. Data Definitions - Working Storage 008100 05 I-PT-ACT-CDT PIC S9(8). 05 FILLER REDEFINES I-PT-ACT-CDT. 008120 10 I-PT-ACT-CC PIC 99. 008130 10 I-PT-ACT-YY PIC 99. 10 I-PT-ACT-MMDD PIC S9(4). 008200 03 WA-ACH-FROM-DATE-CYMD PIC 9(8). 03 F REDEFINES WA-ACH-FROM-DATE-CYMD. 008220 07 WA-ACH-FROM-CC PIC 99. 008230 07 WA-ACH-FROM-YY PIC 9(2). 008230 07 WA-ACH-FROM-MD PIC 9(4). 015241 01 WA-L-CURR-CYMD PIC 9(8). 015242 01 FILLER REDEFINES WA-L-CURR-CYMD. 015243 02 WA-L-CURR-CCYY PIC 9(4). 015244 02 FILLER REDEFINES WA-L-CURR-CCYY. 015245 05 WA-L-CURR-CC PIC 99. 015246 05 WA-L-CURR-YR PIC 99. 015247 02 WA-L-CURR-MO PIC 99. 015248 02 WA-L-CURR-DA PIC 99. 015249 01 WA-TEST-DATE-1. 015250 02 WA-TEST-CCYY-1 PIC 9(4). 015251 02 FILLER REDEFINES WA-TEST-CCYY-1. 015252 05 WA-TEST-CC-1 PIC 99. 015250 05 WA-TEST-YR-1 PIC 99. 015253 02 WA-TEST-MO-1 PIC 99. 015254 02 WA-TEST-DA-1 PIC 99. Changes in bold Figure 2 Comparison of Changes Needed for Windowing Implementation (Continued) Existing 017160 SUBTRACT 1 FROM WA-L-CURR-YR GIVING WA-TEST-YR-1 029740 IF I-PT-ACT-DT LESS THAN WA-ACH-FROM-YMD Windowing Inserted before the first instance of date usage or in special initialize routine at the beginning of procedures. The MOVES used to move data from input/output to Working Storage must be changed. Procedures 017150 IF WA-L-CURR-YR GREATER THAN 70 017151 MOVE 19 TO WA-L-CURR-CC 017152 ELSE 017153 MOVE 20 TO WA-CURR-CC. 017154 IF WA-TEST-YR GREATER THAN 70 017155 MOVE 19 TO WA-TEST-CC 017156 ELSE 017157 MOVE 20 TO WA-TEST-CC. 017160 SUBTRACT 1 FROM WA-L-CURR-CCYR GIVING WA-TEST-CCYR-1 029730 IF I-PT-ACT-YY LESS THAN 70 029731 MOVE 19 TO I-PT-ACT-CC 029732 ELSE 029733 MOVE 20 TO I-PT-ACT-CC. 029734 IF WA-ACH-FROM-YMD LESS THAN 700101 029735 MOVE 19 TO WA-ACH-FROM-CC 029736 ELSE 029737 MOVE 20 TO WA-ACH-FROM-CC. 029740 IF I-PT-ACT-CDT LESS THAN WA-ACH-FROM-CYMD Changes in bold Figure 3 Comparison of Changes Needed for Millennium Solution Implementation Existing Data Definitions in Working Storage 05 I-PT-ACT-DT PIC S9(6). 03 WA-ACH-FROM-YMD PIC 9(6). 015241 01 WA-L-CURR-YMD PIC 9(6). 015242 01 FILLER REDEFINES WA-L-CURR-YMD. 015243 05 WA-L-CURR-YR PIC 99. 015244 05 WA-L-CURR-MO PIC 99. 015245 05 WA-L-CURR-DA PIC 99. 015246 01 WA-TEST-DATE-1. 015247 05 WA-TEST-YR-1 PIC 99. 015248 05 WA-TEST-MO-1 PIC 99. 015249 05 WA-TEST-DA-1 PIC 99. Procedures 017160 SUBTRACT 1 FROM WA-L-CURR-YR GIVING WA-TEST-YR-1 029740 IF I-PT-ACT-DT LESS THAN WA-ACH-FROM-YMD Millennium Solution (Dynamic Centuries) System software is not changed. Data Definitions in Working Storage 000600 01 DII-GROUP. 000601 02 DII-CTRL PIC 9(4). 000602 02 DII-VARS PIC X(256). 000603 02 DII-CONDITION1 PIC 9. 008000 05 I-PT-ACT-DT PIC S9(6). 008100 03 WA-ACH-FROM-YMD PIC 9(6). 015241 01 WA-L-CURR-YMD PIC 9(6). 015242 01 FILLER REDEFINES WA-L-CRR-YMD. 015243 05 WA-L-CURR-YR PIC 99. 015244 05 WA-L-CURR-MO PIC 99. 015245 05 WA-L-CURR-DA PIC 99. 015246 01 WA-TEST-DATE-1. 015247 05 WA-TEST-YR-1 PIC 99. 015248 05 WA-TEST-MO-1 PIC 99. 015249 05 WA-TEST-DA-1 PIC 99. Procedures 017160* SUBTRACT 1 FROM WA-L-CURR-YR 017161* GIVING WA-TEST-YR-1 017162 CALL DIIM2000 USING DII-CTRL 017163 DII-VARS WA-L-CURR-YR WA-TEST-YR-1 029740* IF I-PT-ACT-DT LESS THAN 029741* WA-ACH-FROM-YMD 029742 CALL DIIM2000 USING DII-CTRL 029743 DII-VARS DII-CONDITION1 029744 IF DII-CONDITION1 = 1 Changes in bold Figure 4 Year 2000 Solutions Compared and Evaluated Dynamic Century Millennium SolutionO Standard Windowing (fixed or sliding) Date Expansion Technology system-wide impact analysis not required automated mathematical scan special date recognition algorithms automated review system-wide impact analysis required for all applications and within an application date variable seeding process expert intuition significant manual review system-wide impact analysis required for all applications and within an application date variable seeding process expert intuition significant manual review Find Resources technician under supervision of programmer training - 1/2 day programmer senior programmer training - days to weeks depending on tool programmer senior programmer training - days to weeks depending on tool Requires program source modules - one at a time any sequence all copybooks application program source modules - all at once to resolve dependencies all copybooks program source modules - all at once to resolve dependencies all copybooks JCL databases archive data PARM cards Sort cards Dynamic Century Millennium SolutionO Standard Windowing (fixed or sliding) Date Expansion Technology dates in selected math operations and COMPARES are fixed fix works until year 9999 program modules can be fixed in any sequence no application dependencies between modules no program logic changed no cross dependencies exist outside of procedure copybooks questionable date logic is flagged for review a single subroutine is called to implement solution all dates windowed for fix Windowing needs to identify all instances of the date variable in math, moves, sorts, and compares requires updating when limits of window reached program modules must be fixed in specific sequence based on dependencies program logic changed enterprise cross reference required all 2-digit date code expanded to 4-digit fix works until year 9999 program modules must be fixed in specific sequence based on dependencies instructions added to initialize new 8 digit date variables enterprise-wide cross reference required changes to programs for screen and reports, JCL, and database conversions Fix Resources junior staff with programmer supervision training - 1/2 day programmers senior programmers training - days to weeks depending on tool programmers senior programmers training - days to weeks depending on tool Requires less than 15% source module changes less than 1% of the source module lines will be affected existing data definitions unchanged no changes to variable names not affected by redefinition of variables modules are fixed in any sequence, minimal code freeze required wrappers required only when interfacing to new expanded date applications flexible conversion schedule 20-30% source modules changes 6 to 10%+ of the source module lines will be affected extensive changes to existing data definitions variable names are changes and redefinitions required extensive code changes code freeze required until all modules are updated and reintegrated wrappers required only when interfacing to new expanded date applications linear conversion schedule 90+% of source module could be affected changes to existing data definitions code freeze required until all modules are updated and reintegrated extensive requirement for bridges and wrappers during and after conversion complex and interdependent schedule Dynamic Century Millennium SolutionO Standard Windowing (fixed or sliding) Date Expansion Technology standard regression testing year 2000 simulation standard regression testing year 2000 simulation standard regression testing year 2000 simulation Test Resources existing maintenance testers additional testers additional testers Requires testing less than 1% changed code testing can begin immediately testing 6 to 10%+ code changes testing can not begin until all dependent module are changed testing code and database changes testing can not begin until all dependent module are changed Typical One Million Line Project Summary minimal project management and oversight required assessment and correction are simultaneous 10-15% of source modules require year 2000 changes less than 10,000 lines of code impacted work done onsite with supervised staff, limited new hiring senior staff available for ongoing and new projects significant project management and oversight required requires system-wide impact analysis at beginning of project 20-30% of source modules require year 2000 changes between 60,000 and 100,000+ lines of code impacted large dependency on programming experts and/or offsite / offshore resources most significant project management and oversight required requires system-wide impact analysis 90%+ code impact and testing large dependency on programming experts and/or offsite / offshore resources Jim