Professional Documents
Culture Documents
Software was simple in nature and hence, software development was a simple activity. However,
as technology improved, software became more complex and software projects grew larger.
Software development now necessitated the presence of a team, which could prepare detailed
plans and designs, carry out testing, develop intuitive user interfaces, and integrate all these
activities into a system. This new approach led to the emergence of a discipline known as
software engineering.
Software engineering provides methods to handle complexities in a software system and
enables the development of reliable software systems, which maximize productivity. In
addition to the technical aspects of the software development, it also covers
management activities which include guiding the team, budgeting, preparing schedules,
etc. The notion of software engineering was first proposed in 1968. Since then, software
engineering has evolved as a full-fledged engineering discipline, which is accepted as a
field involving in-depth study and research. Software engineering methods and tools
have been successfully implemented in various applications spread across different
walks of life.
Software Characteristics
Different individuals judge software on different basis. This is because they are involved
with the software in different ways. For example, users want the software to perform
according to their requirements. Similarly, developers involved in designing, coding,
and maintenance of the software evaluate the software by looking at its internal
characteristics, before delivering it to the user. Software characteristics are classified
into six major components.
Functionality: Refers to the degree of performance of the software against its
intended purpose.
Reliability: Refers to the ability of the software to provide desired functionality
under the given conditions.
Usability: Refers to the extent to which the software can be used with ease.
Efficiency: Refers to the ability of the software to use system resources in the most
effective and efficient manner.
Maintainability: Refers to the ease with which the modifications can be made in a
software system to extend its functionality, improve its performance, or correct errors.
Portability: Refers to the ease with which software developers can transfer software
from one platform to another, without (or with minimum) changes. In simple terms, it
refers to the ability of software to function properly on different hardware and software
platforms without making any changes in it.
In addition to the above mentioned characteristics, robustness and integrity are also
important. Robustness refers to the degree to which the software can keep on
functioning in spite of being provided with invalid data while integrity refers to the
degree to which unauthorized access to the software or data can be prevented.
Classification of Software
Software can be applied in countless fields such as business, education, social sector,
and other fields. It is designed to suit some specific goals such as data
processing, information sharing, communication, and so on. It is classified according to
the range of potential of applications. These classifications are listed below.
System software: This class of software manages and controls the internal
operations of a computer system. It is a group of programs, which is responsible for
using computer resources efficiently and effectively. For example, an operating system is
a system software, which controls the hardware, manages memory and multitasking
functions, and acts as an interface between application programs and the computer.
Real-time software: This class of software observes, analyzes, and controls real
world events as they occur. Generally, a real-time system guarantees a response to an
external event within a specified period of time. An example of real-time software is the
software used for weather forecasting that collects and processes parameters like
temperature and humidity from the external environment to forecast the weather. Most
of the defence organizations all over the world use real-time software to control their
military hardware.
Business software: This class of software is widely used in areas where
management and control of financial activities is of utmost importance. The
fundamental component of a business system comprises payroll, inventory, and
accounting software that permit the user to access relevant data from the database.
These activities are usually performed with the help of specialized business software that
facilitates efficient framework in business operations and in management decisions.
Engineering and scientific software: This class of software has emerged as a
powerful tool in the research and development of next generation technology.
Applications such as the study of celestial bodies, under-surface activities, and
programming of an orbital path for space shuttles are heavily dependent on engineering
and scientific software. This software is designed to perform precise calculations on
complex numerical data that are obtained during real time environment.
Artificial intelligence (AI) software: This class of software is used where the
problem-solving technique is non-algorithmic in nature. The solutions of such problems
are generally non-agreeable to computation or straightforward analysis. Instead, these
problems require specific problem-solving strategies that include expert system, pattern
recognition, and game-playing techniques. In addition, they involve different kinds of
search techniques which include the use of heuristics. The role of artificial intelligence
software is to add certain degrees of intelligence to the mechanical hardware in order to
get the desired work done in an agile manner.
Web-based software: This class of software acts as an interface between the user
and the Internet. Data on the Internet is in the form of text, audio, or video format,
linked with hyperlinks. Web browser is a software that retrieves web pages from the
Internet. The software incorporates executable instructions written in special scripting
languages such as CGI or ASP. Apart from providing navigation on the Web, this
software also supports additional features that are useful while surfing the Internet.
Personal computer (PC) software: This class of software is used for both official
and personal use. The personal computer software market has grown over in the last
two decades from normal text editor to word processor and from simple paintbrush to
advanced image-editing software. This software is used predominantly in almost every
field, whether it is database management system, financial accounting package, or
multimedia-based software. It has emerged as a versatile tool for routine applications.
As the productivity (and hence the cost of a project) and quality are determined largely
by the process to satisfy the engineering objectives of quality improvement and cost
reduction, the software process must be improved. Having process improvement as a
basic goal of the software process implies that the software process used is such that is
supports its improvement.
Selecting Software Process Models
The software process model framework is specific to the project. Thus, it is essential to select the
software process model according to the software which is to be developed. The software project
is considered efficient if the process model is selected according to the requirements. It is also
essential to consider time and cost while choosing a process model as cost and/ or time
constraints play an important role in software development. The basic characteristics required
to select the process model are project type and associated risks, requirements of the project,
and the users.
One of the key features of selecting a process model is to understand the project in terms
of size, complexity, funds available, and so on. In addition, the risks which are
associated with the project should also be considered. Note that only a few process
models emphasize risk assessment. Various other issues related to the project and the
risks are listed in Table.
Table Selections on the Basis of the Project Type and Associated Risks
The most essential feature of any process model is to understand the requirements of
the project. In case the requirements are not clearly defined by the user or poorly
understood by the developer, the developed software leads to ineffective systems. Thus,
the requirements of the software should be clearly understood before selecting any
process model. Various other issues related to the requirements are listed in Table.
Table Selection on the Basis of the Requirements of the Project
Software is developed for the users. Hence, the users should be consulted while selecting
the process model. The comprehensibility of the project increases if users are involved
in selecting the process model. It is possible that a user is aware of the requirements or
has a rough idea of the requirements. It is also possible that the user wants the project to
be developed in a sequential manner or an incremental manner (where a part is
delivered to the user for use). Various other issues related to the user's satisfaction are
listed in Table.
Table Selection on the Basis of the Users
As stated earlier, the waterfall model comprises several phases, which are listed below.
Advantages Disadvantages
Relatively simple to understand Requirements need to be specified before
Each phase of development proceeds the development proceeds.
sequentially. The changes of requirements in later
Allows managerial control where a phases of the waterfall model cannot be
schedule with deadlines is set for each done. This implies that once the software
stage of development. enters the testing phase, it becomes
Helps in controlling schedules, budgets, difficult to incorporate changes at such a
and documentation. late phase.
No user involvement and working version
of the software is available when the
software is being developed.
Does not involve risk management.
Assumes that requirements are stable
and are frozen across the project span.
At any stage, if the user is not satisfied with the prototype, it can be discarded and an
entirely new system can be developed. Generally, prototype can be prepared by the
approaches listed below.
1. By creating main user interfaces without any substantial coding so that users can get a
feel of how the actual system will appear.
2. By abbreviating a version of the system that will perform limited subsets of functions
3. By using system components to illustrate the functions that will be included in the
system to be developed
Using the prototype, the client can get an actual feel of the system. So, this case of
model is beneficial in the case when requirements cannot be freezed initially.
This prototype is developed based on the currently known requirements. Development
of the prototype obviously undergoes design, coding, and testing, but each of these
phases is not done very formally or thoroughly.
By using this prototype, the client can get an actual feel of the system, because the
interactions with the prototype can enable the client to better understand the
requirements of the desired system.
Prototyping is an attractive idea for complicated and large systems for which there is no manual process or
existing system to help determine the requirements. Risks associated with the projects are being reduced through
the use of prototyping. The development of the prototype typically starts when the preliminary version of the
requirements specification document has been developed.
At this stage, there is a reasonable understanding of the system and its needs are unclear
or likely to change. After the prototype has been developed, the end users and clients are
given an opportunity to use the prototype.
They provide feedback to the developers regarding the prototype: what is correct,
what needs to be modified, what is missing, what is not needed, etc. Based on the
feedback, the prototype is modified to incorporate some of the suggested changes that
can be done easily, and then the users and the clients are again allowed to use the
system.
This cycle repeats until, in the judgment of the prototypes and analyst. Based on
the feedback, the initial requirements are modified to produce that final requirements
specification, which is then used to develop the production quality system.
Figure Illustrates the steps carried out in the prototyping model. These steps are listed
below.
Advantages Disadvantages
1. Provides a working model to the 1. If the user is not satisfied by the
user early in the process, enabling developed prototype, then a new
early assessment and increasing prototype is developed. This process
user's confidence. goes on until a perfect prototype is
2. The developer gains experience and developed. Thus, this model is time
insight by developing a prototype consuming and expensive.
there by resulting in better 2. The developer loses focus of the
implementation of requirements. real purpose of prototype and hence,
3. The prototyping model serves to may compromise with the quality of
clarify requirements, which are not the software. For example, developers
clear, hence reducing ambiguity and may use some inefficient algorithms
improving communication between or inappropriate programming
the developers and users. languages while developing the
4. There is a great involvement of prototype.
users in software development. 3. Prototyping can lead to false
Hence, the requirements of the users expectations. For example, a situation
are met to the greatest extent. may be created where the user
5. Helps in reducing risks associated believes that the development of the
with the software. system is finished when it is not.
4. The primary goal of prototyping is
speedy development, thus, the system
design can suffer as it is developed in
series without considering integration
of all other components.
1. Planning: Inthis phase, the tasks and activities are planned. The derivables produced
from this phase are project definition, project management procedures, and a work
plan. Project definition determines and describes the project to be
developed. Project management procedure describes processes for managing
issues, scope, risk, communication, quality, and so on. Work plan describes the
activities required for completing the project.
2. Analysis: The requirements are gathered at a high level instead of at the precise set of
detailed requirements level. Incase the user changes the requirements, RAD allows
changing these requirements over a period of time. This phase determines plans for
testing, training and implementation processes. Generally, the RAD projects are small in
size, due to which high-level strategy documents are avoided.
3. Prototyping: The requirements defined in the analysis phase are used to develop a
prototype of the application. A final system is then developed with the help of the
prototype. For this, it is essential to make decisions regarding technology and the tools
required to develop the final system.
4. Repeat analysis and prototyping as necessary: When the prototype is developed,
it is sent to the user for evaluating its functioning. After the modified requirements are
available, the prototype is updated according to the new set of requirements and is again
sent to the user for analysis.
5. Conclusion of prototyping: As a prototype is an iterative process, the project
manager and user agree on a fixed number of processes. Ideally, three iterations are
considered. After the third iteration, additional tasks for developing the software are
performed and then tested. Last of all, the tested software is implemented.
6. Implementation: The developed software, which is fully functioning, is deployed at
the user's end.
Various advantages and disadvantages associated with the RAD model are listed in
Table.
Table Advantages and Disadvantages of RAD Model
Advantages Disadvantages
1. Deliverables are easier to transfer as 1. Useful for only larger projects
high-level abstractions, scripts, and 2. RAD projects fail if there is no
intermediate codes are used. commitment by the developers or the
2. Provides greater flexibility as redesign users to get software completed on
is done according to the developer. time.
3. Results in reduction of manual coding 3. Not appropriate when technical risks
due to code generators and code reuse. are high. This occurs when the new
4. Encourages user involvement. application utilizes new technology or
5. Possibility of lesser defects due to when new software requires a high
prototyping in nature. degree of interoperability with existing
system.
4. As the interests of users and developers
can diverge from single iteration to
next, requirements may not converge in
RAD model.
Evolutionary Software Process Model:
Evolutionary software models are iterative. They are characterized in manner that
enables the software engineers to develop increasingly more complete version of a
software. That is, initially a rapid version of the product is being developed and then
the product is developed to more accurate version with the help of the reviewers who
review the product after each release and submit improvements. Specification,
development and validation are interleaved rather than separate in evolutionary
software process model.
These models are applied because as the requirements often change so the end
product will be unrealistic, where a complete version is impossible due to tight
market deadlines it is better to introduce a limited version to meet the pressure. Thus
the software engineers can follow a process model that has been explicitly designed to
accommodate a product that gradually complete over time.
This ensures that the cost of development is lower than what it would have been if the
whole problem were tackled together. A phased development process is central to the
software engineering approach for solving the software crisis. In general, we can say that
any problem solving in software must consist of these activities:
Requirement analysis
The requirement analyses and identifies what is needed from the system. Requirements
analysis is done in order to understand the problem the software system is to solve. The
problem could be automating an existing manual process, developing a new automated
system, or a combination of the two. The two parties involved in software development
are the client and the developer. The developer has to develop the system to satisfy the
client's needs. The developer usually does not understand the client's problem domain,
and the client often does not understand the issues involved in software systems This
causes a communication gap. This phase bridges the gap between the two parties. The
outcome of this phase is the software requirement specification document (SRS). The
person responsible for the requirements analysis is often called the analyst.
Software Design
It is the first step in moving from problem domain to solution domain. The purpose of
the design phase is to plan a solution of the problem specified by the requirement
documents. Starting with what is needed, design takes us towards how to satisfy the
needs. The design of a system is perhaps the most critical factor affecting the quality of
the software. It has a major impact on the later phases, particularly testing and
maintenance. The output of this phase is the design document. This document is similar
to a blueprint or a plan for the solution and is used later during implementation, testing
and maintenance. It is further of two types:
System Design or Top level Design: It identifies the various modules that should be in
the system, the specifications of the modules and interconnections between the various
modules. At the end of system design all the major data structures, file formats, output
formats, and the major modules in the system and their specifications are decided.
Detailed Design: It identifies the internal logic of the various modules. During this phase
further details of the data structures and algorithmic design of each of the modules is
specified. Once the design is complete, most of the major decisions about the system
have been made. However, many of the details about coding the designs, which often
depend on the programming language chosen, are not specified during design.
Coding
This phase translates the design of the system into code in a given programming
language. This phase effects the both testing and maintenance. Well-written code can
reduce the testing and maintenance efforts. The focus is on developing programs that
are easy to read and understand. Simplicity and clarity should be strived for during the
coding phase.
Testing
It is a major quality control measure used during software development. Its basic
function is to detect errors in the software. Its basic function is to detect errors in the
software. After the coding phase, computer programs are available that can be executed
for testing purpose. This implies that testing not only has to uncover errors introduced
during coding, but also errors introduced during the previous phases. Thus, the goal of
testing is to uncover requirement, design, and coding errors in the programs.
Consequently, different levels of testing are used. The different types of testing are:
a. Unit testing:
It tests each module separately and detects ceding errors.
b. Integration testing:
When the various modules are integrated, this testing is performed to detect errors from
the overall system.
c. System testing:
The system is tested against the system requirements to see if all the requirements are
met and if the system performs as specified in SRS.
d. User Acceptance Testing:
The system is tested against the user requirements to see if the user is satisfied.