Software Engineering
Jon Walker
What is Software Engineering?
Why do we call it Software Engineering? Why not just call it programming or software development?
What is Software Engineering? A Process, a set of methods, and an array of tools - Pressman Applying a disciplined practice to the construction of software?
Modeling Problem-solving Knowledge acquisition - domain specific knowledge Rationale-driven
NATO study group in 1967 Compared to traditional engineering disciplines e.g. bridge building (structural engineering)
The Software Crisis
How is building software different from building a bridge? Complexity Fault tolerance Maintenance
How is software different from other things people build? Software is developed or engineered not manufactured Software doesn't wear out Most software is still custom built
The "Software Crisis" Software delivered late Software delivered over budget Software has critical defects
X-Ray - control bug War games - simulation Patriot missile - timing problem
The bottom line - Machines are getting more complex, software is getting more complex
Software economics
Programming/Software Engineering as Chemistry/Chemical engineering Software engineering includes the economics of software
What is an example of an economic trade off you might have to make for a software project?
What information is important in making an economic decision about a software project? Time Effort Cost of equipment Cost of goods (third party)
Can all of these be exactly measured?
Software Life-Cycle
Software life-cycle The series of steps that software goes through from concept to retirement A "model" for these steps
What do you mean "model"?
Waterfall model Used by most organizations through the 1980's 7 broad phases What are they?
Requirements phase Specification (analysis) phase Design phase Implementation phase Integration phase Maintenance phase Retirement phase
Why is it called waterfall? Outputs from one phase flow into the following phase
Software Maintenance
Which phase takes the most effort? Maintenance phase
More people working on software maintenance than on new software - Pressman
2/3 of effort in Maintenance phase
Types of maintenance Corrective maintenance Perfective maintenance Adaptive maintenance
What is an example of each of these types of maintenance?
Specification and Design
Software is developed by humans for humans What is the problem with this?
We make mistakes How do programming languages contribute to this problem?
Imperfect translation of human desires into computer actions
In which phase in the software lifecycle are mistakes the most costly? Each phase is more costly than the next Heuristic for cost - 10x
Divide lifecycle into four phases: requirements, design, implementation, maintenance A problem in each phase is 10X as costly to fix as in a previous phase
Where are most of the defects in software found? 60%-70% of defects found in specification and design phases
Team Programming
Software developed is extremely complex Moore's law – What is it?
Performance-price factor of computing decreased by an order of magnitude every five years
Do you believe software is becoming more complex? Product complexity is such that it would take a single person years
to complete Product releases are 6 months or shorter Teams are needed
What are the problems with teams? Organization Communication
Object Oriented Paradigm
What is object oriented software engineering? How does object oriented design/programming
help? Implementation hiding (helps maintenance) Design by contract (helps maintenance) Closer to real problem (helps specification)
Is the Object Oriented paradigm a silver bullet?
Agile Software Engineering
What is Agile software engineering? Things change so you might as well design your processes to embrace change Individuals and interactions
● over processes and tools Working software
● over comprehensive documentation Customer collaboration
● over contract negotiation Responding to change
● over following a plan How does Agile software engineering help?
Move specification closer to the customer Is Agile the silver bullet?
The Software Process
The phases of the software process are? Requirements Specification Design Implementation Integration Maintenance Retirement
Why is the software process divided into phases? They are the natural evolution of a software product
Requirements
Requirements and specifications (next phase) tell what the product is to do
Client/Developer Client
Person/group/organization who has contracted to have the software constructed
Usually the end user, but not always When is software built for someone who is not the end user?
Developer Person/group/organization that has contracted to develop the
software
Requirements (cont)
Three types of development Internal software development Contract software development Shrink-wrap software development What is different between each type of software?
What is the principle role of the software developers during requirements? Not what the client wants Determining what the client needs
Why does the client not know what they need? Software is complex The client does not understand what his/her own needs are The client cannot communicate what his/her own needs are
Requirement Analysis
Rapid Prototyping Create a working model of the software
Only the functionality that the user must interact with Error checking, design are not done
Good for refining Human Computer Interface (HCI) other human factors Different types of prototyping
Evolutionary Throw-away Partially reusable What are the advantages/disadvantages of each?
JAD (Joint Application Development) Similar to rapid prototyping using team composed of members from both
client/developer organizations What are the problems with Rapid Prototyping?
Testing Requirements
SQA (Software quality assurance) or QA (quality assurance) group Involved during the requirements phase Verify that what the customer needs is what is
communicated by the requirements Develop test plans that will verify those requirements
Verification Testing - done by QA Acceptance Testing - done by client
Specification
Explicitly describe the needs (specifications) of the client Usually described in a specification document Often accompanied by a user interface specification
Story boarding Rapid prototyping
Specification acts as a contract Specification problems
Ambiguous specifications Incomplete specifications Contradictory specifications What is an example of each?
Specification Testing Done by SQA group Traceability must be attained
Design Phase
Design phase determines how the product will do what was specified in previous two phases
Design often broken down into two phases Architectural (high-level) design
Break the project down into components Detailed design
Break the components down into modules
Design Phase Testing Traceability between design elements and specification Design reviews are one way to accomplish this
Implementation
What most people think of as software development
Actual coding Testing
Code reviewUnit testsOther code checking
Integration
Components/Modules are combined There are various approaches to combining modules
Incremental Top to bottom Bottom to top Big bang Which appeals most to you?
Integration testing "Smoke" testing
Performed by development
Product testing Performed by QA
Acceptance testing Performed by the client
Maintenance Phase
Maintenance often considered the most challenging aspect of software development
More money/time spent on maintenance than on any other phase Maintenance needs to be considered in other phases
Give examples of how you can consider maintenance in other phases Good documentation Flexible design
Maintenance Testing Feature testing (bug fix testing) Regression testing
Retirement
When software is no longer usuable or maintainable it is retiredThis is very rareThere is software that you use every day that
is 30 years old ATMs Credit cards
Summary
This is an overview of software engineering
We will talk about many of these issues in more depth throughout the semester