[comp.software-eng] Software Engineering Digest v6n15

soft-eng@MITRE.MITRE.ORG (Alok Nigam) (04/18/89)

          Software Engineering Digest     Monday, 17 Apr 1989

                          Volume 6 : Issue 15

                            Today's Topics:
                 On knowing what you are talking about
            Software Engineering Curriculum Survey (resend)
                             Lines of code
           Re: VMS vs. UNIX s/w development tools - query (U)
              Any interest in starting a CASE project? (U)
            Re: Any interest in starting a CASE project? (U)
             midway summary: the vote for comp.realtime (U)
                     object-oriented reference (U)
     COCOMO parameters based on UNIX/C development environment (U)

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

Date: Tue, 11 Apr 89 21:21 EDT
From: "Jerry Leichter (LEICHTER-JERRY@CS.YALE.EDU)"
Subject: On knowing what you are talking about

In Software Engineering Digest v6n13, G.M. Harding writes:

        The Unix convention on process-termination values [0=success, anything
        else is an error of some kind] makes a lot of sense. Think about it:
        There are many flavors of failure, but there's only one variety of
        success, namely, the complete kind.  So, the Unix shell correlates the
        process-termination value with the question: Were there errors? If the
        termination value is logically TRUE, the answer is "yes"; otherwise,
        "no."

