+44 (0)207 993 2287

The return of an old friend.

by Neil Hudson

Neil Hudson

I have just encountered an old friend of mine; one that I see most places I go. My friend is that recurring defect - the different date format bug. In its most common and insidious form it is a mix of DD/MM/YYYY and MM/DD/YYYY representations of dates as strings. Date format clashes of any sort cause defects but this is the worst ones because for many cases it appears to work waiting to create problems in future or corrupting data that passes through it.

How come by appearing to work for certain days it manages to slip through the net? Dates presented in the DD/MM/YYYY format up to the 12th of the month will happily get converted into meaningful, though incorrect, dates by something that is looking for MM/DD/YYY. So the 11th of October 2010 starts of in the first format as 11/10/2010 and then gets analysed by something looking for the MM/DD/YYYY and is interpreted as the 10th of November 2010. If this is simply validation then the data entered is let through and no one is the wiser; but wait until the 13th. However if the outcome of the incorrect interpretation of the date is stored in this form then we get the wrong date passed on for further processing.

Generally the presence of the issue can only be revealed when values of the day in the month part of the date that are greater than twelve are used. For example the 13th of October 2010 in the first format is 13/10/2010. If you look at it as being in the form of MM/DD/YYYY then we have MM=13 which is obviously, at least to the human brain, invalid. I caveat the last point because though in many cases presenting this date will trigger some behaviour that reveals the fault it cannot always be guaranteed that this will be the case.

Why this post? It is because seeing the same problem again today has reminded me that this problem is like the common cold; it is all around us and is not going to go away. Despite all the progress in software engineering technology none of it seems to tackle this type of issue. Perhaps it is deemed to be too unimportant to worry about and deal with. After all once found it is an ‘easy fix’. Actually it may be quick to change but the change often has the potential for massive downstream ramifications. So perhaps not tackling this is a mistake; I would say so given the many developer hours I have watched being burnt on figuring out what is going on and the million pound per week project I saw extended by weeks through a myriad of issues of this sort.

What can testers do to help in this area? Well they can start by remembering to test every date value and every date input control with dates that have their day part greater than twelve. Keep a short list of key dates to use and make certain their use is comprehensive. Thirteen may turn out to be your lucky number.