Software projects are often too large for any one person to understand completely.
Developing Products requires much more effort than building Programs:
-
Commercial products are much larger than academic projects, entailing perhaps 1 million SLOCs in 1 thousand packages.
Many commercial and industrial software systems are much larger than even this.
-
Commercial products require more documentation, more testing, and much more communication within large development teams.
-
Abstraction is essential: Concepts, Diagrams, Packages, Prototypes
No one can understand a system of 1 million SLOCs by looking at its source code alone. We need to build models based
on standard diagramming techniques, e.g., Universal Modeling Language (UML), figure out how to critically analyze and
evaluate the packages that make up this product and the structure that results from tying those packages together
in an operational system.
-
Software reuse is important.
Reuse means to use packages without changing any of their text.
Compiler libraries are a good example.
But we need to design our own code for reuse where that makes sense. We don't want to have to create 1,000 packages.
The C# language and .Net framework were designed to support reuse and we will examine how to tap into that support.
-
Software salvage is important.
Salvage means that we start with existing packages and extend them with additional packages,
or modify them, as little as possible, to suit a new application.
Salvage is harder to do gracefully than reuse. We've explored one elegant way to support salvage in our
research, using a technology we call Software Matrix.
We will spend a lot of our time learning how to develop, analyze, and manage large distributed software systems. The Final Project
will have you develop the architecture and implement a prototype for one of these.