Rational Unified Process (RUP) is a general framework that can be used to describe a development process. The software development cycle has got 4 phases in the following order Inception, Elaboration, Construction, and Transition.
The core of the phases is state-based, and the state is determined by what fundamental questions you are trying to answer:
Inception - do you and the customer have a shared understanding of the system ?
Elaboration - do you have baseline architecture to be able to build the system ?
Construction - are you developing a product ?
Transition - are you trying to get the customer to take ownership of the system ?
RUP is based on a few important philosophies and principles:
A software project team should plan ahead.
It should know where it is going.
It should capture project knowledge in a storable and extensible form.
The best practices of RUP involve the following major 5 properties:
Use case driven: Interaction between the users and the system.
Architecture centric: Based on architecture with clear relationships between architectural components.
Iterative: The problem and the solution are divided into more manageable smaller pieces, where each iteration will be addressing one of those pieces.
Incremental: Each iteration builds incrementally on the foundation built in the previous iteration.
Controlled: Control with respect to process means you always know what to do next; control with respect to management means that all deliverables, artifacts, and code are under configuration management.
Explain the 4 phases of RUP?
During the inception phase, you work out the business case for the project. You also will be making a rough cost estimate and return on investment. You should also outline the scope and size of the project. The fundamental question you ask at the end of this phase: do you and the customer have a shared understanding of the system?
At this stage you have the go ahead of the project however only have vague requirements. So at this stage you need to get a better understanding of the problem. Some of the steps involved are:
What is it you are actually going to build?
How are you going to build it?
What technology are you going to use?
Analyzing and dealing with requirement risks, technological risks, skill risks, political risks etc.
Develop a domain model, use case model and a design model. The UML techniques can be used for the model diagrams (e.g. class diagrams, sequence diagrams etc). An important result of the elaboration phase is that you have a baseline architecture. This architecture consists of:
A list of use cases depicting the requirements.
The domain model, which captures your understanding of the domain with the help of UML class diagrams.
Selection of key implementation technology and how they fit together. For example: Java/J2EE with JSP, Struts, EJB, XML, etc.
The fundamental question you ask at the end of this phase: do you have a baseline architecture to be able to build the system ?
In this phase you will be building the system in a series of iterations. Each iteration is a mini project. You will be performing analysis, design, unit testing, coding, system testing, and integration testing for the use cases assigned to each iteration. The iterations within the construction phase are incremental and iterative. Each iteration builds on the use cases developed in the previous iterations. The each iteration will involve code rewrite, refactoring, use of design patterns etc.
The basic documentation required during the construction phase is:
A class diagram and a sequence diagram.
Some text to pull the diagrams together.
If a class has complex life cycle behavior then a state diagram is required.
If a class has a complex computation then an activity diagram is required.
The fundamental question you ask at the end of this phase: do you have a developed product ?
During this phase you will be delivering the finished code regularly. During this phase there is no coding to add functionality unless it is small and essential. There will be bug fixes, code optimization etc during this phase. An example of a transition phase is that the time between the beta release and the final release of a product. The fundamental question you ask at the end of this phase: are you trying to get the customer to take ownership of the developed product or system ?
What are the characteristics of RUP ? Where can you use RUP ?
RUP is based on a few important philosophies and principles like planning ahead, knowing where the process is heading and capturing the project in storable and extensible manner.
It is largely based on OO analysis and design, and use case driven.
Iterative and incremental development as opposed to waterfall approach, which hides problems.
Architecture centric approach.
RUP is more suited for larger teams of 50-100 people. RUP can also be used as an agile (i.e. lightweight) process for smaller teams of 20-30 people, or as a heavy weight process for larger teams of 50-100 people. Extreme Programming (XP) can be considered as a subset of RUP. At the time of writing, the agile (i.e lightweight) software development process is gaining popularity and momentum across organizations. Several methodologies fit under this agile development methodology banner. All these methodologies share many characteristics like iterative and incremental development, test driven development, stand up meetings to improve communication, automatic testing, build and continuous integration of code etc.