Software Engineering Processes

Slides:



Advertisements
Similar presentations
Software Engineering Processes
Advertisements

Chapter 2 Modeling the Process and Life Cycle Shari L. Pfleeger
The software process A software process is a set of activities and associated results which lead to the production of a software product. This may involve.
SEP1 - 1 Introduction to Software Engineering Processes SWENET SEP1 Module Developed with support from the National Science Foundation.
Processes. Outline Definition of process Type of processes Improvement models Example Next steps… 1.
Alternate Software Development Methodologies
Agile
Software Engineering Processes
 The Rise of Computer Science ◦ Machine Language (1 st Gen) ◦ Assembly Language (2 nd Gen) ◦ Third Generation Languages (FORTRAN, BASIC, Java, C++, etc.)
CS 5150 Software Engineering
Software Engineering Processes
Jul The New Geant4 License J. Perl The New Geant4 License Makes clear the user’s wide- ranging freedom to use, extend or redistribute Geant4, even.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 4 Slide 1 Software Processes.
Software Development Models: Waterfall and Spiral Sung Hee Park Department of Mathematics and Computer Science Virginia State University August 21, 2012.
1 These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 5/e and are provided with permission by.
CompSci 230 Software Design and Construction
THE PROTOTYPING MODEL The prototyping model begins with requirements gathering. Developer and customer meet and define the overall objectives for the software.
Dr. Tom WayCSC Software Processes CSC 4700 Software Engineering.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 4 Slide 1 Software Processes.
CS 360 Lecture 3.  The software process is a structured set of activities required to develop a software system.  Fundamental Assumption:  Good software.
X3D Graphics for Web Authors X3D-Edit Update SIGGRAPH 2008 Don Brutzman Naval Postgraduate School Monterey California USA.
Blue Diamond Scott Auge Amduus Information Works, Inc.
Software Life Cycle Models. Waterfall Model  The Waterfall Model is the earliest method of structured system development.  The original waterfall model.
Andrew McNab - License issues - 10 Apr 2002 License issues for EU DataGrid (on behalf of Anders Wannanen) Andrew McNab, University of Manchester
Extreme Programming (XP). Agile Software Development Paradigm Values individuals and interactions over processes and tools. Values working software over.
Agile
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 4 Slide 1 Software Processes.
Software Engineering Processes
Software Engineering Processes
Chapter 2 Software processes. Topics covered Software process models Process activities Coping with change.
National Alliance for Medical Image Computing Licensing in NAMIC 3 requirements from NCBC RFA (paraphrased)
Requirements Engineering Requirements Engineering in Agile Methods Lecture-28.
Agile. Processes Waterfall Traditional With prototyping Sprial Agile Dynamic Systems Development Method (DSDM) Scrum Crystal eXtreme Programming (XP)
Modelling the Process and Life Cycle. The Meaning of Process A process: a series of steps involving activities, constrains, and resources that produce.
Software Development Process CS 360 Lecture 3. Software Process The software process is a structured set of activities required to develop a software.
Agile Development Chapter 10 - part 2. Agile Philosophy  A guiding philosophy and set of guidelines for : developing information systems in an unknown,
Software Development. The Software Life Cycle Encompasses all activities from initial analysis until obsolescence Analysis of problem or request Analysis.
CS 389 – Software Engineering Lecture 2 – Part 2 Chapter 2 – Software Processes Adapted from: Chap 1. Sommerville 9 th ed. Chap 1. Pressman 6 th ed.
Laurea Triennale in Informatica – Corso di Ingegneria del Software I – A.A. 2006/2007 Andrea Polini II. Software Life Cycle.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 17 Slide 1 Rapid software development.
Embedded Systems Software Engineering
Software Development.
Schedule & effort
Methodologies and Algorithms
Lecture 3 Prescriptive Process Models
Evaluating Requirements
CS 5150 Software Engineering
Continuous improvement
Software Engineering: A Practitioner’s Approach, 6/e Chapter 4 Agile Development copyright © 1996, 2001, 2005 R.S. Pressman & Associates, Inc. For University.
Evaluating Architectures
Agile
Software Process Models
Approaches to Systems Development
Software Engineering: A Practitioner’s Approach, 7/e Chapter 2 Prescriptive Process Models copyright © 1996, 2001, 2005 R.S. Pressman & Associates, Inc.
Software Engineering: A Practitioner’s Approach, 7/e Chapter 2 Prescriptive Process Models copyright © 1996, 2001, 2005 R.S. Pressman & Associates, Inc.
Introduction to Software Engineering
COMP 350: Object Oriented Analysis and Design Lecture 2
Chapter 2 Modeling the Process and Life Cycle Shari L. Pfleeger Joanne M. Atlee 4th Edition.
Chapter 2 Software Processes
Chapter 2 – Software Processes
Agile Process: Overview
Gathering Systems Requirements
Software Process Models
Software Architecture
Individuals and interactions
Customer collaboration
Rapid software development
Gathering Systems Requirements
Requirements
Agile software development
Presentation transcript:

