Agile Development & Companies

Slides:



Advertisements
Similar presentations
Agile Development & Companies
Advertisements

Agile Planning Dealing with Reality. Reality Basic agile principle – don’t expect static plans to hold, be flexible and expect changes.
1 Software Processes A Software process is a set of activities and associated results which lead to the production of a software product. Activities Common.
Computer Engineering 203 R Smith Agile Development 1/ Agile Methods What are Agile Methods? – Extreme Programming is the best known example – SCRUM.
Computer Science 1620 Programming & Problem Solving.
Software Development Overview CPSC 315 – Programming Studio Spring 2009.
Chapter 3.1 Teams and Processes. 2 Programming Teams In the 1980s programmers developed the whole game (and did the art and sounds too!) Now programmers.
Xtreme Programming. Software Life Cycle The activities that take place between the time software program is first conceived and the time it is finally.
Software Development Overview CPSC 315 – Programming Studio Spring 2008.
Chapter 2- Software Process Lecture 4. Software Engineering We have specified the problem domain – industrial strength software – Besides delivering the.
Software Project Planning CS470. What is Planning? Phases of a project can be mostly predicted Planning is the process of estimating the time and resources.
CS 360 Lecture 3.  The software process is a structured set of activities required to develop a software system.  Fundamental Assumption:  Good software.
COMP 208/214/215/216 Lecture 3 Planning. Planning is the key to a successful project It is doubly important when multiple people are involved Plans are.
Coming up: What is Agile? XP Development Dan Fleck 2010 Dan Fleck 2010.
Team Formation Dr. Tallman. ECE297 Tutorials, Jan 21 & Jan 23 Your team will meet your Communication Instructor (CI) and schedule a weekly 30- minute.
Testing. 2 Overview Testing and debugging are important activities in software development. Techniques and tools are introduced. Material borrowed here.
13-January-2003cse LifeCycle © 2003 University of Washington1 Lifecycle CSE 403, Winter 2003 Software Engineering
DEBUGGING. BUG A software bug is an error, flaw, failure, or fault in a computer program or system that causes it to produce an incorrect or unexpected.
Software Development Overview CPSC 315 – Programming Studio Spring 2013.
CS5103 Software Engineering Lecture 02 More on Software Process Models.
WATERFALL DEVELOPMENT MODEL. Waterfall model is LINEAR development lifecycle. This means each phase must be completed before moving onto the next!!! WHAT.
Extreme programming (XP) Variant of agile Takes commonsense practices to extreme levels © 2012 by Václav Rajlich1.
The single most important skill for a computer programmer is problem solving Problem solving means the ability to formulate problems, think creatively.
Software Development Process CS 360 Lecture 3. Software Process The software process is a structured set of activities required to develop a software.
Fundamental Programming Fundamental Programming Introduction to Functions.
Functions in C++ Top Down Design with Functions. Top-down Design Big picture first broken down into smaller pieces.
1 Chapter 2 SW Process Models. 2 Objectives  Understand various process models  Understand the pros and cons of each model  Evaluate the applicability.
Coming up: What is Agile? XP Development Dan Fleck 2010 Dan Fleck 2010.
CS223: Software Engineering
Software Development - Methodologies
Software Development.
Software Development Overview
Chapter 13 Recursion Copyright © 2016 Pearson, Inc. All rights reserved.
Software Engineering Process
Introduction Edited by Enas Naffar using the following textbooks: - A concise introduction to Software Engineering - Software Engineering for students-
CSE 341 Section 1 (9/28) With thanks to Dan Grossman, et. al. from previous versions of these slides.
Sample Wiki Comments?.
Putting Testing First CS 4501 / 6501 Software Testing
CSE403 Software Engineering Autumn 2000 Requirements
Chapter 2 SW Process Models
Software Engineering: A Practitioner’s Approach, 7/e Chapter 2 Prescriptive Process Models copyright © 1996, 2001, 2005 R.S. Pressman & Associates, Inc.
IT Systems Analysis & Design
Software Engineering: A Practitioner’s Approach, 7/e Chapter 2 Prescriptive Process Models copyright © 1996, 2001, 2005 R.S. Pressman & Associates, Inc.
Introduction Edited by Enas Naffar using the following textbooks: - A concise introduction to Software Engineering - Software Engineering for students-
Teaching slides Chapter 1.
CSE341: Programming Languages Section 1
CSCE 315 – Programming Studio, Fall 2017 Tanzir Ahmed
Process Models Coming up: Prescriptive Models.
COMP 208/214/215/216 Lecture 3 Planning.
Welcome to the Ericsson journey towards an Agile WoW!
Coding Concepts (Basics)
Computer Science Testing.
Chapter 3 – Agile Software Development
CSE 303 Concepts and Tools for Software Development
CSE403 Software Engineering Autumn 2000 Requirements
Testing (Continued).
Software Engineering: A Practitioner’s Approach, 6/e Chapter 3 Prescriptive Process Models copyright © 1996, 2001, 2005 R.S. Pressman & Associates, Inc.
Project Management.
Coming up: What is Agile?
Purpose Real life scenario: I have a set of reports to refresh every month but data is only available at any day during Day 3 – 5 at beginning of each.
Tonga Institute of Higher Education IT 141: Information Systems
Case Study 1 By : Shweta Agarwal Nikhil Walecha Amit Goyal
Tonga Institute of Higher Education IT 141: Information Systems
Agile Development – a new way of software development?
Extreme Programming.
EE 155 / Comp 122 Parallel Computing
Chapter 13 Recursion Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
Software Engineering: A Practitioner’s Approach, 6/e Chapter 3 Prescriptive Process Models copyright © 1996, 2001, 2005 R.S. Pressman & Associates, Inc.
Chapter 1: Creating a Program.
Software Development Overview
Presentation transcript:

