[comp.software-eng] Soft-Eng Digest V4 #5

MDAY@XX.LCS.MIT.EDU (Moderator, Mark S. Day) (02/09/88)

Soft-Eng Digest             Mon,  8 Feb 88       Volume 4 : Issue  5

Today's Topics:
                Data For Large Scale Software Projects
                Business View of Software Productivity
              Coordinating Software Development (6 msgs)
      Correctness in Parallel and Distributed Systems. (2 msgs)
                     Correctness Proofs (3 msgs)
----------------------------------------------------------------------

Date: Thu, 28 Jan 88 15:55:05 pst
From: Bharat Shah - cs597 <bshah@cs1.wsu.edu>
Subject: Data For Large Scale Software Projects

  I am working on a masters project, and we are trying to modify 
  the Putnams Eqn. for Software Effort Estimation.

  I am wondering if any one out there can give us data for large
  scale projects.. or even any leads on where I could get such
  data. Specifically, the data that we are interested in is

  Rate of Spending vs Time over the entire SW Development stage 
or
  (DSLOC per Time) vs Time.

  The data should be for large scale projects (20000 DSLOC or more)

  I have tried the Rome Air Development Center, and though they said
  they could get me the data I havent got any and doesnt seem like
  I would get any.

  I would appreciate any help that I can get!!

  Thanks in advance..
  
     Bharat Shah
     Computer Science Dept.
     Washington State Univ., Pullman WA 99163.

     CSNET Address (bshah@cs1.wsu.edu)

------------------------------

Date: 27 Jan 88 13:21:14 PST (Wednesday)
From: Rodney Hoffman <Hoffman.es@Xerox.COM>
Subject: Business View of Software Productivity

The 'Wall Street Journal' for Friday, Jan. 22, 1988 ran a page 1 story with the
headline PATCHING UP SOFTWARE OCCUPIES PROGRAMMERS AND DISABLES SYSTEMS

The story breaks no new ground.  Using mainly examples from the banking and
securities industry, it recites the typical stories:  

  * Programmers spending 80% of their time repairing and updating software.
  * Projects 100% over budget and a year behind schedule.
  * Computer hardware and speed overwhelming programmers.
  * Computer departments with three years backlog.
  * New management changng specs or discarding whole systems.
  * Little correlation between management goals and the way the 
    computer department spends its money. 
  * Program documentation shortcomings.
  * Productivity of 5 to 10 lines of code a day.
  * Unrealized promises of fourth-generation programming languages and
    computer-aided software engineering.
  
A couple of quotes:

  Ken Hamilton, a senior VP at Manufacturers Hanover, says one programmer 
  labeled the parts of his program using the initials of his friends...
  Once dozens of programmers leave their mark on software as it starts moving
  through its life cycle of 10 to 20 years, it becomes like a dangerous inner
  tube.  "It's been patched and extended and enhanced to the point that it is 
  now a maintenance nightmare," says Michael Bealmear, a partner at Coopers 
  & Lybrand. 
  
  Some hope for a solution [to low software productivity] is seen in what 
  are called fourth-generation languages... This is like giving reporters 
  something that would let them just write an outline for an article rather
  than having to write the whole thing.  Some users talk of quintupled
productivity... But the new languages... may work just for one part of a
  project on one type of operating-system software on one type of computer.
  Software that uses them also runs more slowly.... New Jersy's vehicle-
  registration and driver-license operations slowed almost to a halt a few
  years ago, and officials are still sorting through the mess....
  
  IBM says it has been improving its programmers' productivity about 7% a
  year simply by managing matters more carefully. 
  
  "It took us a lot of years to get into this mess," says Ray Stanley, a VP
  at American Express Co., "and it's going to take us a lot of years to get
  out of it." 

------------------------------

Date: 20 Jan 88 23:56:40 GMT
From: linus!philabs!ttidca!hollombe@husc6.harvard.edu  (The Polymath)
Subject: Coordinating Software Development 

stank@orca.UUCP (Stan Kalinowski) writes:

