Introduction to the Unified Process
Using engineering approaches to
Better products and/or better management
for large, complex, and/or mission-critical software
(quality assurance, verification and validation, reliability)
(development methods and environments)
The ability of software systems to perform their exact tasks, as defined by their specification
The ability of software systems to react appropriately to abnormal conditions.
The ease of adapting software systems to changes of specification.
The ability of software elements to serve for the construction of many different applications.
The ease of combining software elements with others.
The ability of a software system to place as few demands as possible on hardware resources. (e.g. cpu time, memory space, disk space, network bandwidth)
The ease of transferring software systems various hardware and software environments.
The ease with which people of various backgrounds and qualifications can learn to use software products and apply them to solve problems.
The extent of possibilities provided by a software system.
The ability of a software system to be released when and before its users want it.
customers, users, developers, and managers.
e.g. programming languages, operating systems, computer systems, network capabilities, development environments.
To support the process.
The expected skill set of target developers.
The process must fit in the company’s overall organization patterns.
Human users or other computer systems that interact with the system to input data or receive outputs.
A piece of functionality in the system that gives a user a result of value.
It describes per-user based system functionality.
It consists of all use-cases together.
It captures the overall system functional requirements.
It describes the system’s complete functionality.
The development process proceeds through a series of workflow or models that are derived from the use cases and realize the use cases in different development stages.
All use cases and their relationships to users
Use case refinement
Conceptual model with initial system behaviors
Static structure of the system
Collaboration of system elements (classes, interfaces, subsystems)
Source code components
Mappings from classes to components
Mappings from components to distributed computers
Test cases
Design view (classes and relationships)
Implementation view (Source/compilation/executable components)
Process view (Multi process/threads computation)
Deployment view (Distributed computation)
Use cases (what the system will do)
Application domain (consistent with domain architecture style)
Target platforms (computer architecture, OS, database, network)
Reusable building blocks (components, application framework)
Target deployment strategies (distributed systems)
Legacy systems (mainframes)
Nonfunctional requirements (performance, reliability)
Use cases: the function of the system
Architecture: the form of the system
The system function must be realized by a software system in certain form.
The architecture must be designed to allow the system evolve, when use cases evolve.
Step 1: create use-case independent architectural foundation
Step 2: Specify and realize key use cases
Step 3: Discover architecture features
Step 4: Repeat steps 1-3 to build more foundations and realize
more use cases.
A development project is planned into several iterations or mini-projects.
Each iteration goes through all development stages (analysis, design, implementation, testing) and ends with an internal release of the product.
Each iteration implements more use cases or system functions.
(only one repeated iteration for mistakes)
(deal with highest risks first)
(realize new requirements in future iterations)
Simplified use-case model for most critical use cases
Architecture outline
Risk identification and prioritization
Planning for the next phase with cost estimation
Specifying all or most use cases
Architecture design with different views for the whole system
Realizing critical use cases
Forming an architecture baseline
Building or implementing components
Preparing beta release to selected users (manufacturing)
Maintaining the beta release and responding feed backs.
User training and assistance