skip to main content
Skip header Section
Creating a software engineering cultureNovember 1996
Publisher:
  • Dorset House Publishing Co., Inc.
  • 353 West 12th Street New York, NY
  • United States
ISBN:978-0-932633-33-0
Published:01 November 1996
Pages:
358
Skip Bibliometrics Section
Bibliometrics
Abstract

No abstract available.

Cited By

  1. Cozzani G, Pozzi F, Dagnino F, Katos A and Katsouli E (2017). Innovative technologies for intangible cultural heritage education and preservation, Personal and Ubiquitous Computing, 21:2, (253-265), Online publication date: 1-Apr-2017.
  2. ACM
    Vanhatupa J Process model for rapid implementation of features using flexible architecture Proceedings of the 2015 International Conference on Software and System Process, (27-31)
  3. ACM
    Séguin N, Abran A and Dupuis R Software engineering principles Proceedings of the Third C* Conference on Computer Science and Software Engineering, (59-65)
  4. ACM
    Sicilia M (2010). How should transversal competence be introduced In computing education?, ACM SIGCSE Bulletin, 41:4, (95-98), Online publication date: 18-Jan-2010.
  5. ACM
    Isabirye N and Flowerday S A model for eliciting user requirements specific to South African rural areas Proceedings of the 2008 annual research conference of the South African Institute of Computer Scientists and Information Technologists on IT research in developing countries: riding the wave of technology, (124-130)
  6. Scott K The technical writer as software process catalyst Proceedings of IEEE professional communication society international professional communication conference and Proceedings of the 18th annual ACM international conference on Computer documentation: technology & teamwork, (269-280)
  7. ACM
    Bernecky R (1998). EGREGION, ACM SIGAPL APL Quote Quad, 29:3, (3-14), Online publication date: 1-Mar-1999.
  8. ACM
    Bernecky R EGREGION Proceedings of the APL98 conference on Array Processing Languages, (3-14)
Contributors
  • Eastman Kodak Company

Recommendations

Haim I. Kilov

This description of the experience of several software groups at Eastman Kodak can be used by software developers and first-level managers who want to create or improve a software engineering culture. There are many good books of this kind, with sound advice (against hacking, for paper prototyping, against dogmatism, for incremental changes, and so on), many bulleted lists, and even fine examples. This book also enumerates useful one-paragraph “culture builders” and “culture killers” at the end of each of its 20 chapters. Articulating this information is obviously useful. The bad news is that most of these books, including this one, could have been published in the 1970s, and the best [1,2] were. Generally, the need for a strong, solid foundation in software engineering (like the one promoted by Dijkstra) is not emphasized. Although the importance of reading and study is stressed, the author does not state that some books are better than others; references to a small set of software engineering classics would be helpful for beginners. Although the author often declares that specifications are important (for example, when he states that “it would be nice to think we are beyond the stage of `don't bother with those specifications, start writing code,' but this call of the software dinosaur still echoes throughout the land”), most actual discussions and examples are concerned with writing and debugging code. Statements such as “Great programs can't compensate for a poor system architecture” (p. 247) are not always explicitly or consistently supported throughout the book. Some of the author's advice is inconsistent with these declarations. For example, on page 242, he suggests that if the code differs from the model, then the model may be unchanged or even discarded. This will probably be appreciated by future maintainers, as the year 2000 situation clearly shows. The walkthroughs, inspections, and reviews described are mostly of code. The author does not explicitly distinguish between business (problem) and system (solution) specifications. Obviously, failure to meet requirements can be determined by testing, but the failure may be discovered too late, whereas this determination can be made by inspection and validation, despite what is said in the table on page 193. The author strongly suggests that the same people (“developers”) are doing everything, from specifications to coding, which need not be the case. Measurement of anything in lines of code is misleading. Nevertheless, despite various caveats, the author describes such measurements at length. Complexity is more important than size. Measuring reuse by the number of lines of code or object classes contributed to the reusable library (p. 115) does not help either. Although the author states that requirements should be separated from solutions, the very first “use case” example (p. 8 1) is in terms of solutions: it includes entering an order number and, generally, an interaction with the computer—not a problem specification. However, the author does not say what he means by a use case, and this approach may well correspond to one of the many definitions of this term. Precision should not be introduced only at the coding level: business and system specifications can and should be precise (although less detailed than code). Unfortunately, the author does not emphasize this, although he says that “software people are notoriously sloppy about documenting requirements” (p. 84). He also does not say what good requirements are (and are not). The semantics of a program are never explicitly specified. Requirements are not equivalent to drawings; writing and reasoning about them involves much more than adding a line to a drawing. Adding such a line takes a minute or two, but understanding where to draw it may take much longer. Similarly, the concept of good quality from the beginning—the most important factor in a project's success—is not emphasized, but the author notes that “few of us…like to draw models of systems.” (Weinberg [2] was probably not the first to observe that if the system does not do what it is supposed to do, then any other qualities, such as performance, are of no importance.) Since the author believes that “it is much more fun to write code than to write documentation” (p. 152), the good advice provided elsewhere in the book seems like lip service.

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.