If Given No Direction on Process • We start where many of us are “most comfortable” - programming and low level design • Most small establishments also focus on programming and low level design first Requirements & Architecture Low Level Design & Code Testing & Integration past class inputs : “many people are entering the software environment via contacts with IS/IT or other support groups; thus the support process may also be a starting point.” Coding Low level Design Code Compile Debug Unit Test works ? For most of us --- this is what we are “most used to” “done!” Software Development Process • What is a Process ?: – a set of ordered tasks aimed at achieving some end goals • What is a Software Development Process : – a set of ordered tasks aimed at producing software solutions ---- the tasks include: • requirements understanding, specification, and agreement of problem • architecture and design of the solution • construction and programming of the solution • testing of the solution • integration of the solution • installation and deployment of the solution • supporting, fixing, and evolving the solution Note: Each of these tasks may itself be a Sub-Process containing ordered subtasks Why Have a Process at all ? • Large Software development requires a group of people - coordination of activities is key • Process imposes a set of structure and consistency: – forms a common understanding of the ordered tasks, constraints, and needed resources – allows the detection of any omission and of problems in the development of solution – clarifies the goals of the software solutions via emphasizing and modifying the process (e.g. introducing review for quality) – allows the tailoring and improvement for development of different types of software. • Defined process allows us to capture our experiences and then reuse, improve, and/or pass it on to others Some Key Process Models • Major models: – – – – – – Waterfall V-model Prototyping Phased Model (Incremental and Iterative) Spiral Agile (e.g. X-treme programming) • Minor ones (rarely talked about in industry, now) : – Operational : (nail down the requirements and combine with design/code - almost like prototyping) – Transformational : (“formal” evaluation of the actual transformations from one phase to another phase) Waterfall Process • The most familiar and modeled after hardware and manufacturing process • This process with each stage not starting until the previous one is completed was attractive: – easy to track for management – deliverables are well defined • There are some serious drawbacks: – the actual “testing” of the code comes very late in the process – customer interaction did not happen except at the requirements phase – “real” development stages are not that crisp in that more interaction and iteration is required because software development is not manufacturing except at the packaging and copying stage Requirements Design (Spec.) (Spec.) Program & Unit Test (Code) Test (Spec.& test result) Integrate & System Test (System) Package & Release (System) V-Model • This is similar to the Waterfall Model except the association of different testing (test case design) phases are aligned with the requirements, design, and code phases for error corrections. Test Case Design Requirements System Test & Packaging Test Case Integration & Design Functional Test Design Code Unit Test Prototyping Model • Allows better understanding and revisions of the users’ requirements, especially UI. • Allows better explorations of feasibility of unknown areas. • Usually coupled with waterfall or any other processes. Requirements Prototype Design changes Integrate System changes Prototype Prototype Phased Development Model • Many reasons to develop the solution in phases: 1. 2. 3. 4. • There are 2 major approaches: – Things are never very clean Delivering some part fast and early Getting reactions early and being able to adjust Some early training and familiarization of users Allows the staggering of & reuse of skills and technology – Incremental : breaking the requirements into separate vertical application parts ; develop and deliver the parts as fully functional application subsystems. Iterative: break the system into separately designed horizontal cross application parts (applications with simple screens with little error recovery, enhanced error messages and context sensitive help, enhanced performance and speed, etc..); develop and deliver the various parts as complete, cross application components How would we develop Incrementally & Iteratively? “Vertical” App Component Design F1 F2 .... Fn User Int / levels of GUI “Horizontal” Common Function Design Help/Error Messages “Reprocess” Mechanism Import/Export data sharing mechanism installation mechanism Spiral Model • Introduced by Barry Boehm at TRW to combine development process with “enhanced” risk management. • There are four major aspects : – – – – planning setting goals and looking at alternatives evaluate the alternatives and the risks develop and test (perform the task) • Each of development phases such as requirements, design, etc. goes through the four aspects. Setting goal & alternatives Plan Design Prototype alternatives & analyze risks Develop & Test (perform the task) Agile Processes • There are several “agile” processes: – – – – Extreme Programming –XP Crystal SCRUM Adaptive Software Development • Some commonalities among the Agile processes: 1. 2. 3. 4. 5. 6. Develop in small increments Frequent “delivery” of the increments Small teams of people Focus on customer collaboration, rather than legal contracts Value human and human interaction more than documentation and process/tools Accommodate changes, rather than excessive front end planning and follow the plan rigidly --- believe in “changes” A lot like the earlier “phased incremental & iterative process” Extreme Programming (XP) • A Programming practice or set of principles originated by Kent Beck in the mid-90’s. • Based on the concept of quick and constant “Feedback Mechanism” involving: some recognition of “human” aspects • • • • • • • • • • • Planning Game (Small Units of Requirements) Onsite Customer (Immediate and better feedback) Metaphor (Use one set of metaphor for design/architecture) Simple Design (Just enough to cover what’s needed) Collective Code Ownership (Peer pressure to improve code) Pair Programming (Feedback and shared improvements) Coding Standard (Facilitates better communication) Refactoring (Continuous examination for code improvement) Continuous Functional and Unit Testing (100% completion of test) Continuous Integration (integrating small functional “releases”) 40 hour work (high morale and energy level) Extreme Programming “Process” Onsite Customers System Metaphors Coding standards Simple Design Planning Pair Programming Game (requirements) Refactoring Functional &Unit Test Collective Code Ownership Continuous Integration Larger Release Adhere to 40 hour work week as much as possible ! Small Releases A Note for Your Project Assignment • Reminder: 2nd part of your semester project WILL be a “team project” – So ---- think about agreeing on a process modeled after one of these “macro-processes” --- see earlier slide #4 on why process is needed. Do you need to think about process this early in the game? ---- What do you say? Process Plays an Important Role in Software Engineering • Process Modeling and Studying – building static models to depict understand the process model – building dynamic models to run and predict outcomes of process model • Process improvements and enforcement – ISO 9000 – CMM and CMMI Process “modeling,” although a good idea, is very difficult due to the great variability in human behavior ---- so far it has not been done very successful. Studying Process or Sub-Process Preconditions Postconditions Process or Sub-process Description Outputs Inputs Measurements of Success: - schedule reduction - cost reduction - improved quality - etc. Difficult to show How Do We Describe the Process • Pre and Post conditions : how much do we specify (people skills, tools readiness, previous process completion status, etc.) • Input : all the inputs and to what degree • Outputs : all the outputs and to what degree • Process Description : how detailed ; how should it be represented (graphical, textual, etc.) • Should all these descriptions be static descriptions or dynamic and possibly “executable ?” (Leon Osterweil’s proposal in late 1980’s) • Don’t Worry about the Lai notation (Static model) & other process modeling discussions towards the end of Chapter 2 Some “Desirable Properties” of Process Descriptions 1. Facilitates the communication of and the understanding of the process. (check your book and my lecture notes --- communicated “deep” enough?) – – 2. Allows reuse of all or parts of the process allows improvements and adjustments Allows the management of process – provides metrics and measurements on the process 3. Provides more than just description – – give some guidance on how to execute the process deep enough to automate parts of or all of the process Top 2 Industry Process “standards” • ISO 9000 – Very Document Oriented – Popular in Europe and among Manufacturing industry – Popular in the early 90’s • CMM/CMMI – CMM Has 5 levels of maturity, each level addresses a set of “Key” processes - except for level 1 – For continuous improvements – Start to gain popularity among service companies Agile’s --- SCRUM is the currently “popular” process