Google
 

 

up previous next contents
Up: 1. Day 1: Object-Oriented Previous: 1.1 Credits and Other Next: 1.3 Introduction to OO   Contents

Subsections

1.2 Why OO?

1.2.1 Benefits of object-oriented programming

Why has object-oriented programming gone from being ``something to think about'' to being a de-facto standard in the way software is developed today? OOA/OOD/OOP is good for:

  • Analyzing user requirements
  • Designing software
  • Constructing software
    • Reusability (reusable components)
    • Reliability
    • Robustness
    • Extensibility
    • Maintainability
  • Reducing large problems to smaller, more manageable problems

According to the GartnerInstitute ...

  • 74% of all IT projects fail, come in over budget, or run past the original deadline.
  • 28% fail altogether.
  • 52.7% of IT projects cost 189
  • Every year $75B is spent on failed IT projects.

1.2.2 Symptoms of software development problems

The text ``Rational Unified Process, An Introduction'' [9] identifies the following symptoms that characterize failing software development projects.

  • Inaccurate understanding of end-user needs.
  • Inability to deal with changing requirements.
  • Modules that don't fit together.
  • Software that's hard to maintain or extend.
  • Late discovery of serious projects flaws.
  • Poor software quality.
  • Unacceptable software performance.
  • Team members in each other's way.
  • An untrustworthy build and release process.

1.2.3 Root causes of project failure

The same text identifies the root causes of these failures:

  • Ad hoc requirements management.
  • Ambiguous and imprecise communication.
  • Brittle architectures.
  • Overwhelming complexity.
  • Undetected inconsistencies in requirements, designs, and implementations.
  • Insufficient testing.
  • Subjective project status assessment.
  • Failure to attack risk.
  • Uncontrolled change propagation.
  • Insufficient automation.

1.2.4 Software development best practices

Finally, the same text identifies these best practices:

  • Develop software iteratively.
  • Manage requirements.
  • Use component-based architectures.
  • Visually model software.
  • Verify software quality.
  • Control changes to software.