Agile Development & Companies Harvard Business Review: “Why the lean start-up changes everything” Agile development applied to entire business of start-ups Simplest possible prototype! Iterate! Image: leadnet.org

Case Study: Case Study #1

Background My PhD thesis: new CAD System for FPGAs Formed company to commercialize 4 people initially An early customer was Altera 10 months to produce a new “placement and routing” system for Altera’s chips Aggressive goal: 10X better than current system

Place and Route Example

Project Management Quick plan Concrete milestones Scared 1 day: estimate all tasks & time Add time margin (mine: 50%) Concrete milestones Meet a milestone every 3 months or don’t get paid! Scared Turned out to be helpful! Avoid any side projects, unnecessary complexity Get something working, measure & improve Measure our software vs. Altera’s every day

Outcome Hit all milestones, except first (2 weeks late) Focused! CAD system exceeded expectations 30X less runtime 38% faster circuits Altera replaced their P & R engine with the prototype Started simple, measured where to improve Some simple algorithms still in current Quartus II  didn’t need more!

Case Study 2: (First Version of) Quartus

Background Altera had highly successful CAD system: Max+PlusII Decided to do a complete re-write to a new CAD system Quartus Goals: C++ (not C) Cleaner, more extensible code Allow multiple engineers to collaborate on a project easily Allow fast, “incremental” recompiles

Project Management Planned for a year with no coding Too much waterfall  planning paralysis Let complexity reign Fancy user features Fancy language (object oriented C++ to the max) No working prototype for ~2 years Can’t test new features in full system Didn’t understand & measure key metric CAD system that optimizes well And is ready for next-generation chip

Outcome Software not ready in time for chip Software rushed to market Not stable enough, didn’t optimize well enough Very bad customer experiences Lost sales: $billions! Rewrote & renamed later versions: Now very good!

Case Study 3: Hardware + Software (Stratix V)

State of the art for 2 years! Big Project! More planning? 3 year project ~400 engineers at peak Yes, plan as far ahead as you can But don’t paralyze yourself Accept that plan gets coarse as you go out in time Key plan: measurable milestones 3 year project  need to break up schedule Project milestones  goals / milestones per team Clear must have features Everything else: nice to have > $200 M State of the art for 2 years! +

Agile / Iterative Development? Build prototype / model of HW + SW system Use to evaluate and test new ideas Done by smaller team (~10 engineers) Will never ship to customers! Prototype shows good results? Build real hardware & full software Team grows to 400 Always keep system working as you improve Always measure results vs. expected (from prototype) HW & SW both in source code control Still iterative, but with more structure

Communication? Weekly status meeting Meeting style For sub-teams (~8 engineers) Managers discuss results for ~8 teams (~64 people) Directors meet to discuss overall project status Meeting style wiki, crisp reporting Big picture  progress toward milestones

Outcome Iterative development of HW + SW Works much better than pure waterfall Many companies: out of business by not getting full HW + SW system working Every 2nd generation: usually late! Engineers & marketing put in too much complexity Not scared enough, not enough iterative development! Late to market is terrible Competitor has twice the transistors, 1 year earlier Want to optimize, but on time more important

Testing

Testing Philosophy “If you didn’t test it, it doesn’t work” Assume all code broken until proven otherwise Look at what the program does not what it is supposed to do Scientist: you are testing hypotheses about program Think of every case your program should handle  cover them all

Testing Time Develop tests as or before you code Test-driven development Prototype Refine Test & Evaluate

Test-Driven Development The tests are the detailed specification And now can be executed, not just read More tests Fewer specification documents

Types of Tests End-to-end (system) tests Tests like an end user Hard to debug a failure  problem could be anywhere! Fragile: often test some exact user input would produce some exact output text / file End to End Tests Unit Tests Test small pieces of system (single classes / functions) Easier to debug failure  start with 1 class / function Don’t check user interface (I/O): check API / class does what it should with code (testfixture) Unit Tests

Types of Tests Fewer Integration Tests Bigger unit tests (but not 0!) End to End Tests Integration Tests Bigger unit tests But now test multiple classes / bigger functionality Moderate difficulty to debug Integration Tests Unit Tests More

Testing Automation You will re-test often System tests: save in files Every time you change the program How to speed up? System tests: save in files Use file redirection prog.exe < in.txt diff out.txt out_good.txt // matched known good result? Less fragile Write validity checker instead of checking exact output match Write scripts to run all tests and check results > out.txt

Unit Tests Want: No! To test individual classes / functions How? Carefully chosen user input? Output ... No! struct Point { float x; float y; t_point& operator*=(float rhs); . . .

Unit Tests Write new code To put class in right state To directly send it some input / make some calls To immediately check the responses Test driver

Unit Tests myCode.cpp struct Point { float x; float y; t_point& operator*=(float rhs); . . . tester.cpp int test1 () { Point testme (1, 2); testme *= 3; if (testme != Point (3, 6)) { cout << “uh – oh” << endl; return (1); } return (0); test_main.cpp g++ myCode.cpp main.cpp –o prog.exe int main () { int error = 0; error += test1(); . . . // Lots more tests g++ myCode.cpp tester.cpp test_main.cpp –o test.exe