A UML Model of The Unified Process
A UML Model of The Unified Process
The Unified Process is a confusing concept—and sometimes doesn't feel very unified at all—because there are
actually multiple Unified Processes:
The Unified Process is a proposal from Jacobson, Booch, Rumbaugh, and others at Rational Software
for a standard software development process. It bears some superficial resemblance to the Waterfall
Model; but as a more modern approach, it's more component and object oriented, and it's more iterative
and incremental. It's also extremely customizable: it explicitly acknowledges that different projects
require different degrees of process. [2]
The Rational Unified Process is an integrated suite of tools from Rational for implementing,
supporting, and customizing the Unified Process. While I think these are excellent tools, I find it
unfortunate that many people confuse the tools with the process. Then, if they choose not to purchase
the tools, they believe that the Unified Process offers no benefit to them. In this, they're quite wrong: the
process is a useful approach no matter what tools you use.
And then there's any given customization of the Unified Process. A team working on a very large
project and a team working on a very small project may seem to be following entirely different
processes, and yet both may claim to be following the Unified Process.
In this model, I'll describe just the basic outline of the Unified Process. For more details, I recommend The
Unified Software Development Process from the Three Amigos.
1. Use-Case Driven. The Unified Process is driven by (and usually starts with) identifying, elaborating,
categorizing, and modeling use cases. Thus, user needs are integrated into and reflected within all
steps of the process.
2. Architecture-Centric. The Unified Process has a very broad definition of architecture, encompassing
not just key elements of the system's structure, but also key use cases, key classes, key interfaces, and
key methods. In the UP view, the architecture encompasses all "essential" views of the system
structure, at different levels of abstraction.
3. Iterative. The system is analyzed, architected, designed, and implemented in cycles or iterations, mini-
projects defined by identifying a set of use cases and use case scenarios that comprise a useful
extension to existing knowledge and work; analyzing and identifying and managing risks within those
use cases; and then architecting, designing, implementing, and testing to fulfill those use cases. (The
nature of an iteration is explored further in the next section, "The Core Workflow.")
4. Incremental. The iterations of work can be further grouped into increments, marked by milestone
points that indicate a particular large chunk of functionality is ready for release.
Note that when I refer to an "iteration" in the Unified Process, I'm referring to one complete cycle through these
five activities that make up the Core Workflow. Here, the five activities of the Core Workflow are as follows:
2. Analysis. Analyzing, refining, and structuring the requirements, leading to early stages of an
architecture. Recall from Chapter 9 that the Unified Process considers architecture to mean much
more than code structure. Rather, UP uses the term to mean identification and elaboration of
"architecturally significant" elements of the system. The concept of architectural significance thus
includes the preliminary design of critical subsystems and the preliminary design of critical
functionality. This is why analysis—typically thought of as a requirements activity—involves the
architecture under UP. (UP has four main characteristics. It is architecture-centric, use-case driven,
iterative, and incremental. You'll see these characteristics in the UP diagrams. For instance, Figure
12-8 represents the iterative nature of UP, and Figure 12-9, shown later, will represent the
incremental nature.)
1.
Figure 12-9: The phases of the Unified Process
2. Design. Refining the requirements and architecture into a detailed architecture and detailed designs.
3. Implementation. Deriving code from the detailed designs, and refining and unit testing that code.
4. Testing. Designing, implementing, applying, and assessing tests to verify that the code meets the
requirements. These results feed back into the Requirements activity, so that you can revise the
requirements based on questions raised in the tests.
Unlike the Spiral process—where Objective Management, Risk Management , Construction Management,
and Iteration Management form the "outer" shape of the process, with details within—the UP Core Workflow
is actually an "inner" shape. These activities happen within larger activities of the process. In UP, all five of
these workflows take place throughout the life of the project, but the proportion of time spent on each during
one iteration changes as the project matures:
Early in the project, Requirements consume most of the effort. Analysis proceeds to give structure to
the requirements, and to raise architectural concerns that may lead to tradeoffs in the requirements. Design
and Implementation are focused mostly on critical architecture, and perhaps on UI prototypes and other
prototypes to explore the feasibility of the requirements. Testing is a minor effort, focused on identifying
what to test and how to test to verify that the requirements are met, as well as on a testing infrastructure.
In the middle of the project, Requirements are baselined, but continue to grow in response to new user
needs and to discoveries in other activities. Analysis works to incorporate new requirements into the
existing architecture, and to revise the architecture where it must. Design and Implementation are focused
on architecture in depth and resulting code. Testing is focused on testing new functionality and verifying
that old functionality is unbroken.
Late in the project, Requirements effort drops to a minimum, handling essential change requests (and
perhaps gathering nonessential requests for a next-generation project). Analysis similarly drops to only that
needed for new requirements. Design is ongoing, but again focused primarily on the few new
requirements. Implementation and Testing dominate the effort, pushing toward the goal of "all
requirements met."
I used the «Cycle» stereotype for these phases, because each represents one or more increments of effort, where
an increment is the result of one iteration through the Core Workflow. Thus, each phase is cyclic until enough
increments have accumulated to support transition to the next phase.
Inception. In this phase, you define the requirements and a candidate architecture to the point where
you can assess the feasibility of the project, define initial estimates and schedules, and decide whether to
take on the project or not.
Elaboration. In this phase, you define the architecture in detail, setting the framework for the
remaining phases.
Construction. In this phase, the system is built over a number of increments and releases.
Transition. In this phase, the current set of increments of the system is released to the user community
for use and for feedback.
Again, each phase contains within it iterations of the Core Workflow. Next, we'll look at each activity in the
Core Workflow in more depth.
System Analyst. This actor is responsible for describing the domain and the requirements to the rest of
the team.
Use Case Specifier. This actor is responsible for comprehending and describing one or more use cases
in depth.
User Interface Designer. This actor is responsible for designing and implementing the use interfaces
of the system.
The «Internal Document» objects in the diagram represent artifacts or work products produced within the
workflow:
Actor. This object represents the descriptions of one or more actors that will interact with the system.
Glossary. This object represents the formal definitions of one or more domain objects within the
problem domain.
Architecture Description. This object represents the description of the architecturally significant
elements of the system. At this time, that means primarily the significant use cases (as judged by the
architect), including Use Case Diagrams and Interaction Diagrams as appropriate. This object will
reappear in other workflows, with new kinds of information added to it in each workflow.
Use Case Description. This object represents the descriptions of one or more use cases, including
scenarios (perhaps captured as Activity Diagrams).
Use Case Model. This object represents the structure and relationships of actors, use cases, and domain
objects, captured in part as Use Case Diagrams, Activity Diagrams, and Class Diagrams.
UI Prototype. This object represents prototype user interfaces for one or more use cases.
Use Case Engineer. This actor is responsible for analyzing and detailing one or more use cases.
Component Engineer. This actor is responsible for specifying the responsibilities of one or more
classes in one or more packages within one or more components, along with the interactions among
classes.
Architecture Description. This object reappears in this workflow, adding the architecturally
significant classes and packages and components, plus Class Diagrams and Component Diagrams.
Interaction Diagrams can also be helpful explaining the purpose and method of critical use cases.
Analysis Model. This object represents the packages and components and interfaces of the system,
captured in Component Diagrams and Class Diagrams.
Use Case Realization Analysis. This object represents the detailed analysis of one or more use cases,
including detailed analysis Class Diagrams and Interaction Diagrams.
Analysis Class. This object represents one or more classes or interfaces of the system, expressed at the
analysis scope. This identifies the responsibilities and interfaces, but not necessarily the internals.
Analysis Package. This object represents one or more packages of analysis classes, with each package
possibly corresponding to a component.
Architecture Description. This object represents the detailed decomposition into components and
interfaces, captured in Component Diagrams, and Class and Interaction Diagrams for the architecturally
significant elements.
Design Model. This object represents the packages and components and interfaces of the system—in
more depth and implementation detail than in the Analysis Model—captured in Component Diagrams
and Class Diagrams.
Deployment Model. This object represents the deployment of the components and interfaces to nodes
and physical associations of the system, captured in Deployment Diagrams.
Design Class. This object represents one or more classes or interfaces of the system, expressed at the
design scope. This specifies the internals of the class: its attributes and operations and behavior in depth.
Use Case Realization Design. This object represents the detailed analysis of one or more use cases,
going beyond the Use Case Realization Analysis to include precise method parameters, return values,
detailed logic, etc. Writing code from these diagrams should be like falling off a log.
Interface. This object represents one or more interfaces, specified at a level of detail suitable for
implementation in the target language.
Design Subsystem. This object represents one or more components that concretely realize a set of
interfaces and contain a set of design classes.
System Integrator. This actor is responsible for creating integration plans to install or update the
system.
Architecture Description. This object represents updated Component Diagrams, Class Diagrams, and
Interaction Diagrams.
Component Outline. This object represents the detailed component and deployment structure,
captured in Component and Deployment Diagrams.
Implementation Model. This object represents a model of the system, and is used in later increments
to help determine what has changed and what needs to be integrated with this iteration.
Integration Model. This object represents a model of what is new in the system, along with details of
how the new elements shall be integrated with existing elements.
Interface. This object represents one or more interfaces, refined as needed during implementation.
Component. This object represents one or more components, fully implemented and ready for testing.
Test Engineer. This actor is responsible for analyzing requirements, designs, and code to determine
testing strategies and evaluate test results.
Integration Tester. This actor is responsible for testing that new components work correctly with each
other and with existing components in the deployment environment.
System Tester. This actor is responsible for testing that each individual component works as designed.
Test Plan. This object represents the testing strategies, test cases, and expected results used to test all
or part of the system.
Test Procedure. This object represents one specific set of steps to follow in carrying out a test of all or
part of the system. The same test procedure may be applied in multiple test cases, with different results
expected for each test case. This procedure may include Use Case Diagrams, Class Diagrams, Activity
Diagrams, and other Interaction Diagrams as appropriate. It is, in essence, a model of a test, and thus
may be modeled with UML.
Test Case. This object represents a single test of all or part of the system, including required inputs and
expected results.
Test Component. This object represents a component designed and implemented specifically to test
one or more components of the system, as designed in a Test Procedure.
Defect. This object represents the results of one test case, indicating discrepancies between expected
and actual results.
Test Evaluation. This object represents the Test Engineer's evaluation of a Test Plan, Test Cases,
and Defects. It should include an evaluation of the severity and consequences of each defect, as well as a
recommendation of whether the defects are sufficient to hold up release of the system. The Test
Evaluation should become an input to the next Requirements Workflow.
So really, the Unified Process is as large or as small and as orchestrated or as agile as you need it to be.
Dogmatically following "all" of UP can sink a small project; but rejecting UP as "too large, too formal" can
deprive you of a powerful tool for planning and organizing your development process.
Both of these models are the software process models that are use d for the development of any
software.The water fall model is a model in which you can't some back to the previous steps. Like
the waterfall it only flows or work in one direction, there is not any possibility that you move to the
previous step. So for that you have to complete your current step fully and don't leave any work in
that step. Otherwise if you reach at the end of next step and you find that there was some missing in
the previous step then you have to start from the scratch again. It is like one-way traffic in which you
can't move backward.
While on the other hand all the steps of the V-model is almost same like the waterfall model, but the
difference Is that, the waterfall model moving to the downward direction, it work in the form of V
shape means at the and move upward. Until the coding step the model move towards downward
but after the coding step it bent and move towards upward direction. The reason for this V shape is
that the each and every step done at one side it will be tested on the other side, so at the end all
steps will be verified and tested correctly.