Introduction
•	What is it? Why does it exist?
•	Software engineering goals
•	Process
–	Phases
–	Components
•	Software Capability Maturity Model
The status of software
•	Most software is not very good
•	Most software projects fail
•	Success on one project does not guarantee success on even a similar project
What is it? Why does it exist?
•	Crude definition: the study of how to "properly" create and maintain "good" software
–	principles should apply to any software
•	All computer science fields exist to solve problems
•	For Soft.Eng.: 
–	Trying to fix problems of the previous slide
Software engineering goals
•	What is "good" software?
•	What is the “right” way to create software?
Typical criteria for "good" software 
•	does what customer wants
•	works correctly
•	completed on schedule
•	easy to maintain
•	can reuse parts 
Problems
•	Customers change their minds
•	Designing solutions is hard
•	Working with other people is hard:
–	Communication
–	different skill levels
–	usu. need to maintain software produced by others
•	Software projects seem so different
–	inconsistency
•	Integration is difficult
Process
•	Need standardized approach
–	like other engineering disciplines
•	Divide job into phases
•	Document!
–	including requirements, design, code, tests, manual, the process
•	Measure: time, size of code, and more
–	needed to improve the process
Comparison with programming assignments
•	How does this compare with the way you produce software now?
•	Think of this as the first class in a 30-week course (including the two following software engineering courses)
•	Includes a fair amount of “discovery-based learning”

Process phases
•	Waterfall process:
•	Requirements
•	Design
•	Coding
•	Testing
•	Requirements: what software should do
•	Design: how software will be organized
•	Coding: actually building the software
•	Testing: does the software do what it should?
Misc. notes about waterfall process
•	Most of the time should be spent on first 2 steps:
–	coding should not take up that much time
•	Iteration: repeat phases
–	Why?
•	Maintenance
–	fixing bugs, adding features
Components
•	Divide problem into components
–	in large systems, divide first into subsystems
–	makes division of labor easier
–	makes reuse easier
–	reduces early bottlenecks
•	different components can be at different phases
Capability Maturity Models (CMM’s)
•	Software CMM developed by Watts Humphrey, Carnegie-Mellon’s Software Engineering Institute (SEI)
•	Does not suggest a single process model
•	Goal: show how to improve any model
•	Success should not depend on the personnel
•	Other CMM’s at http://sei.cmu.edu
Capability Maturity Models (CMM’s) (continued)
•	5 levels of maturity
•	Initial -- ad hoc
•	Repeatable -- keeping track of costs, schedule
•	Defined -- standardized, documented process used for whole organization
•	Managed -- detailed measurements, process is “understood”
•	Optimizing -- standardize how to improve process