Microsoft Y2K  
Microsoft
 This static CD-based web site is representative of the www.microsoft.com/malaysia/y2k site as of October 14, 1999.


 Year 2000
Compliance Statement
FAQs
Product Guide
Services
Tools
White Papers
Get Year 2000 Updates

Year 2000 Test Considerations

The following Year 2000 Test Considerations should be viewed as high-level testing recommendations which organizations can use to scope and implement their Year 2000 efforts. Each solution being assessed is unique, and deserves tailored testing to completely assess it's end-to-end year 2000 readiness. Consequently, any solution or product tests that to not go beyond these minimum recommendations may be insufficient to determine readiness. Please ensure you assess the entire solution.

Solution Infrastructure:

It's important to take an end-to-end view of Year 2000 testing. There are two dimensions to the Year 2000. One dimension is represented by the technical facets of the problem which are fairly straight forward. The second dimension is the scope one needs to consider which is quite large.

The Year 2000 Problem

  • Technical facets:
    • 2 digit storage of dates
    • Incorrect leap year calculations
    • Special functions dates e.g. 9/9/99
  • Business Scope:
    • Embedded Systems, Hardware, Firmware
    • Operating Systems, Applications, Custom code
    • Business Processes, Supply Chain
The considerations outlined above focus narrowly on applications. It's imperative to test and verify your entire solution infrastructure.

Initial Questions to ask, before any testing is attempted:

Storage:

  • How are dates stored by the app (data structure names, types, etc.) What are the logical limits?
  • Are there conversion functions to go back and forth to other date storage (e.g., system date, server, à). What are they?
Display:
  • How are the dates formatted for display?
  • Are system calls used for formatting dates? Which?
  • If your application "rolls its own" code for display, does it reference any system setting to change display. Where/how can it be changed?
Input:
  • Where are dates accepted as input?
  • Are they stored as dates or strings or...?
  • What are the date parsing rules? What are the dependencies for the date parsing functionality (System date? OLEAUT32, reg settings?)
  • More specifically, what are the rules for converting both to and from two digit years? What are the dependencies for evaluating those rules?
  • Do users or the system ever enter a special date that has an understood meaning different from an actual date, such as 9/9/99?
Calculations:
  • What date calculations are performed?
  • Are their type conversions required in order to perform the date calculations? Are they consistent with the rules for parsing date input?
  • Is there a leap year calculation function? Is it correct (usually small enough to be easily walked through)? Where does it get used? Note for tests later: if serial dates are used, calculations such as adding, subtracting and comparing dates are less likely to be problematic, but more leap year type problems can occur. If dates are stored with separate Month, Day and Year fields, the opposite is true.
  • What logic is there for handling date calculations at the limits?
Approach to Consider:

Experience suggests you should examine both the interior code structure as well as exterior behavior. Often it's best to start with code analysis and end with Black Box testing.

An approach used by many effective groups is to:

  1. Grep for system date calls
  2. Identify all structures used to store dates in the code base.
  3. Either code review, or design and execute test cases-or-both, to evaluate behavior with dates across the supported range of dates for all the areas identified by the first two processes.
Groups that did not start with a code-based approach often found issues over a much longer period of time and they were more often incorrect in their initial description of the operational behavior of the code.

Test Verification List:

In general there are some areas to consider when testing the Year 2000:

  • When testing a platform verify its handling of BIOS errors related to the year 2000. Verify year display in each decade of 2000-2099. If it knows time zones, verify operation when UTC is a different century than local time (both + and - from UTC).
  • Test an application with 2-digit date entry and 2-digit date display both before 2000 and after. And when the entry / display is a date in the other century, both before and after.
  • Verify entry / display of 4-digit dates.
  • Verify sorting of dates where some are before 2000, some after.
  • Verify day-of-week before 2/29/00, on 2/29, and after. On 2/1/01.
  • Does your program do any "year ahead" calculations? Testing in 1999 may be critical.
  • What happens if you're networked to a machine with the wrong year? Or different time zone?
  • Can you backup before 2000 and restore afterwards?
  • Do you ever select a date range? Can the range cross 2000?
  • Did any previous version of the program store data in a file format where 00 or 99 meant something special (e.g. never expire?)
  • Find the limits to the date values the program accepts.
  • Determine the special test issues for your product (long list)
Dates to verify:

Hardware and Software:

  • 12/31/98
  • 1/1/99
  • 12/31/99
  • 1/1/2000
  • 2/28/2000
  • 2/29/2000
  • 3/1/2000
Applications:
  • 12/31/98
  • 1/1/99
  • 1/4/99
  • 9/9/99
  • 12/31/99
  • 1/1/2000
  • 1/2/2000
  • 1/3/2000
  • 1/4/2000
  • 1/5/2000
  • 1/31/2000
  • 2/28/2000
  • 2/29/2000
  • 3/1/2000
  • 3/31/2000
  • 10/10/2000
  • 1/2/2001
Additional Dates to consider:

    10/1/1999: First day of fiscal year 2000 [for many including the US Government].

    1/0/2000: To ensure this date is NOT processed [some spreadsheets and database applications do have this problem and count January 0 as a day before the 1st]

    1/10/2000: First 7 or 8 character date in YYY/M/DD format (2000/1/10 or 2000/01/10)

    2/30/2000 and 2/31/2000: To ensure that this date is NOT processed [found in some PC applications]

    10/10/2000: First 8 character date using a 2-digit month (2000/10/10) December 31, 2000: 366th day of the year 2000. This could be a problem for systems that use Julian dates.

    1/1/2001: First day in the 21st Century. This is the last leap year related date, testing the first day of January 2001 to ensure it can be set. Overflow for Tandem systems

    1/1/2002: Or any other date past this day, to ensure no processing errors occur in backward calculations and processing of dates in the 1980s and 1990s at this point in time

    2/29/2001: To ensure that this date is NOT processed as a leap year

    2/29/2004: To ensure that this date is processed as a leap year

    Or others that you believe are necessary to complete your tailored testing.

 

1999 Microsoft Corporation. All rights reserved. Terms of use.

This site is being designated as a Year 2000 Readiness Disclosure and the information contained herein is provided pursuant to the terms hereof and the Year 2000 Information and Readiness Disclosure Act.