Ada: The cheapest way to build a line of business James Sutton, Bernard Carre Lockheed Aeronautical Systems Company, Marietta, GA Praxis PVL, Bath, England Software has become the "squeaky wheel" for most commercial product developments. Software is involved in most products either as a product component, as a production tool, or as an enabling agent (if the product is a service). Unfortunately, there is a fundamental incompatibility between the needs of business and the paradigm by which software is developed. Business is concerned with "Lines of Business"; software is still, despite its advances, rooted in uniqueproduct development. It is no wonder that the main product-development worry of many business managers is "how is the software getting along?" Changing the paradigm for software development to match the nature of business can reduce this problem to manageable proportions. The result can be called the Line Of Business (LOB) development paradigm. Other benefits of the LOB paradigm are that both development and maintenance costs are reduced, customer satisfaction rises, and targeted levels of correctness, assurance and/or safety are easier to achieve and verify. The LOB paradigm utilizes existing tools and techniques, but places them in a process context that leads to a very different software development lifecycle. And Ada is one of the most important enablers for the LOB paradigm: no other current language supports all the needed process characteristics to handle the general case. "SPARK", a system of annotations and restrictions[1] that is applied to Ada to simplify demonstrating program correctness, provides an exceptionally strong means of implementing the LOB paradigm. Lockheed Aeronautical Systems Company (LASC) recently initiated development of an all-encompassing, internally-funded reinvention of the C-130 Hercules airlifter and its avionics systems. Tight schedule and cost constraints made it unacceptably risky to develop the software using the traditional paradigm. This, plus future market opportunities in the same line of business, plus LASC's unique perspective and experience as a large-system integrator, led LASC to aggressively further the LOB paradigm and process described herein. The LOB approach is not totally new, however; it began evolving at LASC ten years ago. The LOB paradigm, despite its avionics roots, is domain-independent and widely applicable to other businesses and products. The LOB paradigm has proven highly successful, and there are many useful lessons at this point in the C-130J program. BUSINESS AND SOFTWARE: OIL AND WATER? It is fairly simple to describe the demands of business that naturally apply to software. Some of the most important of these are that software should be easily extensible, portable, virtually error-free (and remain so throughout its life), quickly re-verifiable following changes, safe (in the broadest sense of the term), precisely and efficiently matched to the business' customer base, and less expensive to develop, maintain and modify than traditionallydeveloped software. Simple! The definitions of these characteristics provide no relief. "Extensibility" means not only that the software must be expandable far beyond its original scope, but also that it must be relatively easy to do so for people other than the original software developers. "Virtually error-free" must be thoroughly quantifiable, to provide the developers with protection in the litigious environment of modern business. Quantifiable lack of errors can also be used for marketing purposes and to obtain a competitive edge. And the software must remain virtually error-free throughout its entire lifecycle: it is, after all, much more difficult to build a reputation for quality than to lose one. "Safety" is becoming a concern of regulators and consumers in growing numbers of product areas, many of which have never before experienced safety-oriented developmental restrictions or requirements. More restrictions are being added all the time, in fields such as automobiles, electrical power utilities, telecommunications, and banking. And losses other than of life or health, such as financial loss or loss of customer good will, are increasingly being viewed in ways similarly to safety. "Affordability" is in many ways the most important requirement: any new software approach that fails to decrease the costs of software development is dead on arrival. All these requirements put stringent and seemingly conflicting demands on the software development process. These demands cannot be resolved by simply reorganizing typical existing activities. It requires looking at the nature of extensibility, at the nature of being "error-free", at the nature of safety, and so forth. The results of these examinations leads one to solutions that, in many cases, simultaneously achieve what were previously thought of as conflicting goals. These solutions have been captured in the "Line of Business" (LOB) software development paradigm. WHY LASC CHOSE AN LOB APPROACH LASC is reinventing its venerable C-130 airlifter in a project called the C-130J program. The C-130J avionics system is a completely new development, based on concepts that are at the least at the state of the practise, and in many cases are the first of their kind in any aircraft. The most challenging software that LASC is developing on the C-130J are the Operational Flight Programs (OFPs) for the main and backup Mission Computers (the central integrating software and hardware in the aircraft). A number of project considerations led LASC to use an LOB process to develop this software. The first consideration was concurrent engineering. The baseline C-130J program is company-financed. Competition and economics are requiring the program to meet tight schedules and minimize development cost. Concurrent engineering has been adopted by many companies for its development efficiency and for the improvements it brings to many product attributes, such as producibility and supportability. Therefore, the project decided to base its overall product development process on concurrent engineering within Integrated Product development Teams (IPTs). LASC has been utilizing IPTs on other aircraft programs, with good results. The degree of concurrency on the C-130J, however, exceeds that of previous LASC developments. A challenging effect of concurrent engineering is that it increases the likelihood of the software requirements changing or not becoming fully known until later in the project (and software) lifecycle. While a Line Of Business requires software to be applicable to numbers of possible systems within a product domain, the C-130J engineering concurrency in effect has created the same need. At project onset, there were numbers of potential final C-130J OFP software systems, of which one would actually be implemented by project end (which one not being known until quite late in the software development). Choosing an LOBoriented software approach would make this resolution much simpler and less risky. Secondly, LASC builds or has built a number of products within the same general product domain of "airlifter"; from C-130s (high-wing, four-engined propeller-based aircraft), to C-5s (extremely large four-engined jet aircraft), to P-3s (propeller-based anti-submarine warfare, electronic warfare, anti-drug, and other applications aircraft). Future opportunities within any of these systems in this domain are always a possibility: LASC wanted its investment in an extremely competitive avionics system concept on the C-130J to be adaptable or tailorable to allow similar applications in the other aircraft, at a fraction of the already aggressive costs of doing so on the C-130J. Finally, the C-130 aircraft has, in its many forms, been in continuous production for over 40 years. It is a product whose characteristics are well-matched to certain basic military and humanitarian activities, such as delivery of cargo and search and rescue. LASC expects the C-130J and its descendants to have a similarly long life. Over such a long life, significant variations are certain to be needed. The C-130J software must support this evolution, which again, can be viewed as an LOB situation. AN LOB SOFTWARE DEVELOPMENT PROCESS LOB software development at LASC involves several key elements: a modified "spiral" lifecycle, a basis in formal (mathematical) methods and techniques throughout the lifecycle, domain engineering throughout the lifecycle, pragmatism (!), reusability obtained via process rather than via finding and utilizing existing artifacts, automation, and the constraint that all process elements must "pay as they go"--that is, they must reduce development costs or at the worst leave them unchanged. (Note: this constraint concerns development costs; it differs from the prevalent rationalization that one should allow development costs to increase if they provide decreased lifecycle costs. Of course, lifecycle costs were expected to decrease on the C-130J, as this was a major reason for undertaking an LOB approach in the first place; however, decreased lifecycle costs at the expense of increased development costs is unacceptable to most companies from a business perspective.) These process elements are synergistic: Their net combined effect is to produce software that satisfies the LOB software requirements mentioned at the beginning of this paper. The means to implement these process elements are varied. Most of the means will be discussed herein. In general, each means contributes to attaining multiple LOB requirements, either directly or by providing a basis on which other means can more effectively support the LOB goals. The overall process model is called the V Lifecycle, and is based on experience as well as aspects of the Software Productivity Consortium's "Evolutionary Spiral Process" (ESP)[2]. The V Lifecycle is a practical means of obtaining the benefits of a Spiral model within the characteristics and constraints of the typical business development project, with additional benefits to testing and integration activities. The V lifecycle has three dimensions. In the first two dimensions, work in any given development phase (e.g., requirements, design, coding) is always looking towards the needs of the next chronological phase, and also towards the needs of the build/verification phase at the corresponding level of abstraction (e.g., "software requirements analysis" must consider the needs of both "software architectural design" and "software acceptance testing"). These dimensions are illustrated in the figure 1. In the third dimension, the tasks associated with the following lifecycle phase are executed at a much shallower level during the current lifecycle phase. This could be called "phase validation." A complementary approach called "narrow-slice development" is also being used. During each lifecycle phase an example of the products of the next lifecycle phase are developed using the primary development process (not via an adhoc "prototype" approach). The difference between narrow-slice development and phase validation is that the narrow-slice development takes a "trial run" at the development process, and works out its problems "before the herd arrives." Phase validation evaluates the work being done by the primary tasks in the current phase by examining its broad implications to the tasks of the next phase. Thus, phase validation is broad and shallow, while the narrow-slice work is narrow and deep. Phase validation is primarily "this-phase" product related (verification/validation of the current phase direction and results), while narrow-slice work is both process and "next-phase" product related (developmental emphasis). The V and the narrow slice, together, provide an optimal balance of scouting and adjusting the project's direction of progress (and avoiding costly missteps), at the least cost. Indeed, much of the phase validation and narrow-slice costs in a given phase are recovered when the phase-validation and narrow-slice results become the basis of next-phase development. The V and narrow-slice approaches also directly decrease development costs by reducing rework and helping the system under development to converge on a domain-oriented solution earlier in the project. REQUIREMENTS ENGINEERING An LOB approach demands that software requirements first be verifiable, and secondly be in a form that is useful to other, later-lifecycle methods. Several requirements engineering methods are being used on the C-130J to obtain requirements with these characteristics. One method is a domain-analysis approach that identifies, among other things, repetitive "structures" or elements in the problem and solution domains, and the likelihood of specific requirements or groups of requirements changing. The problem domain is analyzed at the beginning of the requirements analysis phase (actually, during the system design phase prior to the usual starting point for the software requirements phase); the solution domain at the very end. The C-130J domain analysis approach incorporates elements of the SPC's "Synthesis" approach[3] for defining and producing domain-oriented systems. The project is also using a variation on Dr. Paul Ward's Object-Oriented Analysis (OOA) methodology. OOA is well-suited for an LOB approach, as it complements domain engineering. Domain analysis and OOA contribute to the LOB goals of extensibility and portability. Another requirements method is an expansion on the Software Productivity Consortium's (SPC) "CoRE" (Consortium Requirements Engineering)[4,5,6], a formal requirements modeling method based on the work of Dr. David Parnas and the experience on the Naval Research Laboratory's A-7E Operational Flight Program "Software Cost Reduction" (SCR) program[7]. LASC also studied the SCR program separately, and utilized certain aspects not currently incorporated in CoRE. "Extended CoRE" was automated by mapping its semantics onto the syntax of Yourdon Data-Flow Diagramms or "DFDs" (while the result is nothing like a DFD, it is checkable according to DFD rules), and using a CASE (Computer-Aided Software Engineering) tool to maintain the Data Dictionary and perform the automatic syntax checking of the CoRE model. An example CoRE requirement is shown in figure 2. The table defines an equation. The heading of the rightmost column would normally be the name of a specific abstracted output (the equation's "dependent variable"); the names of all other columns would be the names of specific abstracted inputs (the "independent variables"). The cells below the headings in all but the rightmost column define subranges of the independent variables. The cells in the rightmost column define the function used to derive the output given the combination of subranges in the cells to its left in its row. This approach makes it possible to positively verify coverage of the entire ranges of the inputs used to derive the output (and all the combinations of subranges). This format highlights boundary values at the "lines" between the rows. CoRE and SCR provided a formal basis for requirements, which contributed to the goal of error-free software by providing verifiably correct, consistent, unambiguous and non-redundant requirements on which to base the system. The CoRE requirements also provided the opportunity to generate formal test cases and to directly implement requirements in code: CoRE therefore supports techniques mentioned under those lifecycle phases below, techniques which directly contribute to achieving other LOB software goals. Yet another requirements method used is Quality Function Deployment (QFD)[8]. While CoRE provides internally-consistent requirements, it does not guarantee that the requirements are what the customer wants. QFD is a mathematical approach to directing the development effort based on customer preferences ("market in"), rather than just on the intuition or experience of the developers ("product out"). While QFD is in general a lifecycle method, on the C-130J program LASC is using a subset of QFD to validate its requirements emphase. QFD has proven quite useful for this purpose, and LASC is considering a more comprehensive role for QFD in future software programs. A final method automated requirements engineering through the creation of an "interface database." This database has allowed interface correctness and consistency to be checked automatically. It also supported automated generation of a testing environment used later in the development lifecycle. The interface database supports the LOB goals of quick re-verifiability, and reduction of errors. DESIGN For architectural design, an LASC-developed method named "Domain-Specific Design Language (DSDL)" development has been used. DSDL development can be considered a semi-formal design approach, since the syntax produced is defined, constrained, and verifiable in principle by automatic means (though this has not been implemented on the C-130J program). Among its direct influences are the Software Productivity Consortium's "ADARTS" (Ada-based Design Analysis for Real Time Systems)[9] methodology, and a domain-level expansion on the notion of generics. DSDL development has an object-oriented flavor, but is actually a hybrid method that allows functional orientation where it seems advantageous to the project (OO is treated as "just another tool in the toolbox"). The DSDL was developed based on the repeated structures in the solution domain that were discovered by domain analysis earlier in the lifecycle. Indeed, developing a design syntax only has value if there are repeated structures in the domain (if there was only one sentence in the English language, there would be no value in defining what a verb was, what a subject noun was, and so on...you would just learn the sentence and use it). However, real-world domains have repeated structures that will often justify developing a syntax. The "productivity multiplication" of a DSDL is what makes it imperative in an LOB approach to devote enough effort to domain analysis to identify the domain's repetitive structures. Shown in figure 3 is a greatly simplified and abstracted version of the portion of the DSDL for the devices that are attached to the data buses on the C130J. It is recorded in something similar to Buhr notation, as the CASE tool that was used implemented a variation of Buhr; however, other notations would have been just as suitable. Underlying textual definitions were also developed for the classes (outer boxes) and their methods (inner boxes). The dashed boxes in the illustration are syntactic elements that must be "instantiated" by the detailed designers with the relevant details of each specific device in the device category covered by the DSDL. Thus, the detailed design is simply the set of instantiations of the DSDL. A number of process heuristics were applied in developing the DSDL, including one that there should be a specific place in the architecture to capture the software requirements. These requirements would later be nearly automatically inserted into the software at those locations (see figure 4). Obeying the latter rule allows for easy traceability from requirements to code, and more stringent testing of the code at less cost by isolating semantic testing to limited portions of the software system. The DSDL supports the LOB goals of extensibility, portability and affordability. For detailed design, the primary techniques were design in compilable Ada PDL, and templates based on the domain structures captured in the DSDL. Compilable PDL contributes to the LOB goal of reducing errors. Templates contribute to the LOB goals of extensibility, portability, reduction of errors, safety and affordability. CODING For coding, the main requirement was for a deterministic, statically analyzable language. This would permit efficient analysis, testing and regression testing of the software. Ada provides the strongest practical basis for addressing this requirement, via the "restrictions" mechanism discussed in the Ada 95 Reference Manual (Annex H)[1]. Approaches that leverage Ada in this area include "C-SMART" (Thomson software) and "SPARK" (Praxis PVL). C-SMART is a safety-related run-time system, and additional automated diagnostics for source code. CSMART is delivered with certain verification evidences required by the FAA towards safety-critical aircraft certification. SPARK is more ambitious and rigorous, with more centrality to the LOB process, and is discussed in greater detail below. SPARK[10,11] provides an extremely robust and efficient basis for formal verification. SPARK includes a toolset and a method; it is built on a formal (mathematical) specification[12] which includes a self-consistent definition of how to use Ada to enhance software verifiability. SPARK has support tools for proof of correctness and proof of absence of run-time errors. SPARK is being used on several European software projects requiring software assurance and/or safety. SPARK is a product of Praxis PVL of Bath, England. Praxis PVL is also participating in the Independent Verification and Validation (IV&V) of the LASC OFP software. When use of SPARK is planned from the project onset, the coding activity itself occurs at or near typical Ada rates (especially as experience is gained). There are additional benefits in that the coded product allows accelerated (and automated) verification, accelerated code correction, and provides provability in the end of the complete absence of many important categories of errors, including those related to control flow (e.g., multiple loop entries), data flow (e.g., inadvertent use of a random value), information flow (e.g., an output not derived from the appropriate inputs), and semantic correctness (e.g., the code doesn't do what the requirement says it should). All portions of the C-130J OFPs where semantics (essentially, requirements) reside are implemented using SPARK. This closes the cycle from formal requirements to formal programming language, as the requirements are expressed in the formal CoRE model. SPARK supports the LOB goals of extensiblity, portability, error-reduction, re-verifiability, safety and affordability: in short, almost every LOB goal is directly supported by the use of SPARK. The prevailing coding method was an extension of the template approach. The coder of each detailed-design template would add the lowest-level design (i.e., coding) information. Extensive EMACS-editor scripts were also used to automate much of the template population. The benefits of using templates during coding parallel the benefits of templates during detailed design. VERIFICATION For verification, the guiding philosophy is "correctness by construction," i.e., software correctness by preventing the possibility of doing things incorrectly, rather than by after-the-fact error detection and correction. This philosophy is implemented across the entire development lifecycle. Retrospective verification remains in the process, but its main purpose is to provide hard evidence of the results produced by the construction techniques. Nevertheless, the retrospective verification is extremely rigorous, and if any software errors are found they are corrected. In that event, the process is also analyzed to determine what allowed the error to occur. If possible, the process is then corrected to prevent recurrences of similar errors in the current or future projects. "Correctness by construction" is "synthetic": it is semi-formal development using a combination of formulation rules and constraints whose imposition ensures the correctness of the system in the areas of the applicable products and the products derived from them. Retrospective verification leverages the formal requirements throughout the lifecycle to verify correctness. This breaks down into two subcategories: static and dynamic. Static verification involves placing formal proofs of correctness in the code based on verification conditions generated directly from the formal requirements. Dynamic verification involves generating execution "scripts" directly from the formal requirements, and driving execution of the system in the target environment to confirm that the system behaves as expected. U.K. and European regulators favor static verification; American regulators (e.g., FAA) favor dynamic verification. These three elements can be called formal development, formal static program analysis, and formal dynamic testing; and interract with the formal requirements as shown in figure 5. In formal development, the rigorously-defined syntax and process of the DSDL and templates ensures that the software code is correct by construction in both static syntax and static semantics. Confidence in the correctness of dynamic syntax and semantics is also high, due largely to the protections provided by the restrictions of CoRE and SPARK syntax and semantics. Formal development supports the LOB goals of error reduction, re-verifiability, safety, and affordability. In formal static program analysis, the SPARK-based Ada implementation and its associated formal annotations (proof contexts derived directly from the original CoRE specifications) are used to evaluate the internal and formal correctness of each unit that contains program semantics. The LOB benefits of static verification are largely the same as those for using SPARK during coding. In formal dynamic testing, a set of formal test cases are developed from the formal requirements. These test cases are implemented as "scripts", to be run in a tool that simulates the environment surrounding the computer that executes the product software. This tool directly utilizes the "interface database" created during requirements engineering. These scripts and the environment in effect constitute a "product validation suite" analogous to the "Ada validation suite": At any point in the product's life, this suite can be easily reexecuted to confirm that the product requirements are still being correctly fulfilled by the implemented product. This suite of techniques and tools supports the LOB goals of error reduction, re-verifiability, safety, and affordability. A more detailed picture of the interraction of these process elements is shown in figure 6. LESSONS LEARNED As this paper is being written, the C-130J program is simultaneously in the software development, software integration, and systems integration phases. Requirements continue to be modified at a high rate as the concurrent systems engineering tasks are conducted in an environment of very dynamic ongoing negotiations with potential customers and with regulators. The LOB approach is paying off by facilitating continued rapid modifications and reverification of the OFP software in its target environment. Due to the mixed stages of software development, and due to the high degree of concurrency of the C-130J program, numeric results metrics are as yet sparse and preliminary. However, high-level results concerning measurables such as schedule are discussed here. The C-130J program has also provided a number of valuable qualitative "lessons learned" about LOB software development. The first lesson is that the C-130J MC and BIU OFP software development effort continues to keep pace with all systems-engineering additions and modifications, and with the program schedule. This is in stark contrast to the "software crisis" experience of many if not most aerospace projects at this point in their lifecycles, where software becomes the "long pole in the tent" that is attributed as the cause of overall project delays. Aerospace is not unique in this regard: Other categories of software development, for instance MIS (Management Information Systems), report similar difficulties. If software delays are a symptom of a project's (or company's) perpetual inability to stabilize system requirements, the business should recognize and address its problem with system, as opposed to software, engineering. Nevertheless, instability is a way of life in commercial software development. Any software development approach that is effective from a business perspective must handle this reality within at least reasonable limits if the business is to succeed in the long term. We software developers must recognize that the definition of "reasonable limits" goes far beyond the coping capacity of the current software "state of the practice." The LOB approach performs very well in an aggressive change environment. This is perhaps the most important lesson to date from the C-130J. The second lesson is that the LOB approach is practical in a normal business environment. This process has proven effective with typical software developers, and did not necessitate an inordinate amount of additional training. The LASC software staff, while talented and motivated, is representative of industry. It is by no means "stacked" with special categories of people such as Ph.D.'s, researchers, or mathematicians. Thirdly, a more leveled staffing curve would be preferable for producing timely narrow slices. LASC used a COCOMO-based costing model, which followed a traditional staffing curve. Applying traditional staffing curves to LOB development makes relatively fewer resources available in the crucial early phases for domain engineering, formal requirements definition, "V" validation development, and narrow-slice development, the most important elements in LOB development. Traditional curves make more resources available in the later phases when the early efforts will be yielding higher productivity and lower personnel need. While the general desirability of "front-end loading" has been discussed in the software community for many years, the LOB model requires such a curve to function at its full potential. LASC experienced noticeable bottlenecks (especially in missing timely completion of narrow slices) due to the traditional curve, bottlenecks that obviously would not have been present with more up-front resource loading. The staffing curves didn't eliminate the LOB benefits, but they did, in the authors' judgement, hold them below their full potential. The desired flattened curve should be somewhat higher on the "forward" or "left" side of the curve maximum, as LASC experience has shown that the integration activity benefits disproportionately from the LOB approach. Another lesson is that timely information dissemination is one of the greatest needs: In a development that is highly leveraged on efficient domain engineering and "domain generics," it is crucial that all developers are provided with well-digested (not raw) product and process data as quickly as it becomes known. Any delay in dissemination tends to lead to rework of many instances of parallel artifacts. Yet another lesson is that the use of a "template-driven" coding approach can inadvertently convey the impression that the coder is being relieved of all creative opportunity and responsibility. Not only is such an impression demoralizing, LASC experience has shown that creativity and coder initiative are the key ingredients to producing working code in this approach! The inherent limitations of templates and narrow slices, and the creative aspects of the coding activity, must be explicitely communicated to the coders. This message must be accompanied by empowerment and process support for the coders to do whatever it takes, within the context of the overall architecture, to make their software work. This includes the opportunity for direct contact with the systems engineers whose requirements generated the need for the coder's software. In this context, the templates can fully reach their potential as the facilitators and productivity enhancers that they were intended to be. LASC detected this problem starting during detailed design, and implemented these adjustments to largely eliminate it. A sixth lesson is that a self-conscious effort should be made to spread key technical expertise and design decisions across many program personnel. This is especially important from the detailed design phase onward. This action will prevent bottlenecks caused by many developers of parallel template instances, of each of many different template types, needing access to the same "guru" at same time (typically late in the program, just when an important project milestone is due!). A lesson that some people find an irritant, but most agree is a positive one, is that the LOB approach involves the entire software development team more deeply with systems engineering. For software developers accustomed to being handed requirements, "quickly throwing something together", experiencing some agony in the integration lab, and then releasing the software to users so they can discover the flaws in the system definition, having to resolve system requirements and design issues in concert with systems engineers can be infuriating! Of course, this is a consequence of the formal methods and the constructive approach: they simply won't allow systems-level inadequacies to propagate into the software product. While this cost some extra time in the short term, it always more than gained it back later. Another lesson was that, given the nature of Ada, the domainoriented/template-based design approach, and the narrow-slice development, detailed design should have focused more on detailed interface design and deferred most of the body details until the coding phase. The DSDL and narrow slices so constrain the roles of the Ada packages that this is a relatively low-risk strategy. However, finalizing the lowest interface levels at the earliest possible point would have reduced work iterations as the bodies were detailed. The final lesson relates to software changes. When the need for domainlevel requirements changes is identified, the amount of affected software can be large. Yet, because of the domain analysis and DSDL/template-driven implementation, C-130J experience has shown that the locations where the changes must go in the code is obvious by examining the design template(s) relevant to the affected structures in the solution domain. Comprehensive changes can rapidly be effected by changing the appropriate section of code in each of the implementation instances of the affected template(s). Unlike with non-domain-oriented architectures, where functionality is distributed in software in an irregular way, there is objective confidence that the software changes will completely implement the requirements changes. CONCLUSION We began by discussing what "Business" needs from "Software": extensibility, freedom for errors, re-verifiability, safety, and inexpensiveness, to name just a few. Unfortunately, each of the major current software development methods and practices have significant weaknesses in one or more of these areas. The recent emphasis on software process has improved the overall efficiency of software development somewhat, but has not eliminated or even strongly mitigated the deficiencies most relevant to the business community. While there is no "silver bullet" for putting software out of its misery, and never will be, an effective way to address business concerns is to combine elements of the best resources now available to software developers--such as ways of using Ada that simplify proof of correctness (currently the most viable language option), semi-formal processes, domain engineering, practical formal methods, progressive management practices, and automation. The goal is to achieve a synergy where the business-area strengths of the selected process elements at least cover each others' weaknesses, and wherever possible, multiply their strengths. Thus, the key to developing an effective LOB software approach is not in developing new and ever more powerful methods, useful as they may be. It is not even in improving the consistency of the software development process (e.g., via climbing the Carnegie-Mellon Capability Maturity Model), though that too is a laudable goal. The key to developing an effective LOB software approach is to understand the needs of business, and the strengths and weaknesses of the softwaredevelopment resources available, and then create a kind of "chemistry" that will "react" the available elements together to produce a "compound" process with the desired characteristics. As with chemistry, this is more than simple mixing; complex mutation occurs as the elements combine. The properties of the resulting process may significantly differ (for better or worse) from what one would expect by their simple combination. However, by discovering which "reactions" are useful to business goals and which are not, one can begin converging on a truly "Line Of Business" (LOB) software approach. The LASC LOB software approach has spent ten years in a crucible simmering over the flames of company and customer demands. It is presented here as a model for an effective LOB approach. It is also presented as a concrete example of the values and decisions that must be considered in crafting a truly business-responsive software development process. REFERENCES 1. Ada 95 Reference Manual, ISO/IEC 8652:1995(E)- RM95; version 6.0, 21 December 1994. (See especially Annex H "Safety and Security.") 2. Process Engineering with the Evolutionary Spiral Process Model, SPC93098-CMC version 01.00.06; Software Productivity Consortium; Herndon, VA, U.S.. January 1994 3. Reuse-Driven Software Processes Guidebook, SPC-92019- CMC version 02.00.03; Software Productivity Consortium; Herndon, VA, U.S. November 1993. 4. Consortium Requirements Engineering Guidebook, SPC- 92060-CMC version 01.00.09; Software Productivity Consortium; Herndon, VA, U.S.. December 1993 5. The CoRE Method for Real-Time Requirements. S. Faulk, J. Brackett, P. Ward, and J. Kirby. IEEE Software, 9(5). September 1992. 6. Experience Applying the CoRE Method to the Lockheed C-130J Software Requirements. S. Faulk, L. Finneran, J. Kirby, Jr., S. Shah, J. Sutton. Proceedings of the Ninth Annual Conference on Computer Assurance, Gaithersburg, MD, pp. 3-8. June 1994. 7. Software Requirements for the A-7E Aircraft, NRL/FR/5530-92-9194. T. Alspaugh, S. Faulk, K. Heninger Britton, R. Parker, D. Parnas, J. Shore; Washington, D.C.: Naval Research Laboratory. 1992. 8. Quality Function Deployment (QFD) for Software. R. Zultner (in G. Schulmeyer, J. McManusm (ed.s) "Total Quality Management for Software", ISBN 0-44200794-9, New York: Van Nostrand Reinhold. pp.s 297-319). 1992. 9. ADARTS Guidebook, SPC-94107-N, version 02.01.00; Software Productivity Consortium; Herndon, VA, U.S. September 1991. 10. SPARK - An Annotated Ada Subset for Safety-Critical Programming, Bernard Carre, Jonathan Garnsworthy. Proceedings of Tri-Ada Conference, Baltimore, December 1990. 11. Automatic Proof of the Absence of Run-Time Errors. J. Garnsworthy, I. O'Neill, B. Carre. Proceedings of the Ada UK Conference, London Docklands. October 1993. 12. The Formal Semantics of SPARK (Volume 1: Static Semantics; Volume 2: Dynamic Semantics). Program Validation Limited; Praxis PVL, 20 Manvers Street, Bath, BA1 1PX, UK, (created under contract to DRA Malvern). October 1994. BIOGRAPHICAL James Sutton is a long-term devotee of improving software development. He serves in several roles on the C-130J program: software process engineer, software methodologist, software architect, and interface for software process issues with regulatory agencies. Major previous roles have included similar responsibilities on the C-5 aircraft ground processing software, being the "reuse lead" for the F-22 fighter, being the Principal Investigator of Lockheed's reuse R&D program, and being the technical lead of the Trident II missile flight control firmware development. Bernard Carre pursued an academic career for many years (he is still visiting professor at the University of Southampton), and then in 1983 created Program Validation Limited (PVL), a UK consultancy specializing in languages, techniques and tools for high-integrity programming. He and his team at Southampton pioneered the industrial use of rigorous static code analysis and formal code verification, and he is one of the original authors of SPARK, which is now used extensively in safety-critical applications. PVL has recently been incorporated into Praxis Critical Systems, Bath, England.