Today's multistage development processes can anticipate downstream activities in support of robust design such as testing and debugging by grouping functions or signal factors into small homogeneous groups.[7] This vastly simplifies the analysis using orthogonal arrays (discussed in Chapter 17). It also recognizes that all the function points in a business software application interact or influence each other equally. Applications are naturally organized into functional hierarchies that partition the application in a natural way. In addition, Taguchi has proposed design as a three-step process:[8]
For example, software system or application design involves new concepts, ideas, and methods to provide novel or improved software capability to users. Unless the technology offering a competitive advantage in the marketplace is patented, copyrighted, or held as a trade secret, it can quickly be copied by competitors, and competitive advantage is soon lost. Parameter design allows the development team to build the novel technology into the product in a uniform yet intrinsic way that is not easily isolated and copied. The product also will be less sensitive to user error and environmental hazards, such as errors in data or other related application programs. Parameter design is used to make a product robust, or less sensitive, to noise factors without trying to control or eliminate the noise. Sidebar 16.3 gives a simple example concerning musical instrument construction to illustrate this process. This example is a mechanical rather than a programming one, and it is implicit rather than explicit. However, it shows the essence of this Taguchi insight on using parameter design to dramatically improve quality at no cost. The best examples of trade-offs between parameter and tolerance design are naturally electronic circuits. The fastest but most expensive way to reduce performance variability in such circuits is to tighten tolerances on critical components. The best way is to change design point parameters in such a way that tolerances are not so critical. If parameter design is inadequate to meet performance robustness goals, the design team must turn to tolerance design. Tolerance design requires the use of tighter tolerances or higher-quality, higher-cost materials to reduce performance variation or sensitivity to environmental or usage factors. For tolerance design, the quality loss function is used to substantiate the increased costs of higher-quality components by lower loss to society.[9] Opportunities for tolerance design do not occur as often in software development as they do in circuit design, in which they are a legendary design trade-off. Examples include the use of more time- and/or space- (or use license) costly algorithms for computing functions as opposed to a less accurate estimate of a computed value. A sensitivity or error analysis of an algorithm may lead the software designers to a parameter design to avoid the higher-cost software component. The benefits of robust software specification for robust software development are technology readiness, flexibility, and reproducibility. Computer software development lends itself naturally to small-scale laboratory-like experiments of test data to optimize functionality. This quality technology allows an entire group of program products rather than just individual programs. As soon as a software function's robustness has been optimized, newly planned products within the same family can be designed using straightforward adjustments. This ensures one of the greatest benefits of software reusability: reduced cycle time and enhanced quality in downstream software development. Finally, all these benefits can be reproduced downstream for the benefit of both the software vendor and the user.[10]
|