2. What is all this stuff?!
K.I.S.S
.
Information
hiding
3. What is software design?
“[...] software design means the
conception, invention, or
contrivance of a scheme for
turning a specification for a
computer program into an
operational program.”
- Steve McConnell,
Code Complete (2004)
4. Programmer's approach to software engineering
Skip requirements engineering and design phases;
START WRITING CODE!!
●
We need to show something to the customer real quick.
●
We are judged by the amount of LOC/month.
●
We expect or know that the schedule is too tight.
●
Design is a waste of time.
5. Architect's approach to software engineering
Don't write a single line of code until analysis and design
phases are over;
I WANT TO SEE UML DIAGRAMS FIRST!!
●
Implementation is a peace of cake after UML diagrams are done.
●
We can not fail if complete system design is ready first.
6. Software development is a “wicked” problem
●
It is nondeterministic (There is no definite formulation).
●
There is no stopping rule.
●
Solutions are not true-or-false, but good or bad.
●
It is a sloppy process.
●
It is a heuristic process (trial-and-error).
●
It is about tradeoffs and priorities.
●
It involves restrictions.
●
It is emergent.
7. Where is the design?
Technical specifications documents?
UML diagrams document?
8. Some thing are better done than described
“[...] you should tend to view
requirements gathering, design
and implementation as different
facets of the same process – the
delivery of a quality system.”
- Andrew Hunt,
The pragmatic programmer (2000)
10. Where is the design?
“Martin’s First Law of
Documentation: Produce no
document unless its need is
immediate and significant.”
- Robert Martin,
Agile Software Development (2002)
11. Where is the design?
“[...] the design of a
software project is
documented primarily by
its source code.”
- Robert Martin,
Agile Software Development (2002)
12. Where is the design?
“The source code
IS the design!”
- Jack Reeves,
What is software design? (1992)
13. Separation of Concerns
“no one’s skull is really big enough to contain a modern
computer program.” - Dijkstra (1972)
Don't let plumbing code pollute your software.
16. High Cohesion
“Cohesion is a measure of the strength of association of the
elements inside a module.” - Tom DeMarco (1979)
What about doing just one thing and do it well?!
17. Low Coupling
“[...]; It is a measure of the strength of interconnection.”
- Structured Design, Edward Yourdon (1979)
43. Design patterns
●
Provides solution to a recurring problem.
●
Documents well-prove design experience.
●
Abstraction above the level of a single component.
●
Provides common vocabulary and understanding.
●
Are a means of documentation.
●
Supports construction of software with defined properties.