TEAM-ADA Archives

Team Ada: Ada Programming Language Advocacy


Options: Use Forum View

Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
"Robert I. Eachus" <[log in to unmask]>
Reply To:
Robert I. Eachus
Fri, 18 Dec 1998 10:55:35 -0500
text/plain (77 lines)
At 09:17 AM 12/18/98 -0000, Bill Taylor wrote:
>>    When you need software On Time and Under Budget
>>                      Choose Ada
>There is a danger that such a claim will undermine the credibility of the
>other (stronger) claims for Ada.
>It appears far too naive.
>Using Ada is no guarantee of delivering on time and under budget, just as
>using another language is no guarantee of failure to deliver on time and
>within budget (but it certainly helps!).
>Choosing an appropriate process is far more significant in this respect than
>choice of language.
>Poor management, poor process, poor design will never bring a project in on
>time and under budget, whatever language is chosen.
>Ada should be part of an overall strategy to develop reliable, predictable,
>safe software.

    This almost falls in the true but irrelevant category.  Process is
important to delivering software on time and within budget, but it is not
the whole story.  Use of Ada can sometimes fix otherwise impossible
schedules and budgets but not always.

    However, there are at least three occasions I am aware of where a
desision was made to switch from another language to Ada in the middle of a
project because the alternative was to declare the project to have failed.
In two of those cases, the final delivery was made in Ada within the
original schedule and budget.  In the third case, the budget had already
been exceeded and the schedule slipped when the switch was made.

    Now true, the switch would not have been successful if they hadn't also
switched to better software engineers and better engineering practice.  But
good software engineers, I hope, would never have gotten so deep in the
hole in the first place.

    One of those cases was even more interesting due to a different
discovery.  The intent was to rewrite the interfaces in Ada, and reuse
existing "working" C code where possible via pragma Interface.  It pretty
quickly became obvious that it was easier to redo the bodies of the
packages in Ada as well.  One estimate was that writing the bodies of the
packages was less than 5% of the entire effort.  (Writing packages specs
was over 30%, but that includes a lot of what should be called detail
design.  The rest was mostly design and (unit and system) test, with
integration and debugging effort less than 5%.)

    Another data point here.  Years ago, I wrote a package for generating
and printing bridge hands in Fortran.  (It had features that allowed you to
"bias" the output for bidding practice, such as North has at least five
spades.) Overall total effort was about a month.  To test out the random
number capability in Ada 9X, I redid the project in Ada.  (Ada 83 plus the
Ada 9X RNG packages.)  I wrote the requirements, did the detailed design,
wrote the code, fixed up a few formatting problems--and went to lunch.  The
whole process took under three hours.  (The version of this program
distributed as part of ADAR has the code for biasing the deals taken out,
but it amounts to a couple dozen  lines of code--and calls to

    The Ada was about 200 SLOC where the Fortran was closer to 2000, and
the Ada version had a much better random number generator. ;-)   However, I
have had several other similar experiences, and there have been several
cases where the productivity on an Ada project has been in the hundreds of
SLOC per DAY per staff member in some cases over multiyear projects with
more than a dozen members of the team. Yes this takes good people, but huge
performance benefits are possible.

                                        Robert I. Eachus

with Standard_Disclaimer;
use  Standard_Disclaimer;
function Message (Text: in Clever_Ideas) return Better_Ideas is...