Software Engineering Processes http://www.flickr.com/photos/arne-list/2586460111/sizes/l/

Do you want to build “dog houses” or “high rises”? If you want to build a dog house, you can pretty much start with a pile of lumber, some nails, and a few basic tools, such as a hammer, saw, and tape measure. In a few hours, with little prior planning, you'll likely end up with a dog house that's reasonably functional... If you want to build a high-rise office building, it would be infinitely stupid for you to start with a pile of lumber, some nails, and a few basic tools. Because you are probably using other people's money, they will demand to have input into the size, shape, and style of the building.... You will want to do extensive planning, because the cost of failure is high. You will be just a part of a much larger group responsible for developing and deploying the building, and so the team will need all sorts of blueprints and models to communicate with one another.... -- Grady Booch, The Unified Modeling Language User Guide So how do we go about planning to build a “high rise” software system? http://www.amazon.com/Unified-Modeling-Language-Addison-Wesley-Technology/dp/0201571684

Development process Process = a set of ordered tasks Typical software tasks: Figuring out what the system should do (requirements) Figuring out how the system should do it (design) Writing the code for the system (implementation) Making sure that the code is right (testing) Using the system (operation) Should imply some planning and risk management Different processes order tasks differently

Requirements analysis Ways to figure out what the system should do: Get the customers to write down what they want Talk with customers and make some diagrams Watch users in “daily life” to see what they need Look up the requirements from a standards body Gather with customers, users, and your fellow engineers to discuss/argue/negotiate a contract Any combination, variation, or extension of the above Ways to figure out what the system should do: Think/share exercise

Requirements analysis helps to identify important quality attributes Reliability Efficiency Integrity Usability Maintainability Testability Flexibility Portability Reusability Interoperability

Requirements analysis help to identify entities and attributes Suppose that we need a system that allows people to upload homework assignments. What are the key entities? What are the key attributes of those entities?

Development process Figuring out what the system should do (requirements) Figuring out how the system should do it (design) Writing the code for the system (implementation) Making sure that the code is right (testing) Using the system (operation)

Design Architectural design Program design Figuring out the overall structure of the system What components should be in the system? How should the components be connected? Program design Figuring out how code should be organized How should each component’s code be distributed among classes and/or functions?

Development process Figuring out what the system should do (requirements) Figuring out how the system should do it (design) Writing the code for the system (implementation) Making sure that the code is right (testing) Using the system (operation)

Implementation Finally, we get to write some code! Implementation also may include: Writing comments Writing other documentation Helping fellow engineers with their coding Answering questions Reading colleagues’ code, documentation, etc Messing around with code until it “smells good”

Development process Figuring out what the system should do (requirements) Figuring out how the system should do it (design) Writing the code for the system (implementation) Making sure that the code is right (testing) Using the system (operation)

Testing Testing Unit testing System integration testing Good for automatically checking individual components System integration testing Good for checking that components work well together Usability testing Good for checking user interfaces Acceptance testing Good for checking that the customer/user is happy

Development process Figuring out what the system should do (requirements) Figuring out how the system should do it (design) Writing the code for the system (implementation) Making sure that the code is right (testing) Using the system (operation)

Operation The code compiles, passes all tests, and looks great on your desktop. Done, right? Wrong! Operation often includes Distributing code to customers/users Providing documentation and support Debugging, after users try out the system Studying how well the system works in practice Adapting the system for new markets

Waterfall kinds of processes Start Requirements analysis Prototyping Design Implementation So what order should you do these tasks? Testing Operation (No prototyping in a pure waterfall process)

Drawback of the Waterfall Model hard to handle changes to products and activities during development Assumes requirements can be frozen Views software development as manufacturing process rather than as creative process Long wait before a final product

Two ways of building Incremental construction Iterative construction

Spiral kinds of processes Draft a menu of program designs Analyze risk & prototype Draft a menu of architecture designs Analyze risk & prototype Draft a menu of requirements Analyze risk & prototype Start Establish requirements By Barry Boehm (‘86) Emphasizes iterative Plan Establish architecture Plan Establish program design Operation Testing Implementation

Another view of Spiral

Agile kinds of processes Start Do “spike” to evaluate & control risk Customer provides “stories” (short requirement snippets) Prioritize stories and plan Write/run/modify unit tests Operation Emphasizes incremental and iterative This sort of diagram kind of goes against what Agile is all about—see the manifesto: “Individuals and interactions over processes and tools.” Implement System and acceptance tests (Agile processes are rarely this tidy in practice)

The Agile Manifesto We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That is, while there is value in the items on the right, we value the items on the left more. http://agilemanifesto.org/

Agile Methods: Examples of Agile Process Scrum: 30-day iterations; multiple self-organizing teams; daily “scrum” coordination Extreme programming (XP) Crystal: a collection of approaches based on the notion that every project needs a unique set of policies and conventions Agile processes each propose principles that implement the Agile tenets

