chapter 1 software development best practices. topic outline software engineering process symptoms...
TRANSCRIPT
Chapter 1
Software Development Best Practices
Topic Outline
• Software Engineering Process• Symptoms and Root Causes of Software Development
Problems• Software Best Practices
1. Develop software iteratively
2. Manage requirements
3. Use component-based architectures
4. Visually model software
5. Continuously verify software quality
6. Control changes to software
Software Engineering Process
• A disciplined approach to assigning and managing tasks and responsibilities in a development organization
• Its goal is to produce a software that is:– Within a predictable schedule and budget– High-quality– Correspondent to the needs of its end users
Software Engineering Process
• People involved in software development:
– Project managers– Developers– Qualities engineers– Process engineers– Method specialists– System engineers– Analysts
Value of Software
• Software helps drive the growth of the world's economy.• Software-intensive products help:
– Cure the sick– Give voice to the speechless– Mobility to the impaired– Opportunity to less able– Etc.
• Therefore, software is an indispensable part of our modern world.
Value of Software
• Good news for software professionals:– Worldwide economies depend increasingly on software.– Society demands are expanding in size, complexity, distribution, and
importance.
• Bad news:– Expansion of these systems limits of what we know how to develop.– Trying to advance legacy systems to modern technology leads to
technical and organizational problems– Businesses demand increased productivity and improved quality
with faster development and deployment.– Supply of qualified development personnel is not keeping pace with
the demand.
Symptoms of SW Development Failure
• 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 project flaws• Poor software quality• Unacceptable software performance• Team members in each other's way, making it impossible
to reconstruct who changed what, when, where, and why• An untrustworthy build-and-release process
Root Causes of SW Development Problems
• Ad hoc requirements management• Ambiguous and imprecise communication• Brittle architectures• Overwhelming complexity• Undetected inconsistencies in requirements, designs,
and implementations• Insufficient testing• Subjective assessment of project status• Failure to attack risk• Uncontrolled change propagation• Insufficient automation
Software Best Practices
• Treat root causes of problems to eliminate symptoms.• To develop and maintain quality software in a repeatable
and predictable fashion
• Successful organizations use best practice as follows:1. Develop software iteratively
2. Manage requirements
3. Use component-based architectures
4. Visually model software
5. Continuously verify software quality
6. Control changes to software
Waterfall Lifecycle
RequirementsAnalysis
Design
Code and Unit Testing
Subsystem Testing
System Testing
RISK
TIME
An Iterative and Incremental Process
Iterative Software Development
• It offers solutions to the root causes of the software development problem:
1. Serious misunderstandings are made evident early in the lifecycle (when it’s possible to react to them).
2. It enables and encourages user feedback so as to elicit the system’s real requirements.
3. The development team is forced to focus on those issues that are most critical to the project and are shielded from those issues that distract them from the project's real risks.
4. Continuous, iterative testing enables an objective assessment of the project’s status.
Iterative Software Development
• It offers solutions to the root causes of the software development problem: (Continued)
5. Inconsistencies among requirements, designs, and implementations are detected early.
6. The workload of the team, especially the testing team, is spread more evenly throughout the project’s lifecycle.
7. The team can leverage lessons learned and therefore can continuously improve the process.
8. Stakeholders in the project can be given concrete evidence of the project’s status throughout its lifecycle.
Manage Requirements
• The challenge of managing the requirements is how to deal with the change of requirements during the life of a software process.
– It is hard to completely and exhaustively state a system's requirements before the start of development.
– as a new or evolving system changes, a user's understanding of the system's requirements also changes.
A requirement is a condition or capability a system must have.
Manage Requirements
• The active management of requirements encompasses three activities:
– Eliciting, organizing, and documenting the system's required functionality and constraints
– Evaluating changes to these requirements and assessing their impact
– Tracking and documenting trade-offs and decisions
Manage Requirements
• It offers solutions to the root causes of the software development problems:
– A disciplined approach is built into requirements management.– Communications are based on defined requirements.– Requirements can be prioritized filtered, and traced.– An objective assessment of functionality and performance is
possible.– Inconsistencies are detected more easily.– With tool support, it is possible to provide a repository for a
system’s requirements, attributes, and traces, with automatic links to external documents.
Use Component-Based Architectures
• Software system is viewed from different perspectives.• Each of stakeholder looks at that system in a different
way at different times over the project's life.• Those people include:
– End users– Analysts– Developers, – System integrators– Testers– Technical writers– Project managers
Use Component-Based Architectures
• A system's architecture facilitates decision-making about:
– Organization of a software system – Selection of the structural elements and their interfaces by which
the system is composed– Their behavior, as specified by the collaborations among those
elements – Composition of these structural and behavioral elements into
progressively larger subsystems– Architectural style that guides this organization: these elements
and their interfaces, their collaborations, and their composition.
Use Component-Based Architectures
• Software architecture is concerned with:
– Structure and behavior– Usage– Functionality– Performance– Resilience– Reuse– Comprehensibility – Economic– Technologic constraint– Aesthetic
Use Component-Based Architectures
• Building resilient architectures enables:
– Degrees of reuse– Offer a clear division of work among teams of developers– Isolate hardware and software dependencies that may be subject
to change– Improve maintainability
Use Component-Based Architectures
• Commercial Component-Base Development (CBD)– Microsoft’s Component Object Model (COM)– Object Management Group’s (OMG) Common Object Request
Broker Architecture (CORBA)– Sun Microsystems’ Enterprise JavaBeans (EJB)
• Components make reuse possible on larger scale by enabling system to be composed from – existing parts– off-the-shelf third-party parts– a few new parts.
A Component-Based Software Architecture
Use Component-Based Architectures
• Using components-based architectures offers solutions to the root causes of the software development problems:
– Components facilitate resilient architectures.– Modularity enables a clear separation of concerns among
elements of a system that are subject to change.– Reuse is facilitated by leveraging standardized frameworks (such
as COM+, CORBA, and EJB) and commercially available components.
– Components provide a natural basis for configuration management.
– Visual modeling tools provide automation for component-based development.
Visually Model Software
• Why using models?– We cannot comprehend complex systems in their entirety.– Model helps development team visualize, specify, construct, and
document the structure and behavior of a system's architecture.– Members of the development team can unambiguously
communicate their decisions to one another.
• Visual modeling also helps to maintain consistency among a system's artifacts: – its requirements, designs, and implementations.
A model is a simplification of reality that completely describes a system from a particular perspective.
Modeling a System from Different Perspectives
Visually Model Software
• Modeling software visually offers solutions to the root causes of the software development problems:
– Use-cases and scenarios unambiguously specify behavior.– Models unambiguously capture software design.– Non-modular and inflexible architectures are exposed.– Detail can be hidden when necessary.– Unambiguous designs reveal their inconsistencies more readily.– Application quality starts with good design.– Visual modeling tools provide support for UML modeling.
Continuously Verify Software Quality
Software problems are 100 to 1,000 times more expensive to find and repair after deployment than beforehand.
COST
TIME
Continuously Verify Software Quality
• It's important to assess continuously the quality of a system with respect to its:– functionality, – reliability, – application performance, – and system performance.
• Verifying a system's functionality involves creating tests for each key scenario, each of which represents some aspect of the system's desired behavior.
• As software is developed iteratively, tests are performed at every iteration.
Continuously Verify Software Quality
• Verifying software quality offers solutions to the root causes of software development problems:
– Project status assessment is made objective, not subjective, because test results, not paper documents, are evaluated.
– This objective assessment exposes inconsistencies in requirements, designs, and implementations.
– Testing and verification are focused on areas of highest risk, thereby increasing the quality and effectiveness of those areas.
– Defects are identified early, radically reducing the cost of fixing them.– Automated testing tools provide testing for functionality, reliability,
and performance.
Control Changes to Software
• A key challenge to developing software-intensive systems is to cope with developers organized into teams.
• In the absence of disciplined control, the development process rapidly degenerates into chaos.
Control Changes to Software
• Coordinating activities and artifacts of developers and teams involves establishing repeatable workflows for managing changes to software.
• Coordination allows a better allocation of resources based on the project's priorities and risks.
• Coordination actively manages the work on those changes across iterations.
• Coordinating iterations and releases involves establishing a tested baseline at the completion of each iteration.
Control Changes to Software
• Controlling changes to software offers solutions to the root causes of software development problems:
– The workflow of requirements changes is defined and repeatable.
– Change requests facilitate clear communications.– Isolated workspaces reduce interference among team members
working in parallel.– Change rate statistics provide good metrics for objectively
assessing project status.– Workspaces contain all artifacts, which facilitates consistency.– Change propagation is assessable and controlled.– Changes can be maintained in a robust, customizable system.
The Rational Unified Process
• Roles of Software Development Process:
– Provide guidance as to the order of a team’s activities.
– Specify which artifacts should be developed and when they should be developed.
– Direct the tasks of individual developers and the team as a whole.
– Offer criteria for monitoring and measuring the project’s products and activities.
The Four Ps
• People
• Project
• Product
• Process in Software Development
Adopting Well-Defined Process
• It helps:– Make business sustainable– Improve each new project.– Increase the efficiency and productivity of the organization.
Mature organizations that employ a well-defined process can
develop complex systems in a repeatable and predictable way.
Summary
• Building quality software in a repeatable and predictable fashion is hard.
• There are a number of symptoms of common software development problem, and these symptoms are the observable results of the root causes.
• To strike at the root causes of these software development problems, use software development best practices:– Develop software iteratively.– Manage requirements.– Use component-based architectures.– Visually model software.– Continuously verify software quality.– Control changes to software.
• Unified Process brings these best practices together in a form that is suitable for a wide range of projects and organizations.