Each team makes a 5 minute presentation of their
SRS.
Topics
Many Techniques
The newest theory is that it is best to know many ways
to design solutions to problems and to know the kinds of
problems that they work best with. For example
JSP work well when there is a well defined set of
sequential input and output streams. JSD works well when
the problem is monitoring and controlling a real system.
Transaction centered design works well when the problem
is about handling transactions. and so on.
For more see
[Jackson95c]
on requirements and specifications.
Many levels
Schach describes two levels: Architectural and detailed. In
complex software there may be many levels each designed to
use a lower level architecture.
A wise designer separates different concerns into different modules. For example handling the user is a different type of problem to sorting a set of numbers -- keep them apart. Handling a database depends on the type of database -- oracle/MSAccess/... so separate this from modeling the accountancy rules of a business.
Try to put each assumption and decision in its own special place. This makes it easy to find and easy to change. Aim for: "Don't Repeat Yourself" and "Say everything Once and Only Once" as design guides.
Client server systems in particular need a high-level architecture that splits the user interface from the business rules and the data base handling. See AmblerS96 for discussions of these architectures and also how to wrap up a data base as a set of persistent objects.
Action oriented
Not used much
Data Directed
Better than action oriented but not used much.
Object Oriented design
The dominant paradigm of the first decade of the
2nd millennium. May be overtaken by agent-oriented
programming however -- here the modules have all the properties of
objects but can negotiate their own interfaces with other modules
as they need to meet their own goals!
Schach gives 3 OOD steps. In complex software you may need the following steps,
| # | Step | Chapter in Fowler & Scott | Ideas |
|---|---|---|---|
| 1 | Interaction Diagrams. | 5 | Objects, messages, creation and deletion, lifelines, selfcalls, [conditions], * iterations, returns, ... [ uml.seq.gif ] [ uml.collab.gif ] |
| 2 | Class design | 6 | Parameters [ uml.template.gif ] , stereotypes, constraints, dependency, objects, class-wide scope, aggregation and composition, derived attributes and relations, {constraints}, {abstract}, {frozen} [ uml.find.gif ] |
| 3 | Clients and Objects | 6, 7 | dependencies, interfaces, and packages [ uml.gen.gif ] [ uml.interface.gif ] [ uml.client.gif ] |
| 4 | Design components | 10 | In complex software gather the classes into separately compiled modules with defined interfaces. |
| 5 | Deployment | 10 | Allocate components to hardware |
| 6 | Detailed Design | - | How formal? PDL? OCL? Add code to CASE tool data? |
Code generation.
Round-trip.
Metrics
Fan-in + fan-out.
Cyclomatic complexity.
Cohesion and coupling.
. . . . . . . . . ( end of section Topics) <<Contents | Index>>
Activities
See Deliverables above.
. . . . . . . . . ( end of section Outline for Class 5 on Software Engineering) <<Contents | Index>>
Next
[ Operating Systems II in index ]