Contrasting these kinds of processes Waterfall Spiral Agile Emphasizes: Simplicity Traceability -Risk management -Exploring alternatives -Flexibility -Immediacy Weakness: Requirement/design mistakes can be costly Exploring alternatives can be costly Continual rework can be costly Style: -Highly controlled -High ceremony -Moderately controlled -Moderate ceremony -Rapid & organic -Low ceremony Some definitions “traceability”: relationships between requirements and system elements are documented “immediacy”: getting some sort of working system to the customer as fast as possible “rework”: redesigning the architecture and/or refactoring the program code “controlled”: conformance to process is highly valued, even if it slows a project down “ceremony”: how much analysis, documentation, and planning is involved

When to choose a particular kind of process Waterfall is often a good choice for small systems whose requirements can be fully understood before any design or coding. Spiral is often a good choice for larger systems with vague requirements and many alternatives for designing and coding. Agile is often a good choice for systems where you can rapidly create something very small but useful, and then expand from there.

What kind of process would you prefer to use for…? A nuclear missile’s guidance system A web server (plain old http) A web site for people to request prayer A program that screen-scrapes Google News to watch for swine flu outbreaks A program to steer the Mars rovers A controller for a sprinkler system so the lawn gets less water on rainy days Think-Pair-Share

The story doesn’t end with operation: how do you improve the system later? Iterative release approach Get the whole system working pretty well Then add features throughout the system Incremental release approach Get part of the system working really well Then add more parts to the system You can mix & match iterative/incremental with waterfall/spiral/agile. E.g.: iterative agile

How to decide on iterative vs incremental development Comes down to where the system’s value is: Incremental is often good when most of a system’s value is tightly concentrated in a small number of components. Iterative is often good when you need to implement most of a system before you can get much value.

Example: Incremental spiral development of an e-commerce site Suppose we have a customer who says he wants an “eco-friendly Amazon.com” Why pick spiral over waterfall or agile? Sounds pretty big, with vague requirements and lots of alternatives

Draft a menu of requirements Should have a shopping cart, etc, obviously. What does “eco-friendly” mean? Search based on product “ecofriendliness” rating? Collect data from producers? Collect ratings from watchdog organizations? Collect ratings from customers? “Eco-friendly” “shipping options”? Features for swapping/trading items?

Review prototypes with customer (and/or users), document the results Paper prototypes Lightweight prototypes Documentation These “throwaway” prototypes are cheap to make because they are usually not interactive. Let’s suppose that the customer settles on eco-friendliness options based on watchdog data. http://www.flickr.com/photos/carolshergold/1748174721/sizes/o/ http://www.flickr.com/photos/carolshergold/1920638621/sizes/o/ http://www.flickr.com/photos/carolshergold/1921464196/sizes/o/

Draft a menu of architectures Web application Watchdog data input screens E-commerce interface Watchdog users Database Shopping users PHP/Apache Mysql Linux Scrapers to read watchdog data Watchdog XML feeds E-commerce interface Database Shopping users PHP/Apache Mysql Linux

Review prototypes with customer (and/or users), document the results More prototypes And now an XML mockup Documentation And lots of analysis & discussion about pros/cons/cost/schedule/etc. Let’s suppose that the XML feed architecture is selected, omitting XML feeds for now (to be added in later increment).

Draft a menu of program designs E-commerce interface Make each product its own object? Make each user account its own object? “Hide” the database from the UI code? What code should be put into “library” classes for reuse in future increments (e.g.: XML feeds)? ……

Review prototypes with customer (and/or users), document the results Heavyweight prototypes Documentation These prototypes are pretty expensive to make, since they implement some interactivity. Therefore, they often are incorporated into the finished product (“evolutionary” prototypes). http://www.flickr.com/photos/dullhunk/428079229/sizes/l/in/set-72157618027570984/

Implementation, Testing, Operation Wrap up increment #1 Manually load database with product data (including ecofriendliness data) Finish coding basic UI for searching/ordering Write tests, run tests, fix bugs, test some more Deliver code to customer Customer tests the code some more Fix bugs, test, fix bugs, test Deploy to public server

Increment #2: load eco-data from XML feeds We already know this requirement—no need to return to the requirements phase for this! Return to review the alternative architectures Create a menu of program designs, prototype and review, implement, test, send to operation, etc

Increment #3 and beyond Pay attention to users, discover new requirements - Spiral, spiral, spiral http://www.flickr.com/photos/villes/696080093/sizes/o/

What’s next for you? Vote for vision statements now! See instructions on the course home page Deadline: Midnight, Wednesday Get going on homework HW1 Due before class on Thursday

Copyright (c) Christopher Scaffidi 2009 All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Oregon State University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Modified by Scott D. Fleming <Scott.Fleming@memphis.edu> 2011.