System Sub-System Unit Component


Notes on the Design

System contains many sub-systems. System is an independent entity. It is everything put together.

Sub-System can consists of many units or modules.

Software Architecture is the bigger picture. It is the highest level of view or abstraction. MVC or Layered Architecture are some examples.

Software design is the smaller picture. It is the design of individual modules. Often represented in UML. They adhere to design patterns.

Consequences of the design on the architecture:
If software design handles the internal implementation it has no effect. The design of interfaces has external significance and can affect the overall architecture.

Inside out approach:
This approach identifies core competencies of the organization & its people and then builds on it.

Outside in approach:
This approach identifies what the customer wants and then goes towards it.

Detailed design vs Continuous design
Detailed design fits in the classic waterfall model. Its also a top down approach. Sub-system, units, interfaces between them and deployment are well identified and documented.

Continuous design is a bottom up approach. Evolving software is refactored. This is an outcome of extreme programming and Agile methodologies.

Functional vs Non-Functional


Functional is the What (FR)
Non-Functional is the How (NFR)

The behavior is the What
The metrics is the How

Functional deals with features
Non-functional deal with the constraints

UML
Functional depicted in Use Cases
Non-Functional no specific UML diagram

Some of non-functional requirements are:
Safety
Security
Privacy
Reliability
Response times