century:principles_of_software_engineering
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
century:principles_of_software_engineering [2012/07/23 15:49] – [Incremantality] mithat | century:principles_of_software_engineering [2012/07/25 16:00] – [Modularity] mithat | ||
---|---|---|---|
Line 2: | Line 2: | ||
====== Principles of Software Engineering ====== | ====== Principles of Software Engineering ====== | ||
- | Mithat Konar | + | Mithat Konar\\ |
+ | July 24, 2012 | ||
===== Adapted from ===== | ===== Adapted from ===== | ||
- | + | [[http:// | |
- | * Ghezzi, Carlo, Mehdi Jazayeri, and Dino Mandrioli. " | + | |
===== Introduction ===== | ===== Introduction ===== | ||
Line 12: | Line 12: | ||
* Most real-world problems are: | * Most real-world problems are: | ||
* Complex, difficult to decompose | * Complex, difficult to decompose | ||
- | * Involve a number of developers | + | * Involve a number of developers |
* Evolve over time | * Evolve over time | ||
* Software engineering attempts to provide developers with strategies to manage this. | * Software engineering attempts to provide developers with strategies to manage this. | ||
Line 19: | Line 19: | ||
===== Introduction ===== | ===== Introduction ===== | ||
* // | * // | ||
- | * // | + | * // |
- | * Both are important. | + | * Both are important |
===== Introduction ===== | ===== Introduction ===== | ||
- | {{: | + | {{: |
- | Principles -> methods and techniques -> methodologies -> tools | + | \\ |
+ | | ||
+ | | ||
+ | | ||
+ | ↓ | ||
===== The principles ===== | ===== The principles ===== | ||
* Rigor and formality | * Rigor and formality | ||
+ | * Separation of concerns | ||
* Modularity | * Modularity | ||
+ | * Abstraction | ||
+ | * Anticipation of change | ||
+ | * Generality | ||
+ | * Incremantality | ||
+ | |||
+ | ===== The principles ===== | ||
+ | * **Rigor and formality** | ||
* Separation of concerns | * Separation of concerns | ||
+ | * Modularity | ||
* Abstraction | * Abstraction | ||
* Anticipation of change | * Anticipation of change | ||
Line 36: | Line 49: | ||
===== Rigor and formality ===== | ===== Rigor and formality ===== | ||
- | * **rigor**: the quality or state of being very exact, careful, or strict((http:// | + | * **rigor**: the quality or state of being very exact, careful, or strict.< |
* **formality**: | * **formality**: | ||
* Often based on mathematical/ | * Often based on mathematical/ | ||
- | * Tools include natural language, formal languages | ||
* Different projects/ | * Different projects/ | ||
* High criticallity -> high rigor/ | * High criticallity -> high rigor/ | ||
- | | + | |
===== Rigor and formality ===== | ===== Rigor and formality ===== | ||
- | * Impacts | + | * Impacts |
* reliability | * reliability | ||
* verifiability | * verifiability | ||
Line 52: | Line 65: | ||
* understandability | * understandability | ||
* interoperability | * interoperability | ||
- | | + | |
+ | |||
+ | ===== The principles ===== | ||
+ | * Rigor and formality | ||
+ | * **Separation of concerns** | ||
+ | * Modularity | ||
+ | * Abstraction | ||
+ | * Anticipation of change | ||
+ | * Generality | ||
+ | * Incremantality | ||
===== Separation of concerns ===== | ===== Separation of concerns ===== | ||
- | * Features and responsibilities should overlap as little as possible. | + | * Features and responsibilities should overlap as little as possible |
* Minimizes interdependence | * Minimizes interdependence | ||
* Increases resusabilty | * Increases resusabilty | ||
Line 65: | Line 87: | ||
===== Separation of concerns ===== | ===== Separation of concerns ===== | ||
* Another example: the Web | * Another example: the Web | ||
- | * "Web 1.0": content, presentation, | + | * "Web 1.0": content, presentation, |
- | | + | target=" |
- | target=" | + | color=" |
* "Web 2.0+": | * "Web 2.0+": | ||
* Content/ | * Content/ | ||
* Presentation: | * Presentation: | ||
* Behavior: Javascript | * Behavior: Javascript | ||
- | * [[century:separation of concerns example|code]] | + | * [[separation of concerns example|example |
+ | |||
+ | ===== The principles ===== | ||
+ | * Rigor and formality | ||
+ | * Separation of concerns | ||
+ | * **Modularity** | ||
+ | * Abstraction | ||
+ | * Anticipation of change | ||
+ | * Generality | ||
+ | * Incremantality | ||
===== Modularity ===== | ===== Modularity ===== | ||
- | * Divide | + | * Division of the system into smaller //modules// |
- | * Typically results it a tree of modules and submodules | + | |
* // | * // | ||
* " | * " | ||
Line 85: | Line 115: | ||
===== Modularity ===== | ===== Modularity ===== | ||
- | * Benefits | + | * Benefits: |
* Facilitates **separation of concerns** | * Facilitates **separation of concerns** | ||
* Supports **anticipation of change** | * Supports **anticipation of change** | ||
* Enhances quality of // | * Enhances quality of // | ||
+ | |||
+ | ===== The principles ===== | ||
+ | * Rigor and formality | ||
+ | * Separation of concerns | ||
+ | * Modularity | ||
+ | * **Abstraction** | ||
+ | * Anticipation of change | ||
+ | * Generality | ||
+ | * Incremantality | ||
===== Abstraction ===== | ===== Abstraction ===== | ||
- | * FIXME Abstraction in general use means the act or process | + | * In general use: considering something |
- | * In S/W Engineering, abstraction means wrapping a concept such that it: | + | * In S/W Engineering: wrapping a concept such that it: |
- | * Expresses the concept only in terms of what is relevant. | + | * Expresses the concept only in terms of what is relevant |
- | * Shields the user from everything that's not relevant. | + | * Shields the user from everything that's not relevant |
* (i.e., building models) | * (i.e., building models) | ||
* Examples: | * Examples: | ||
Line 109: | Line 148: | ||
* Programming process | * Programming process | ||
* ... | * ... | ||
+ | |||
+ | ===== The principles ===== | ||
+ | * Rigor and formality | ||
+ | * Separation of concerns | ||
+ | * Modularity | ||
+ | * Abstraction | ||
+ | * **Anticipation of change** | ||
+ | * Generality | ||
+ | * Incremantality | ||
===== Anticipation of change ===== | ===== Anticipation of change ===== | ||
Line 115: | Line 163: | ||
* after release. | * after release. | ||
* Process and code should be designed to support evolution. | * Process and code should be designed to support evolution. | ||
+ | |||
+ | ===== The principles ===== | ||
+ | * Rigor and formality | ||
+ | * Separation of concerns | ||
+ | * Modularity | ||
+ | * Abstraction | ||
+ | * Anticipation of change | ||
+ | * **Generality** | ||
+ | * Incremantality | ||
===== Generality ===== | ===== Generality ===== | ||
* Often, a problem you work on is a more specific version of a more general problem. | * Often, a problem you work on is a more specific version of a more general problem. | ||
- | * Work with solution based on more general problem. | + | * Work with solution based on more general problem |
- | * If you need to invent an oxcart wheel, first invent | + | * If you need to invent an oxcart wheel: |
- | * Don't re-invent the wheel if you don't need to. | + | * Invent |
- | * General problem might be easier to solve (or not). | + | * Don't re-invent the wheel in the first place. |
- | * Supports quality of reuse. | + | * 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 ===== | ===== Incremantality ===== | ||
- | *//[[http:// | + | *//A journey of a thousand miles begins with a single step.// |
- | * Development proceeds in a stepwise fashion (i.e., in // | + | * Development proceeds in a stepwise fashion (i.e., in // |
- | * Strategies: | + | * " |
* Deliver subsets of a system early to get early feedback | * Deliver subsets of a system early to get early feedback | ||
* Deliver prototype of the system and incrementally add effort to turn it into product | * Deliver prototype of the system and incrementally add effort to turn it into product | ||
* Implement functionality, | * Implement functionality, | ||
- | * " | ||
* Supports **anticipation of change** | * Supports **anticipation of change** | ||
* Example: [[http:// | * Example: [[http:// | ||
+ | | ||
===== Concluding remarks ===== | ===== Concluding remarks ===== | ||
- | * Different methodologies emphasize different combinations of principles | + | * Different methodologies emphasize different combinations of principles. |
* Conflicts among principles may arise. | * Conflicts among principles may arise. | ||
- | * New field and subject to change. | + | * Software engineering is: |
- | * Made by humans for humans. | + | * a new field and subject to change. |
- | * Your contemplations and considerations | + | * made by humans for humans. |
+ | * Your contemplations and contributions | ||
===== Endnotes ===== | ===== Endnotes ===== | ||
- | < | + | < |
- | <sup>2</ | + | |
+ | < | ||
+ | |||
+ | ===== Endnotes ===== | ||
+ | < | ||
+ | |||
+ | <sup>4</ | ||
- | This content is Copyright | + | ===== ~ ===== |
+ | Copyright | ||
century/principles_of_software_engineering.txt · Last modified: 2012/07/25 16:07 by mithat