Table of Contents

PART I GROUNDWORK

Chapter 1 Problem solving
1.1 The myth of functional decomposition
1.2 Problem solving and design patterns
1.3 Why software is hard
1.4 Pattern composition and decomposition

Chapter 2 Problem defining
2.1 Requirements and design patterns
2.2 Software problems
2.3 Requirements engineering
2.4 Lessons learned

Chapter 3 Two worlds and three designs
3.1 The problem domain
3.2 Requirements
3.3 Interface design
3.4 Validation of interfaces and programs
3.5 Description
3.6 Invention vs. validation
3.7 What software requirements are not
3.8 Summary

Chapter 4 Problem framing
4.1 The knight's tour
4.2 Domains
4.3 Shared phenomena
4.4 Connection domains
4.5 Realized domains
4.6 Frame diagrams
4.7 From diagram to documentation
4.8 Notation summary

Chapter 5 Five problem frames
5.1 Overview
5.2 Information problems
5.3 Control problems
5.4 Transformation problems
5.5 Workpiece problems
5.6 Connection problems

Chapter 6 Multi-frame problems
6.1 Combining problem frames
6.2 Inventory control system
6.3 Statistics package
6.4 Digital answering machine
6.5 Compiler
6.6 Electronic mail
6.7 Satellite reconnaissance


PART II CONTENT

Chapter 7 Software development
7.1 A division of cognitive labor
7.2 Analysis
7.3 User-interface design
7.4 Programming
7.5 Testing
7.6 User documentation

Chapter 8 Two documents
8.1 Contents of a requirements document
8.2 Contents of a specification

Chapter 9 Classes and relations
9.1 Two kinds of sets
9.2 Classes
9.3 All possible values
9.4 Impossible values
9.5 Relations
9.6 Cardinality
9.7 Relations as attributes
9.8 Uniqueness and functional dependence
9.9 Queries
9.10 Naming classes, attributes, and relations

Chapter 10 Sequences and events
10.1 Structure
10.2 Events
10.3 Event responses
10.4 More sequence notations

Chapter 11 Causation and control
11.1 State transitions
11.2 Actions
11.3 Dependency
11.4 Flow
11.5 Rules

Chapter 12 Special topics
12.1 Elicitation
12.2 Object-orientation
12.3 Use cases and feature interaction
12.4 Reviews
12.5 Requirements jargon
12.6 Cutting corners
12.7 A few good books


PART III STYLE

Chapter 13 Documentation
13.1 Why document?
13.2 Broad principles
13.3 Decoy text
13.4 More common mistakes
13.5 Poor uses of documentation

Chapter 14 Organization
14.1 Content first
14.2 Grouping
14.3 Sequence
14.4 Emphasis

Chapter 15 Small Details
acronyms "affect/effect" "always" assumptions
"click on" "compose/comprise" conventions "correct"
cross-references "data" definitions dependencies
document titles "entry" fancy cover first sentence
glossary "i.e./e.g." "invalid" metatext
"model" page layout "paradigm" "represents"
requirement statements tables title page "type"
underlining "use" "valid" voice


PART IV EXAMPLES

Chapter 16 Bug Log requirements

Chapter 17 Bug Log user-interface design

Glossary

Bibliography