If we are going to talk about "engineering" or "science", it would really help
to try to understand the facts.  Let's what they really are:

        - Unix doesn't give you quite the variety of return values you
                think.  For one thing, must Shells silently discard all
                but the bottom byte of a returned value.  (You have to
                search a while to find this in the documentation.)  In
                practice, few Unix programs terminate with any value other
                than 0, 1 or 2; returning anything else is likely to break
                someone's Shell script.

        - VMS does NOT consider zero/non-zero as a significant indicator
                of success.  Instead, a VMS condition value - there is a
                standardized format used all over the place in VMS - uses
                the bottom bit to indicate success or failure.  Further,
                the bottom three bits indicate severity of failure.  This
                allows you to encode such things as "failed but still may
                have produced useful results", "failed but produced no
                results", "succeeded", "succeeded with warnings", "succeeded
                with informational messages", and so on.

                The rest of a condition value specifies who issued it and,
                for values from a given entity, the particular error.

                As I noted, condition values are used EVERYWHERE in VMS.
                There is a facility, analogous to the Unix perror, which
                prints the error message associated with a condition value.
                Unlike perror, it is extendable - you can define your own
                messages and have them displayed by the built-in mechanisms.
                Also, unlike the error values returned in errno, condition
                values can reasonably be returned to DCL (analogue of the
                Shell), which will then invoke the standard routines to
                produce an error message.

        - The comment about it being "natural" to use "logically TRUE" to
                indicate that a program failed, may be fine, though perhaps
                a bit bizarre - I usually think of TRUE as meaning "OK, go
                ahead.  But that's a minor point.  What's interesting is the
                leap from that to the "obvious" conclusion that non-zero
                should mean TRUE.  Your C biases are showing, Mr. Harding!
                This happens to be the way C defines its pseudo-Boolean
                values, but it's certainly not universal.  The VMS standard,
                which makes every bit as much sense, is to say in effect
                that a Boolean is a one-bit field, set to 1 for TRUE and to
                0 for FALSE.  This one-bit field can be inserted to a larger
                datatype in the same way that, say, an (unsigned) byte is
                inserted into a long:  As the least significant bit(s).  So
                VMS defines a value as TRUE if the bottom bit is set, FALSE
                otherwise.  Again, this is a universal throughout VMS-
                specified interfaces.  It carries over to VMS implementa-
                tions of languages which don't specify the representation of
                Booleans, which, it turns out, is most of them.  In most
                VMS languages, the success of a call to a system routine can
                be tested as a simple Boolean value by an if statement.  (In
                C, this doesn't work; you have to mask off the bottom bit.)

        > File types are a problem in VMS. There are a lot of them. The
        > default type for a C program is different than the default type
        > for FORTRAN.

[These are not Mr. Harding's, but he supports them.] So?  Any program can read
ANY of the various types.  For operations that are in the common (as in
"shared", not "usual") semantics - like "get next record (line)" - programs in
any language treat all the types identically.  C programs have trouble because
they want something which is beyond the common semantics:  They want to move
around byte by byte.  There are file types which support such operations, and
there are file types that don't.

        This underscores the point I was making in my original reply to the
        fellow who asked for an OS comparison. The system has no business
        knowing (or thinking it knows) what's in my files.

This is OPINION.  It's also opinion based on a very limited background.
Unlike Unix, VMS was designed to naturally support languages other than C.
Some - COBOL, BASIC - have built-in constructs for access to things like
indexed files.  Allowing "the OS" to maintain such files ensures that they
can be accessed uniformally.  Example:  In VMS, it is possible to use the
SEARCH command on an indexed file.  What this will do is completely ignore
all the overhead and index information, and read sequentially through the
actual data, a record at a time.  What does SEARCH have to accomplish this?
Absolutely nothing!  It simply opens the file and begins sequential access
to it.  "The OS" provides the access necessary.  (If you think this is
trivial, consider that VMS supports key compression.  The records being
searched may be represented within the file in a very different form from
what SEARCH actually sees.)

Consider what grep does with a dbm file on Unix....

An example of how useful OS knowledge of the encoding used for a file is can
be seen in one case where VMS DOESN'T provide it.  FORTRAN has a notion of
"segmented" records.  Segmented records can be longer than the records in
any VMS-defined record type, so they are implemented as linked lists of OS
records.  This causes incredible pain:  Only FORTRAN programs can access files
of segmented records (unless you hack together the appropriate code yourself).
Even FORTRAN programs cannot determine for themselves that an existing file
contains segmented records:  You have to include this information in the OPEN
statement.

Now, all this may not seem like a big deal to Unix programmers, since in Unix
the code which accesses a file is always assumed to know how that file is
organized.  In VMS (and, BTW, some other OS's - most other than Unix, in fact)
the operating system gets this right by itself much of the time.

I think of VMS file types as implementing a dynamic type system, similar to
that in many programming languages (like LISP or Smalltalk).  I have some
major objections to the particular types (== programming abstractions) VMS has
chosen to provide (no Unix-like stream organization, for example); more
generally, I'd prefer the ability to extend the system.  VMS doesn't let you
do that.  I know of only one system that does:  Apollo's Aegis.  (Unfortu-
nately, this and many other good ideas in Aegis are likely to be buried in
the rush to Unix compatibility.)

                                                           When OS writers try
        to do cute things like that, they throw device independence out the
        window. (Notice that nobody has ever accused VMS of being based on the
        spirit of device independence. Ever try to mount a tape on VMS?)

This statement is so vague, and so incorrect, that it's impossible to respond
to.
                                                        -- Jerry

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

Date:     Wed, 12 Apr 89 12:53:53 PDT
From: PAAAAAR%CALSTATE.BITNET@CUNYVM.CUNY.EDU
Subject:  Software Engineering Curriculum Survey (resend)

During the last 10 years or so the "Computer Science" curriculum has
become cast in concrete. It includes - Structured Programming (Pascal),
Data Structures(using Pascal), Comaprison of Languages(Pascal<Ada),
Turing Machines, Calculus, Physics, SCience, GE, Operating systems, etc.
This curriculum is now enforced by the Computer Science Accreditation Board.
An accreditable CS BS degree does not give credit
for "language courses".

ACM/IEE recently published reports (the Denning Report) defining
"Computing as a Discipline".

There is a joint ACM/IEEE taskforce taht has listed all the
"knowledge units" that anyone taking a computer xyz degree would know
something about!

"Computer Engineering" and "Computer Information Systems" are
similarly defined and controled:
 - the first includes much Electronic Engineering,
   and the second includes Accounting and Business and probably COBOL.

I want to know what a Software Engineering BS degree would look like - a
qualification for people who don't want for a PhD in parallel computing, but
will be producing large scale software products.

I would like to here about plausible goals and objectives for a 4 yr
Software Engineering Degree - from those who are in the field.

Suppose it is 5 years in the future  - 1995.
        You have been promoted.
        You are recruiting someone to join your team of "Software Engineers".
        The applicants all have a BS in
        "Software Engineering".
    - what skills and knowledge do they ALL have?
    - what skills and knowledge do some of them have?
    - what skills and knowledge do NONE of them have?

Here is a random sample of skills that you might find:
Coding programs in:
     ADA/ALGOL/BASIC/C/C++/COBOL/csh/DBASE.n/Eiffel/Euler/FORTRAN/GAMMA/HAL/
     ICON/JAVELIN/ksh/LISP/MODULA/Natural/OBERON/PASCAL/PL1/PROLOG/POP/Qnial
     Language R /Smalltalk/SNOBOL/SQL/Turing/UFO/ Visual/Windows/ Xwindows/
     yacc/Z/...
     /All of the above
     /None of the above
Designing programs using SP/OOPS/Top-down/Bottom-Up/HOS/JSP/JSD/...
Analyse Systems/requirements using SADT/SSSA/DeMarco/JSD/SSADM/....
Rapid Prototyping
Handling EMail - efficiently, politely and skillfully
Soldering
Designing data bases
Designing Networks
Specifying/selecting/purchasing hardware/software/ADTs/Tools
Administrating a multiuser system
Systems Integration
Proving programs
Drawing DFDs/Action Diagrams/Bachman Diagrams/Flowcharts/....
Interveiwing
Using MSDOS/UNIX/OS2/PICK/VMS/JCL/MVS/MacOS/MACH/....
Handling surveys and statistics
Using shell scripts and UNIX tools (awk,sed,greps,...)
Predicting the performance of a computer system
Writing compilers
Differentiating and integrating functions of n variables
Functional Decomposition
Structured Analysis and Design
Leading a Walkthru
Debugging a program
Doing Linear Algebra
Doing simple algebra and arithmetic
Drawing graphs of functions
Being able to define and calculate -
      Entropy of data/MTBF/standard deviation/RMS/mean/median/...
Writing good English
Drawing correct circuit diagrams
Handling complex numbers
Solving ODEs
Modifying an operating system
Using a wordprocessor/spreadsheet/outliner/Database/Paint/Draw/...
Using a CASE system: Excelerator/Visible Analysts/SilverRun/....
Using a PC/PS2/Mac/Sun/DEC/CYBER/...
etc

How many "Software Engineers" should be able to do these things?
Which should NO Software Engineer waste time learning?
What have I missed?

Please send me copies of responses and I will sumarise to the net
when the flow slows down...

Dr. Richard J. Botting,
Chair, Dept of Comp Sci., Cal State U, San Bernardino, CA 92407
In Calstate:  PAAAAAR@CCS.CSUSCC.CALSTATE
On Bitnet:    paaaaar@calstate.bitnet
From Arpanet: PAAAAAR%CALSTATE.BITNET@CUNYVM.CUNY.EDU

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

Date: 16 Apr 89 10:22:00 CST
From: "DAVE ERSTAD" <derstad@cim-vax.honeywell.com>
Subject: Lines of code

Can anyone point me to public domain (or cheap) utilities which
count lines of code (NCSS) in some meaningful fashion?  I'm
interested in C, Pascal, and Ada counting.  Our primary platform
is Apollo, but if I can get a VAX or Sun widget could use that.

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

Date: 11 Apr 89 20:14:56 GMT
From: Bob Dalgleish <att!alberta!dvinci!zaphod!bobd@bloom-beacon.mit.edu>
Organization: Develcon Electronics, Saskatoon SK Canada
Subject: Re: VMS vs. UNIX s/w development tools - query (U)

The major difference between Un*x and V*S is that it is EASY to write
your own tools in Un*x.  The use of pipes means that homomorphic
transformations can be applied one after the other until you get the
desired result: read this as functional decomposition.  When pipes are
expensive, inconvenient, or awkward to use, the software developers
spend less time writing simple tools to help them in their work and
more time doing things by hand or using the supplied tools.

There is no argument that the programs available on V*S are better or
worse than those on Un*x.  The argument is whether it is easy to put
several tools together to make one that does the job that *I* want done
right now.  Remember, Man is the tool-MAKING animal.  Many other
animals use tools (birds, monkeys, otters, etc.).  Spending a small
time to put tools into one's bag of tricks makes one much more
effective as a software developer.

The shells that run on V*S cannot hide all of the differences.  The
architecture of V*S assumes monolithic applications with well-defined
interfaces that start up, run for a (relatively) long time, and get
ready for the next request; Un*x assumes small applications that come
and go as they please, creating and destroying files readily.
Consequently, Un*x shells run slowly and awkwardly, destroying any
advantage that might have been gained by making your own tools.  Any
argument that writing a C program to more efficiently do the job is
absurd; the expensive part of the process is the programmer time, not
the machine time.  It takes me 5 minutes to design, implement and test a
simple three stage shell script to do some straight-forward analysis; it
takes me one day to design, write, and test the same code in C.  With
that trade-off, which do you think I would prefer?  How about you?

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

Date: 12 Apr 89 13:11:46 GMT
From: storm development account <reign!storm@uunet.uu.net>
Organization: Softa, Washington D.C.
Subject: Any interest in starting a CASE project? (U)

        After having looked over all the low-cost CASE packages that I
could find, I haven't found one I really like.  Same with the people
that I asked.

        So...Is it time to build one and make it freely distributable
over Usenet?

        If anyone is interested, please email me.  I will be willing
to handle the co-ordination and admin side of the project.

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

Date: 14 Apr 89 16:44:23 GMT
From: David Kuder <apple!vsi1!daver!indetech!david@bloom-beacon.mit.edu>
Organization: Independence Technologies, Inc. Fremont, CA
Subject: Re: Any interest in starting a CASE project? (U)

>       If anyone is interested, please email me.  I will be willing
>to handle the co-ordination and admin side of the project.
        How do you plan to handle the co-ordination and admin without a
CASE package?

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

Date: 12 Apr 89 12:54:11 GMT
From: karl lehenbauer <texbell!sugar!ficc!karl@bellcore.bellcore.com>
Organization: Ferranti International Controls
Subject: midway summary: the vote for comp.realtime (U)

This is the midvote summary for comp.realtime.  Voting will end April
26th.

To not "bias" the "vote", I present the names of those who have voted but not
which way they voted:

Alliant.COM!cantrell (Paul Cantrell)
Atherton.COM!hpda!ericb (Eric Black)
Atherton.COM!hpda!ky (Kuang-Yi Tan)
CORNELLC.cit.cornell.edu!850181p%ACADIA.BITNET
DINO.BBN.COM!delatizk (Jonathan Delatizky)
FAS.RI.CMU.EDU!Donald.Schmitz
K.GP.CS.CMU.EDU!David.Maynard
MATHS.LTH.Se!bengt_l (Bengt Larsson)
Portia.stanford.edu!jdj (John Johnson)
SEI.CMU.EDU!mrb (Mario Barbacci)
a.cs.uiuc.edu!kenny%f.cs.uiuc.edu (Kevin Kenny)
abvax!ejp (Ed Prochak)
amdcad!neptune.AMD.COM!tom (Tom Lynch)
ames!elroy!gryphon.COM!richard (Richard Sexton)
ames!eos.arc.nasa.gov!eugene (Eugene Miya)
ames!mailrus!uflorida!novavax!weiner (Bob Weiner)
arizona!midian!ejm (E.J. McKernan)
array!rob (Rob Marchand)
atanasoff.cs.iastate.edu!kelvin (Kelvin Nilsen)
ateng!chip (Chip Salzenberg)
athens.ARPA!iex!cramer (Bill Cramer)
att.att.com!rgh%mtunf
auspex!sun!wrs!fraser!geoff (Geoff Espin)
auspex!sun!wrs!yuba!jerry (Jerry Fiddler)
bernsten@phoenix.Princeton.EDU (Dan Bernstein)
bevsun.bev.lbl.gov!lewis (Steve Lewis)
biar!trebor
bnr-fos!bnr-public!schow (Stanley Chow)
brr@marlowe.hf.intel.com (Brad Rullman)
ccird1!rlgvax!djt (Don Totten)
cfj:cfj Charles Johnson
chinet.chi.il.us!magik (Ben Liberman)
chip@vector.UUCP (Chip Rosenthal)
cmcl2.NYU.EDU!liuys (Yue-Sheng Liu)
cpswh.cps.msu.edu!enbody
cs.duke.edu!rea (Rana Ejaz Ahmed)
cs.rochester.edu!marsh
cs.utexas.edu!mok (Al Mok)
cssun.tamu.edu!venu
cup.portal.com!Orion
daisy!david (David Schachter)
ecf.toronto.edu!apollo (Vince Pugliese)
elxsi.dfrf.nasa.gov!nesel
emx.utexas.edu!nather (R. E. Nather)
eutrc3!wsinkees (Kees Huizing)
farber@dsl.cis.upenn.edu (David J. Farber)
fed!mqws2!m1swd00 (Sean Doyle)
ficc!morrison (Brad Morrison)
frog!john (John Woods)
grasp.cis.upenn.edu!king (Robert King)
hector!dsr (David S. Rosenblum)
helviti.cs.umd.edu!ogud (Olafur Gudmundsson)
hodgkin.med.upenn.edu!blackman (David Blackman)
home.csc.ti.com!jensen (John Jensen)
honda.fdi.tek.com!kyleb ("Kyle B.")
hpcsqa!johnm (John Mauzey)
hub.ucsb.edu!grosen%amadeus (Mark D. Grosen)
idacom!andrew (Andrew Scott)
jarsun1!jensen (peter jensen)
jeffd@ficc.uu.net (Jeff Daiell)
jimst@honda.fdi.tek.com (Jim Stanley)
john@jetson.UPMA.MD.US (John Owens)
juicy-juice.lcs.mit.edu!altman (Arthur Altman)
karl@ficc.uu.net (Karl Lehenbauer)
killer!mizarvme!linimon (Mark Linimon)
lexicon.com!rk
m.cs.uiuc.edu!gillies (Don Gillies)
m.cs.uiuc.edu!swami (Swaminathan Natarajan)
m2.csc.ti.com!gateley (John Gateley)
m2.csc.ti.com!mmeyer (Mark Meyer)
majestix.ida.liu.se!cajsv (Caj E Svensson)
markz@ssc.uucp (Mark Zenier)
mcc.com!rfg (Ron Guilmette)
mcvax!ibmpcug.co.uk!ronald (Ronald Khoo)
me.utoronto.ca!yap (Davin Yap)
microsoft!kevinbe (Kevin S. Berg)
microsoft!stephena (Steve Arrants)
mips.csc.ti.com!mmeyer (Mark Meyer)
n3dmc!johnl (John Limpert)
ncifcrf.gov!elsie!ado (Arthur David Olson)
nexus!dennis (Dennis Rockwell)
nluug.nl!nh20!albert (A.M.J.Hartveld)
nvpna1.prl.philips.nl!huisken (Jos Huisken)
oresoft!m2xenix!news
pcrat!rick (Rick Richardson)
phi@computer-science.strathclyde.ac.uk (Per Henning Isaksen)
philabs.Philips.Com!sxm  (Sandeep Mehta)
pixelpump.osc.edu!stein (Rick 'Transputer' Stein)
pprg.unm.edu!swilson (Scott Wilson [CHTM])
proton!muon!baumann (Michael Baumann)
ptolemy.arc.nasa.gov!raymond (Eric A. Raymond)
rayssd.RAY.COM!trr (Terry R. Raymond)
resrch.MoliEnergy.BC.CA!Robbin.W.Johnson (Robbin W. Johnson)
rickc@pogo.wv.tek.com (Rick Clements)
rja@edison.CHO.GE.COM
roope!arl (Ari Lemmke)
rose.waterloo.edu!wacfeick (Wayne Feick)
rutgers!cs.rochester.edu!moscom!adp (Alan Percy)
rutgers!ecsvax.uncecs.edu!uccjcm (John McLendon)
rutgers!eecs.nwu.edu!laidbak!katzung (Brian Katzung)
rutgers!ucf-cs.ucf.edu!tarpit!rd (Bob Thrush)
seahcx!kenh (Ken Hughes)
seismo.css.gov!raybed2!plh (Paul Hilcoff)
shakti!shri (shri)
sparrms!paul (Paul Ng)
src.honeywell.com!kan (Ling Kan)
src.honeywell.com!vestal (Steve Vestal)
strindberg.ericsson.se!howard (Howard Gayle TX/UMG)
sugar!uhnix1!moray!siswat!buck (Lester Buck)
sun!cohesive!kla!serendip!pat (Pat Lashley)
sun!elxsi!len (Len Mills)
sun!wrs!bob (Bob Cohen)
sun!wrs!kymijoki!eric (Eric Stromberg)
swan.ulowell.edu!sky!mirkin
ti-csl.csc.ti.com!gjordan (George Jordan)
topaz.rutgers.edu!msmith (Mark Robert Smith)
tymix!grimoire.Tymnet.com!mooring (Ed Mooring)
ubc-bdcvax!holm (Terrence W. Holm)
umn-cs.cs.umn.edu!haque (Samudra E. Haque)
uncecs.edu!khj (Kenneth H. Jacker)
unet!stout.UCAR.EDU!thor (Rich Neitzel)
unix.cis.pittsburgh.edu!tjw (Terry J Wood)
unmvax.cs.unm.edu!intvax!bryan
ursa-major.SPDCC.COM!eli (Steve Elias)
uvacs.cs.virginia.edu!mac (Alex Colvin)
uwmcsd4!ulowell!masscomp!twn (Thomas W. Nelson)
venera.isi.edu!cew (Craig E. Ward)
victor@concour.cs.concordia.ca (Victor Krawczuk)
walker@ficc.uu.net (Walker Mangum)
watmath.waterloo.edu!dgharriss (Dermot G. Harriss)
watmsg.waterloo.edu!dgharriss (Dermot G. Harriss)
wtwolfe@hubcap.clemson.edu (Bill Wolfe)
xenna.encore.com!pinocchio!cook (Dale C. Cook)
zaphod!bobd (Bob Dalgleish)
zip.eecs.umich.edu!dlk (Daniel L. Kiskis)

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

Date: 12 Apr 89 16:10:19 GMT
From: ken magel <cunyvm!ndsuvm1!ndsuvax!ncmagel%psuvm.BITNET@CUNYVM.CUNY.EDU>
Organization: North Dakota State University  Fargo, ND
Subject: object-oriented reference (U)

    Although it is somewhat biased, a very good presentation of the basics
of object oriented use is Object-Oriented Software Construction by Bertrand
Meyer from the Prentice Hall International Series in Computer Science.  Mr.
Meyer is the developer of Eiffel and the book does discuss object-oriented
development in terms of Eiffel, but the discussions are almost always applicable
to all other systems.  The book does seem to cover nearly all of the basic
considerations and does provide some examples.  It also discusses the
documentation problem.

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

Date: 13 Apr 89 20:34:07 GMT
From: ssc-vax!shuksan!tahoma!lrm5110@beaver.cs.washington.edu  (Larry R. Masden)
Organization: The Boeing Co., BCA FSL, Seattle, WA
Subject: COCOMO parameters based on UNIX/C development environment (U)

I appreciate all the information I recieved regarding COCOMO.  I
got a copy of the book "Software Engineering Economics" by
Barry W. Boehm and have read about the BASIC and INTERMEDIATE
modeling methods.  Now I have more questions.

My basic concern is the numeric accuracy of the parameters for use
in the UNIX / C environment.  The parameters for the formulas in
the book were developed based on information from 63 software
development projects, most of which used FORTRAN or Assembly.

Concievably, the differences between older environments and
the newer environments could be factored into the "Modern
Programming Practices" (MODP) parameter and "Use of Software
Tools" (TOOL) parameter in the INTERMEDIATE model.  However,
I was wondering if any parameter sets exist that have been
developed from UNIX / C projects.  These might provide a
better place for me to start.

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

End of Software Engineering Digest
**********************************