Mike Holcombe
Running an Agile Software Development Project
Mike Holcombe
Running an Agile Software Development Project
- Gebundenes Buch
- Merkliste
- Auf die Merkliste
- Bewerten Bewerten
- Teilen
- Produkt teilen
- Produkterinnerung
- Produkterinnerung
A Practical Approach To Building Small To Medium Software Systems For Real Business Clients
Based on more than 100 actual commercial projects, this book clearly explains how to run an agile software development project that delivers high-quality, high-value solutions to business clients. It concentrates on the practical, social, business, and management aspects as well as the technical issues involved.
Professor Holcombe successfully connects readers with the wave of "Agile 2.0" concepts that take the techniques of agile development and place them in the service of business goals. Since…mehr
Andere Kunden interessierten sich auch für
- Richard E. FairleyManaging and Leading Software Projects135,99 €
- Kim Man LuiSoftware Development Rhythms120,99 €
- Linda M. LairdSoftware Measurement and Estimation154,99 €
- Susan M. LandPractical Support for CMMI-SW Software Project Documentation Using IEEE Software Engineering Standards170,99 €
- Donald J. ReiferWar Stories129,99 €
- Dorota HuizingaAutomated Defect Prevention164,99 €
- Andreas OpeltAgile Contracts81,99 €
-
-
-
A Practical Approach To Building Small To Medium Software Systems For Real Business Clients
Based on more than 100 actual commercial projects, this book clearly explains how to run an agile software development project that delivers high-quality, high-value solutions to business clients. It concentrates on the practical, social, business, and management aspects as well as the technical issues involved.
Professor Holcombe successfully connects readers with the wave of "Agile 2.0" concepts that take the techniques of agile development and place them in the service of business goals. Since it is widely believed that the use of Windows XP will become much more common in coming years, readers should be armed with cutting-edge knowledge of the latest practices in the field. Further features of the book include:
_ Case studies provide real-world examples and describe how XP was introduced into the environment
_ Analysis is provided to help readers determine which elements of XP are suitable for the unique challenges and environments for different projects
_ Problems of a failing agile project and how they can be fixed are covered, including insight into which managerial techniques can be employed
_ An Instructor's Guide provides practical advice on how to motivate students, organize real group projects, and deal, in a simple and effective way, with many of the problems that arise
_ A sample syllabus, sample tests, and additional case study information are available on an instructor's password-protected ftp site
Running an Agile Software Development Project is an indispensable guide for professional software developers, engineers, and project managers interested in learning how to use agile processes. It is also a valuable textbook for advanced undergraduate- and graduate-level students in computer engineering and software engineering courses.
Hinweis: Dieser Artikel kann nur an eine deutsche Lieferadresse ausgeliefert werden.
Based on more than 100 actual commercial projects, this book clearly explains how to run an agile software development project that delivers high-quality, high-value solutions to business clients. It concentrates on the practical, social, business, and management aspects as well as the technical issues involved.
Professor Holcombe successfully connects readers with the wave of "Agile 2.0" concepts that take the techniques of agile development and place them in the service of business goals. Since it is widely believed that the use of Windows XP will become much more common in coming years, readers should be armed with cutting-edge knowledge of the latest practices in the field. Further features of the book include:
_ Case studies provide real-world examples and describe how XP was introduced into the environment
_ Analysis is provided to help readers determine which elements of XP are suitable for the unique challenges and environments for different projects
_ Problems of a failing agile project and how they can be fixed are covered, including insight into which managerial techniques can be employed
_ An Instructor's Guide provides practical advice on how to motivate students, organize real group projects, and deal, in a simple and effective way, with many of the problems that arise
_ A sample syllabus, sample tests, and additional case study information are available on an instructor's password-protected ftp site
Running an Agile Software Development Project is an indispensable guide for professional software developers, engineers, and project managers interested in learning how to use agile processes. It is also a valuable textbook for advanced undergraduate- and graduate-level students in computer engineering and software engineering courses.
Hinweis: Dieser Artikel kann nur an eine deutsche Lieferadresse ausgeliefert werden.
Produktdetails
- Produktdetails
- Verlag: Wiley & Sons
- 1. Auflage
- Seitenzahl: 336
- Erscheinungstermin: 1. November 2008
- Englisch
- Abmessung: 236mm x 155mm x 20mm
- Gewicht: 570g
- ISBN-13: 9780470136690
- ISBN-10: 0470136693
- Artikelnr.: 25050296
- Herstellerkennzeichnung
- Libri GmbH
- Europaallee 1
- 36244 Bad Hersfeld
- 06621 890
- Verlag: Wiley & Sons
- 1. Auflage
- Seitenzahl: 336
- Erscheinungstermin: 1. November 2008
- Englisch
- Abmessung: 236mm x 155mm x 20mm
- Gewicht: 570g
- ISBN-13: 9780470136690
- ISBN-10: 0470136693
- Artikelnr.: 25050296
- Herstellerkennzeichnung
- Libri GmbH
- Europaallee 1
- 36244 Bad Hersfeld
- 06621 890
Mike Holcombe, BSC, MSC, PHD, is Professor of Computer Science at the University of Sheffield, UK. He is also founder of Genesys Solutions, which is a student-run commercial software house that is strongly supported by IBM (winning the IBM International Eclipse Innovation Award in 2004 and 2005) and is also designated as a Microsoft Innovation Center. The University of Sheffield has recently "spun out" this company as epiGenesys Ltd. Dr. Holcombe's research interests include software and systems biology. A former dean of the faculty of engineering at the University of Sheffield, he is a Fellow of the British Computer Society and a Fellow of the Institute of Mathematics and Its Applications. He is on the editorial board of the journal BioSystems and Software Testing, Verification and Reliability (Wiley). He is also on the editorial board of the International Journal of Agile and Extreme Software Development and has been appointed to the Academic Advisory Board of Microsoft.
Preface xi
1. What Is an Agile Methodology? 1
1.1 Rapid Business Change: The Ultimate Driver 1
1.2 What Must Agile Methodologies be Able to Do? 2
1.3 Agility: What Is It and How Do We Achieve It? 2
1.4 Evolving Software: Obstacles and Possibilities 5
1.5 The Quality Agenda 6
1.6 Do We Really Need All This Mountain of Documentation? 9
1.7 The Human Factor 10
1.8 Some Agile Methodologies 11
1.8.1 Dynamic Systems Development Method 12
1.8.2 Feature-Driven Design 13
1.8.3 Crystal 14
1.8.4 Agile Modeling 14
1.8.5 Scrum 15
1.8.6 Summary Table 15
1.9 Review 16
Exercise 17
Conundrum 17
References 18
2. Extreme Programming Outlined 19
2.1 Some Guiding Principles 19
2.2 The Five Values 20
2.2.1 Communication 20
2.2.2 Feedback 22
2.2.3 Simplicity 24
2.2.4 Courage 24
2.2.5 Respect 25
2.3 The 12 Basic Practices of XP 25
2.3.1 Test-First Programming 25
2.3.2 Pair Programming 26
2.3.3 On-Site Customer 27
2.3.4 The Planning Game 28
2.3.5 System Metaphor 29
2.3.6 Small, Frequent Releases 30
2.3.7 Always Use the Simplest Solution That Adds Business Value 30
2.3.8 Continuous Integration 31
2.3.9 Coding Standards 32
2.3.10 Collective Code Ownership 32
2.3.11 Refactoring 33
2.3.12 Forty-Hour Week 33
2.4 Can XP Work? 34
2.5 The Evidence for XP 35
2.5.1 Evidence for Test First 35
2.5.2 Evidence for Pair Programming 36
2.5.3 Evidence for XP 36
2.6 Preparing to XP 37
Exercise 37
Conundrum 38
References 39
3. Foundations: People and Teams Working Together 41
3.1 Software Engineering in Teams 41
3.2 Personalities and Team Success 42
3.3 Observations of Team Behavior in XP Projects 46
3.4 Setting Up a Team 50
3.5 Developing Team Skills 52
3.6 Training Together 54
3.7 Finding and Keeping a Client for a University-Based Project or a Small
Business Start-Up 54
3.8 The Organizational Framework 56
3.9 Planning 60
3.9.1 PERT (Program Evaluation and Review Technique) 61
3.9.2 Gantt Charts 62
3.10 Dealing with Problems 65
3.10.1 Basic Strategies 65
3.10.2 When Things Go Really Wrong 66
3.11 Risk Analysis 68
3.12 Review 69
Exercises 69
Conundrum 70
References 70
4. Starting an XP Project 73
4.1 Project Beginnings 73
4.1.1 Researching the Business Background 74
4.1.2 Exploring the Outline System Description 76
4.2 The First Meetings with the Client 79
4.3 Business Analysis and Problem Discovery 80
4.4 The Initial Stages of Building a Requirements Document 82
4.5 Techniques for Requirements Elicitation 84
4.6 Putting Your Knowledge Together 85
4.7 Getting Technical 85
4.8 Developing the Requirements Documents 88
4.9 Specifying and Measuring the Quality Attributes of the System 91
4.9.1 Identifying Attributes 92
4.9.2 Specifying the Acceptable Level of an Attribute 94
4.9.3 User Characteristics and User Interface Characteristics 95
4.10 The Formal Requirements Document and System Metaphor 96
4.10.1 Commentary 106
4.11 Contract Negotiation 108
4.12 Case Study: The Impact of Organizational Politics 114
4.13 Review 116
Conundrum 116
References 117
5. Identifying Stories and Preparing to Build 119
5.1 Looking at the User Stories 119
5.2 Collections of Stories 128
5.2.1 Pharmacovigilance 129
5.2.2 Stamps System 131
5.2.3 DELTAH (Developing European Leadership Through Action-Learning in
Healthcare) 131
5.3 User Interfaces 139
5.4 Communicating Clearly with the Customer and Building Confidence 141
5.5 Demonstrating the Non-Functional Requirements 143
5.5.1 Non-Functional Requirements 143
5.6 Estimating Resources 144
5.6.1 Software Cost Estimation 145
5.6.2 Object Point Analysis 146
5.6.3 Cosmic Ffp 147
5.7 Review 149
Exercises 149
Conundrum 150
References 151
6. Bringing the System Together as a Coherent Concept 153
6.1 What is the Problem? 153
6.2 A Simple Common Metaphor 156
6.3 Architectures and Patterns 159
6.4 Finite State Machines 160
6.5 Extreme Modeling (XM) 163
6.6 Multiple Stories and XXMs 166
6.7 Building the Architecture to Suit the Application: A Dynamic System
Metaphor 171
6.8 Another Look at Estimation 177
6.9 Review 179
Exercise 180
Conundrum 180
References 180
7. Designing the System Tests 181
7.1 Preparing to Build Functional Test Sets 181
7.1.1 Tests and Testing 181
7.1.2 Testing from a Model 183
7.1.3 Developing the Model 187
7.2 Testing with the Data in Mind 191
7.3 The Full Functional System Testing Strategy 192
7.4 The Thinking Behind the System Test Process 193
7.4.1 An Algorithm for Determining the Transition Cover 198
7.5 Design for Test 201
7.5.1 Design for Test Principle 1: Controllability 202
7.5.2 Design for Test Principle 2: Observability 202
7.6 Test Documentation 203
7.7 Non-Functional Testing 205
7.7.1 Reliability 206
7.7.2 Usability 206
7.7.3 Efficiency 207
7.7.4 Portability 207
7.8 Testing Internet Applications and Web Sites 207
7.9 Review 209
Exercise 210
Conundrum 213
References 213
8. Units and Their Tests 215
8.1 Basic Considerations 215
8.2 Identifying the Units 216
8.3 Unit Testing 219
8.4 More Complex Units 222
8.4.1 Case Example: The AddElement Function in JHotDraw 223
8.5 Automating Unit Tests 232
8.5.1 Writing Unit Tests in JUniti 233
8.5.2 Managing Tests 235
8.6 Documenting Unit Test Results 235
8.7 Review 237
Exercises 237
Conundrum 237
References 238
9. Evolving the System 239
9.1 Requirements Change 239
9.2 Changes to Basic Business Model and Functionality 240
9.3 Dealing with Change: Refining Stories 241
9.3.1 Changes to the Underlying Data Model 241
9.3.2 Changes to the Structure of the Interface, Perhaps the Introduction
of a New Screen 242
9.3.3 Adding a New Function 242
9.3.4 Changing the Functionality of a Function 242
9.4 Changing the Model 242
9.4.1 Changing a Process 242
9.4.2 Removing States 244
9.4.3 Adding States 245
9.4.4 Adding a Complete Machine 246
9.4.5 Adding Processes 246
9.5 Testing for Changed Requirements 247
9.6 Refactoring the Code 248
9.7 Estimating the Cost of Change 249
9.8 Review 249
Exercises 250
Conundrum 250
Reference 250
10. Documenting and Delivering the System 251
10.1 What is Documentation for and Who Is Going to Use It? 251
10.2 Coding Standards and Documents for Programmers 252
10.3 Coding Standards for Java 253
10.3.1 Genesys Coding Standard for Java 253
10.3.2 Blank Lines 255
10.4 Maintenance Documentation 262
10.5 User Manuals 263
10.6 Version Control 264
10.6.1 The Project Archive 265
10.6.2 Naming Conventions 265
10.7 Delivery and Finalization 266
10.8 Review 267
Exercises 267
Conundrum 267
Reference 267
11. Reflecting on the Process 269
11.1 Skills and Lessons Learned 269
11.2 The XP Experience 270
11.3 Personal and Team Assessment 270
11.4 Review 271
Exercises 271
11.5 Conundrums: Discussion 271
11.6 A Final Word 277
12. Lifestyle Matters 281
12.1 Keeping Fit 282
12.1.1 Correct Sitting Position 283
12.1.2 Combating RSI 284
12.2 General Well-Being 285
12.3 Mental Preparation 285
12.4 Diet 286
12.4.1 Diet and Brain Function 286
12.4.2 Summary of Dietary Information 287
12.5 Music and Work 288
12.6 Review 289
References 290
Appendix 291
Bibliography 305
Index 309
1. What Is an Agile Methodology? 1
1.1 Rapid Business Change: The Ultimate Driver 1
1.2 What Must Agile Methodologies be Able to Do? 2
1.3 Agility: What Is It and How Do We Achieve It? 2
1.4 Evolving Software: Obstacles and Possibilities 5
1.5 The Quality Agenda 6
1.6 Do We Really Need All This Mountain of Documentation? 9
1.7 The Human Factor 10
1.8 Some Agile Methodologies 11
1.8.1 Dynamic Systems Development Method 12
1.8.2 Feature-Driven Design 13
1.8.3 Crystal 14
1.8.4 Agile Modeling 14
1.8.5 Scrum 15
1.8.6 Summary Table 15
1.9 Review 16
Exercise 17
Conundrum 17
References 18
2. Extreme Programming Outlined 19
2.1 Some Guiding Principles 19
2.2 The Five Values 20
2.2.1 Communication 20
2.2.2 Feedback 22
2.2.3 Simplicity 24
2.2.4 Courage 24
2.2.5 Respect 25
2.3 The 12 Basic Practices of XP 25
2.3.1 Test-First Programming 25
2.3.2 Pair Programming 26
2.3.3 On-Site Customer 27
2.3.4 The Planning Game 28
2.3.5 System Metaphor 29
2.3.6 Small, Frequent Releases 30
2.3.7 Always Use the Simplest Solution That Adds Business Value 30
2.3.8 Continuous Integration 31
2.3.9 Coding Standards 32
2.3.10 Collective Code Ownership 32
2.3.11 Refactoring 33
2.3.12 Forty-Hour Week 33
2.4 Can XP Work? 34
2.5 The Evidence for XP 35
2.5.1 Evidence for Test First 35
2.5.2 Evidence for Pair Programming 36
2.5.3 Evidence for XP 36
2.6 Preparing to XP 37
Exercise 37
Conundrum 38
References 39
3. Foundations: People and Teams Working Together 41
3.1 Software Engineering in Teams 41
3.2 Personalities and Team Success 42
3.3 Observations of Team Behavior in XP Projects 46
3.4 Setting Up a Team 50
3.5 Developing Team Skills 52
3.6 Training Together 54
3.7 Finding and Keeping a Client for a University-Based Project or a Small
Business Start-Up 54
3.8 The Organizational Framework 56
3.9 Planning 60
3.9.1 PERT (Program Evaluation and Review Technique) 61
3.9.2 Gantt Charts 62
3.10 Dealing with Problems 65
3.10.1 Basic Strategies 65
3.10.2 When Things Go Really Wrong 66
3.11 Risk Analysis 68
3.12 Review 69
Exercises 69
Conundrum 70
References 70
4. Starting an XP Project 73
4.1 Project Beginnings 73
4.1.1 Researching the Business Background 74
4.1.2 Exploring the Outline System Description 76
4.2 The First Meetings with the Client 79
4.3 Business Analysis and Problem Discovery 80
4.4 The Initial Stages of Building a Requirements Document 82
4.5 Techniques for Requirements Elicitation 84
4.6 Putting Your Knowledge Together 85
4.7 Getting Technical 85
4.8 Developing the Requirements Documents 88
4.9 Specifying and Measuring the Quality Attributes of the System 91
4.9.1 Identifying Attributes 92
4.9.2 Specifying the Acceptable Level of an Attribute 94
4.9.3 User Characteristics and User Interface Characteristics 95
4.10 The Formal Requirements Document and System Metaphor 96
4.10.1 Commentary 106
4.11 Contract Negotiation 108
4.12 Case Study: The Impact of Organizational Politics 114
4.13 Review 116
Conundrum 116
References 117
5. Identifying Stories and Preparing to Build 119
5.1 Looking at the User Stories 119
5.2 Collections of Stories 128
5.2.1 Pharmacovigilance 129
5.2.2 Stamps System 131
5.2.3 DELTAH (Developing European Leadership Through Action-Learning in
Healthcare) 131
5.3 User Interfaces 139
5.4 Communicating Clearly with the Customer and Building Confidence 141
5.5 Demonstrating the Non-Functional Requirements 143
5.5.1 Non-Functional Requirements 143
5.6 Estimating Resources 144
5.6.1 Software Cost Estimation 145
5.6.2 Object Point Analysis 146
5.6.3 Cosmic Ffp 147
5.7 Review 149
Exercises 149
Conundrum 150
References 151
6. Bringing the System Together as a Coherent Concept 153
6.1 What is the Problem? 153
6.2 A Simple Common Metaphor 156
6.3 Architectures and Patterns 159
6.4 Finite State Machines 160
6.5 Extreme Modeling (XM) 163
6.6 Multiple Stories and XXMs 166
6.7 Building the Architecture to Suit the Application: A Dynamic System
Metaphor 171
6.8 Another Look at Estimation 177
6.9 Review 179
Exercise 180
Conundrum 180
References 180
7. Designing the System Tests 181
7.1 Preparing to Build Functional Test Sets 181
7.1.1 Tests and Testing 181
7.1.2 Testing from a Model 183
7.1.3 Developing the Model 187
7.2 Testing with the Data in Mind 191
7.3 The Full Functional System Testing Strategy 192
7.4 The Thinking Behind the System Test Process 193
7.4.1 An Algorithm for Determining the Transition Cover 198
7.5 Design for Test 201
7.5.1 Design for Test Principle 1: Controllability 202
7.5.2 Design for Test Principle 2: Observability 202
7.6 Test Documentation 203
7.7 Non-Functional Testing 205
7.7.1 Reliability 206
7.7.2 Usability 206
7.7.3 Efficiency 207
7.7.4 Portability 207
7.8 Testing Internet Applications and Web Sites 207
7.9 Review 209
Exercise 210
Conundrum 213
References 213
8. Units and Their Tests 215
8.1 Basic Considerations 215
8.2 Identifying the Units 216
8.3 Unit Testing 219
8.4 More Complex Units 222
8.4.1 Case Example: The AddElement Function in JHotDraw 223
8.5 Automating Unit Tests 232
8.5.1 Writing Unit Tests in JUniti 233
8.5.2 Managing Tests 235
8.6 Documenting Unit Test Results 235
8.7 Review 237
Exercises 237
Conundrum 237
References 238
9. Evolving the System 239
9.1 Requirements Change 239
9.2 Changes to Basic Business Model and Functionality 240
9.3 Dealing with Change: Refining Stories 241
9.3.1 Changes to the Underlying Data Model 241
9.3.2 Changes to the Structure of the Interface, Perhaps the Introduction
of a New Screen 242
9.3.3 Adding a New Function 242
9.3.4 Changing the Functionality of a Function 242
9.4 Changing the Model 242
9.4.1 Changing a Process 242
9.4.2 Removing States 244
9.4.3 Adding States 245
9.4.4 Adding a Complete Machine 246
9.4.5 Adding Processes 246
9.5 Testing for Changed Requirements 247
9.6 Refactoring the Code 248
9.7 Estimating the Cost of Change 249
9.8 Review 249
Exercises 250
Conundrum 250
Reference 250
10. Documenting and Delivering the System 251
10.1 What is Documentation for and Who Is Going to Use It? 251
10.2 Coding Standards and Documents for Programmers 252
10.3 Coding Standards for Java 253
10.3.1 Genesys Coding Standard for Java 253
10.3.2 Blank Lines 255
10.4 Maintenance Documentation 262
10.5 User Manuals 263
10.6 Version Control 264
10.6.1 The Project Archive 265
10.6.2 Naming Conventions 265
10.7 Delivery and Finalization 266
10.8 Review 267
Exercises 267
Conundrum 267
Reference 267
11. Reflecting on the Process 269
11.1 Skills and Lessons Learned 269
11.2 The XP Experience 270
11.3 Personal and Team Assessment 270
11.4 Review 271
Exercises 271
11.5 Conundrums: Discussion 271
11.6 A Final Word 277
12. Lifestyle Matters 281
12.1 Keeping Fit 282
12.1.1 Correct Sitting Position 283
12.1.2 Combating RSI 284
12.2 General Well-Being 285
12.3 Mental Preparation 285
12.4 Diet 286
12.4.1 Diet and Brain Function 286
12.4.2 Summary of Dietary Information 287
12.5 Music and Work 288
12.6 Review 289
References 290
Appendix 291
Bibliography 305
Index 309
Preface xi
1. What Is an Agile Methodology? 1
1.1 Rapid Business Change: The Ultimate Driver 1
1.2 What Must Agile Methodologies be Able to Do? 2
1.3 Agility: What Is It and How Do We Achieve It? 2
1.4 Evolving Software: Obstacles and Possibilities 5
1.5 The Quality Agenda 6
1.6 Do We Really Need All This Mountain of Documentation? 9
1.7 The Human Factor 10
1.8 Some Agile Methodologies 11
1.8.1 Dynamic Systems Development Method 12
1.8.2 Feature-Driven Design 13
1.8.3 Crystal 14
1.8.4 Agile Modeling 14
1.8.5 Scrum 15
1.8.6 Summary Table 15
1.9 Review 16
Exercise 17
Conundrum 17
References 18
2. Extreme Programming Outlined 19
2.1 Some Guiding Principles 19
2.2 The Five Values 20
2.2.1 Communication 20
2.2.2 Feedback 22
2.2.3 Simplicity 24
2.2.4 Courage 24
2.2.5 Respect 25
2.3 The 12 Basic Practices of XP 25
2.3.1 Test-First Programming 25
2.3.2 Pair Programming 26
2.3.3 On-Site Customer 27
2.3.4 The Planning Game 28
2.3.5 System Metaphor 29
2.3.6 Small, Frequent Releases 30
2.3.7 Always Use the Simplest Solution That Adds Business Value 30
2.3.8 Continuous Integration 31
2.3.9 Coding Standards 32
2.3.10 Collective Code Ownership 32
2.3.11 Refactoring 33
2.3.12 Forty-Hour Week 33
2.4 Can XP Work? 34
2.5 The Evidence for XP 35
2.5.1 Evidence for Test First 35
2.5.2 Evidence for Pair Programming 36
2.5.3 Evidence for XP 36
2.6 Preparing to XP 37
Exercise 37
Conundrum 38
References 39
3. Foundations: People and Teams Working Together 41
3.1 Software Engineering in Teams 41
3.2 Personalities and Team Success 42
3.3 Observations of Team Behavior in XP Projects 46
3.4 Setting Up a Team 50
3.5 Developing Team Skills 52
3.6 Training Together 54
3.7 Finding and Keeping a Client for a University-Based Project or a Small
Business Start-Up 54
3.8 The Organizational Framework 56
3.9 Planning 60
3.9.1 PERT (Program Evaluation and Review Technique) 61
3.9.2 Gantt Charts 62
3.10 Dealing with Problems 65
3.10.1 Basic Strategies 65
3.10.2 When Things Go Really Wrong 66
3.11 Risk Analysis 68
3.12 Review 69
Exercises 69
Conundrum 70
References 70
4. Starting an XP Project 73
4.1 Project Beginnings 73
4.1.1 Researching the Business Background 74
4.1.2 Exploring the Outline System Description 76
4.2 The First Meetings with the Client 79
4.3 Business Analysis and Problem Discovery 80
4.4 The Initial Stages of Building a Requirements Document 82
4.5 Techniques for Requirements Elicitation 84
4.6 Putting Your Knowledge Together 85
4.7 Getting Technical 85
4.8 Developing the Requirements Documents 88
4.9 Specifying and Measuring the Quality Attributes of the System 91
4.9.1 Identifying Attributes 92
4.9.2 Specifying the Acceptable Level of an Attribute 94
4.9.3 User Characteristics and User Interface Characteristics 95
4.10 The Formal Requirements Document and System Metaphor 96
4.10.1 Commentary 106
4.11 Contract Negotiation 108
4.12 Case Study: The Impact of Organizational Politics 114
4.13 Review 116
Conundrum 116
References 117
5. Identifying Stories and Preparing to Build 119
5.1 Looking at the User Stories 119
5.2 Collections of Stories 128
5.2.1 Pharmacovigilance 129
5.2.2 Stamps System 131
5.2.3 DELTAH (Developing European Leadership Through Action-Learning in
Healthcare) 131
5.3 User Interfaces 139
5.4 Communicating Clearly with the Customer and Building Confidence 141
5.5 Demonstrating the Non-Functional Requirements 143
5.5.1 Non-Functional Requirements 143
5.6 Estimating Resources 144
5.6.1 Software Cost Estimation 145
5.6.2 Object Point Analysis 146
5.6.3 Cosmic Ffp 147
5.7 Review 149
Exercises 149
Conundrum 150
References 151
6. Bringing the System Together as a Coherent Concept 153
6.1 What is the Problem? 153
6.2 A Simple Common Metaphor 156
6.3 Architectures and Patterns 159
6.4 Finite State Machines 160
6.5 Extreme Modeling (XM) 163
6.6 Multiple Stories and XXMs 166
6.7 Building the Architecture to Suit the Application: A Dynamic System
Metaphor 171
6.8 Another Look at Estimation 177
6.9 Review 179
Exercise 180
Conundrum 180
References 180
7. Designing the System Tests 181
7.1 Preparing to Build Functional Test Sets 181
7.1.1 Tests and Testing 181
7.1.2 Testing from a Model 183
7.1.3 Developing the Model 187
7.2 Testing with the Data in Mind 191
7.3 The Full Functional System Testing Strategy 192
7.4 The Thinking Behind the System Test Process 193
7.4.1 An Algorithm for Determining the Transition Cover 198
7.5 Design for Test 201
7.5.1 Design for Test Principle 1: Controllability 202
7.5.2 Design for Test Principle 2: Observability 202
7.6 Test Documentation 203
7.7 Non-Functional Testing 205
7.7.1 Reliability 206
7.7.2 Usability 206
7.7.3 Efficiency 207
7.7.4 Portability 207
7.8 Testing Internet Applications and Web Sites 207
7.9 Review 209
Exercise 210
Conundrum 213
References 213
8. Units and Their Tests 215
8.1 Basic Considerations 215
8.2 Identifying the Units 216
8.3 Unit Testing 219
8.4 More Complex Units 222
8.4.1 Case Example: The AddElement Function in JHotDraw 223
8.5 Automating Unit Tests 232
8.5.1 Writing Unit Tests in JUniti 233
8.5.2 Managing Tests 235
8.6 Documenting Unit Test Results 235
8.7 Review 237
Exercises 237
Conundrum 237
References 238
9. Evolving the System 239
9.1 Requirements Change 239
9.2 Changes to Basic Business Model and Functionality 240
9.3 Dealing with Change: Refining Stories 241
9.3.1 Changes to the Underlying Data Model 241
9.3.2 Changes to the Structure of the Interface, Perhaps the Introduction
of a New Screen 242
9.3.3 Adding a New Function 242
9.3.4 Changing the Functionality of a Function 242
9.4 Changing the Model 242
9.4.1 Changing a Process 242
9.4.2 Removing States 244
9.4.3 Adding States 245
9.4.4 Adding a Complete Machine 246
9.4.5 Adding Processes 246
9.5 Testing for Changed Requirements 247
9.6 Refactoring the Code 248
9.7 Estimating the Cost of Change 249
9.8 Review 249
Exercises 250
Conundrum 250
Reference 250
10. Documenting and Delivering the System 251
10.1 What is Documentation for and Who Is Going to Use It? 251
10.2 Coding Standards and Documents for Programmers 252
10.3 Coding Standards for Java 253
10.3.1 Genesys Coding Standard for Java 253
10.3.2 Blank Lines 255
10.4 Maintenance Documentation 262
10.5 User Manuals 263
10.6 Version Control 264
10.6.1 The Project Archive 265
10.6.2 Naming Conventions 265
10.7 Delivery and Finalization 266
10.8 Review 267
Exercises 267
Conundrum 267
Reference 267
11. Reflecting on the Process 269
11.1 Skills and Lessons Learned 269
11.2 The XP Experience 270
11.3 Personal and Team Assessment 270
11.4 Review 271
Exercises 271
11.5 Conundrums: Discussion 271
11.6 A Final Word 277
12. Lifestyle Matters 281
12.1 Keeping Fit 282
12.1.1 Correct Sitting Position 283
12.1.2 Combating RSI 284
12.2 General Well-Being 285
12.3 Mental Preparation 285
12.4 Diet 286
12.4.1 Diet and Brain Function 286
12.4.2 Summary of Dietary Information 287
12.5 Music and Work 288
12.6 Review 289
References 290
Appendix 291
Bibliography 305
Index 309
1. What Is an Agile Methodology? 1
1.1 Rapid Business Change: The Ultimate Driver 1
1.2 What Must Agile Methodologies be Able to Do? 2
1.3 Agility: What Is It and How Do We Achieve It? 2
1.4 Evolving Software: Obstacles and Possibilities 5
1.5 The Quality Agenda 6
1.6 Do We Really Need All This Mountain of Documentation? 9
1.7 The Human Factor 10
1.8 Some Agile Methodologies 11
1.8.1 Dynamic Systems Development Method 12
1.8.2 Feature-Driven Design 13
1.8.3 Crystal 14
1.8.4 Agile Modeling 14
1.8.5 Scrum 15
1.8.6 Summary Table 15
1.9 Review 16
Exercise 17
Conundrum 17
References 18
2. Extreme Programming Outlined 19
2.1 Some Guiding Principles 19
2.2 The Five Values 20
2.2.1 Communication 20
2.2.2 Feedback 22
2.2.3 Simplicity 24
2.2.4 Courage 24
2.2.5 Respect 25
2.3 The 12 Basic Practices of XP 25
2.3.1 Test-First Programming 25
2.3.2 Pair Programming 26
2.3.3 On-Site Customer 27
2.3.4 The Planning Game 28
2.3.5 System Metaphor 29
2.3.6 Small, Frequent Releases 30
2.3.7 Always Use the Simplest Solution That Adds Business Value 30
2.3.8 Continuous Integration 31
2.3.9 Coding Standards 32
2.3.10 Collective Code Ownership 32
2.3.11 Refactoring 33
2.3.12 Forty-Hour Week 33
2.4 Can XP Work? 34
2.5 The Evidence for XP 35
2.5.1 Evidence for Test First 35
2.5.2 Evidence for Pair Programming 36
2.5.3 Evidence for XP 36
2.6 Preparing to XP 37
Exercise 37
Conundrum 38
References 39
3. Foundations: People and Teams Working Together 41
3.1 Software Engineering in Teams 41
3.2 Personalities and Team Success 42
3.3 Observations of Team Behavior in XP Projects 46
3.4 Setting Up a Team 50
3.5 Developing Team Skills 52
3.6 Training Together 54
3.7 Finding and Keeping a Client for a University-Based Project or a Small
Business Start-Up 54
3.8 The Organizational Framework 56
3.9 Planning 60
3.9.1 PERT (Program Evaluation and Review Technique) 61
3.9.2 Gantt Charts 62
3.10 Dealing with Problems 65
3.10.1 Basic Strategies 65
3.10.2 When Things Go Really Wrong 66
3.11 Risk Analysis 68
3.12 Review 69
Exercises 69
Conundrum 70
References 70
4. Starting an XP Project 73
4.1 Project Beginnings 73
4.1.1 Researching the Business Background 74
4.1.2 Exploring the Outline System Description 76
4.2 The First Meetings with the Client 79
4.3 Business Analysis and Problem Discovery 80
4.4 The Initial Stages of Building a Requirements Document 82
4.5 Techniques for Requirements Elicitation 84
4.6 Putting Your Knowledge Together 85
4.7 Getting Technical 85
4.8 Developing the Requirements Documents 88
4.9 Specifying and Measuring the Quality Attributes of the System 91
4.9.1 Identifying Attributes 92
4.9.2 Specifying the Acceptable Level of an Attribute 94
4.9.3 User Characteristics and User Interface Characteristics 95
4.10 The Formal Requirements Document and System Metaphor 96
4.10.1 Commentary 106
4.11 Contract Negotiation 108
4.12 Case Study: The Impact of Organizational Politics 114
4.13 Review 116
Conundrum 116
References 117
5. Identifying Stories and Preparing to Build 119
5.1 Looking at the User Stories 119
5.2 Collections of Stories 128
5.2.1 Pharmacovigilance 129
5.2.2 Stamps System 131
5.2.3 DELTAH (Developing European Leadership Through Action-Learning in
Healthcare) 131
5.3 User Interfaces 139
5.4 Communicating Clearly with the Customer and Building Confidence 141
5.5 Demonstrating the Non-Functional Requirements 143
5.5.1 Non-Functional Requirements 143
5.6 Estimating Resources 144
5.6.1 Software Cost Estimation 145
5.6.2 Object Point Analysis 146
5.6.3 Cosmic Ffp 147
5.7 Review 149
Exercises 149
Conundrum 150
References 151
6. Bringing the System Together as a Coherent Concept 153
6.1 What is the Problem? 153
6.2 A Simple Common Metaphor 156
6.3 Architectures and Patterns 159
6.4 Finite State Machines 160
6.5 Extreme Modeling (XM) 163
6.6 Multiple Stories and XXMs 166
6.7 Building the Architecture to Suit the Application: A Dynamic System
Metaphor 171
6.8 Another Look at Estimation 177
6.9 Review 179
Exercise 180
Conundrum 180
References 180
7. Designing the System Tests 181
7.1 Preparing to Build Functional Test Sets 181
7.1.1 Tests and Testing 181
7.1.2 Testing from a Model 183
7.1.3 Developing the Model 187
7.2 Testing with the Data in Mind 191
7.3 The Full Functional System Testing Strategy 192
7.4 The Thinking Behind the System Test Process 193
7.4.1 An Algorithm for Determining the Transition Cover 198
7.5 Design for Test 201
7.5.1 Design for Test Principle 1: Controllability 202
7.5.2 Design for Test Principle 2: Observability 202
7.6 Test Documentation 203
7.7 Non-Functional Testing 205
7.7.1 Reliability 206
7.7.2 Usability 206
7.7.3 Efficiency 207
7.7.4 Portability 207
7.8 Testing Internet Applications and Web Sites 207
7.9 Review 209
Exercise 210
Conundrum 213
References 213
8. Units and Their Tests 215
8.1 Basic Considerations 215
8.2 Identifying the Units 216
8.3 Unit Testing 219
8.4 More Complex Units 222
8.4.1 Case Example: The AddElement Function in JHotDraw 223
8.5 Automating Unit Tests 232
8.5.1 Writing Unit Tests in JUniti 233
8.5.2 Managing Tests 235
8.6 Documenting Unit Test Results 235
8.7 Review 237
Exercises 237
Conundrum 237
References 238
9. Evolving the System 239
9.1 Requirements Change 239
9.2 Changes to Basic Business Model and Functionality 240
9.3 Dealing with Change: Refining Stories 241
9.3.1 Changes to the Underlying Data Model 241
9.3.2 Changes to the Structure of the Interface, Perhaps the Introduction
of a New Screen 242
9.3.3 Adding a New Function 242
9.3.4 Changing the Functionality of a Function 242
9.4 Changing the Model 242
9.4.1 Changing a Process 242
9.4.2 Removing States 244
9.4.3 Adding States 245
9.4.4 Adding a Complete Machine 246
9.4.5 Adding Processes 246
9.5 Testing for Changed Requirements 247
9.6 Refactoring the Code 248
9.7 Estimating the Cost of Change 249
9.8 Review 249
Exercises 250
Conundrum 250
Reference 250
10. Documenting and Delivering the System 251
10.1 What is Documentation for and Who Is Going to Use It? 251
10.2 Coding Standards and Documents for Programmers 252
10.3 Coding Standards for Java 253
10.3.1 Genesys Coding Standard for Java 253
10.3.2 Blank Lines 255
10.4 Maintenance Documentation 262
10.5 User Manuals 263
10.6 Version Control 264
10.6.1 The Project Archive 265
10.6.2 Naming Conventions 265
10.7 Delivery and Finalization 266
10.8 Review 267
Exercises 267
Conundrum 267
Reference 267
11. Reflecting on the Process 269
11.1 Skills and Lessons Learned 269
11.2 The XP Experience 270
11.3 Personal and Team Assessment 270
11.4 Review 271
Exercises 271
11.5 Conundrums: Discussion 271
11.6 A Final Word 277
12. Lifestyle Matters 281
12.1 Keeping Fit 282
12.1.1 Correct Sitting Position 283
12.1.2 Combating RSI 284
12.2 General Well-Being 285
12.3 Mental Preparation 285
12.4 Diet 286
12.4.1 Diet and Brain Function 286
12.4.2 Summary of Dietary Information 287
12.5 Music and Work 288
12.6 Review 289
References 290
Appendix 291
Bibliography 305
Index 309