Computer Science 280:

Software Engineering

Gregory M. Kapfhammer


flickr photo by vpickering shared under a Creative Commons (BY-NC-ND) license

Color Scheme

Key Concept

Corresponding Diagram

In-Class Discussion

In-Class Activity

Details in SETP or MMM

Software engineering is creative and algorithmic

Process

A series of steps involving activities, constraints, and resources, that produces an intended output

What is an example of process that you regularly follow?

Why is it important to follow a process?

Software Development Lifecycle

Constraints

Output

Resources

Can you give concrete examples of all of these categories?

Lifecycle Review

Requirements analysis and definition

System and program design

Implementation

Unit testing

Integration testing

System testing

Maintenance

Work Checking

Validation: did we build the right system?

Verification: did we build the system right?

How are these questions similar and different?

Why are these tasks actually different?

Fundamental tasks for the software engineer!

How are you verifying and validating your assignment?

Software development in practice?

Models of software development?

Waterfall Model

Developed in the 1970s as a means for organizing teams

What are the limitations of this approach?

Software development as "manufacturing"

See Figure 2.1 for an overview of the waterfall model


flickr photo shared by Michael Matti under a Creative Commons ( BY-NC ) license

Other ways to organize the lifecycle phases?

Waterfall model with prototyping

The V Model

Demonstrates how testing is related to other phases

Focus is on verification and validation

Supports the re-execution of past phases

Iteration and re-work are now explicit

Involves the customer in acceptance testing


flickr photo shared by Elad R under a Creative Commons ( BY-NC ) license

Customer involvement? When? Why?

Prototyping Model

Operational Specification

Incremental Development

Release a small functional system with few features

Add features to this system over releases

See Figure 2.9 (top) for more details

Iterative Development

Release a full system with primitive features

Enhance features of this system over releases

See Figure 2.9 (bottom) for more details

Are you (and your team) working incrementally or iteratively?

Word Processing Software

Spiral Model

Developed in 1998 to support risk management

Related to the concept of iterative development

Start "inside" the spiral and work to the "outside"

Four phases: Goals, alternatives, develop/test, plan

Focuses on developing prototypes within budget


flickr photo shared by Lawrence Wang 王治钧 under a Creative Commons ( BY-NC-ND ) license

Agile Methods

"Early and continuous delivery of valuable software"

Individuals and interactions over processes and tools

Prefer working software over complete documentation

Customer collaboration rather than contract negotiation

Respond to and embrace change!

Twelve Principles of "Extreme Programming" (XP)

When is XP too Extreme?

Quotes About Software Projects

"... not yet have a full set of requirements"

"... have an overview of system functionality"

" ... sense of how it will support the business"

Evidenced in the Laboratory Assignment?