At 02:31 PM 6/10/1999 -0400, Roger Racine wrote: >>And your work product really gives you a lot of information about the >>design approach it embodies. I find that significant design problems >>-- the kind of thing that can make you start over -- surface a lot >>earlier in Ada. And, you aren't as tempted to "paper over" a problem >>with a kludge that will grow as the system grows. > >Why? This would be an excellent argument (if true :-) )! Note that I am >not accusing you of telling a lie, just that it would be easier to convice >others if there were constructs of the language that could be pointed to >that A) did not take any longer to use; and B) found design problems >quickly. Note also that (as others have pointed out) a small sample of >experience does not make a good argument. I'll just address this one point. Way back in 1984, at officially the first SIGAda meeting on Cape Cod, everyone, including Jean Sammet who had been one of the most vocal opponents, decided "The best PDL for Ada is Ada." Not just that, but that the PDL should be compiled with an Ada compiler. (Note that this doesn't say that you shouldn't use notation embedded in comments, like Anna or Byron.) Why? Because by then we all had enough experience with Ada to know that the major design flaws and oversights showed up when you wrote the package specifications. So people who know what they are doing with Ada have the main program (one or two pages plus block comments) and all major package specifications needed for the first build complete and compilable. One of the advantages of Ada 95, is that it makes the mapping to PDR and CDR easy: PDR ==> Main program and all root library units. CDR ==> Remaining (child) package specs plus key algorithms. Some people still insist on misreading 2167A to say that you shouldn't write any compilable code before PDR. The right answer to such misguided individuals is to say that you are using the appropriate design language for Ada. (Or point them to someone who understands 2167A and MIL-STD-SDS.) If you do that, you end up without bushels of unnecessary documentation at PDR (no "C" specs, and if you tailor right, "B" specs for software only at CDR, if ever). What you do end up with is a clear exposition of the design at PDR. If the customer doesn't understand this design, which should be accompanied by comments mapping timing and other requirements to units, often to packages, then the serious development problems are outside the control of the developer. If the customer does comprehend the design, then you put the specs under version control, with an easy way for the project engineer to sign off on (and report) changes to the specs, then there is no way to have the type of major miscommunication that you mention. (The real problem, of course, is that you have to get--in government procurement terms--these "software deliveries" spelled out in the RFP. What we have found best--if you can get it in the RFP and contract--is to have read access to the CM files.) Oh, and one last thing. You can still get ambushed by additional requirements. If the design planned for them, all well and good. If they weren't planned for, the cost doesn't depend on how much time and effort was before PDR, it just depends on how much was spent before the requirement was identified. Our experience has been that with Ada such requirements become visible earlier in time, if they are surfaced by the design process. But if they are only dependent on the calendar, you will have spent more of the project money before they show up, so you have to be very proactive in identifying them. (What I am talking about are additional requirements generated from lessons learned such as in the Gulf War, or in the Balkans. I expect new requirements on, for example, Air Tasking Order systems, as a result of the intelligence problems recently. Some of these requirements will be unanticipated and have nothing to do with the timing of development reviews.) Robert I. Eachus with Standard_Disclaimer; use Standard_Disclaimer; function Message (Text: in Clever_Ideas) return Better_Ideas is...