Friday, 21 December 2012

Requirement Engineering

3.1 Requirement Engineering

We recall from our previous discussion that software development is not simply coding –
it is a multi-activity process. The process of software construction encompasses and
includes answers to the following questions:
  • What is the problem to be solved?
  • What are the characteristics of the entity that is used to solve the problem?
  • How will the entity be realized?
  • How will the entity be constructed?
  • What approach will be used to uncover errors that were made in the design and construction of the entity?
  • How will the entity be supported over the long term when users of the entity request corrections, adaptations, and enhancements?
These questions force us to look at the software development process from different angles and require different tools and techniques to be adopted at different stages and phases of the software development life cycle. Hence we can divide the whole process in 4 distinct phases namely vision, definition, development, and maintenance. Each one of these stages has a different focus of activity. During the vision phases, the focus is on why do we want to have this system; during definition phase the focus shifts from why to what needs to be built to fulfill the previously outlined vision; during development the definition is realized into design and implementation of the system; and finally during maintenance all the changes and enhancements to keep the system up and running and adapt to the new environment and needs are carried out. Requirement engineering mainly deals with the definition phase of the system. Requirement engineering is the name of the process when the system services and  constraints are established. It is the starting point of the development process with the focus of activity on what and not how.

Software Requirements Definitions
Before talking about the requirement process in general and discussing different tools and techniques used for developing a good set of requirements, let us first look at a few definitions of software requirements. Jones defines software requirements as a statement of needs by a user that triggers the development of a program or system.

Alan Davis defines software requirements as a user need or necessary feature, function, or attribute of a system that can be sensed from a position external to that system. According to Ian Summerville, requirements are a specification of what should be implemented. They are descriptions of how the system should behave, or of a system property or attribute. They may be a constraint on the development process of the system.

IEEE defines software requirements as:

1. A condition or capability needed by user to solve a problem or achieve an objective.
2. A condition or capability that must be met or possessed by a system or system component to satisfy a contract, standard, specification, or other formally imposed document.
3. A documented representation of a condition or capability as in 1 or 2.

As can be seen, these definitions slightly differ from one another but essentially say the same thing: a software requirement is a document that describes all the services provided by the system along with the constraints under which it must operate.

In the next we will see Importance of Requirement in Software Engineering.

Thursday, 20 December 2012

Software Engineering Phases

2.4 Software Engineering Phases

There are four basic phases of software development that are shown in Figure 4. Vision: Here we determine  why are we doing this thing and what are our business objectives that we want to achieve.

Definition: Here we actually realize or automate the vision developed in first phase. Here we determine what are the activities and things involved.

Development: Here we determine, what should be the design of the system, how will it be implemented and how to test it.

Maintenance: This is very important phase of software development. Here we control the change in system, whether that change is in the form of enhancements or defect removal.

Software Engineering Phases - Click to Enlarge
Maintenance
Correction, adaptation, enhancement

For most large, long lifetime software systems, maintenance cost normally exceeds development cost by factors ranging from 2 to 3.

Boehm (1975) quotes a pathological case where the development cost of an avionics system was $30 per line of code but the maintenance cost was $4000 per instruction

Software Construction

2.3 Software Construction

Here once again look at the construction activities of the software from a different
perspective. This section provides with a sequence of questions that have to answer in
different stages of software development.

1. What is the problem to be solved?
2. What are the characteristics of the entity that is used to solve the problem?
3. How will the entity be realized?
4. How will the entity be constructed?
5. What approach will be used to uncover errors that were made in the design and construction of the entity?
6. How will the entity be supported over the long term, when users of the entity request corrections, adaptations, and enhancements?

In the next post we will see Software Engineering Phase.

Software Engineering Framework

2.2 A Software Engineering Framework

Any Engineering approach must be founded on organizational commitment to quality. That means the software development organization must have special focus on quality while performing the software engineering activities. Based on this commitment to quality by the organization, a software engineering framework is proposed that is shown in figure 2. The major components of this framework are described below.

Quality Focus: As we have said earlier, the given framework is based on the organizational commitment to quality. The quality focus demands that processes be defined for rational and timely development of software. And quality should be emphasized while executing these processes.

Processes: The processes are set of key process areas (KPAs) for effectively manage and deliver quality software in a cost effective manner. The processes define the tasks to be performed and the order in which they are to be performed. Every task has some deliverables and every deliverable should be delivered at a particular milestone.

Methods: Methods provide the technical “how-to’s” to carryout these tasks. There could be more than one technique to perform a task and different techniques could be used in different situations.

Tools: Tools provide automated or semi-automated support for software processes, methods, and quality control.

 Click to Enlarge
>>Software Development Loop
Lets now look at software engineering activities from a different perspective. Software
development activities could be performed in a cyclic and that cycle is called software
development loop which is shown in figure 3. The major stages of software development
loop are described below.

Problem Definition: In this stage we determine what is the problem against which we are going to develop software. Here we try to completely comprehend the issues and requirements of the software system to build.

Technical Development: In this stage we try to find the solution of the problem on technical grounds and base our actual implementation on it. This is the stage where a new system is actually developed that solves the problem defined in the first stage.

Solution Integration: If there are already developed system(s) available with which our new system has to interact then those systems should also be the part of our new system. All those existing system(s) integrate with our new system at this stage.

Status Quo: After going through the previous three stages successfully, when we actually deployed the new system at the user site then that situation is called status quo. But once we get new requirements then we need to change the status quo. After getting new requirements we perform all the steps in the software development loop again. The software developed through this process has the property that this could be evolved and integrated easily with the existing systems.

Software Development Loop- Click to Enlarge
In the next we will see Software Construction.