> >When a development team needs to alter a component, they take a copy
> >from the first "build" in the view that contains a version of that
> >component; it may be copied from a shared "build" if a cooperating
> >team has already altered it, or it may be copied from the public
> >build.  After they have started work on their copy, someone may
> >alter the version from which they started - their "antecedent"
> >version.  Eventually, the team must combine that alteration with
> >their own so that a unified version of the file can be deposited in
> >the shared or public "build".
> >
> >We have called this operation "reconciliation";  clumsy - any offers?
>
>Yeah, call it "programmer's hell".  ...

Better yet, call it "unnecessary".  I've run into this situation in
several shops where people simply didn't know better (not that there was
any excuse for that).  The solution is a configuration management system
wherein only one person can work on a module at a time.  In order to work
on the module they have to check it out of the system in such a way that
no one else can check it out until it's been checked in again.

I've worked with systems that handle this automatically and I've set up
systems where it was handled manually because nothing else was available.
However you handle it, it's absolutely essential to a rational code
maintenance system.

Letting two people work on the same module in parallel, even if they're
office mates, is almost certain to cause conflicts and rework, sooner or
later.  One at a time will save time in the long run.

The Polymath (aka: Jerry Hollombe, hollombe@TTI.COM)   Illegitimati Nil
Citicorp(+)TTI                                           Carborundum
3100 Ocean Park Blvd.   (213) 452-9191, x2483
Santa Monica, CA  90405 {csun|philabs|psivax|trwrb}!ttidca!hollombe

------------------------------

Date: 26 Jan 88 18:48:35 GMT
From: ihnp4!alberta!calgary!jonesb@ucbvax.Berkeley.EDU  (Bill Jones)
Subject: Coordinating Software Development

Okay, suppose your company is working on the next release of a product
already in the field.  An important customer reports a critical bug,
and you find that the fix for it involves several modules which are
checked out and being modified for the next release.  Should that team
be held up while you yank back the modules and figure out how to
recompose the customer's configuration?  Or do you mean to tell the
customer that his bug can't be fixed until the next release is out?

Parallel development paths may have the danger of conflict, but proper
management and tool support can minimize it.  I would be interested in
hearing of any non-parallel system which cleanly supports both new
development and maintenance of past releases.

------------------------------

Date: 1 Feb 88 23:08:43 GMT
From: linus!philabs!ttidca!hollombe@husc6.harvard.edu  (The Polymath)
Subject: Coordinating Software Development

=Should that team
=be held up while you yank back the modules and figure out how to
=recompose the customer's configuration?  Or do you mean to tell the
=customer that his bug can't be fixed until the next release is out?

Neither.  You ship the customer(s) a temporary patch for the existing
code.  Patched versions of code don't get checked in (but the patches do,
for the record).  Then you include the fix in the next release (based on
the patch).  This causes minimal disruption to the work on the next
release.

If you're working in a high-level language you probably aren't going to
literally patch the code, but the process can logically be treated in the
same way.  The people working on the release still have only one version
of each module to work with, and the patch becomes an addition to their
task list.

-- 
The Polymath (aka: Jerry Hollombe, hollombe@TTI.COM)   Illegitimati Nil
Citicorp(+)TTI                                           Carborundum
3100 Ocean Park Blvd.   (213) 452-9191, x2483
Santa Monica, CA  90405 {csun|philabs|psivax|trwrb}!ttidca!hollombe

------------------------------

Date: 31 Jan 88 22:39:10 GMT
From: trwrb!desint!geoff@ucbvax.Berkeley.EDU  (Geoff Kuenning)
Subject: Coordinating Software Development

