Introduction to the Unified Process

  1. What is software engineering

Using engineering approaches to

  1. Why software engineering
  2. Better products and/or better management

    for large, complex, and/or mission-critical software

  3. Knowledge areas of software engineering

(quality assurance, verification and validation, reliability)

(development methods and environments)

  1. Quality factors of software

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.

  1. What is a software development process

customers, users, developers, and managers.

  1. Reality bases of a software development process

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.

 

 

 

 

  1. What is the unified process
  1. Key features of the unified process

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.

    1. Use-Case Model
    2. All use cases and their relationships to users

    3. Analysis Model: specifies use cases
    4. Use case refinement

      Conceptual model with initial system behaviors

    5. Design Model: realizes use cases
    6. Static structure of the system

      Collaboration of system elements (classes, interfaces, subsystems)

    7. Implementation Model: implements use cases
    8. Source code components

      Mappings from classes to components

    9. Deployment Model: distributes use cases
    10. Mappings from components to distributed computers

    11. Test Model: verify use cases

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.

 

 

    1. Select a group or subset of use cases that extend the functionality from system produced from the last iteration.
    2. The selected group must have the highest risk in terms of realization among all currently unrealized use cases.
    1. Analysis: identify and specify the relevant use cases
    2. Design: specify software system using architecture guideline
    3. Implementation: code the design in components
    4. Test: verify if the components satisfy the use cases

(only one repeated iteration for mistakes)

(deal with highest risks first)

(realize new requirements in future iterations)

  1. The life of the unified process
  1. Inception (vision of the end products and its business case)
  2. Simplified use-case model for most critical use cases

    Architecture outline

    Risk identification and prioritization

    Planning for the next phase with cost estimation

  3. Elaboration
  4. Specifying all or most use cases

    Architecture design with different views for the whole system

    Realizing critical use cases

    Forming an architecture baseline

  5. Construction
  6. Building or implementing components

  7. Transition

Preparing beta release to selected users (manufacturing)

Maintaining the beta release and responding feed backs.

User training and assistance