Chapter 2 Building a System Introduction • Explore differences between building a program and building a system • Identify techniques to cope with these differences Building a System • Writing a program vs Building a system • What’s the difference? Size and Complexity • Size - Lines of Code (LOC) – – – – School projects: 100 – 5,000 DISCUS: 2 million Windows 10: 50 million Google: 2 billion • Effort – Full Time Equivalent (FTE) Resources – – – – School projects: < 1 FTE DISCUS: < 200 FTE (5 – 25 developers for 10+ years) Windows 10: 7,000 developers x ?? years Google: 30,000 developers x ?? years Increased Complexity Everywhere Problem Increase in size & complexity Transformation Increase in effort due to size & complexity • Breadth of Complexity • Depth of Complexity Solution Increase in size & complexity Complexity (Breadth) • More Functions • More Features within each functionality • More varieties of Interfaces (internal & external) • More Users and varieties of users • More data, varieties of data, data structures Breadth of Complexity Complexity (Depth) • More Linkages and Connections – Data sharing among the functionalities & logic – Control Passing among functionalities Depth of Complexity Handling Complexities • Simplification – Decomposition of the problem and of solution – Modularization of solution – Separation of Concerns of problem and of solution – Incrementally resolve problems • Reduce the Problem – Postpone or eliminate functionality – Utilize existing functionality Handling Complexities • Improve Technology and Tools – Database Management System (DBMS): Addresses large amounts of data and relationships – Interactive Development Environment (IDE): Reduces syntactic errors and decreases debugging effort – Computing Network: Enables developers to split development tasks even when dispersed geographically – Multi-Developer Configuration Management: Coordinates development effort – Modeling techniques: Simplifies problem and solution through abstraction – Automated Testing: Reduces effort for testing tasks Handling Complexities • Improve Process and Methodologies – Coordinate multiple and different people performing different tasks – Guidance for overlapping incremental tasks – Guidance for measuring separate artifacts and outcomes Example of Size and Complexity Increases Simple Increased Size and Complexity Start Start Wait for signal Perform task A Signal is? Perform task B ‘a’ Perform task A other ‘b’ Perform task C Perform task C Perform task A2 Perform task B Stop Stop Task Breakdown (Macro) Example Handling Complexity Requirements Definition Code/Unit Test Design Support & Problem Fixes Integration & System Test 1. Who performs what task? 2. How is the task completed with what technique or tool? 3. When should which task start and end? 4. Who should coordinate the people and the tasks? Iterative Process Example Handling Complexity Understanding the Broad Problem (Req.) Architecture and High Level Design Specific Requirements . . Detail design . . Code . . Specific Requirements . . . Detail design . . . Code Integration Test / Fix Test / Fix Handling the “Details” Separately Integration Test / Fix Test / Fix • Test/Fix and Integrate steps: – – – – – – – – Should there be a separate and independent test group? How should problems be reported and to whom? How much information must accompany a problem report? Who decides on the priority of the problem? How is the problem fix returned? Should all problems be fixed? How are fixes integrated back to the system? What should we do problems that are not fixed? Some ‘Non-technical’ Considerations • Effort & Schedule Expansion – How does one estimate and handle this? • Assignment and Communications Expansion? – Do we need some process? – Do we need some tools? Requires more effort, more resources, etc. Increases in system complexity increases effort (i.e., human resources) in a non-linear ways. For example, communication - 2 people: 1 path 4 people: possibly 6 paths 6 people: potentially 15 paths For n people, number of potential communications paths = ∑ (n-1) = [n x (n-1)] / 2 As # of people increases, amount of communications increases Also, an increase in the number of communications errors committed How can the increase in the number of people be managed to minimize the increase in communication? A Large, Complex System • What is a Mission or Business Critical system • Building Mission Critical system requires – Several separate activities performed by – More than 1 person (e.g. 50 ~ 100): • Separate Activities – Requirements: elicitation, analysis, specification, and agreement – Design: Architecture, abstraction, decomposition, interaction, cohesion and coupling analysis – Implementation: language choices, coding and unit testing – Integration and tracking of pieces and parts – Separate testing: functional testing, component testing, system testing, and performance testing – Packaging and releasing the system Support of System after Release Complex Systems are never perfect • Pre-release: preparation for education & support: – Number of expected users – Number of known problems and expected quality – Amount of training for both user and support personnel – Fix and maintenance cycle • Post-release: preparation for user/customer support: – Call center and problem resolutions – Major problem fixes and code changes – Functional modifications and enhancements Coordination • Because there are more – parts, – developers and – users • There is the need for Coordination of (3P’s): – Processes and methodologies to be used – Product and intermediate artifacts – People (developers, support personnel, and users) Summary • Systems are orders of magnitude larger and more complex than any program • Size and complexity increases effort necessary to develop systems in nonlinear ways • Organization, processes and tools are necessary to manage the size and complexity of systems