RCS supports this very nicely;  you simply create a branch for the bug fix
while development continues on the main path.  RCS even provides the "-j"
switch (admittedly a very hard switch to use correctly) to help you merge
that fix back into the main branch later.  (You can also use System V's
sdiff program, or Larry Wall's patch program, to achieve similar results).

I believe you can also do this with SCCS, though I haven't personally
created an SCCS branch while another revision was actually checked out.
-- 
	Geoff Kuenning   geoff@ITcorp.com   {uunet,trwrb}!desint!geoff

------------------------------

Date: 2 Feb 88 12:05:10 GMT
From: cca!g-rh@husc6.harvard.edu  (Richard Harter)
Subject: Coordinating Software Development

	Although an adequate tool set is critical, the most important factor
is proper management.  I can speak to this from some experience since
SMDS is in the business  -- our product is a software management system
and our customers are software managers and CM people in companies of a
variety of sizes -- and we get to see what works and doesn't work.
What happens in most organizations is that development happens first,
an ad hoc system is worked out by the developers, CM, QA, and customer
support get tacked on as an after thought, and things get rather messy
after a while.  Once things get sufficiently entrenched it becomes very
hard to restore order.   I don't want to go into a lot of detail, but
I will make two observations.  (1) Once you have an existing organization,
there is a political problem.  (2) Good CM and QA require organizational
commitment; they are not an add on.

	As to parallel development -- "new development and maintenance
of past releases" is inherently parallel.  Actually "parallel" is a 
misleading term.  It suggests independent paths of equal priority.
What really goes on is that one has a mainline product(s) with variants.
The variants may be enduring (separate supportable releases) or transient
(development efforts).  What one tries to do is, so to speak, minimize
the distance between variants and the mainline.

	From the developers perspective, however, the process is linear.
The developer ordinarily is working with a single variant that is
evolving over time.  Going back to previous versions, and merging changes
are useful, but not essential.  Development is implicitly constrained
by the need to keep the distance between the variant and the mainline
small.  A lot of 'good software practice' is really an expression of
this requirement.

	One should, of course, understand that a tool for merging is not
the same thing as successfully merging.  Merging, at the mechanical level,
is not terribly difficult.  The real problem is that the merged software
is neither fish nor fowl; there is an interaction between the two lines
that were merged that is not present in either parent line.  Ideally one
creates lines that are orthogonal; i.e. the changes in line A are
independent of the changes in line B.  Arranging orthogonality is a part
of good software management.  In practice complete orthoganality cannot
be ensured, and the merge process must take this into account.
-- 

In the fields of Hell where the grass grows high
Are the graves of dreams allowed to die.
	Richard Harter, SMDS  Inc.

------------------------------

Date: 2 Feb 88 18:21:11 GMT
From: bunker!shap@YALE-ZOO.ARPA  (Joseph D. Shapiro)
Subject: Coordinating Software Development

yes, SCCS allows different revisions to be checked out concurrently.

there is also a means to apply the same fix to different revisions,
as follows:

	get -e -r4.1.1.2 s.x.c # gets 4.1.1.2 for editing
	vi x.c # make your changes
	delta s.x.c # creates 4.1.1.3 (assuming 4.1.1.2 was a 'leaf')
	get -e -r4.2 -i4.1.1.3 s.x.c # gets 4.2, includes 4.1.1.3 changes
	delta s.x.c # creates 4.3 (assuming 4.2 was a leaf), with 4.1.1.3
                      changes.

Note that the second get could complain about conflicts,  e.g.
overlapping areas of change on the different branches.

-- 
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
Joe Shapiro					"My other car is a turbo...
Bunker Ramo Olivetti				 too."
{decvax,yale,philabs,oliveb}!bunker!shap

------------------------------

Date: 29 Jan 88 14:33:25 GMT
From: hubcap!steve@gatech.edu  ("Steve" Stevenson)
Subject: Correctness in Parallel and Distributed Systems.

I would like to find a reasonably up-to-date bibliography on
proving parallel programs correct.  I would also like same for
distributed programs, say for the huge hypercube numerical programs being
developed.

Thanks.

-- 
Steve (really "D. E.") Stevenson           steve@hubcap.clemson.edu
Department of Computer Science,            (803)656-5880.mabell
Clemson University, Clemson, SC 29634-1906

------------------------------

Date: 31 Jan 88 16:16:03 GMT
From: siegel@svax.cs.cornell.edu  (Alexander Siegel)
Subject: Correctness in Parallel and Distributed Systems.

This is very much an open research problem.  I suspect you will only be
able to find flaky journal articles and miserably out of date texts on
this subject.
-- 
Alex Siegel
(607)255-1165 (Low Bandwidth Audio)
4161 Upson Hall, Cornell University, Ithaca NY  14853 (Hard Copy)
siegel@svax.cs.cornell.edu (ARPAnet)
siegel@CRNLCS (BITNET)
{uw-beaver,ihnp4,decvax,vax135}!cornell!siegel (UUCP)

------------------------------

Date: 27 Jan 88 22:25:22 GMT
From: mtune!lzaz!lznv!psc@rutgers.edu  (Paul S. R. Chisholm)
Subject: Correctness Proofs

UH2@PSUVM.BITNET (Lee Sailer) writes:

> PROGRAM CORRECTNESS PROOFS:  All the work on this seems to require the
> addition of "assertions" to the code, that is, logical statements of
> all the assumptions that must hold before, after, and even during the
> execution of a piece of program.  (See Gries, the Science of Programming)

Um, sort of, but the other way 'round would be closer to the truth.

It's quite impossible to prove most software "correct", either because
it's not correct (no smiley), or the structure of the program doesn't
resemble the structure of the definition of "correct".  Not long after
playing with correctness proofs, folks such as Dijkstra and Gries found
that it was far easier to write the correctness proof and add the code
than vice versa.  Even so, the proof of a trivial code segment is
longer than the code, and the length of proofs grow much faster than
the code they can prove.  Gries' THE SCIENCE OF PROGRAMMING is an
excellent introduction to this subject.

In my personal experience, it's impractically difficult to "prove" any
non-trivial program correct.  On the other hand, the skills you need
for correctness proofs are very useful.  My programming environment
(writing UNIX applications in C) can't "understand" proofs and compile
time assertions, but it lets me add run time assertions.  I've done
this often, and found them a great aid in testing and debugging code.
The assertions I add are the same ones I used to develop the
code/proof.

-Paul S. R. Chisholm, {ihnp4,cbosgd,allegra,rutgers}!mtune!lznv!psc
AT&T Mail !psrchisholm, Internet psc@lznv.att.com

------------------------------

Date: 28 Jan 88 14:56:49 GMT
From: siegel@svax.cs.cornell.edu  (Alexander Siegel)
Subject: Correctness Proofs

I recently took a course from Gries using his book and also took other
loosely related classes.  That style of program proof, Hoare logic, is
being supplanted by newer methods.  The biggest efforts are being made
in automatic progarm verification.  So that even though the proof my
be 10 times as long as the program, a human never has to read or write
it so it doesn't matter.  At the moment the whole subject seems to be
in a state of flux and chaos of competing ideas.  In five years,
Hoare logic may seem archaic and weird.

   [For a very different view of proofs and verification, readers
    can read "Social Processes and Proofs of Theorems and
    Programs" by DeMillo, Lipton and Perlis in 
    _Communications_of_the_ACM_ 22 #5 (May 1979). There is
    a related exchange between Dijkstra and the authors in 
    Software Engineering Notes 3 #2 (April 1978).  The arguments
    still seem relevant 10 years later...]

-- 
Alex Siegel
(607)255-1165 (Low Bandwidth Audio)
4161 Upson Hall, Cornell University, Ithaca NY  14853 (Hard Copy)
siegel@svax.cs.cornell.edu (ARPAnet)
siegel@CRNLCS (BITNET)
{uw-beaver,ihnp4,decvax,vax135}!cornell!siegel (UUCP)

------------------------------

Date: 29 Jan 88 00:10:10 GMT
From: agate!garnet.berkeley.edu!csm@labrea.stanford.edu
Subject: Correctness Proofs

It will take more than five years to prove the automatic program verifier
software is "correct" (also no smiley). However, using "assertive"
comments is a lot of help to you and to other savvy programmers who might
want to muck around with your code.

			-- Brad Sherman

------------------------------

End of Soft-Eng Digest
******************************
-------