CSCE 431 Lecture 2
« previous | Thursday, January 16, 2014 | next »
Process
Solving problems given a set of constraints (time, resources, etc.)
- Code and run.
- Code, run, fix defects and try again.
- Design, code, run, fix defects and try again.
- Design, code, test, fix, run.
- Design, code, test, fix, document, run.
- Specify, design, code, test, fix, document, run.
- Requirements, specify, design, code, test, fix, document, run
- "no-method" (hacking): sketch, code immediately, get feedback, repeat.
Which is best? (highly subjective)
Waterfall
Initial, flawed concept of one-way development with no feedback
Even with added feedback to predecessor phases, the entire process is still slow and long
Designed when computer time was scarce (had to sign up to use computer) and documentation was emphasized more than code.
Treats software development as a manufactuing process, not a problem-solving process.
Assumes it is possible to precisely and fully define all requirements up front (false)
V-Model
Each development phase has a corresponding test phase.
Still a sequential process
Evolutionary Model
Build a prototype and allow users to play with it before building the final version
Still mostly sequential
Spiral Model
A bunch of little waterfalls in a spiral:
Continuous assessment of risk with 6-month iterations
Overkill for small projects
Agile
Moderation:
- Embraces modeling
- Embraces documentation, but doesn't overdo it
- Insists on planning, but recognizes limits in changing environments
Core emphasis: schedule
Typical practices:
- test-first
- regular refactoring
- continuous integration
- pair programming
- shared code
- coding standard
- common work area
- customer on site
- user stories
- "manager-servant"
- timeboxing
Each iteration is a mini-project geared toward a stable updated release
Most requested features aren't even used: YAGNI