Dr. Jeffery's Software Engineering Resource Page
This page stores pointers to resources of interest
to those studying software engineering.
Unified Modeling Language
Three competing object-oriented methodologists recently joined forces to
create the Unified Modeling Language (UML). UML is a diagramming notation
useful for requirements analysis and software design. It emphasizes
object modeling to identify and describe a program's data and use-case
analysis to determine a program's functionality.
On-line references to UML are available at:
-
Object Management Group's UML standards site
- We have local mirrors for the following documents as of 6 September 1998:
-
http://www.rational.com/uml/
- Rational Software's UML site
The main UML books are by Booch/Rumbaugh/Jacobson and published by Addision
Wesley. They are big and expensive reference works. Among third party UML
books, I have looked at books by authors Fowler/Scott, Ericsson/Penker,
Larman, and so far my favorite is UML Toolkit,
by Eriksson and Penker. None of these books is perfect, but
UML Toolkit gives its UML treatment a pretty reasonable
context and appropriate object-oriented underpinnings, and it
includes a demo copy of Rational Rose with UML diagramming support.
make
Make is a classic UNIX development tool. After reading the "man page" for
it, you may want to consult UNIX books for additional details. You can
also check out the free online documentation for GNU make at http://www.gnu.org/manual/make/.
CVS
The Concurrent Versions System (CVS) is a front-end for the Revision Control
System (RCS), a popular tool for tracking source changes. CVS allows
multiple people to simultaneously edit the same sources, and applies
conflict resolution algorithms to merge the resulting source changes.
A CVS white paper (12 pages) is available at
http://www.loria.fr/~molli/cvs/doc/cvs-paper.pdf
The complete reference manual (170 pages) is available at
http://www.loria.fr/~molli/cvs/doc/cvs.pdf
Capability Maturity Model
The Software Engineering Institute at Carnegie Mellon University has
published a guide for "customers" such as the DOD to use in evaluating
developers of software. The Capability Maturity Model (CMM) defines
practices that characterize an organization's ability to develop software
from an engineering (repeatable, documented process) perspective.
The on-line references to the CMM are available at:
-
www.sei.cmu.edu/pub/documents/93.reports/pdf/tr24.93.pdf
- This is the main CMM specification, version 1.1; it is 80 pages.
-
www.sei.cmu.edu/pub/documents/93.reports/pdf/tr25.93.pdf
-
Key Practices of the Capability Maturity Model Version 1.1, a 500-page
elaboration of what is meant in the CMM document.
-
www.sei.cmu.edu/pub/documents/94.reports/pdf/sr07.94.pdf
-
Maturity Questionnaire, a 57-page inquiry into current software processes
in order to evaluate an organization's maturity as defined by the CMM.
Literate Programming
Literate Programming is the art of writing a single document that serves
both as a program that the computer can run and the documentation of that
program for humans. It was popularized by the legendary Donald Knuth,
who wrote several components of the TeX typesetting program in a literate
style and published them in book form.
Today, literate programming is practiced mainly by visionaries and radicals,
but it is slowly becoming recognized as an ultimate means of providing
program documentation for use by subsequent program maintainers.
One of the most popular literate programming tools is Noweb, by
Norman Ramsey. It is simple and language-independent, which makes it
adaptable to most software development environments. Noweb has been
widely ported and is in wide use.
Design Patterns
Design Patterns describe commonly re-used components of software designs.
The analogy is to architecture, where patterns have been used to improve
the re-usability of standard building materials and techniques. Design
Patterns establish a common vocabulary among software engineers. The
most famous book on Design Patterns is by Erich Gamma, Richard Helm,
Ralph Johnson, and John Vlissides.
A design pattern typically includes an extended prose definition of the
problem that the pattern addresses, examples of its use, and an object
model diagram that describes the relationships and interactions between
components involved in the solution.
Some design patterns revolve around the creation of object instances,
while others provide solutions to common data structures and algorithms.
Design patterns are typically "meta-structures" or "meta-algorithms";
they reside one level of abstraction away from the actual code, and point
programmers in the direction of appropriate data structures or algorithms
for particular problems.