 |
This page lists steps for finding and analyzing potential problem
areas in code.
- Examine the code and data flow for all time and date related APIs,
system global cells, data structure fields, media formats, and message
formats for possible Year 2000 problems. You may wish to search
component map files to help identify date-related interfaces.
Be
sure to check all dates that are input or output. Watch for the
following conditions and coding practices as well as any other
time/date conditions that are unique to the code you are investigating:
- 2-digit representations of years
- Small binary fields that might represent dates
- Invalid date differentials
- Procedures that add 1900 (or another hardcoded century value) to
the date or subtract 1900 from the date
- Code that divides by 100 or 400 (to calculate
leap years)
- Code that results in incorrect sequencing of dates
- Code that causes incorrect scheduling of system events
- You may need to make a more detailed analysis than is immediately
apparent. Dates might be converted to an identity or format that is no
longer obviously a date and then be passed on to other routines.
For example, a 4-digit year (1997) might be exported to a process
that deletes 1900 from the year and passes the result (97) to another
process, which then performs another calculation, eventually causing a
problem.
- Make sure that the format of date/time stamps outputs unambiguous
date data. For example, you might need to examine the user interface to
ensure that the format can accommodate a 4-digit year.
- After you analyze code found by searching for known date/time APIs
and data structures, you must analyze the code flow to see how the date
data is interpreted and check whether it is exported.
- If the code you are investigating has any dependencies on other
code, you must find out the Year 2000 readiness status of that code
before you can assume that your code is Year 2000 ready. (We used a
central clearinghouse to share the status of dependent code.)
Following is a list of questions to use when you review code:
- Does your code import date information in any way --- for example,
in APIs, system global cells, data structure fields, media formats, or
message formats?
If so, does the information contain an inherent or
specific year field? If so, is the associated year field represented by
two digits or four digits?
- What does your code do with the date information?
- If your code manipulates the year, does it use all four digits of
the year?
- Do you store a date in any data structures, either as a date string
or a binary integer?
- Are all date data structure fields large enough to contain a
4-digit year?
- Does your code export any date information, either as a date string
or a binary integer?
If so, are all four digits of the year
included?
- Does the code do any time/date arithmetic?
If so, are 4-digit
years used?
» Return to Guidelines for Year 2000 Code Investigations home page
|