CH 01 Lect 1
CH 01 Lect 1
A Physician, a Civil Engineer and a Computer Scientist were arguing
about what was the oldest profession in the world.
The Physician remarked,
"Well, in the Bible, it says that God created Eve from a rib taken out of Adam.
This clearly requires surgery, and so I can rightly claim that mine is the oldest
profession in the world."
The Civil Engineer interrupted, and said,
" But even earlier in the book of Genesis, it states that God created the order of
the heavens and the earth from out of the chaos. This was the first and certainly
the most spectacular application of civil engineering. Therefore, fair doctor,
you are wrong; mine is the oldest profession in the world.“
The Computer Scientist leaned back in the chair, smiled and
then said confidently,
"Ah, but what do you think created the chaos ? "
Appreciate Software Engineering:
Build complex software systems in the context of frequent change
Understand how to
produce a high quality software system within time
while dealing with complexity and change
Acquire technical knowledge (main emphasis)
Acquire managerial knowledge
Understand the Software Lifecycle
Process vs Product
Learn about different software lifecycles
Greenfield Engineering – from scratch,
Interface Engineering – a kind of Reengineering for legacy systems,
Reengineering – [Hammer & Champy, 1993]
Brugge’s
Learn about modeling at different phases of software lifecycle:
Requirements Elicitation [Chap. 4] – Deliverable 1
(Requirements) Analysis* [Chap 5] Deliverable 2
Architectural Design [Chap 6 & 7] Deliverable 3
Object/Component Design [Chap 8] Deliverable 4
Coding [Chap 10] Deliverable 5
Testing [Chap 11] Deliverable 6
(during demo)
* An old school of thought mixing the domain model with the solution model, being designoriented, and in a
Waterfall fashion.
Learn about Traceability among Models
Learn how to use Tools: CASE (Computer Aided Software Engineering)
e.g., Rational Rose
Bernd Bruegge & Allen H. Dutoit ObjectOriented Software Engineering: Using UML, Patterns, and Java 4
Readings
Required:
Bernd Bruegge, Allen Dutoit: “ObjectOriented Software
Engineering: Using UML, Patterns, and Java”, Prentice Hall, 2003.
Recommended:
Applying UML and Patterns: An Introduction to ObjectOriented An
alysis and Design and the Unified Process, 2nd ed., C. Larman
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides:
“Design Patterns”, AddisonWesley, 1996.
Grady Booch, James Rumbaugh, Ivar Jacobson, “The Unified
Modeling Language User Guide”, Addison Wesley, 1999.
K. Popper, “Objective Knowledge, an Evolutionary Approach,
Oxford Press, 1979.
Additional books may be recommended during individuals lectures
Lecture Notes will adapt Bruegge’s,
Lecture Notes will adapt Bruegge’s,
but with additional points and questions
but with additional points and questions
possibly from very different perspectives.
possibly from very different perspectives.
Bernd Bruegge & Allen H. Dutoit ObjectOriented Software Engineering: Using UML, Patterns, and Java 5
Outline of Today’s Lecture
Software Engineering – Why, What and How?
Modeling complex systems
Functional vs. objectoriented decomposition
Software Lifecycle Modeling
Reuse:
Design Patterns
Frameworks
Concluding remarks
Used as delivered
2%
Usable w. rework Paid for, but
3% not delivered
Used w. extensive rework, 30%
but later abandoned
20%
Take a look at the Standish Report (The “Chaos” Report)
Take a look at the Standish Report (The “Chaos” Report)
Bernd Bruegge & Allen H. Dutoit ObjectOriented Software Engineering: Using UML, Patterns, and Java 7
Software Engineering: A Problem Solving Activity
Analysis: Understand the nature of the problem and break the
problem into pieces
Synthesis: Put the pieces together into a large structure
For problem solving we use
Techniques (methods):
Formal procedures for producing results using some welldefined
notation
Methodologies:
Collection of techniques applied across software development and
unified by a philosophical approach
Tools:
Instrument or automated systems to accomplish a technique
Isn’t there something more fundamental than problem “solving”?
Bernd Bruegge & Allen H. Dutoit
ObjectOriented Software Engineering: Using UML, Patterns, and Java 8
Software Engineering: Definition
Software Engineering is a collection of techniques,
methodologies and tools that help
with the production of
a high quality software system
with a given budget
before a given deadline
while change occurs.
Computer Scientist
Proves theorems about algorithms, designs languages, defines
knowledge representation schemes
Has infinite time…
Engineer
Develops a solution for an applicationspecific problem for a client
Uses computers & languages, tools, techniques and methods
Software Engineer
Works in multiple application domains
Has only 3 months...
…while changes occurs in requirements and available technology
Isn’t there something more fundamental about “Software” Engineer?
Complexity:
The system is so complex that no single programmer can understand it
anymore
The introduction of one bug fix causes another bug
Change:
The “Entropy” of a software system increases with each change: Each
implemented change erodes the structure of the system which makes the
next change even more expensive (“Second Law of Software
Dynamics”).
As time goes on, the cost to implement a change will be too high, and
the system will then be unable to support its intended task. This is true
of all systems, independent of their application domain or technological
base.
What is this?
Problem Statement : A stock exchange lists many companies.
Each company is identified by a ticker symbol
Analysis phase results in object model (UML Class Diagram):
StockExchange * * Company
Lists tickerSymbol
public Vector m_Company = new Vector(); Where is the design, then?
};
public class Company
{
public int m_tickerSymbol
public Vector m_StockExchange = new Vector();
};
A good software engineer writes as little code as possible
A good software engineer writes as little code as possible
Bernd Bruegge & Allen H. Dutoit ObjectOriented Software Engineering: Using UML, Patterns, and Java 17
Example of an Issue: Galileo vs the Church
What is the center of the Universe?
Church: The earth is the center of the universe. Why? Aristotle
says so.
Galileo: The sun is the center of the universe. Why? Copernicus
says so. Also, the Jupiter’s moons rotate round Jupiter, not around
Earth.
Proposal1: Proposal2:
The earth! The sun!
Pro: Pro:
Aristotle Con: Copernicus
says so. Jupiter’s moons rotate says so.
around Jupiter, not
around Earth.
Pro:
Change will disturb
the people. Anything missing?
Anything missing?
Bernd Bruegge & Allen H. Dutoit ObjectOriented Software Engineering: Using UML, Patterns, and Java 19
1. Abstraction
2. Decomposition 2. Decomposition
3. Hierarchy
A technique used to master complexity (“divide and conquer”)
Functional decomposition
The system is decomposed into modules
Each module is a major processing step (function) in the
application domain
Modules can be decomposed into smaller modules
Objectoriented decomposition
The system is decomposed into classes (“objects”)
Each class is a major abstraction in the application domain
Classes can be decomposed into smaller classes
Which decomposition is the right one?
Bernd Bruegge & Allen H. Dutoit ObjectOriented Software Engineering: Using UML, Patterns, and Java 20
Functional Decomposition
System
Top Level functions
Function
Produce
Read Input Transform Level 1 functions
Output
Produce Level 2 functions
Read Input Transform
Output
Is this about the requirements or a design?
Bernd Bruegge & Allen H. Dutoit ObjectOriented Software Engineering: Using UML, Patterns, and Java 21
Functional Decomposition
Functionality is spread all over the system
Maintainer must understand the whole system to make a single
change to the system
Consequence:
Codes are hard to understand
Code that is complex and impossible to maintain
User interface is often awkward and nonintuitive
Example: Microsoft Powerpoint’s Autoshapes
How is this different from OO?
How are FunctionallyOriented systems different from OO systems?
Bernd Bruegge & Allen H. Dutoit ObjectOriented Software Engineering: Using UML, Patterns, and Java 23
OODecomposition Class Identification
Class identification is crucial to objectoriented modeling
Basic assumption:
1. We can find the classes for a new software system: We call this
Greenfield Engineering
2. We can identify the classes in an existing system: We call this
Reengineering
3. We can create a classbased interface to any system: We call this
Interface Engineering
Why can we do this? Philosophy, science, experimental
evidence
What are the limitations? Depending on the purpose of the
system different objects might be found
How can we identify the purpose of a system?
Then, depending on the purpose, could a functional decomposition be better than an OO decomposition?
Which is UML for, functional or OOdecomposition?
Bernd Bruegge & Allen H. Dutoit ObjectOriented Software Engineering: Using UML, Patterns, and Java 24
Model of an Eskimo
Eskimo
Size
Dress()
Smile()
Sleep()
Shoe
* Coat
Size Size
Color Color
Type Type
Wear() Wear()
*
Entrance
Windhole MainEntrance
Diameter Size
but is it the right model?
Bernd Bruegge & Allen H. Dutoit ObjectOriented Software Engineering: Using UML, Patterns, and Java 26
Alternative Model: The Head of an Indian
Indian
Hair
Dress()
Smile()
Sleep()
Face Mouth
Ear Nose NrOfTeeths
Size * smile() Size
open()
listen() close_eye()
speak()
2 important hierarchies
"Part of" hierarchy
"Iskindof" hierarchy
Computer
Cell
Any issue?
Three ways to deal with complexity:
Abstraction
Decomposition
Hierarchy
Objectoriented decomposition is a good methodology
Unfortunately, depending on the purpose of the system, different
objects can be found
How can we do it right?
Many different possibilities
Our current approach: Start with a description of the functionality
(Use case model), then proceed to the object model
This leads us to the software lifecycle
*An old school of thought mixing the domain model with the solution model, being designoriented, and in a Waterfall fashion.
Software lifecycle:
Set of activities and their relationships to each other to support the
development of a software system
Typical Lifecycle questions:
Which activities should I select for the software project?
What are the dependencies between activities?
How should I schedule the activities?
Implemente
Expressed in d
Structured Realized By By
Terms Of By Verified
By
class...
class...
class... ?
class....?
Use Case Application Solution
Domain SubSystems Source Test
Model Domain
Objects Code Cases
Objects
Design Pattern:
A small set of classes that provide a template solution to a recurring
design problem
Reusable design knowledge on a higher level than data structures
(link lists, binary trees, etc)
Framework:
A moderately large set of classes that collaborate to carry out a set
of responsibilities in an application domain.
Examples: User Interface Builder
Provide architectural guidance during the design phase
Provide a foundation for software components industry
Software engineering is a problem solving activity
Developing quality software for a complex problem within a limited
time while things are changing
There are many ways to deal with complexity
Modeling, decomposition, abstraction, hierarchy
Issue models: Show the negotiation aspects
System models: Show the technical aspects
Task models: Show the project management aspects
Use Patterns: Reduce complexity even further
Many ways to deal with change
Tailor the software lifecycle to deal with changing project conditions
Use a nonlinear software lifecycle to deal with changing
requirements or changing technology
Provide configuration management to deal with changing entities
Take a look at the Standish Report (The “Chaos” Report)
Take a look at the Standish Report (The “Chaos” Report)
Bernd Bruegge & Allen H. Dutoit ObjectOriented Software Engineering: Using UML, Patterns, and Java 37
Reusability
A good software design solves a specific problem but is
general enough to address future problems (for example,
changing requirements)
Experts do not solve every problem from first principles
They reuse solutions that have worked for them in the past
Goal for the software engineer:
Design the software to be reusable across application domains and
designs
How?
Use design patterns and frameworks whenever possible
Chess Master: Software Engineer
Openings Composite Pattern: A collection
Middle games of objects needs to be treated
like a single object
End games
Adapter Pattern (Wrapper):
Writer Interface to an existing system
Tragically Flawed Hero Bridge Pattern: Interface to an
(Macbeth, Hamlet) existing system, but allow it to
Romantic Novel be extensible
User Manual
Architect
Office Building
Commercial Building
Private Home