[comp.software-eng] Modifiability

se90wak@cc.brunel.ac.uk (Wael A Khalil) (06/05/91)

I would like to initiate a discussion on maintainability! 
there are two main positions that people (and literature) take on how to 
produce miantainable (and modifiable) software:
	- Adopting a software development method and making sure that the
	documentation is up to date will insure that the software will
	be highly modifiable.
	- Software engineering method is not enough, there is more to it.

what do you think?
I also would like to make it clear that it is not Maintenance I'm talking about
it is enhancements, further development and re-engineering activities.

jls@netcom.COM (Jim Showalter) (06/06/91)

>I would like to initiate a discussion on maintainability! 
>there are two main positions that people (and literature) take on how to 
>produce miantainable (and modifiable) software:
>	- Adopting a software development method and making sure that the
>	documentation is up to date will insure that the software will
>	be highly modifiable.

If one adopts a software development method that is worth anything, then
one should wind up, as a consequence, with software that is maintainable
and modifiable. Another way to put this is that one of the criteria for
selecting a software development method is that the method, properly
applied, should result in software that is maintainable and modifiable.

The question then becomes: are there software development methods that
result in maintainable and modifiable software and, if so, what are
they? This question, I answer with a resounding yes: a method that stresses
architecture and design, rapid prototyping, iterative development, incremental
delivery of functionality and documentation, abstraction, and all the other
stuff that has been discussed in this group is such a method. I've seen
such a method followed in real life on real projects of significant scope
and complexity, and I've seen highly maintainable and modifiable software
result from it.
-- 
**************** JIM SHOWALTER, jls@netcom.com, (408) 243-0630 ****************
*Proven solutions to software problems. Consulting and training on all aspects*
*of software development. Management/process/methodology. Architecture/design/*
*reuse. Quality/productivity. Risk reduction. EFFECTIVE OO usage. Ada/C++.    *

fwb@pollux.tmc.edu (Fred Brehm) (06/06/91)

>>I would like to initiate a discussion on maintainability! 
>>there are two main positions that people (and literature) take on how to 
>>produce miantainable (and modifiable) software:
>>	- Adopting a software development method and making sure that the
>>	documentation is up to date will insure that the software will
>>	be highly modifiable.
>
>If one adopts a software development method that is worth anything, then
>one should wind up, as a consequence, with software that is maintainable
>and modifiable. Another way to put this is that one of the criteria for
>selecting a software development method is that the method, properly
>applied, should result in software that is maintainable and modifiable.

Don't you think the design of the software (or the whole system, only partly
software) has something to do with it too?

Will "a software development method that is worth anything" be so powerful
that it will provide the crystal ball to predict all future modification
requests?

Perhaps there are some kinds of modifications that will not be possible, or
be extremely hard, for a given system architecture.

Fred
-- 
Frederic W. Brehm	Siemens Corporate Research	Princeton, NJ
fwb@demon.siemens.com	-or-	...!princeton!siemens!demon!fwb

se90wak@cc.brunel.ac.uk (Wael A Khalil) (06/06/91)

In article <1991Jun5.201807.13286@netcom.COM> jls@netcom.COM (Jim Showalter) writes:
>.....
>The question then becomes: are there software development methods that
>result in maintainable and modifiable software ....I've seen
>such a method followed in real life on real projects of significant scope
>and complexity, and I've seen highly maintainable and modifiable software
>result from it.

I would like to learn more about such methodology, and if you (or any one else
can point out those methodologies, are they used in industry, what kind of 
application? The neture of the development infra-structure? Are there 
none-Object Oriented methods. What is the minimum support needed form the 
development environment/programming language.

 And that leads me to enquire about Object Oriented methods that are used in
practice and about practical experience in developing OO software in today's
industry.

jto@litwin.com (John O'Beck) (06/06/91)

se90wak@cc.brunel.ac.uk (Wael A Khalil) writes:


>	- Adopting a software development method and making sure that the
>	documentation is up to date will insure that the software will
>	be highly modifiable.
>	- Software engineering method is not enough, there is more to it.

Most maintenance issues go straight back to module coupling and cohesion.  
If you are designing you system using cohesive modules  that are strictly 
data coupled; you tend to maximize the amount of reusable code and minimize 
module interactions.  This makes for highly modifiable and maintainable code.
Proper implementation of a reasonable software engineering methodology will 
help you do this.

Of course no methodology can do much for you if it is not implemented 
properly.  Nothing will ever substitute for good engineering.  Any 
methodology is nothing but a miter box.  It is up to you to learn how
to cut the joints and build the cabinet.

ftower@ncar.ucar.EDU (Francis Tower) (06/07/91)

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.

jls@netcom.COM (Jim Showalter) (06/07/91)

>I would like to learn more about such methodology, and if you (or any one else
>can point out those methodologies, are they used in industry, what kind of 
>application? The neture of the development infra-structure? Are there 
>none-Object Oriented methods. What is the minimum support needed form the 
>development environment/programming language.

I have described this method elsewhere. It is not all that remarkable (people
seem to expect ACA [Another Clever Acronym] or ASB [Another Sexy Buzzword],
when all this is is the codification of common sense). Prototype. Iterate.
Embrace feedback. Focus on architecture and design--coding is trivial in
comparison. Emphasize reusability, maintainability, and line-of-business
concerns (e.g. if you build air defense systems for a living, why not
acknowledge that fact up front and build an architecture that is broadly
applicable to air defense systems?). Implement in a software-engineering-
oriented language (may I suggest Ada?). Use industrial-strength tools. Make
documentation subservient to design, not the other way around. Look for
objects and classes in the design--but don't get so carried away you wind
up torturing the language to make verbs into nouns. Tune for performance,
don't let a focus on performance distort your entire design.
-- 
**************** JIM SHOWALTER, jls@netcom.com, (408) 243-0630 ****************
*Proven solutions to software problems. Consulting and training on all aspects*
*of software development. Management/process/methodology. Architecture/design/*
*reuse. Quality/productivity. Risk reduction. EFFECTIVE OO usage. Ada/C++.    *

iverson@xstor.com (Tim Iverson) (06/07/91)

In article <2192@Terra.cc.brunel.ac.uk> se90wak@cc.brunel.ac.uk (Wael A Khalil) writes:
>I would like to initiate a discussion on maintainability! 
>there are two main positions that people (and literature) take on how to 
>produce miantainable (and modifiable) software:
>	- Adopting a software development method and making sure that the
>	documentation is up to date will insure that the software will
>	be highly modifiable.

If the method is up to snuff, rabid application of it should produce results
that are easy to modify and maintain.  It helps if those criteria
(maintainable and modifiable) are held to be more important than than other,
perhaps contradictory, criteria (such as short term results).

>	- Software engineering method is not enough, there is more to it.

My opinion is that the ability to produce lucid and concise expressions in
the written tongue used in the project (btw, this *must* be english - even
the danes don't know what P() and V() stand for :-) can add a great deal to
the effort.

The main use of a design document is to communicate your design to others.
If you are hard to understand, your design will be hard to understand and it
will be hard for others to modify.  After all, the first step in any attempt
at modification is to answer the question, "Where are we now?".  If the
answer is less than clear, it will be harder to answer the subsequent
questions of "Where do we want to be?" and "How do we get there?".

Worse, you may end up saying, "How did I get here?", "This is not my house!",
"This is not my beautiful wife!",  ...


- Tim Iverson
  iverson@xstor.com -/- uunet!xstor!iverson

jls@netcom.COM (Jim Showalter) (06/07/91)

>The main use of a design document is to communicate your design to others.
>If you are hard to understand, your design will be hard to understand and it
>will be hard for others to modify.

Einstein was fond of saying that if you can't explain to an 8 year
old what you are doing, you obviously don't know. Using this metric,
I've seen precious few design documents written by people who know
what they're building.
-- 
**************** JIM SHOWALTER, jls@netcom.com, (408) 243-0630 ****************
*Proven solutions to software problems. Consulting and training on all aspects*
*of software development. Management/process/methodology. Architecture/design/*
*reuse. Quality/productivity. Risk reduction. EFFECTIVE OO usage. Ada/C++.    *

kers@hplb.hpl.hp.com (Chris Dollin) (06/07/91)

Jim Showalter says (including lots of Good Things):

   Implement in a software-engineering-oriented language (may I suggest Ada?). 

Program design is language design. Since you'd probably like to write in a
language suitable for the domain, why not face the fact, invest in language
processing techniques, write the system in a ``suitable'' language, and compile
(not necessarily into machine code) the result?

It doesn't much matter then what language you had around to begin with,
although it's nice if you can coerce it into being a suitable compilation
target. 
--

Regards, Kers.
"If anything anyone licks, they'll find it all ready in sticks."

kers@hplb.hpl.hp.com (Chris Dollin) (06/07/91)

Jim Showalter says (in response to a posting):

   Einstein was fond of saying that if you can't explain to an 8 year
   old what you are doing, you obviously don't know. Using this metric,
   I've seen precious few design documents written by people who know
   what they're building.

Casting aside the appeal to authority, how reasonable is this test (``metric''
seems a little to overstate the case, since the only number involved is the age
``8''. Hm, another software metric - an average of the developers ages?)?

Could you explain to an 8-year-old:

    * that you're computing a transitive closure
    * that you're generating code to parse tokens froma context-free grammar
    * that you're proving that launching requires authorisation
    * that you drink beer because you *like* the taste
    * that sex is nicer than chocolate [points for identifying source]
    * that people have to lose their jobs to support the economy

``explain'', ``what you're doing'', and how you measure the success of the
explanation are all left loose here. I'd give the criterion a polite ``no'',
but admit that there's something to be learned from it.
--

Regards, Kers.
"If anything anyone licks, they'll find it all ready in sticks."

jcardow@afit.af.mil (James E. Cardow) (06/07/91)

jls@netcom.COM (Jim Showalter) writes:

>>I would like to initiate a discussion on maintainability! 
>>there are two main positions that people (and literature) take on how to 
>>produce miantainable (and modifiable) software:
>>	- Adopting a software development method and making sure that the
>>	documentation is up to date will insure that the software will
>>	be highly modifiable.

>If one adopts a software development method that is worth anything, then
>one should wind up, as a consequence, with software that is maintainable
>and modifiable. Another way to put this is that one of the criteria for
>selecting a software development method is that the method, properly
>applied, should result in software that is maintainable and modifiable.

>The question then becomes: are there software development methods that
>result in maintainable and modifiable software and, if so, what are
>they? This question, I answer with a resounding yes: a method that stresses
>architecture and design, rapid prototyping, iterative development, incremental
>delivery of functionality and documentation, abstraction, and all the other
>stuff that has been discussed in this group is such a method. I've seen
>such a method followed in real life on real projects of significant scope
>and complexity, and I've seen highly maintainable and modifiable software
>result from it.
>-- 

First off, I'm not willing to accept that this is not maintenance, I believe
this is properly preparing for maintenance (corrective and enhancement).
Second, part of the problem is "all the other stuff."  There are many things
out there that will result in *some aspect* of a more maintainable system, but
what does the compination or net effect cause.  Can I make a selection of 
these methods and still keep the quality?

I have heard about the software process and process modeling for several years.
And, to be honest, considered it to be one more be-all solution to the software
problem.  At first, I thought it was hype.  Then I saw some benefit in that it
provided a way to improve business by structure.  Then I saw it as a way to 
smartly include some things that made sense (SQA, CM, etc).  Now I realize that
it isn't a solution at all, but a good way to address that problem.  A good way
to address that problem in that I am faced with a score of solutions to each
day-to-day occurance.  Many of the solutions solving their own intended 
problem, but at the expense of many new problems.  What a process does is 
generate a framework to explore solutions in, that keeps all the pieces in a 
bundle.  So, when I look at issues like maintainability (primarily, understand-
abilit) I can look at all aspects of the process and what effect new technologies
will have.

I think a more beneficial approach to the discussion might be WHAT is Understand-ability

Or how do I guage Maintainability?

Looking forward to the discussion.

	Jim Cardow, Capt, USAF
	Air Force Institute of Technology
	Instructor in Software Engineering
	Professional Continuing Education Program
		E-mail:  jcardow@blackbird.afit.af.mil

orville@weyrich.UUCP (Orville R. Weyrich) (06/07/91)

In article <11714@ncar.ucar.edu> ftower@ncar.ucar.EDU (Francis Tower) writes:
>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.

I agree.

>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.

The problem with this is that the specification becomes to all intents and
purposes the programming language, and if Ada or C (or something else) is
later generated automatically from this specification, its just an intermediate
pass of a huge compiler.

In effect, the specification language becomes the language in which the 
source code is written.

What are the implications then of Balzer et al's paper?

1) Source languages should be more formal so that more consistency checking
   can be done. [There has been some movement in this direction. Eiffel for
   example allows assertions as part of the language. SETL provides a formal
   framework. IMHO there is progress, but a long way to go. It is not
   clear to me that many of today's programmers are willing or able to go 
   the distance here.]

2) The amount of work done prior to beginning coding should be minimized.
   [At first blush, this is contrary to conventional wisdom. But it is not
   really, if the coding environment supports stepwise refinement and 
   consistency checks along the way. Consider the use of Ada as a PDL as
   movement in this direction.]
   

--------------------------------------           ******************************
Orville R. Weyrich, Jr., Ph.D.                   Certified Systems Professional
Internet: orville%weyrich@uunet.uu.net             Weyrich Computer Consulting
Voice:    (602) 391-0821                         POB 5782, Scottsdale, AZ 85261
Fax:      (602) 391-0023                              (Yes! I'm available)
--------------------------------------           ******************************

johnson@cs.uiuc.EDU (Ralph Johnson) (06/08/91)

In article <1991Jun6.230049.19029@netcom.COM>, jls@netcom.COM (Jim Showalter) writes:
|> 
|> ... Prototype. Iterate.
|> Embrace feedback. Focus on architecture and design--coding is trivial in
|> comparison. Emphasize reusability, maintainability, and line-of-business
|> concerns (e.g. if you build air defense systems for a living, why not
|> acknowledge that fact up front and build an architecture that is broadly
|> applicable to air defense systems?).

This point of view is at the heart of the Smalltalk culture.  I think that
the reason why Jim (Objects with Ada) Showalter and Kent Beck (to pick one
example) have similar world-views has little to do with the fact that they
both call what they do "object-oriented programming".  Instead, this is the
point of view of someone who has really tried to develop reusable software.
In fact, the way I tell whether someone has had any practical experience
developing reusable software or not is whether they believe what Jim said.

Thanks for a good summary, Jim.

One of the things that I tend to emphasize is that it is impossible to
invent a general-purpose widget unless you know how to build special-purpose
ones.  Humans develop abstractions by generalizing from concrete examples.
Applied to software, this means that unless you have build some nonreusable
software in a particular application domain, you don't stand much chance of
building reusable software.  That is why iteration is so important.  People
tend to build something concrete that works, and then gradually generalize
it as it becomes obvious that it is a special case of a more general idea.

Ralph Johnson -- University of Illinois at Urbana-Champaign

jls@netcom.COM (Jim Showalter) (06/08/91)

>Could you explain to an 8-year-old:

>    * that you're computing a transitive closure
Yes.

>    * that you're generating code to parse tokens froma context-free grammar
Yes.

>    * that you're proving that launching requires authorisation
Yes.

>    * that you drink beer because you *like* the taste
No. Particularly since I'm sure I drink beer both because I like the
taste and because I like the buzz.

>    * that sex is nicer than chocolate [points for identifying source]
No. At least not legally...

>    * that people have to lose their jobs to support the economy
No. Even an 8 year old is smart enough to detect bovine scatology.
-- 
**************** JIM SHOWALTER, jls@netcom.com, (408) 243-0630 ****************
*Proven solutions to software problems. Consulting and training on all aspects*
*of software development. Management/process/methodology. Architecture/design/*
*reuse. Quality/productivity. Risk reduction. EFFECTIVE OO usage. Ada/C++.    *

jls@netcom.COM (Jim Showalter) (06/08/91)

>One of the things that I tend to emphasize is that it is impossible to
>invent a general-purpose widget unless you know how to build special-purpose
>ones.  Humans develop abstractions by generalizing from concrete examples.
>Applied to software, this means that unless you have build some nonreusable
>software in a particular application domain, you don't stand much chance of
>building reusable software.  That is why iteration is so important.  People
>tend to build something concrete that works, and then gradually generalize
>it as it becomes obvious that it is a special case of a more general idea.

Yes, you have to build one to throw
away before you can figure out how to achieve reuse. Reuse is acquired through
experience and trial-and-error. People don't like this idea, because it means
they have to PLAN to fail for a while, but the upside is that most companies
already have sufficient domain expertise (they've been doing the same kind of
thing for years) that the number of iterations necessary is fairly small.
-- 
**************** JIM SHOWALTER, jls@netcom.com, (408) 243-0630 ****************
*Proven solutions to software problems. Consulting and training on all aspects*
*of software development. Management/process/methodology. Architecture/design/*
*reuse. Quality/productivity. Risk reduction. EFFECTIVE OO usage. Ada/C++.    *

anthony@cs.uq.oz.au (Anthony Lee) (06/09/91)

In <1991Jun7.165928.1903@weyrich.UUCP> orville@weyrich.UUCP (Orville R. Weyrich) writes:

>>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.

>The problem with this is that the specification becomes to all intents and
>purposes the programming language, and if Ada or C (or something else) is
>later generated automatically from this specification, its just an intermediate
>pass of a huge compiler.

>In effect, the specification language becomes the language in which the 
>source code is written.

I disagree, there are two problems with trying modify a software from a 
natural language specification.

1. The specification is most likely to be ambigious and the 
designer of the modification has to make the best **guess**.

2. It is very difficult for the designer of the modification
to figure out the effect of his modification on the existing
software.  Formal specification is more than just a higher level
programming language.  It allows the designer of the modification
to reason about the effects of his modification on the rest of
the system.

Furthermore you have to consider that the modification could have
taken place several months after the delivery of the original
product (or even years).  How can you guarantee that the source 
code of the original product would be available.  

Even if the source code was availabe it far more difficult to analysis
for conflicting properties between existing software and new software
at the source level.

--
Anthony Lee (Michaelangelo teenage mutant ninja turtle) (Time Lord Doctor) 
email: anthony@cs.uq.oz.au			    TEL:+(61)-7-365-2697 (w)
SNAIL: Dept Comp. Science, University of Qld, St Lucia, Qld 4072, Australia

matt@bacchus.esa.oz (Matt Atterbury) (06/10/91)

In article <11714@ncar.ucar.edu> ftower@ncar.ucar.EDU (Francis Tower) writes:

   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.  ...

This classic cycle is discussed by Jonathan Grudin in April '91's
'Computer' [published by the IEEE computer society]. He puts some of
the blame for the failure of the waterfall life-cycle on the fact that
systems are now highly interactive so cannot be formally specified
properly _up-front_ [i.e. there has to be interaction between
developer and user to determine the UI, although the functionality can
be specified as long as it is not too affected by the UI].

   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. 

Jackson [JSP/JSD] also argues for "compilable designs", basically
saying that assuming one can come up with an implementation
_independent_ design, it would be logical to assume that this can then
be compiled into whatever language you like. I don't know his opinions
on compilable specifications, but IMHO, a specification cannot be
compiled precisely because it is that: a definition of what is to be
done, NOT how to do it. Can you see how to compile a VDM spec into C ?
(BTW, I cannot believe the D in VDM stands for Design! never in a
million years can a VDM spec be called a _design_ IMHO!!!!).

   The problem then of maintainability would be pushed into the specification
   phase.

Where it belongs, since assuming correctness of the implementation,
subsequent changes must be due to changes in the desired specification.

   ...

   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.

Unless you have a _compilable_ formal specification, you still have
these problems, since otherwise you haven't taken anything out of the
loop - you still have to design, code, test, debug you implementation.
--
-------------------------------------------------------------------------------
Matt Atterbury [matt@bacchus.esa.oz.au]   Expert Solutions Australia, Melbourne
UUCP: ...!uunet!munnari!matt@bacchus.esa.oz.au            "klaatu barada nikto"
  or: ...!uunet!murtoa!bacchus.esa.oz.au!matt         "consider this a divorce"
ARPA: matt%bacchus.esa.oz.AU@uunet.UU.NET  "life? don't talk to me about life!"

warack@dip.eecs.umich.edu (Christopher Warack) (06/10/91)

In article <1849@uqcspe.cs.uq.oz.au> anthony@cs.uq.oz.au writes:
>In <1991Jun7.165928.1903@weyrich.UUCP> orville@weyrich.UUCP (Orville R. Weyrich) writes:

>>The problem with this is that the specification becomes to all intents and
>>purposes the programming language, and if Ada or C (or something else) is
           ************************
>>later generated automatically from this specification, its just an intermediate
>>pass of a huge compiler.
>
>>In effect, the specification language becomes the language in which the 
>>source code is written.
>
>I disagree, there are two problems with trying modify a software from a 
>natural language specification.
>
>1. The specification is most likely to be ambigious and the 
>designer of the modification has to make the best **guess**.

I think we're seeing two ways of looking at this problem.  Yes, the spec could
be ambiguous.  I don't believe Balzer "required" full automation; programmer
interaction during the code generation phase, guided by automation, was the
plan.  But, if you take the other position that the spec is not ambiguous, then
you need something as rich as the program written in a HOL to describe it.  If
the code is not necessary, why was it in the program to begin with.

There is some amount of code "infrastructure" such as setting up the execution
environment or manually implementing high-level structures such as exceptions
that could probably be ignored in a specification.  I'd assert, however, that
more than 95% of a reasonably sized program's code is an attempt at writing
a non-ambiguous specification. 1/2 :-)

>2. It is very difficult for the designer of the modification
>to figure out the effect of his modification on the existing
>software.  Formal specification is more than just a higher level
>programming language.  It allows the designer of the modification
>to reason about the effects of his modification on the rest of
>the system.

I believe that designers of programming languages also desire this
ability...???  While simplification of a problem may make it easier
to reason about, it may also tend to hide the characteristics/
behavior that cause the problem.

>Furthermore you have to consider that the modification could have
>taken place several months after the delivery of the original
>product (or even years).  How can you guarantee that the source 
>code of the original product would be available.  

As easily as guaranteeing that the formal specification is available.

>Even if the source code was availabe it far more difficult to analysis
>for conflicting properties between existing software and new software
>at the source level.

than what?  at the object level?  Formal specification techniques of the
kind that Balzer proposed don't exist yet, so you can't mean those, can you?

-- Chris

>--
>Anthony Lee (Michaelangelo teenage mutant ninja turtle) (Time Lord Doctor) 
>email: anthony@cs.uq.oz.au			    TEL:+(61)-7-365-2697 (w)
>SNAIL: Dept Comp. Science, University of Qld, St Lucia, Qld 4072, Australia

jto@litwin.com (John O'Beck) (06/10/91)

orville@weyrich.UUCP (Orville R. Weyrich) writes:

> ...>2) The amount of work done prior to beginning coding should be minimized.
>   [At first blush, this is contrary to conventional wisdom. But it is not
>   really, if the coding environment supports stepwise refinement and 
>   consistency checks along the way. Consider the use of Ada as a PDL as
>   movement in this direction.]
>   

    How dows such a methodology allow communication between *many* programmers
    on a large project?  How are changes to be communicated to and/or
    approved by management?  Do all the bean counters need to learn Ada?
    Stepwise refinement of what?  Consistency with what?

jto@litwin.com (John O'Beck) (06/10/91)

jls@netcom.COM (Jim Showalter) writes:

  >>One of the things that I tend to emphasize is that it is impossible to
  >>invent a general-purpose widget unless you know how to build 
  >>special-purpose...

  >...Reuse is acquired through experience and trial-and-error. People don't 
  >like this idea, because it means they have to PLAN to fail for a while, 
  >but the upside is that most companies already have sufficient domain 
  >expertise ...

Any learning process is iterative.  I think the real question is: How does
an *organization* optimize the process of iteration?  How are the lessons
of trial and error communicated to newer members of the staff?  All to often
the same mistakes are repeated because junior staff members simply don't
know any better.

Formal peer review of deliverabales from each phase go along way toward
addressing this.  In most engineering disciplines reqirements, designs etc
are reviewed to the hilt.  Somehow, this seems to rarely happen with

ftower@ncar.ucar.EDU (Francis Tower) (06/10/91)

We are a long way from being able to generate code from specification languages
but we have also come a long way from hand coding in machine language.

It is possible to take a specification language and (with the help of a
domain-specific automated assistant) produce a prototype program.  This
prototype can then be deconflicted with the user.   Certainly, such a program
wouldn't be able to meet performance requirements in time and space, but it
would function.

As I mentioned before, specification languages are being used to do just this
and to gain insight into changes in the specification.  The emphasis of Formal
Methods has shifted to the area of specification because there demonstrable
progress is being made which can be transitioned to the corporate & government
world quickly (also there is more funding).

Much remains to be done in terms of going from a formal spec to an executable
program.  But the worth of using formal spec languages is being demonstrated
daily.  However, there is always a natural resistance to change, not just in
the fear of a new paradigm but also in finding/making the time to learn the
language, techniques, implementation, training of programmers,....  The old
ways work well enough and there is someone to ask questions.

True.  Software apprentices and prototypers in general do not yet exist.  But!
Specification Languages do and their use in maintanance/modification can
prevent the premature aging of code.

mattel@auto-trol.com (Matt Telles) (06/10/91)

In article <KERS.91Jun7134939@cdollin.hpl.hp.com> kers@hplb.hpl.hp.com (Chris Dollin) writes:
[ .. Some stuff deleted .. ]
>Casting aside the appeal to authority, how reasonable is this test (``metric''
>seems a little to overstate the case, since the only number involved is the age
>``8''. Hm, another software metric - an average of the developers ages?)?
>
>Could you explain to an 8-year-old:
>
>    * that you're computing a transitive closure
>    * that you're generating code to parse tokens froma context-free grammar
>    * that you're proving that launching requires authorisation
>    * that you drink beer because you *like* the taste
>    * that sex is nicer than chocolate [points for identifying source]
>    * that people have to lose their jobs to support the economy
>
>``explain'', ``what you're doing'', and how you measure the success of the
>explanation are all left loose here. I'd give the criterion a polite ``no'',
>but admit that there's something to be learned from it.
Chris,
   I don't usually post to this group, mostly because I have yet to understand
how software can be engineering .. :).
   HOWEVER .. I agree with Jim and Einstein .. you CAN explain all of the above
points to an 8 year old (Why 8?  Because younger than that they do not have the
concepts necessary to do proper comparisons).  In the newspaper business, we
were taught to write at an eight grade level.  This works well in the news
business because people do not have the time or desire to go to a dictionary for
terms they do not understand in the morning daily.  In the above points, with
the exception of "sex being nicer than chocolate"  (A Heinlein quote if I
remember right..) I would be happy to explain any of the above to ANYONE over
the age of 8.  If you can't, as Jim pointed out, you do not understand the
statement.
   Just my $.02.

Matt


-- 
==============================================================================
Matt Telles 	                 mattel@auto-trol.COM
                                 {...}ncar!ico!auto-trol!mattel
Auto-trol Technology 12500 N Washington Denver, CO 80241-2404 (303)252-2874

jls@netcom.COM (Jim Showalter) (06/11/91)

>I'd assert, however, that
>more than 95% of a reasonably sized program's code is an attempt at writing
>a non-ambiguous specification. 1/2 :-)

Excellent point, and a great way to succintly express my dissatisfaction
with formal specification languages. I have seen such languages work well
in a restricted domain (e.g. state transition tables), but in the larger
scheme of things they either wind up too specific for the general case,
or so general they are no longer concise.

I am reminded of a time when a former employer was considering changing
its method of implementing document generators from writing programs in
Ada to using a textual grammar to write "meta-documents" that would then
be compiled to Ada code via a translator. On the surface this new method
had a lot of appeal--it would eliminate the need to write Ada code just
to generate documents, it seemed like it would be an easier language to
learn because it was specialized to document generation, it was closer
to the end product (documentation) so it seemed like a more natural
mapping between the problem space and the solution space, etc etc etc.
On closer investigation, however, the scheme broke down: we kept finding
places where we would need to add more complexity to the specification
language in order to handle this or that case that had arisen in the 
course of generating documents, until the resulting grammar was nearly
as complex as Ada itself but WITHOUT a base of commercially available
parsers, formatters, editors, compilers, debuggers, etc. Yes, we considered
the hybrid strategy of providing a general grammer for 80% of the cases
with an escape-to-Ada mechanism for the trickier cases, but we realized
that this made nobody particularly happy--now the implementor was faced
with mastering TWO programming languages, plus which the onus of providing
a means of communication among the various Ada-escapes was placed on
the implementor (how, for example, do you hand global state back and
forth between separated invocations of individual Ada programs?...). In
the end, we concluded that the initial appeal of "simplicity" for the
textual strategy didn't hold up under analysis, and that sticking with
pure Ada implementation was the superior strategy.

I think there is a lesson here for anyone who wants to specify systems
in a formal language--it may well be the case that any time one wants
to formally specify a system of suitable complexity to be interesting,
the resulting specification language is itself so complex that it provides
scant improvement over English or, alternatively, the language of 
implementation itself. (There are certainly development groups I'm aware
of that use Ada as their specification and implementation language.)
-- 
**************** JIM SHOWALTER, jls@netcom.com, (408) 243-0630 ****************
*Proven solutions to software problems. Consulting and training on all aspects*
*of software development. Management/process/methodology. Architecture/design/*
*reuse. Quality/productivity. Risk reduction. EFFECTIVE OO usage. Ada/C++.    *

sophatsa@enuxha.eas.asu.edu (Peraphon Sophatsathit) (06/11/91)

In article <MATT.91Jun10135455@henry.bacchus.esa.oz>, matt@bacchus.esa.oz (Matt Atterbury) writes:

> (BTW, I cannot believe the D in VDM stands for Design! never in a
> million years can a VDM spec be called a _design_ IMHO!!!!).

	VDM stands for Vienna Development Method.

		Regards,
		  Peraphon

jls@netcom.COM (Jim Showalter) (06/11/91)

Earlier on this thread I posted a summary of a methodology that I have
seen used on real projects and that results in modifiable and reusable
code. In that posting, I said that one should tune for performance, but
not let an obsession with performance pervert the architecture. In response,
D.C.Sessions sent me some e-mail as follows (with permission to post
and comment):

>   Something doesn't sound quite right here.  While I agree that
>   microperformance is the bugaboo of small minds, I must take exception
>   with the notion that performance can IN ALL CASES be tuned in where
>   it wasn't designed in.
> 
>   Just as, in a hardware design, the basic architecture can make or break
>   a design (imagine using a Z80 for radar image analysis!), some software
>   architectural decisions can make acceptable performance impossible.  By
>   the previous analogy, once you've designed in a Z80, all the clock
>   speedups and wait-state reductions in the world won't help.

No argument. I was posting a summary, and as is the case with most summaries,
some details were excluded that definitely need to be elaborated upon in
a fuller discussion. I strongly agree that issues of macro-performance must
be taken into account when designing the architecture--my remarks about
performance tuning concern premature obsession with micro-efficiency issues
when they can have no real impact on overall system performance. At every
level of granularity of focus, from architecture down to coding individual
lines, performance should be taken into account. The trick is to make sure
that the proper KIND of performance issue is taken into account at the
appropriate time. Worrying about register allocation peculiarities of this
or that chip before you've settled on a networking scheme is silly. On the
other hand, never worrying about such issues is sloppy, unless you have
cycles to burn (and nobody ever does).

One of the reasons I'm such a strong proponent of languages and tools that
allow a rigorous specification of interfaces (at various levels of scale,
including the subsystem level) is that such interfaces tend to focus one's
attention on that which is essential at that particular level of detail.
(This is nothing radical--it's the fundamental basis for abstraction...)
-- 
**************** JIM SHOWALTER, jls@netcom.com, (408) 243-0630 ****************
*Proven solutions to software problems. Consulting and training on all aspects*
*of software development. Management/process/methodology. Architecture/design/*
*reuse. Quality/productivity. Risk reduction. EFFECTIVE OO usage. Ada/C++.    *

bowen@prg.ox.ac.uk (Jonathan Bowen) (06/11/91)

In article <1991Jun10.174641.8176@netcom.COM> jls@netcom.COM (Jim Showalter) writes:
>>I'd assert, however, that
>>more than 95% of a reasonably sized program's code is an attempt at writing
>>a non-ambiguous specification. 1/2 :-)
>
>Excellent point, and a great way to succintly express my dissatisfaction
>with formal specification languages. I have seen such languages work well
>in a restricted domain (e.g. state transition tables), but in the larger
>scheme of things they either wind up too specific for the general case,
>or so general they are no longer concise.
>
> ...
>
>I think there is a lesson here for anyone who wants to specify systems
>in a formal language--it may well be the case that any time one wants
>to formally specify a system of suitable complexity to be interesting,
>the resulting specification language is itself so complex that it provides
>scant improvement over English or, alternatively, the language of 
>implementation itself.

You might be interested in the work at IBM, Hursley Park, in the UK.
They have specified part of CICS (a commercial transaction processing
system) in the formal specification notation Z and have coded (or
recoded) 100,000+ lines of program from these specifications.  The
overall development cost and number of errors detected have been
reduced, although there are significant (one-off) educational costs to
retrain employees. See the following reference for further details:

@article{Z:Nix88,
  author = {C.J. Nix
    and B.P. Collins},
  title = {The use of Software Engineering, including the {Z} Notation,
    in the Development of {CICS}},
  journal = {Quality Assurance},
  volume = {14},
  number = {3},
  pages = {103-110},
  month = {September},
  year = {1988}
}


You should also look at the September 1990 special issue of IEEE
Software on formal methods; in particular:

@article{Z:Hall90b,
  author = {Anthony Hall},
  title = {Seven Myths of Formal methods},
  journal = {IEEE Software},
  pages = {11-19},
  month = {September},
  year = {1990},
  annote = {
    Formal methods are difficult, expensive, and not widely useful,
    detractors say. Using a case study and other real-world examples,
    this article challenges such common myths.}
}

The following myths are systematically covered:

 * Formal methods can guarantee that software is perfect.
 * They work by proving that programs are correct.
 * Only highly critical systems benefit from their use.
 * They involve complex mathematics.
 * They increase the cost of development.
 * They are incomprehensible to clients.
 * Nobody uses them for real projects.


--
Jonathan Bowen, <Jonathan.Bowen@prg.oxford.ac.uk>
Oxford University Computing Laboratory.

straub@jogger.cs.umd.edu (Pablo A. Straub) (06/11/91)

In article <1991Jun11.004620.3157@netcom.COM> Jim Showalter writes:
> [... on the problem of designing performance vs. tuning performace]
>
>One of the reasons I'm such a strong proponent of languages and tools that
>allow a rigorous specification of interfaces (at various levels of scale,
>including the subsystem level) is that such interfaces tend to focus one's
>attention on that which is essential at that particular level of detail.
>(This is nothing radical--it's the fundamental basis for abstraction...)

I agree.  Of course, the only way to specify rigorously an interface is
using a language in which both syntax and semantics are unambiguosly
specified.  That is, formal specifications are a must.

>**************** JIM SHOWALTER, jls@netcom.com, (408) 243-0630 ***************

Pablo Straub, straub@cs.umd.edu

anthony@cs.uq.oz.au (Anthony Lee) (06/12/91)

In <1991Jun10.122656.18795@zip.eecs.umich.edu> warack@dip.eecs.umich.edu (Christopher Warack) writes:

>There is some amount of code "infrastructure" such as setting up the execution
>environment or manually implementing high-level structures such as exceptions
>that could probably be ignored in a specification.  I'd assert, however, that
>more than 95% of a reasonably sized program's code is an attempt at writing
>a non-ambiguous specification. 1/2 :-)

That is true the program's code is itself a specification.  The problem
of modifiability depends on the level that we are working on.  
However if we don't deal with problem of modifiability at the specification
level then they don't go away at the implementation level.  This means
that not only do you have deal with implementation issues that will
affect modifiablity but you also have to deal with specification issues
that is being carried forward because you didn't bother with them 
at the specification level.

>I believe that designers of programming languages also desire this
>ability...???  While simplification of a problem may make it easier
>to reason about, it may also tend to hide the characteristics/
>behavior that cause the problem.

Again, I point out that modifiability problem at the high level
don't just go away at the implementation level.  If you can knock
those problems over the head at the specification level then the 
problem at the implementation level would be easilier to deal with.

>>Furthermore you have to consider that the modification could have
>>taken place several months after the delivery of the original
>>product (or even years).  How can you guarantee that the source 
>>code of the original product would be available.  

>As easily as guaranteeing that the formal specification is available.

Most companies are very reluctant to hand over code but the specification
is alway part of the contract.  In fact it is the contract. 
If we insist that the contract be written formally then we will always
have it with us. 


>>Even if the source code was availabe it far more difficult to analysis
>>for conflicting properties between existing software and new software
:>at the source level.

>than what?  at the object level?  Formal specification techniques of the
>kind that Balzer proposed don't exist yet, so you can't mean those, can you?

>-- Chris

>>--
>>Anthony Lee (Michaelangelo teenage mutant ninja turtle) (Time Lord Doctor) 
>>email: anthony@cs.uq.oz.au			    TEL:+(61)-7-365-2697 (w)
>>SNAIL: Dept Comp. Science, University of Qld, St Lucia, Qld 4072, Australia
--
Anthony Lee (Michaelangelo teenage mutant ninja turtle) (Time Lord Doctor) 
email: anthony@cs.uq.oz.au			    TEL:+(61)-7-365-2697 (w)
SNAIL: Dept Comp. Science, University of Qld, St Lucia, Qld 4072, Australia

warack@dip.eecs.umich.edu (Christopher Warack) (06/12/91)

I don't know what exactly happened here; but it's some kind of context
switch.  I thought this piece of thread had headed off into the topic of
automatic programming where the program is generated "mechanically" from
the specification.  I argued that this requires a spec to be nearly as
complex as the implementation.  Thus, eliminating real improvement over
traditional HOL implementation (except in certain well-understood
application areas).  This is NOT the spec that comes with a contract.  If
it is, why is the customer letting a contract, they've already done the
work.

I agree completely that specs should address maintainability concerns.
This issue is independent of formal/non-formal and automatic programming
arguments except to the extent that they may make it easier to specify
maintainability concerns.  I haven't seen any clear advantage in any
of them.

Furthermore, I have absolutely no qualms about the "traditional" approach
which states you should maintain your spec and design as well as your code.
Abstraction is good and should be maintained.  I also understand why this
doesn't happen all that often.  In fact, it's quite possible that formal
specs may make this easier, since one of the big problems with abstraction
maintenance is "traceability."  A good formal method should relate better
to the implementation and be more traceable.

Just trying to keep the swap space clean :-)
-- Chris

In article <1893@uqcspe.cs.uq.oz.au> anthony@cs.uq.oz.au writes:
>In <1991Jun10.122656.18795@zip.eecs.umich.edu> warack@dip.eecs.umich.edu (Christopher Warack) writes:
>
>>There is some amount of code "infrastructure" such as setting up the execution
>>environment or manually implementing high-level structures such as exceptions
>>that could probably be ignored in a specification.  I'd assert, however, that
>>more than 95% of a reasonably sized program's code is an attempt at writing
>>a non-ambiguous specification. 1/2 :-)
>
>That is true the program's code is itself a specification.  The problem
>of modifiability depends on the level that we are working on.  
>However if we don't deal with problem of modifiability at the specification
>level then they don't go away at the implementation level.  This means
>that not only do you have deal with implementation issues that will
>affect modifiablity but you also have to deal with specification issues
>that is being carried forward because you didn't bother with them 
>at the specification level.
>
>>I believe that designers of programming languages also desire this
>>ability...???  While simplification of a problem may make it easier
>>to reason about, it may also tend to hide the characteristics/
>>behavior that cause the problem.
>
>Again, I point out that modifiability problem at the high level
>don't just go away at the implementation level.  If you can knock
>those problems over the head at the specification level then the 
>problem at the implementation level would be easilier to deal with.
>
>>>Furthermore you have to consider that the modification could have
>>>taken place several months after the delivery of the original
>>>product (or even years).  How can you guarantee that the source 
>>>code of the original product would be available.  
>
>>As easily as guaranteeing that the formal specification is available.
>
>Most companies are very reluctant to hand over code but the specification
>is alway part of the contract.  In fact it is the contract. 
>If we insist that the contract be written formally then we will always
>have it with us. 
>
>
>>>Even if the source code was availabe it far more difficult to analysis
>>>for conflicting properties between existing software and new software
>:>at the source level.
>
>>than what?  at the object level?  Formal specification techniques of the
>>kind that Balzer proposed don't exist yet, so you can't mean those, can you?
>
>>-- Chris
>
>>>--
>>>Anthony Lee (Michaelangelo teenage mutant ninja turtle) (Time Lord Doctor) 
>>>email: anthony@cs.uq.oz.au			    TEL:+(61)-7-365-2697 (w)
>>>SNAIL: Dept Comp. Science, University of Qld, St Lucia, Qld 4072, Australia
>--
>Anthony Lee (Michaelangelo teenage mutant ninja turtle) (Time Lord Doctor) 
>email: anthony@cs.uq.oz.au			    TEL:+(61)-7-365-2697 (w)
>SNAIL: Dept Comp. Science, University of Qld, St Lucia, Qld 4072, Australia

mcgregor@hemlock.Atherton.COM (Scott McGregor) (06/13/91)

In article <1991Jun10.174641.8176@netcom.COM>, jls@netcom.COM (Jim
Showalter) writes:
>I'd assert, however, that
>more than 95% of a reasonably sized program's code is an attempt at writing
>a non-ambiguous specification. 1/2 :-)

> Excellent point, and a great way to succintly express my dissatisfaction
> with formal specification languages. I have seen such languages work well
> in a restricted domain (e.g. state transition tables), but in the larger
> scheme of things they either wind up too specific for the general case,
> or so general they are no longer concise...

> I think there is a lesson here for anyone who wants to specify systems
> in a formal language--it may well be the case that any time one wants
> to formally specify a system of suitable complexity to be interesting,
> the resulting specification language is itself so complex that it provides
> scant improvement over English or, alternatively, the language of 
> implementation itself. 

The flip way to look at what this might mean to formal language designers
is what Jim pointed out in the first paragraph.  Conciseness and clarity
can be critical to a new language being a significant improvement
over another language.  Scale matters: you can only see so much at
a glance, on a page, or on a monitor.  As you exceed those levels you
quickly overwhelm the user with complexity.  It takes a very clever
designer to create a new representation that is significantly more
compact in physical representation and things needing to be learned,
and yet at the same time which has enough clarity that the symbols
are easily learned, recognized, and understood in context.   There
are only a very few basic prototypical language forms in common use
today: lisp-style derivatives, algol-style derivatives, unix-command
line style derivatives, troff style markup derivatives, spreadsheet
derivatives, 4GLstyle descriptive languages, and a few iconic languages.

Far and away the most common base for new languages is the algol style.
It is not clear that this is as wise a choice as the overwhelming
preference seems to indicate--some of the other forms, or forms not yet
invented or in common use might be much better.  Rather selection of
the algol style language form may be driven by other factors such as
the availability of parsers and compiler-compiler technology for this
form (e.g. lex and yacc) and the high level of familiarity of programmers
with this style (both in day to day use, and in classes on building
compilers from school days).  Familiarity with this form and tools might
argue for its use in terms of quickest implementation, but overlooks
whether this form will be best for the task at hand.

I think this is especially important to consider this because technology has
provided reduced cost display technology with many more "degrees of freedom"
for designers than the old monochrome 80 char wide Ascii only teletypes
for which most of the above forms such as the algol style were developed.
The use of color, alternate fonts, non-character symbols, 2D and 3D spatial
locations, varying line widths, animation, etc. available on todays
monitors offers the potential for design of new languages (both
schematic and textual) which use more of these degrees of freedom to
achieve greater compactness. By and large today's designers have
ineffectually taken advantage of these
new degrees of freedom, but they do offer hope for improvements over past
results.

Scott McGregor
Atherton Technology
mcgregor@atherton.com

orville@weyrich.UUCP (Orville R. Weyrich) (06/13/91)

In article <1991Jun10.130548.13815@litwin.com> jto@litwin.com (John O'Beck) writes:
>orville@weyrich.UUCP (Orville R. Weyrich) writes:
>
>> ...>2) The amount of work done prior to beginning coding should be minimized.
>>   [At first blush, this is contrary to conventional wisdom. But it is not
>>   really, if the coding environment supports stepwise refinement and 
>>   consistency checks along the way. Consider the use of Ada as a PDL as
>>   movement in this direction.]
>>   
>
>    How dows such a methodology allow communication between *many* programmers
>    on a large project?  How are changes to be communicated to and/or
>    approved by management?  Do all the bean counters need to learn Ada?
>    Stepwise refinement of what?  Consistency with what?
>

I was commenting on Balzer et al.'s proposed paradigm for the 90's. It does
not yet exist.

Yes, communication and CM are problems. See comp.groupware and alt.hypertexxt
for discussions of this topic.

Stepwise refinement of the specification, of course. A useful formal
specification language must have some construct of the form 
	STUB(informal stuff).

INTERNAL consistency; no loose ends.



--------------------------------------           ******************************
Orville R. Weyrich, Jr., Ph.D.                   Certified Systems Professional
Internet: orville%weyrich@uunet.uu.net             Weyrich Computer Consulting
Voice:    (602) 391-0821                         POB 5782, Scottsdale, AZ 85261
Fax:      (602) 391-0023                              (Yes! I'm available)
--------------------------------------           ******************************

tsarver@andersen.uucp (Tom Sarver) (06/19/91)

In article <1991Jun12.115602.4153@zip.eecs.umich.edu> warack@dip.eecs.umich.edu (Christopher Warack) writes:
>I don't know what exactly happened here; but it's some kind of context
>switch.  I thought this piece of thread had headed off into the topic of
>automatic programming where the program is generated "mechanically" from
>the specification.  I argued that this requires a spec to be nearly as
>complex as the implementation.  Thus, eliminating real improvement over
>traditional HOL implementation (except in certain well-understood
>application areas).  This is NOT the spec that comes with a contract.  If
>it is, why is the customer letting a contract, they've already done the
>work.
>
I believe that maintenance, modifiability, and re-use are all becoming
very important to Andersen Consulting because more and more often we can't
simply install and leave.  We are getting into the systems management area
where WE are the ones left maintaining the code on behalf of the client.
We have also been selling software products, even more heavily in the last
few years, which forces us to consider maintenance.

In the past we could simply ask, "Does the system work?"  Now we must ask,
"Yes, but can it be maintained?"

>I agree completely that specs should address maintainability concerns.
>This issue is independent of formal/non-formal and automatic programming
>arguments except to the extent that they may make it easier to specify
>maintainability concerns.  I haven't seen any clear advantage in any
>of them.
>
The issues facing you when you've decided to create modifiable code are
very similar to the issues of re-use.  (The use of "component" in the rest
of this message refers to any item or set of items at any granularity.  For
example, it could be function, program, or sub-system.)  The perspective for
re-use is to take a component of an existing system (or re-use library) and
incorporate it into a new system.  When modifying a system every component
in the system *except* the component being modified is the unit of re-use.
To paraphrase, the component being modified has the potential to "re-use"
every other component in the system.  (In practice, it will be a subset.)

The issues for re-use/modification are:
   1)  You must understand the {system(modify) | unit of re-use}
   2)  You level, or granularity, of {re-use | modification} should be
	pre-determined.

Since any component can be re-used during the modification 1) must surely
hold.  It is not easily proven, but I maintain, that 2) is the key to coding
(or specifying, designing, etc 8^) a modifiable system.  One can build
components to be re-used at a given level of granularity.  For example, one
can design certain sub-components of a component to be "public," or called
by other components.  The remaining sub-components may require a certain
context, or special error checking, or prerequisite components.  There are
many ways of designing for this, but probably the most common relates to data
encapsulation.  That is, all functions act on a certain set of data.

>Furthermore, I have absolutely no qualms about the "traditional" approach
>which states you should maintain your spec and design as well as your code.
>Abstraction is good and should be maintained.  I also understand why this
>doesn't happen all that often.  In fact, it's quite possible that formal
>specs may make this easier, since one of the big problems with abstraction
>maintenance is "traceability."  A good formal method should relate better
>to the implementation and be more traceable.
>
I suggest that this is an issue of "Does the code meet the spec?"  With
formal methods the problem is reduced, but not eliminated.  The traditional
approach is expensive because developers are attempting to maintain
consistency between informal (text) or semi-formal (diagrams) documents
and a very formal document (code).

>Just trying to keep the swap space clean :-)
>-- Chris
>

-- 
--Tom Sarver
tsarver@andersen.com  Andersen Consulting  "Think straight; talk straight."
100 S. Wacker, Ste. 900, Chicago, IL  60606  (312) 507-4912
"If the Firm ever discovered my opinions, IT would summarily forget them."

scairns@zamboni..citib (Scott Cairns) (06/20/91)

In article <1991Jun7.165928.1903@weyrich.UUCP> orville@weyrich.UUCP (Orville R. Weyrich) writes:
>In article <11714@ncar.ucar.edu> ftower@ncar.ucar.EDU (Francis Tower) writes:
>>In general, the traditional waterfall life-cycle fails when maintenance is...
>>(etc.)
>
>I agree.
>
>(blah, blah, blah)
>
>--------------------------------------           ******************************
>Orville R. Weyrich, Jr., Ph.D.                   Certified Systems Professional
>Internet: orville%weyrich@uunet.uu.net             Weyrich Computer Consulting
>Fax:      (602) 391-0023                              (Yes! I'm available)
							^^^^^^^^^^^^^^^^^^

It seems to me that if this guy spent less time on the net and more on marketing
his services, he might be able to change his sig to read (NO! I'm not available!).

BTW, in New York City, a PhD and a token gets you on the #4 train.

jls@netcom.COM (Jim Showalter) (06/22/91)

scairns@zamboni..citib (Scott Cairns) writes:

>In article <1991Jun7.165928.1903@weyrich.UUCP> orville@weyrich.UUCP (Orville R. Weyrich) writes:
>>In article <11714@ncar.ucar.edu> ftower@ncar.ucar.EDU (Francis Tower) writes:
>>>In general, the traditional waterfall life-cycle fails when maintenance is...
>>>(etc.)
>>
>>I agree.
>>
>>(blah, blah, blah)
>>
>>--------------------------------------           ******************************
>>Orville R. Weyrich, Jr., Ph.D.                   Certified Systems Professional
>>Internet: orville%weyrich@uunet.uu.net             Weyrich Computer Consulting
>>Fax:      (602) 391-0023                              (Yes! I'm available)
>							^^^^^^^^^^^^^^^^^^

>It seems to me that if this guy spent less time on the net and more on marketing
>his services, he might be able to change his sig to read (NO! I'm not available!).

>BTW, in New York City, a PhD and a token gets you on the #4 train.

First of all, the simple fact is that consultants are ALWAYS available (a
little "feature" of the job I'm finding increasingly less charming the
longer I do this for a living)--even when working on a current contract
they're eyeing the next one. It's basically part-time work for high pay.

Secondly, I think this sort of flamage is totally uncalled for. As of
late, the signal to noise ratio on all three of comp.object, comp.software-eng,
and comp.lang.ada has been exceptionally good (particularly since I
gave up trying to save C hackers from perdition), and I'd like to keep
it that way. If I can learn to tone it down, ANYBODY can.
-- 
*** LIMITLESS SOFTWARE, Inc: Jim Showalter, jls@netcom.com, (408) 243-0630 ****
*Proven solutions to software problems. Consulting and training on all aspects*
*of software development. Management/process/methodology. Architecture/design/*
*reuse. Quality/productivity. Risk reduction. EFFECTIVE OO usage. Ada/C++.    *