Although laypeople tend to Believe modern PCs are rather standardised, the truth is truly the reverse: most PCs are customised by the software installed, the options selected and any new hardware included.
The degree of variation in End-user PCs presents a severe challenge to software developers: a program which works perfectly well in the development laboratory can quickly fail when released to end users. Even after careful testing on several PCs, it is still extremely tough to allow for all the possible variants. By way of instance, there are 20 versions of Windows in use, and virtual environments, Citrix and strange server environments then variable in hundreds of thousands of hardware devices for Windows.
A similar problem can happen when systems are deployed into complicated user environments, which are difficult to simulate in the laboratory.
The best approach will be to ramp up the testing radically, or make use of automatic testing technologies. These strategies are practical for mass-market software, where the sales earnings leading countless dollars. But large-scale testing is unaffordable for smaller jobs. And even large-scale testing does not guarantee to deliver bug-free applications that are among the reasons why many mass-market products ship with bugs.
For many smaller jobs, the practical solution is to rely on users to do some portion of the testing. Needless to say, no software company would admit to doing so intentionally, but the economics make it inevitable replicating the last environment that the program will function in is just too pricey.
However, this raises another issue: The way to anti debugging a problem that just happens on a distant customer PC Regrettably end-users are usually not the best at reporting issues in applications many simply send an email saying it crashed which clearly is not very helpful to the development group.
Current Solutions To Bug Reporting
To solve this problem, developers require a way to see what is going on remote PCs. They need something like the black-box flight recorders used by airlines a tool that logs internal diagnostic data up to the point of the issue, and then returns it to the development team.
Naturally, logging systems are not new. Just about all programmers have written their own simple system sooner or later. But often logging is not seen as significant within the job – and so most jobs rely on easy solutions, written in spare time.
Home-grown logging systems suffer from several major limitations:
- Simple logging Implementations usually compose messages to a local disk file from code inside the program. Unfortunately, if the program crashes, the most recent messages are often lost – defeating the objective of this system. If the programmer attempts to address it by forcing writes to disk often, program performance is usually badly degraded.
- Simple solutions do not include useful features like ensuring that old logs are deleted, or keeping accurate timestamps.