Software testing

From Clinfowiki
Jump to: navigation, search

Software testing is a critical, complex and growing field.

History of software testing

Quality of software varies enormously, from "mission critical" software applications which NASA has built for many years to "buggy" software in the early days of the first home PCs. Although Microsoft, one of the largest software companies, has a large number of employees dedicated to software test, it has often been accused of releasing imperfect (and easily hacked) software.

Health care software, in particular electronic medical records and Computerized physician order entry (CPOE), would seem to fall on the "mission critical" spectrum of software quality, as, in theory, a patient's health and even life could depend on software being thoroughly tested, performing to specifications, and not "crashing". These attributes are part of a formal software test process.

Software test procedure

The formal software test procedure practiced at Microsoft and other large software companies begins with the creating a "test team", often 5-10 individuals for a particular release or project (or part of a larger project). At Microsoft, software testers are classified as "Software Development Engineers (SDE)" or "Software Development Engineers in Test (SDET)". The latter spend more time programming "automated" software tools which speed up and/or making test more efficient. For example, programs can be written to push every button and select every menu option, select all text in fields or listboxes, type the maximum number of characters in text fields, etc., and log all results to a text file. In the development of large products such as an operating system dozens of teams may test small components of a system. At Microsoft, a "meta-team" (my characterization) would attempt to programmatically merge the log files of the product's many teams and email the results in a large text file to project leaders by the next morning.

Characteristics of testing

"manual" or "automated"

Testing may be characterized as "manual" or "automated", the latter described in the previous paragraph. In manual testing, testers manually try to "break" the software and spot defects. They will generally log these defects into a defect-tracking database. They often execute a series of test cases, defined by exercising the desired functionality as specified by the software developers in the functional specification.

"load" or "stress"

Automated testing may also be "load" or "stress" testing. Load testing programmatically simulates a large number of users to ensure that the final product will function appropriately when a large number of users use the software simultaneously. Stress testing attempts to "break" the software by repetitively "stressing" functions of the software by exercising them over and over. This process would be tedious to perform manually and programmatically can be repeated with infinite iterations relatively quickly.

There is also a cost consideration as automated software testing avoids the cost of hiring more testers; there is a trade-off however between the time and expense (programmers hired to write automated tests tend to be more expensive that "manual" testers) required to write the software programs viz-a-viz the time required to adequately test the software manually. This will depend on the software product that is being tested, in scope and complexity. Software programs to automate testing can be purchased "off-the-shelf" from a variety of vendors, written or customized internally. Commercial programs often include a customized programming language to write the (test) application.

localization and internationalization

Another area of software test is localization (L11N) or internationalization (I18N). I18N testing seeks to ensure that a software product can be translated or localized for different languages. Actually it involves more than just literal translation as the software must be "localized" (hence "localization") for a specific region or locale. For example, UK English differs from (American) English in some vocabulary and word usage, and this should be reflected in software programs sold in the respective countries. Similarly, Portuguese from Brazilian Portuguese. More obviously, Traditional Chinese (Taiwan) differs from Simplified Chinese (China) in that the Chinese character script has been simplified in the latter.

Internationalized software will ensure that the software will support hi-ASCII characters (eg umlaut in German or French accents) for European markets, and double-byte characters for Asian languages.

Software testing is not cheap, but research has shown that software "bugs" or defects are vastly more expensive to fix AFTER a product is released for general use rather than earlier in the software development cycle. In healthcare, I would think that thorough testing is especially critical.