Computer Science 203:

Software Engineering

Gregory M. Kapfhammer


Triangles 1 flickr photo by vincentag shared under a Creative Commons (BY-NC-ND) license

Color Scheme

Key Concept

Corresponding Diagram

In-Class Discussion

In-Class Activity

Details in the Textbook

Cooperative Software Design

Chapters 9 through 12

Software Processes

Software Processes

What steps should we take?

In what order should we take steps?

How should we repeat steps?

How can we estimate project completion time?

Software process models

Waterfall model

What are the limitations of this model?

Spiral model by Barry Boehm

Iteration and process improvement are important

Software Processes

Awareness of the work of our teammates

Ownership of the product

Pace of the project

Remote versus local collaboration

Extreme programming framework

What are the trade-offs of XP?

Questions about software processes?

Application to the software project

Program Comprehension

Program Comprehension

Read and understand source code

Build and refine a model of program behavior

Iteratively ask and answer question about software

Reason about dependencies

Find a function and explain it!

Have you asked these questions?

Dynamic versus static languages

Dynamic versus static languages

Text editors and IDEs

Should we enforce tool standards?

Questions about comprehension?

Application to the software project

Verification

How do you know a program behaves as intended?

Verification versus validation

Manual versus automated

Empirical versus analytical

See the textbook for summary table

Testing terminology

Defect (or fault)

Failure

Bug (or fault or failure)

What is the most precise terminology?

Testing cannot establish correctness!

Testing cannot prove that defects don't exist!

Wait, what can software testing do?

Software testing establishes a confidence in correctness

Benefits of code coverage

Drawbacks of code coverage

What does high coverage imply?

Program Analysis

Static analysis

Dynamic analysis

Code reviews

What are the trade-offs between these methods?

Type of analysis performed by compiler?

Questions about verification?

Application to the software project

Monitoring

Software deployment

How do we know that software is working?

Software monitoring

Error reporting

Performance and functionality

Security and data breaches

Requirements discovery

What could go wrong?

Questions about monitoring?

Monitoring is a big business!

Application to the software project?