Principles of Software Engineering
Mithat Konar
July 24, 2012
Adapted from
Ghezzi, Carlo, Mehdi Jazayeri, and Dino Mandrioli. “Software Engineering Principles.” In Fundamentals of Software Engineering. 2nd ed. Upper Saddle River, N.J.: Prentice Hall, 2003. 41-66.
Introduction
Motivation
Most real-world problems are:
Software engineering attempts to provide developers with strategies to manage this.
“How do you build big projects?”
Introduction
Introduction
↑
changes rapidly
changes slowly
↓
The principles
Rigor and formality
Separation of concerns
Modularity
Abstraction
Anticipation of change
Generality
Incremantality
The principles
Rigor and formality
Separation of concerns
Modularity
Abstraction
Anticipation of change
Generality
Incremantality
rigor: the quality or state of being very exact, careful, or strict.
2
formality: the highest degree of rigor
Different projects/parts require more or less rigor/formality
Tools include natural language, formal languages
The principles
Rigor and formality
Separation of concerns
Modularity
Abstraction
Anticipation of change
Generality
Incremantality
Separation of concerns
Features and responsibilities should overlap as little as possible
Minimizes interdependence
Increases resusabilty
Can be applied to product and process
Example: A lamp is not a toaster.
Changing a light bulb doesn't break toasting.
If you need a lamp someplace, you don't have to get a toaster as well.
Separation of concerns
Another example: the Web
“Web 1.0”: content, presentation, behavior comingled in same
HTML code
<a href="foo.html"
target="_foowindow"><font-face="verdana"
color="green">Click me!</font></a>
“Web 2.0+”:
Content/semantics: XHTML
-
Behavior: Javascript
-
The principles
Rigor and formality
Separation of concerns
Modularity
Abstraction
Anticipation of change
Generality
Incremantality
Modularity
Division of the system into smaller modules
Decomposition: recursively subdividing the system
“Divide and conquer”
top-down
Composition: building up from completed parts
Modularity
Benefits:
Facilitates separation of concerns
Supports anticipation of change
Enhances quality of understandability
The principles
Rigor and formality
Separation of concerns
Modularity
Abstraction
Anticipation of change
Generality
Incremantality
Abstraction
Abstraction
The principles
Rigor and formality
Separation of concerns
Modularity
Abstraction
Anticipation of change
Generality
Incremantality
Anticipation of change
The principles
Rigor and formality
Separation of concerns
Modularity
Abstraction
Anticipation of change
Generality
Incremantality
Generality
Often, a problem you work on is a more specific version of a more general problem.
Work with solution based on more general problem
If you need to invent an oxcart wheel:
General problem might be easier to solve (or not).
Supports quality of reuse
The principles
Rigor and formality
Separation of concerns
Modularity
Abstraction
Anticipation of change
Generality
Incremantality
Incremantality
Different methodologies emphasize different combinations of principles.
Conflicts among principles may arise.
Software engineering is:
Your contemplations and contributions are crucial.
Endnotes
Endnotes
~
Copyright ©2012 Mithat Konar