This textbook is about working in teams to create functioning software. It covers skills in agile software development methods, team working, version control and continuous integration and shows readers how to apply some of the latest ideas from lean, agile and Kanban.
Part I, which focuses on People, describes various project roles and the skills needed to perform each role. This includes members of self-organizing teams, scrum masters, product owners and activities for managing other stakeholders. The skills needed to create Product artefacts are detailed in Part II. These include skills to create agile requirements, architectures, designs as well as development and security artefacts. The agile development Process to coordinate with co-workers is described in Part III. It introduces the skills needed to facilitate an incremental process and to use software tools for version control and automated testing. Eventually some more advanced topics are explained in Part IV. These topics include large projects comprising multiple cooperating teams, automating deployment, cloud software services, DevOps and evolving live systems.
This textbook addresses significant competencies in the IEEE/ACM Computing Curricula Task Force 2020. It includes nearly 100 exercises for trying out and applying the skills needed for agile software development. Hints, tips and further advice about tackling the exercises are presented at the end of each chapter, and a case study project, with downloadable source code from an online repository, integrates the skills learned across the chapters. In addition, further example software projects are also available there. This way, the book provides a hands-on guide to working on a development project as part of a team, and is inspired by the needs of early career practitioners as well as undergraduate software engineering and computer science students.
Author(s): Julian Michael Bass
Publisher: Springer
Year: 2023
Language: English
Pages: 327
City: Cham
Preface
Book Structure
IEEE/ACM Computing Curriculum Competencies
Exercises
How to Use This Book
Learning Journal
Tabby Cat Project
Student Group Projects and Hackathons
Prior Knowledge
Acknowledgements
Contents
1 Introduction and Principles
1.1 Agile Software Skills
1.1.1 People
1.1.2 Product
1.1.3 Process
1.1.4 Advanced Skills
1.2 Engineering Software
1.3 Tabby Cat Project
1.4 Supporting Resources
1.5 Evidence Underpinning the Book
1.6 Software HackCamp
1.7 Create Yourself a Livelihood
References
Part I People
Other Book Parts
2 Self-Organising Teams
2.1 Introduction
2.2 Self-Organising Teams
2.2.1 Attributes of Self-Organising Teams
2.3 Groups and Teams
2.3.1 Building Team Performance
2.4 Agile Principles
2.4.1 Sustainable Pace
2.4.2 Collective Code Ownership
2.5 Forming Teams
2.5.1 Accelerating Team Formation
2.5.2 Handling Difference and Conflict
2.5.3 Accelerating Norming
2.6 Collaboration Activities Within Self-Organising Teams
2.6.1 Mentor
2.6.2 Co-ordinator
2.6.3 Translator
2.6.4 Champion
2.6.5 Promoter
2.6.6 Terminator
2.7 Virtual Teams
2.7.1 Principles for Virtual Team Management
2.7.2 Preparation for Team Success
2.7.2.1 Cultural Diversity
2.7.2.2 Remote Pair Programming
2.7.3 Launch
2.7.4 Performance Management
2.8 Communities of Practice
2.9 Exercises
2.10 Hints, Tips and Advice on Exercises
2.11 Chapter Summary
References
3 Agile Roles
3.1 Introduction
3.2 Scrum Master
3.2.1 Process Anchor
3.2.2 Iteration Planner
3.2.3 Stand-up Facilitator
3.2.4 Impediment Remover
3.2.5 Integration Anchor
3.3 Product Owner/On-site Customer
3.3.1 Product Grooming
3.3.2 Prioritiser
3.3.3 Release Master
3.3.4 Communicator
3.3.5 Traveller
3.3.6 Intermediary
3.4 Product Owner Behaviours
3.4.1 Favour Face-to-Face Interactions
3.4.2 Understand and Focus on Real Goals
3.4.3 Make Product Owner Teams Well Defined
3.5 Other Roles: For Larger Projects
3.5.1 Product Sponsor
3.5.2 Technical Architect
3.6 Exercises
3.7 Hints, Tips and Advice on Exercises
3.8 Chapter Summary
References
4 Managing Stakeholders
4.1 Introduction
4.2 Managing Upwards
4.2.1 Set Expectations
4.2.2 Confess to Catastrophe
4.2.3 Share Success
4.2.4 Unreasonable Demands
4.3 Managing Outwards
4.4 Contracts
4.4.1 Contracts and Change Requests
4.4.2 Time and Materials Contracts
4.4.3 Outsourcing Contracts
4.4.4 Offshoring Contracts
4.4.5 Academic Contracts
4.4.6 Negotiating Contracts
4.5 Communication Quality
4.5.1 Audience
4.5.2 Narrative
4.5.3 Language
4.5.4 Process
4.6 Communication Tools
4.6.1 Reports
4.6.1.1 Report Composition
4.6.1.2 Report Content
4.6.2 Presentations
4.6.2.1 Presentation Types
4.6.2.2 Presentation Content
4.6.2.3 Presentation Delivery
4.6.2.4 Presentation Rehearsal
4.6.3 Blogs and Wikis
4.6.4 Videos
4.7 Exercises
4.8 Hints, Tips and Advice on Exercises
4.9 Chapter Summary
References
5 Ethics
5.1 Introduction
5.2 What Went Wrong?
5.2.1 Algorithms and Inequality
5.2.2 Platforms and Fake Markets
5.2.3 Errors, Faults and Failures
5.2.4 Criminal and Unethical Behaviour
5.3 Copyright and Patents
5.4 Professional Bodies
5.4.1 BCS Codes of Conduct
5.4.2 ACM Codes of Ethics
5.4.3 Problems with Codes of Ethics
5.5 Activism
5.5.1 Whistle-Blowing
5.5.2 Unions
5.6 Professional Development
5.6.1 Initial Professional Development
5.6.2 Continuing Professional Development
5.6.3 Skills Framework for the Information Age
5.6.4 Other Training and Development
5.7 Exercises
5.8 Hints, Tips and Advice on Exercises
5.9 Chapter Summary
References
6 Tabby Cat Project, Getting Started
6.1 Introduction
6.2 Online Repository Activities
6.3 Actually Getting Started
6.4 Sprint Zero
6.5 Subsequent Sprints
6.6 Chapter Summary
Reference
Part II Product
Other Book Parts
7 Requirements
7.1 Introduction
7.2 Types of Requirements
7.2.1 Functional Requirements
7.2.2 Non-functional Requirements
7.2.3 Incremental Requirements
7.3 Requirements Quality
7.3.1 Requirements Precision
7.3.2 Requirements Consistency
7.3.3 Requirements Completeness
7.4 Use Cases
7.4.1 Use Case Diagrams
7.4.2 Use Case, Descriptions
7.5 User Stories
7.6 User Story Mapping
7.7 Personas
7.8 Exercises
7.9 Hints, Tips and Advice on Exercises
7.10 Chapter Summary
References
8 Architecture
8.1 Introduction
8.2 Architecture in Agile
8.2.1 Refactoring
8.2.2 Rework
8.2.3 Planned Refactoring
8.2.4 Architectural Abstraction
8.3 Design Styles
8.3.1 Client-Server
8.3.2 Repository Architecture
8.3.3 Pipe and Filter
8.3.4 Layered Architecture
8.3.5 Clean Architecture
8.4 Reference Architectures
8.5 Design Principles
8.5.1 KISS Principle
8.5.2 DRY (Do Not Repeat Yourself)
8.5.3 YAGNI (You Aren't Gonna Need It)
8.5.4 GRASP
8.5.5 SOLID
8.6 Architecture Implementation
8.7 Exercises
8.8 Hints, Tips and Advice on Exercises
8.9 Chapter Summary
References
9 Design
9.1 Introduction
9.2 Feature-Driven Development
9.3 System Modelling
9.4 Class Diagrams
9.4.1 Deriving Class Diagrams
9.4.1.1 Noun and Noun Phrases
9.4.1.2 Verb and Verb Phrases
9.4.2 Domain Models
9.4.3 High-Level Design Class Diagrams
9.4.4 Detailed Design Class Diagrams
9.5 Object Sequence Diagrams
9.6 Design Patterns
9.6.1 Singleton Pattern
9.6.2 Model View Controller
9.6.3 Factory Pattern
9.7 Technology Stack Selection
9.8 Model-Driven Engineering
9.9 Exercises
9.10 Hints, Tips and Advice on Exercises
9.11 Chapter Summary
References
10 Development
10.1 Introduction
10.2 Planning Artefacts
10.2.1 Kanban Boards
10.2.2 Product Backlog
10.2.3 Test Plan
10.3 Iteration Artefacts
10.3.1 Iteration Backlog
10.3.2 User Story Estimates
10.3.3 Burn Down Chart
10.4 Feature Artefacts
10.4.1 Prototypes
10.4.2 Source Code
10.4.3 Unit Tests
10.4.4 Issues
10.5 Release Artefacts
10.5.1 Release Code Binaries
10.5.2 Regression Tests
10.6 Exercises
10.7 Hints, Tips and Advice on Exercises
10.8 Chapter Summary
References
11 Security
11.1 Introduction
11.2 Security Analysis
11.2.1 Security Objectives
11.2.2 Threat Model
11.3 Security Requirements
11.3.1 Security Mitigation Requirements
11.3.2 Abuse Stories
11.3.3 Security Personas and Anti-personas
11.3.4 Risk and Risk Management
11.4 Security Design
11.4.1 Security Patterns
11.5 Security Implementation
11.5.1 Abuse Story Implementation
11.5.2 OWASP Top Ten
11.5.3 Authentication
11.6 Security Evaluation
11.6.1 Manual Security Inspections and Reviews
11.6.2 Automated Security Testing
11.7 Agile Security Processes
11.7.1 Roles
11.7.2 Artefacts
11.7.3 Ceremonies
11.8 Exercises
11.9 Hints, Tips and Advice on Exercises
11.10 Chapter Summary
References
12 Tabby Cat Project: Getting Building
12.1 Introduction
12.2 Requirements
12.2.1 Functional Requirements
12.2.2 Non-functional Requirements
12.3 Architecture
12.3.1 Architectural Style
12.3.2 Client-Server
12.4 Design
12.4.1 Back-End Design
12.4.2 Front-End Design
12.5 Development
12.5.1 Back-End Technologies
12.5.2 Front-End Technologies
12.5.3 Code Organisation
12.6 Security
12.7 Illustrative Implementation
References
Part III Process, Tools and Automation
Other Book Parts
13 Agile Ceremonies
13.1 Introduction
13.2 Iteration Planning
13.2.1 Prioritisation
13.2.2 Features and Technical Tasks
13.2.3 Estimation
13.2.3.1 Story Point Estimation
13.2.3.2 T-Shirt Sizing
13.2.4 Task Assignment
13.3 Coordination Meetings
13.3.1 Virtual Stand-Up Meetings
13.3.2 Kanban Boards
13.4 Customer Demonstrations
13.4.1 Retrospectives
13.5 Pair Programming
13.6 Test-Driven Development
13.7 Specialist Agile Ceremonies
13.7.1 Spikes
13.7.2 Swarm Programming
13.7.3 Mob Programming
13.8 Exercises
13.9 Hints, Tips and Advice on Exercises
13.10 Chapter Summary
References
14 Lean
14.1 Introduction
14.1.1 Respecting People
14.1.2 Create Knowledge
14.1.3 Build Quality In
14.2 Value
14.2.1 Non-monetary Value
14.2.2 Value Stream Mapping
14.2.3 Definition of Done
14.3 Waste
14.3.1 Partially Done Work
14.3.2 Superfluous Features
14.3.3 Rework
14.3.4 Hand-Offs
14.3.5 Task Switching
14.3.6 Delays
14.3.7 Defects
14.4 Speed
14.4.1 Work-in-Progress Limits
14.4.2 Work Item Variability
14.5 Lean Start-Up
14.5.1 Bootstrapping
14.5.2 Minimum Viable Product
14.5.3 Pivot
14.6 Exercises
14.7 Hints, Tips and Advice on Exercises
14.8 Chapter Summary
References
15 Version Control
15.1 Introduction
15.2 Content Management
15.2.1 Create a Local Git Repository
15.3 Source Code History
15.3.1 Stage Files for Inclusion in the Version Control Repository
15.3.2 Commit Files into the Version Control Repository
15.3.3 Making and Removing a Change
15.4 Source Code Remote Archiving
15.4.1 Version Control Remote Server Archiving
15.5 Source Code Sharing
15.5.1 Trunk and Branches
15.6 Exercises
15.7 Hints, Tips and Advice on Exercises
15.8 Chapter Summary
References
16 Testing and Test Automation
16.1 Introduction
16.2 Test Planning
16.3 Testing Levels
16.3.1 Unit Testing
16.3.2 Integration Testing
16.3.3 System Testing
16.3.4 Acceptance Testing
16.4 Testing Techniques
16.4.1 Regression Testing
16.4.2 User Experience Testing
16.4.3 Performance Testing
16.4.4 Security Testing
16.4.5 A/B Testing
16.5 Test Automation
16.5.1 Unit Test Automation
16.5.2 Acceptance Test-Driven Development
16.5.3 Behaviour-Driven Development
16.6 Exercises
16.7 Hints, Tips and Advice on Exercises
16.8 Chapter Summary
References
17 Tabby Cat Project: Process, Tools and Automation
17.1 Introduction
17.2 Agile Ceremonies and Lean Thinking
17.3 Version Control
17.4 Testing and Test Automation
References
Part IV Advanced Skills
Other Book Parts
18 Large-Scale Agile
18.1 Introduction
18.2 Distance
18.2.1 Geographical Distance
18.2.2 Temporal Distance
18.2.3 Cultural Distance
18.3 Large-Scale Artefacts
18.3.1 Risk Register
18.3.2 Architecture Standards
18.4 Large-Scale Scrum Master Activities
18.4.1 Scrum-of-Scrums Facilitator
18.4.2 Agile Coach
18.5 Large-Scale Product Owner Activities
18.5.1 Product Sponsor
18.5.2 Risk Assessor
18.5.3 Governor
18.5.4 Technical Architect
18.5.5 Technical Product Owner
18.5.6 Product Owner: Market Trends
18.6 Spotify Culture
18.6.1 Squads
18.6.2 Chapters
18.6.3 Tribes
18.6.4 Guilds
18.6.5 Architectural Alignment
18.7 Other Frameworks
18.7.1 Large-Scale Scrum
18.7.2 SAFe
18.8 Chapter Summary
References
19 Cloud Deployment
19.1 Introduction
19.2 Cloud Service Models
19.2.1 Infrastructure-as-a-Service
19.2.2 Platform-as-a-Service
19.2.3 Software-as-a-Service
19.2.4 Serverless Computing
19.3 Cloud-Hosted Application Patterns
19.3.1 Scalability
19.3.2 Multi-Tenancy
19.3.3 Automated Customer On-Boarding
19.3.4 Revenue Generation
19.3.5 `n'-Tier Architectures
19.4 Automated Deployment
19.5 Containerisation
19.6 Chapter Summary
References
20 Technical Debt, Software Evolution and Legacy
20.1 Introduction
20.2 Technical Debt
20.2.1 Technical Debt and Agile
20.2.2 Refactoring
20.3 Software Evolution
20.3.1 Wrappering
20.3.2 Re-engineering
20.4 Legacy Systems
20.5 Chapter Summary
References
21 DevOps
21.1 Introduction
21.2 Build and Deployment Pipelines
21.2.1 Conventional Deployment Team Structures
21.2.2 Self-Organising Deployment Team Structures
21.3 Pipeline Automation
21.4 Test Integration
21.4.1 Testing New Features
21.4.2 Regression Testing Legacy Features
21.5 Continuous Integration
21.6 DevOps and DevSecOps
21.7 Continuous Delivery and Deployment
21.8 Chapter Summary
References
A Research Methods
A.1 Research Sites
A.2 Data Collection
A.3 Data Analysis
A.3.1 Open Coding
A.3.2 Memo Writing
A.3.3 Constant Comparison
A.3.4 Saturation
References
B Further Reading
B.1 Core Reading
B.2 More Specialist Topics
B.3 Software Engineering Research
References
Index