Unformatted text preview:

Readings in Computer Science: Software Engineering Jinzhong Niu 04/01/2003No Silver BulletEssence and Accidents of Software EngineeringFrederick P. Brooks, Jr.Software projects are similar to werewolves since they may unexpectedly become a monster ofmissed schedules and budgets, and unsatisfying products; there is no silver bullets to solve thisproblem in a magical way since there are essential difficulties.1 Does it have to be hard?The difficulties of software may be divided into essence, the ones inherent in the nature of software,i.e. complex conceptual constructs, and accidents that are not inherent, i.e. representing theconstructs in programming language.The essence of s oftware is a construct of interlocking concepts: data sets, relationship amongdata items, algorithms, and invocations of functions. This essence is abstract in that the conceptualconstruct is the same under many different representations, but nonetheless highly precise and richlydetailed. The specification, design, and testing of the construct, not the labor of representing itand testing fidelity of the representation are the hard parts.The very nature of software eliminates the possibility that any magical advancement happens.One c annot expect software technologies keep pace with hardware since the latter is nothing lessthan an exce ption due to the transformation of computer manufacture from an assembly industryinto a process industry.The hardness of the essence of software may be embodied in the following aspects: complexity,conformity, changeability, and invisibility.1.1 ComplexitySoftware is much more complex than any other human constructs in the sense that software maycontain much more elements than any other thing people build, and with a linear increase of the1number of elements, the interaction between them however increases in some nonlinear fashion.The complexity of software is essential, and le ads to many of the classic problems of developingsoftware products. We cannot abstract away its com plexity without abstracting away its essence.1.2 ConformitySoftware involves arbitrary complexity, forced without rhyme or reason by the many human insti-tutions and systems to which its interfaces must conform, the number of which is s till swelling; thiscomplexity cannot be simplified out by any redesign of the software alone.1.3 ChangeabilityThe software product is embodied in a cultural matrix of applications, users, laws, and machinevehicles. The changes of any of these aspects inexorably force software to change.1.4 InvisibilitySoftware is invisible since it is not inherently embedded in space; moreover, we cannot alwaysvisualize it in hierarchical graphs, which fit the way people think.2 Past breakthroughs solved accidental difficulties2.1 High-level languagesThe development of high-level languages is credited with at least a factor of five in productivity,and with concomitant gains in reliability, simplicity, and com prehensibility. It, however, eliminatesonly the complexity related to lower level constructs that are not inherent in software.The level of our thinking about data structures, data types, and operations is steadily rising,but at an ever decreasing rate, and approaches closer and closer to the sophistication of users.2.2 Time-sharingTime-sharing eliminates the slow turnaround of batch programming, and helps programmers tokeep fresh in mind the essence of a complex system, but only the accidental difficulties are attacked2here. What’s more, the b e nefit of time-sharing is to be boundary due to the human threshold ofnoticeability.2.3 Unified programming environmentsUnified programming environments enable related individual tools to work together in an auto-matic manner and thus free programmers from the burden of various manual operations, which areobviously not inherent in software products.3 Hopes for the silver3.1 Ada and other high-level language advancesAda, one of the most touted recent development, not only reflects e volutionary improvements inlanguage concepts, but indeed embodies features to encourage modern design and modularization.Nevertheless, it is just another high-level language and will not prove to be the silver bullet.3.2 Object-oriented programmingObject-oriented programming is considered the most promising silver bullet candidate. Its twoimportant concepts, abstract data types and hierarchical types, represent real advances in the artof building software. Nevertheless, they remove only accidental difficulties from the expression ofthe design, rather than the design itself.3.3 Artificial IntelligenceAlthough artificial intelligence is credited by many people with much hope for revolutionary break-through in software productivity and quality, it unfortunately involves even terminology chaos.There is either no support for programming practices in sight from AI techniques used for speechand image recognition in the sense that the hard thing about building software is deciding whatone wants to say, not saying it.33.4 Expert SystemsAn expert system is a program that contains a generalized inference engine and a rule base, takesinput data and assumptions, explores the inferences derivable from the rule base, yields conclusionsand advice, and offers to explain its results by retracting its reasoning for the user.The advantages of expert systems over programmed algorithms are as follows:• Inference-engine technology is developed in an application-independent way.• The application-specific materials are encoded in the rule base in a uniform fashion, whichregularizes the complexity of the application itself.Such systems may be built to help inexperienced programmers based on the wisdom of expertsby suggesting interface rules, advising on testing strategies, and offering optimization hints. Toachieve this, there however exist many difficulties:• Diagnostics: How to generate automatically the diagnostic rules from program-structure spec-ification• Prescription: How to extract expertise and distill it into rule bases3.5 “Automatic” programmingAutomatic programming is actually a euphemism for programming with a higher-level languagethan was presently available to programmers so that solutions could be given more easily. Althoughthis technique has indeed succeeded in some special cases, it is hard to be generalized for theordinary software systems.3.6 Graphical programmingComputer graphics, which has been applied successfully in other fields, could not be a silver


View Full Document
Download Readings in Computer Science
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Readings in Computer Science and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Readings in Computer Science 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?