Updates on Software Engineering 2006

View this page as series of slides through the magic of xslt.

  1. Overview
    1. What's wrong with Waterfall? (for the zillionth time)
    2. Iterative and Incremental Development
    3. Variable Scope
    4. Test First Programming
  2. History of Waterfall

    (Your mother told you about this)

    "Managing the Development of Large Software Systems" by Winston Royce, Proceedings of IEEE WESCON, 1970

    The Dept. of Defense liked the diagram and thus MilSpec 2167 was born.

    Karl Marx liked the waterfall so much he created the Five Year Plan methodology.

    waterfall

  3. Real History of Waterfall

    (Your mother didn't tell you about this)

    Winson Royce said the waterfall would be nice if it actually worked in the real world, but unfortunately for most systems it would not, an iterative approach would be better.

    Royce's actual suggestion: waterfall

  4. What's Wrong with Waterfall? (for the zillionth time)
    1. No real progress tracking
    2. Too many "wasted" features put in (45% are not used)

      "Since customers often don't know exactly what they want at the beginning of a project, they tend to ask for everything they think they might need, especially if they think they will only get one shot at it. This is one of the best ways we know to increase the scope of a project well beyond what is necessary to accomplish the project's overall mission." -Mary & Tom Poppendieck

    3. Temptation of a monolithic architecture
    4. Too many features not added (new or forgotten)
    5. Too long until it gets here (Capitol cost)
    6. Risky
    7. Customer does not see all the results til it's too late to change

    1995 DoD report: 37 Billion US dollars spent on software, 75% of projects failed.

    We now have hard, statistical evidence that the more closely waterfall is followed, the more likely it will fail.

  5. Iterative and Incremental Development (IID)
    1. Frequent iterative releases of production quality code. The system is not complete, but is a usable subset of the real thing the customer can use.
    2. Next iteration items are risk driven and client driven
    3. Timeboxed iterative devlopment

      Scrum specifies 30 days, other methodologies 1-6 weeks. This helps to focus everyone since deliverables are due soon, not in 8 months.

    4. Evolutionary Requirements
    5. Adaptive Planning
    6. Close relationship with the customer
  6. Agile Methodologies:
    1. Extreme Programming

      4 values: communcation, simplicity, feedback, courage. 12 practices: refactoring, testing, big room...

    2. Scrum:

      Daily Stand-Up Meeting, 30 day iterations, demo to stakeholders, team-managed

    3. Crystal (Alistair Cockburn)

      Tailorable to different team sizes. Empasises Frequent Delivery, Reflective Improvement, and Close Communication.

    4. Lean Development

      Modeled on Japanese manufacturing philoshopy.

    5. Unified Process

      If it really wants to, it can be agile.

  7. Iterations Iterations
    1. A few features are selected for the iteration based on risk and customer priority
    2. Each iteration has only enough architecture for that iteration.
    3. Must have automated testing
    4. Must commit to refactoring
    5. Must have flexible architecture
    6. Must have automated build and create installer from version control
    7. Should have continuous integration
    8. An iteration is done when all the tests for the features pass
  8. Select Features for Next Iterations

    At the start of the project each proposed feature is assigned a "story point" value. The point value reflects the difficulty of development, similiar in purpose to Albrecht's Function Points.

    At the beginning of each iteration, the customer and the software team select a few features, or stories, to go into the next release.

  9. Track Progress

    With story points we can track progress for iterations and give better estimates of future completion.


    Iterations
  10. Track Progress

    A "countdown" chart is helpful to get a sense of progress.


    Iterations
  11. Lame Car Example

    Suppose you want a new car in an alternate universe where cars are custom made. You live three miles from work and are tired of walking. You decide you need the following: engine, transmission, roof, heater, CD player, espresso machine, HDTV (for the kids), windows, front seat, back seat.

    1. Waterfall Method https://flickr.com/photos/adrasteia9/

      In the waterfall method of car making your car, consultants from the Athena Group meet with you for four months and create a specifications document detailing everything down to the psi on the espresso machine. It will take 24,000 dollars and two years. You agree to pay them $1,000 a month. They go away and in two years return with your car.


    2. Iterative Approach https://www.imageafter.com/image.php?image=b1shell008.jpg

      In the iterative model the consultants from the Nautilus Group meet with you for 2 weeks. You tell them the most important things for your car are the engine and front seat. They spec out the engine and front seat completely and jot notes about the other items. You pay them $1,000 a month. They go away for a month and bring you a drivable car with an engine and front seat with only first gear. Now you can drive the three miles to work, albeit at only 20 mph, but still it's better than walking.

      The Nautilus consultants ask what are your highest priority needs now. It's winter time and you are tired of being cold and wearing your raincoat, so you tell them a roof and windows. Two weeks later they return and install the roof and windows. They ask you what is most important to you now. You tell them. This process repeats itself with the Nautilus consultants.

      After a year and a half you have everything you need except the espresso maker and the HDTV. You think about it and decide you don't really need them and would rather have air conditioning.

    Moral to our little fable: With the Nautilus group you had a car to drive around for almost two years.
  12. Variable Scope

    Why not have all requirements specified?

    The customer really doesn't know all the requirements and the needs will change.

    Pick the top requirements and spec out in medium detail. Make high level notes on the rest, but don't do complete requirements gathering. (Just in time requirements?)

    Your mother said to design the database and classes with all the features in up front. If you are going to be multilingual, design everything to be multilingual. If you have to support multiple currencies, do that up front.

    Building all the infrastructure up front does not gain you as much as you think. Putting extra features in later is much easier than supposed if you have a flexible architecture. It does not cost 10x for each step of the waterfall for new features.

  13. Testing
    1. Programmers write unit tests before coding module
    2. QA and customer write functional tests in high level language or tables in something like fit or fitnesse.
    3. You only have automated tests
    4. The way we write code must change so the code is more testable
    5. QA does detailed requirements analysis at the beginning or just before the iteration starts
    6. Quality Assurance team is not insanely busy on the four days between code complete and shipment, but is comfortably busy all during development. QA clarifies requirements by working with the customer and converting needs into executable tests like tables of inputs and expected outputs.
    7. Test Driven Design can produce much better architecture than standard design practices
  14. Problems with Iterative and Incremental Development
    1. Only works with certain types of projects, not very well with large teams
    2. Creating and maintaining all those tests is expensive
    3. Testing GUIs is hard
  15. Review

    The trend in software process design this year is

    1. Develop software in timeboxed iterations containing the next most important features
    2. Variable Scope: Constantly adjust the features into the next release
    3. Test relentlessly with automated, executable tests