Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!asuvax!ncar!ncar.ucar.EDU!ftower From: ftower@ncar.ucar.EDU (Francis Tower) Newsgroups: comp.software-eng Subject: Re: Modifiability Message-ID: <11714@ncar.ucar.edu> Date: 6 Jun 91 21:10:39 GMT References: <2192@Terra.cc.brunel.ac.uk> <1991Jun5.201807.13286@netcom.COM> <62683@siemens.siemens.com> Sender: news@ncar.ucar.edu Reply-To: ftower@ncar.ucar.EDU (Francis Tower) Distribution: comp.software-eng Organization: Climate and Global Dynamics Division, NCAR Lines: 30 In general, the traditional waterfall life-cycle fails when maintenance is concerned because those fine, fat documents which tell managers that a phase of the development is finished are left to gather dust. In particular the software specification is often never revised and the product begins to diverge from the specification. The result is that the source itself is maintained and both old and new optimization knowledge is spread into the source with details lost. Balzer, Cheatham and Green in their classic paper 'Software Technology in the 1990's: Using a New Paradigm' (IEEE Comp. Nov 1983) proposed that a program's specification be formalized and that the implementation be mostly automated. The problem then of maintainability would be pushed into the specification phase. With greater acceptence (more in Europe and Canada) specification languages are being used on software products (Specifying a Real-Time Kernal, IEEE Software Sept 1990; 'A Formal Specification of an Oscilloscope' IEEE Software, Sept 1990) and they are not only making the maintenance function more tractable, they are also detecting flaws in the specification as well as providing a tool for exploring the effects of changes. If you are not using some form of formal specification then the longer and more frequently a program is modified, the more calcified it becomes. Decisions made long ago on data structures and optimizations act as ruts to force maintanance into a narrow track. My suggestions in this case are: 1. A concise guide to programming style and practices, 2. Choice of a minimal set of allowable structures 3. Elimination of program optimization, 4. High degree of modularity with as much generic code as possible, 5. Effictive QA and CM functions with management involvement on projects.