A “Crash Course” in Software Development – Part 1
Prof David Lorge Parnas
Together with Dr. Hesham Shokry
Abstract
While the only way to learn how to develop software is to develop software, this tutorial will introduce participants to some of the capabilities that are essential for software developers. Illustrations will be provided to introduce the participants to ways that they can do their job better. The capabilities discussed are:
- Document driven distributed development
Future software will be developed by teams that are located in many countries and speak many different languages. Such projects are often hampered by communication difficulties caused by the ambiguities inherent in natural language communication. This tutorial will introduce an alternative approach. - Communicating precisely between developers and stakeholders
A document that provides a precise description of the externally visible behaviour of a proposed product can be used to communicate between developers and the future users (or their representatives). Such communication is essential if the development team is to build what the users need. The tutorial will show what such a document looks like. - Communicating precisely among developers
Modern software is built by teams. Each team member must know what behaviour is required of the module that he/she develops as well as what behaviour can be expected of modules written by other team members. This communication requires precise interface documentation. The tutorial will show what such documents look like. - Designing and maintaining multi-version software
The days when software was written, used for a short time ,and then discarded or replaced are long gone. Today’s software products must, and will, exist in many versions. The tutorial will present architectural design principles that are essential to making software that can be revised and maintained for many generations. - Software quality assurance
As our world becomes increasingly dependent on software, trustworthiness and availability become increasingly important. The tutorial will illustrate how precise documentation can be used to enhance the effectiveness of software testing and inspection.