Safari, the world’s most comprehensive technology and business learning platform.

Find the exact information you need to solve a problem on the fly, or go deeper to master the technologies and skills you need to succeed

Start Free Trial

No credit card required

O'Reilly logo
Head First Software Development

Book Description

Even the best developers have seen well-intentioned softwareprojects fail -- often because the customer kept changingrequirements, and end users didn't know how to use the software youdeveloped. Instead of surrendering to these common problems, letHead First Software Development guide you through the bestpractices of software development. Before you know it, those failedprojects will be a thing of the past.With its unique visually rich format, this book pulls together thehard lessons learned by expert software developers over the years.You'll gain essential information about each step of the softwaredevelopment lifecycle -- requirements, design, coding, testing,implementing, and maintenance -- and understand why and howdifferent development processes work.This book is for you if you are:

  • Tired of your customers assuming you're psychic. You'll learnnot only how to get good requirements, but how to make sure you'realways building the software that customers want (even when they'renot sure themselves)

  • Wondering when the other 15 programmers you need to get yourproject done on time are going to show up. You'll learn how somevery simple scheduling and prioritizing will revolutionize yoursuccess rate in developing software.

  • Confused about being rational, agile, or a tester. You'll learnnot only about the various development methodologies out there, buthow to choose a solution that's right for your project.

  • Confused because the way you ran your last project worked sowell, but failed miserably this time around. You'll learn how totackle each project individually, combine lessons you've learned onprevious projects with cutting-edge development techniques, and endup with great software on every project.

  • Head First Software Development is here to help you learnin a way that your brain likes... and you'll have a blast along theway. Why pick up hundreds of boring books on the philosophy of thisapproach or the formal techniques required for that one? Stick withHead First Software Development, and your projects willsucceed like never before. Go on, get started... you'll learn andhave fun. We promise.

    Table of Contents

    1. Dedication
    2. Special Upgrade Offer
    3. A Note Regarding Supplemental Files
    4. Advance Praise for Head First Software Development
    5. Praise for Head First Object-Oriented Analysis and Design
    6. Praise for Head First Design Patterns
    7.  
      1. Author(s) of Head First Software Development
    8. How to use this Book: Intro
      1. Who is this book for?
        1. Who should probably back away from this book?
      2. We know what you’re thinking
      3. We know what your brain is thinking
      4. Metacognition: thinking about thinking
      5. Here’s what WE did
        1. Here’s what YOU can do to bend your brain into submission
      6. Read Me
      7. The technical review team
      8. Acknowledgments
      9. Safari® Books Online
    9. 1. Great Software Development: Pleasing your customer
      1. Tom’s Trails is going online
      2. Most projects have two major concerns
        1. How much will it cost?
        2. How long will it take?
      3. The Big Bang approach to development
      4. Flash forward: two weeks later
      5. Big bang development usually ends up in a BIG MESS
        1. If your customer isn’t happy, you built the wrong software
      6. Great software development is...
      7. Getting to the goal with ITERATION
      8. Each iteration is a mini-project
      9. Each iteration is QUALITY software
      10. The customer WILL change things up
      11. It’s up to you to make adjustments
        1. You’re already a long way into development...
        2. ... and you’ve still got other features to build...
        3. ... and the deadline hasn’t changed.
      12. Iteration handles change automatically (well, sort of)
      13. Your software isn’t complete until it’s been RELEASED
      14. Tools for your Software Development Toolbox
    10. 2. Gathering Requirements: Knowing what the customer wants
      1. Orion’s Orbits is modernizing
      2. Talk to your customer to get MORE information
      3. Bluesky with your customer
      4. Sometimes your bluesky session looks like this...
      5. Find out what people REALLY do
      6. Your requirements must be CUSTOMER-oriented
      7. Develop your requirements with customer feedback
      8. User stories define the WHAT of your project... estimates define the WHEN
      9. Cubicle conversation
      10. Playing planning poker
      11. Put assumptions on trial for their lives
      12. A BIG user story estimate is a BAD user story estimate
      13. The goal is convergence
        1. How close is “close enough”?
      14. The requirement to estimate iteration cycle
      15. Finally, you’re ready to estimate the whole project...
        1. And the total project estimate is...
      16. Tools for your Software Development Toolbox
    11. 3. Project Planning: Planning for success
      1. Customers want their software NOW!
      2. Prioritize with the customer
        1. What is “Milestone 1.0”?
      3. We know what’s in Milestone 1.0 (well, maybe)
        1. Sanity-check your Milestone 1.0 estimate
      4. If the features don’t fit, reprioritize
      5. More people sometimes means diminishing returns
      6. Work your way to a reasonable Milestone 1.0
      7. Iterations should be short and sweet
      8. Comparing your plan to reality
      9. Velocity accounts for overhead in your estimates
      10. Programmers think in UTOPIAN days...
        1. Here’s what a programmer SAYS...
        2. ... but here’s what he’s really THINKING
      11. Developers think in REAL-WORLD days...
      12. When is your iteration too long?
      13. Deal with velocity BEFORE you break into iterations
      14. Time to make an evaluation
        1. Deliver the bad news to the customer
      15. Managing pissed off customers
      16. The Big Board on your wall
      17. How to ruin your team’s lives
      18. Tools for your Software Development Toolbox
    12. 4. User Stories and Tasks: Getting to the real work
      1. Introducing iSwoon
      2. Do your tasks add up?
      3. Plot just the work you have left
      4. Add your tasks to your board
      5. Start working on your tasks
      6. A task is only in progress when it’s IN PROGRESS
      7. What if I’m working on two things at once?
      8. Your first standup meeting...
      9. Task 1: Create the Date class
      10. Standup meeting: Day 5, end of Week 1...
      11. Standup meeting: Day 2, Week 2...
      12. You have to track unplanned tasks
      13. Unexpected tasks raise your burn-down rate
      14. Velocity helps, but...
      15. We originally calculated velocity as...
      16. So we have this much “float”...
      17. ... but it may not be enough!
      18. We have a lot to do...
        1. You’ve got more work to do...
        2. ...and your burn-down rate is going in the wrong direction.
      19. ...but we know EXACTLY where we stand
    13. 5. Good-Enough Design: Getting it done with great design
      1. iSwoon is in serious trouble...
      2. This design breaks the single responsibility principle
      3. Spotting multiple responsibilies in your design
      4. Going from multiple responsibilies to a single responsibility
      5. Your design should obey the SRP, but also be DRY...
      6. The post-refactoring standup meeting...
      7. Unplanned tasks are still just tasks
      8. Part of your task is the demo itself
      9. When everything’s complete, the iteration’s done
    14. 6. Version Control: Defensive development
      1. You’ve got a new contract—BeatBox Pro
      2. And now the GUI work...
      3. And a quick test...
      4. And Bob does the same...
      5. Demo the new BeatBox for the customer
      6. Standup meeting
      7. Let’s start with VERSION CONTROL
      8. First set up your project...
      9. ...then you can check code in and out.
      10. Most version control tools will try and solve problems for you
        1. Bob tries to check in his code...
        2. ... but quickly runs into a problem.
      11. The server tries to MERGE your changes
        1. Nonconflicting code and methods are easy
        2. Your version control software will combine files
        3. But conflicting code IS a problem
      12. If your software can’t merge the changes, it issues a conflict
      13. Now show the customer...
      14. More iterations, more stories...
      15. Standup meeting
      16. We have more than one version of our software...
      17. Good commit messages make finding older software easier
        1. Play “Find the features” with the log messages
      18. Now you can check out Version 1.0
      19. (Emergency) standup meeting
      20. Tag your versions
        1. So what?
      21. Tags, branches, and trunks, oh my!
      22. Fixing Version 1.0...for real this time.
      23. We have TWO code bases now
      24. When NOT to branch...
        1. Branch when...
        2. Do not branch when...
      25. We fixed ersion 1...
      26. ... and Bob finished ersion 2.0 (so he says)
      27. Version control can’t make sure your code actually works...
      28. Tools for your Software Development Toolbox
    15. 6 ½. Building your Code: Insert tab a into slot b...
      1. Developers aren’t mind readers
      2. Building your project in one step
      3. Ant: a build tool for Java projects
      4. Projects, properties, targets, tasks
      5. Good build scripts...
        1. ... generate documentation
        2. ... compile your project
        3. ... clean up the mess they make
      6. Good build scripts go BEYOND the basics
      7. Your build script is code, too
      8. New developer, take two
      9. Tools for your Software Development Toolbox
    16. 7. Testing and Continuous Integration: Things fall apart
      1. Things will ALWAYS go wrong...
      2. Standup meeting
      3. There are three ways to look at your system...
        1. Your users see the system from the outside
        2. Testers peek under the covers a little
        3. Developers let it all hang out
        4. ... and you need to consider each of these views
      4. Black-box testing focuses on INPUT and OUTPUT
      5. Grey-box testing gets you CLOSER to the code
        1. Grey-box testing is like black-box testing...but you can peek
      6. White-box testing uses inside knowledge
        1. White-box tests tend to be code-on-code
        2. Hanging your tests on a framework
      7. Testing EVERYTHING with one step
      8. Automate your tests with a testing framework
      9. Use your framework to run your tests
        1. Continuous integration tools run your tests when you check in your code
      10. At the wheel of CI with CruiseControl
      11. Testing guarantees things will work... right?
      12. Standup meeting
      13. Testing all your code means testing EVERY BRANCH
      14. Use a coverage report to see what’s covered
      15. Getting good coverage isn’t always easy...
      16. Standup meeting
      17. Tools for your Software Development Toolbox
    17. 8. Test-Driven Development: Holding your code accountable
      1. Test FIRST, not last
      2. So we’re going to test FIRST...
        1. Analyze the task
        2. Write the test BEFORE any other code
      3. Welcome to test-driven development
      4. Your first test...
      5. ... fails miserably.
        1. NOW write code to get the test to pass.
      6. Get your tests to GREEN
      7. Red, green, refactor...
      8. In TDD, tests DRIVE your implementation
      9. Completing a task means you’ve got all the tests you need, and they all pass
      10. When your tests pass, move on!
      11. Different task, same process
      12. Red: write (failing) tests
      13. Green: write code to pass tests
      14. Simplicity means avoiding dependencies
      15. Always write testable code
      16. When things get hard to test, examine your design
      17. The strategy pattern provides for multiple implementations of a single interface
      18. Keep your test code with your tests
      19. Testing produces better code
      20. More tests always means lots more code
      21. Strategy patterns, loose couplings, object stand ins...
      22. We need lots of different, but similar, objects
      23. What if we generated objects?
      24. A mock object stands in for real objects
      25. Mock objects are working object stand-ins
      26. Good software is testable...
        1. A whole-lotta-nuthin’
        2. It’s still me...
        3. Ghosts from the past
      27. It’s not easy bein’ green...
        1. When all of your tests pass, you’re done
      28. A day in the life of a test-driven developer...
      29. Tools for your Software Development Toolbox
    18. 9. Ending an Iteration: It’s all coming together...
      1. Your iteration is just about complete...
      2. ... but there’s lots left you could do
      3. Standup Meeting
      4. System testing MUST be done...
      5. ... but WHO does system testing?
        1. Developer testing
        2. Tester testing
      6. System testing depends on a complete system to test
      7. Good system testing requires TWO iteration cycles
      8. More iterations means more problems
      9. The life (and death) of a bug
      10. So you found a bug....
        1. Bugs belong in a bug tracker
      11. Anatomy of a bug report
      12. But there’s still plenty left you COULD do...
      13. Time for the iteration review
        1. Elements of an iteration review
      14. Some iteration review questions
      15. A GENERAL priority list for getting EXTRA things done...
      16. Tools for your Software Development Toolbox
    19. 10. The Next Iteration: If it ain’t broke... you still better fix it
      1. What is working software?
        1. ...completing your iteration’s work
        2. ...passing all your tests
        3. ... satisfying your customer
      2. You need to plan for the next iteration
      3. Velocity accounts for... the REAL WORLD
      4. And it’s STILL about the customer
      5. Someone else’s software is STILL just software
      6. Customer approval? Check!
      7. Testing your code
      8. Houston, we really do have a problem...
      9. Standup meeting
      10. Trust NO ONE
      11. You without your process
      12. You with your process
    20. 11. Bugs: Squashing bugs like a pro
      1. First, you’ve got to talk to the customer
      2. Standup meeting
      3. Priority one: get things buildable
      4. We could fix code...
      5. ... but we need to fix functionality
      6. Figure out what functionality works
      7. NOW you know what’s not working
      8. Spike test to estimate
      9. What do the spike test results tell you?
        1. You can then figure out how long it will take for your team to fix all the bugs
      10. Your team’s gut feeling matters
        1. Feed confidence into your estimate
      11. Give your customer the bug fix estimate
      12. Things are looking good...
      13. ... and you finish the iteration successfully!
      14. AND most importantly the customer is happy
      15. Tools for your Software Development Toolbox
    21. 12. The Real World: Having a process in life
      1. Pinning down a software development process
        1. There is no silver-bullet process
      2. A good process delivers good software
      3. Formal attire required...
        1. Do what you’re doing...just prettier
      4. Some additional resources...
      5. More knowledge == better process
      6. Tools for your Software Development Toolbox
      7. It’s time to leave a mark on the board world!
    22. A. Leftovers: The top 5 topics (we didn’t cover)
      1. #1. UML class diagrams
      2. Class diagrams show relationships
      3. #2. Sequence diagrams
      4. #3. User stories and use cases
      5. #4. System tests vs. unit tests
      6. #5. Refactoring
    23. B. Techniques and Principles: Tools for the experienced software developer
    24. Index
    25. About the Authors
    26. Special Upgrade Offer
    27. Copyright