Introduction 7 8 Fundamentals of Software Engineering
long ago, when you bought any hardware product, the essential software that ran on it A professional software is developed by a group of software developers working
came free with it. But, unless some sort of revolution together in a team. It is therefore necessary for them to use some systematic development
happens, in not very distant future, hardware prices Not only are the software methodology. Otherwise, they would find it very difficult to interface and understand each
would become insignificant compared to software prices— products becoming progressively other’s work, and produce a coherent set of documents.
when you buy any software product the hardware on Even though software engineering principles are primarily intended for use in
more expensive than hardware,
which the software runs would come free with the development of professional software, many results of software engineering can effectively
but they also present a host
software!!! be used for development of small programs as well. However, when developing small
of other problems to the
The symptoms of software crisis are not hard to programs for personal use, rigid adherence to software engineering principles is often not
customers—software products
observe. But, what are the factors that have contributed worthwhile. An ant can be killed using a gun, but it would be ridiculously inefficient
are difficult to alter, debug,
to the present software crisis? Apparently, there are many and inappropriate. CAR Hoare [1994] observed that rigorously using software engineering
and enhance; use resources non-
factors, the important ones being—rapidly increasing principles to develop toy programs is very much like employing civil and architectural
optimally; often fail to meet
problem size, lack of adequate training in software engineering principles to build sand castles for children to play.
the user requirements; are far
engineering techniques, increasing skill shortage, and from being reliable; frequently
low productivity improvements. What is the remedy? It crash; and are often delivered 1.2.2 Types of Software Development Projects
is believed that a satisfactory solution to the present late. A software development company typically has a large number of on-going projects. Each
software crisis can possibly come from a spread of software of these projects may be classified into software product development projects or services
engineering practices among the developers, coupled with type of projects. These two broad classes of software projects can be further classified into
further advancements to the software engineering discipline itself. subclasses as shown in Figure 1.3
With this brief discussion on the evolution and impact of the discipline of software
engineering, we now examine some basic concepts pertaining to the different types of
software development projects that are undertaken by software companies.
1.2 SOFTWARE DEVELOPMENT PROJECTS
Before discussing about the various types of development projects that are being
undertaken by software development companies, let us first understand the important
ways in which professional software differs from toy software such as those written by
a student in his first programming assignment.
1.2.1 Programs versus Products
Many toy software are being developed by individuals such as students for their classroom
assignments and hobbyists for their personal use. These are usually small in size and
support limited functionalities. Further, the author of a program is usually the sole user of
the software and himself maintains the code. These toy software therefore usually lack good
user-interface and proper documentation. Besides these may have poor maintainability,
efficiency, and reliability. Since these toy software do not have any supporting documents
such as users’ manual, maintenance manual, design document, test documents, etc.,
we call these toy software as programs. FIGURE 1.3 A classification of software projects.
In contrast, professional software usually have multiple users and, therefore, have good A software product development project may b e either to develop a generic product
user-interface, proper users’ manuals, and good documentation support. Since, a software or a domain specific product. A generic software product development project concerns
product has a large number of users, it is systematically designed, carefully implemented, about developing a software that would be sold to a large number of customers. Since a
and thoroughly tested. In addition, a professionally written software usually consists not generic software product is sold to a broad spectrum of customers, it is said to have a
only of the program code but also of all associated documents such as requirements horizontal market. On the other hand, the services projects may either involve customizing
specification document, design document, test document, users’ manuals, etc. A further some existing software, maintaining or developing some outsourced software. Since a
difference is that professional software are often too large and complex to be developed by specific segment of customers are targeted, these software products are said to have
any single individual. It is usually developed by a group of developers working in a team. a vertical market. In the following, we distinguish between these two major types of
software projects.
Introduction 9 10 Fundamentals of Software Engineering
Software products part of some larger project, outsourced projects are usually small in size and need to
be completed within a few months or a few weeks of time.
We all know of a variety of software such as Microsoft’s Windows operating system and
The types of development projects that are being undertaken by a company can
Office suite, and Oracle Corporation’s Oracle 8i database management software. These
have an impact on its profitability. For example, a company that has developed a generic
software are available off-the-shelf for purchase and are used by a diverse range of
software product usually gets an uninterrupted stream of revenue spread over several years.
customers. These are called generic software products since many users essentially use the
However, development of a generic software product entails substantial upfront investment.
same software. These can be purchased off-the-shelf by the customers. When a software
Further, any return on this investment is subject to the risk of customer acceptance.
development company wishes to develop a generic product, it first determines the features
On the other hand, outsourced projects are usually less risky, but fetch only one time
or functionalities that would be useful to a large cross section of users. Based on these, the
revenue to the developing company.
development team draws up the product specification on its own. Of course, it may base
its design discretion on feedbacks collected from a large number of users. Typically, each
software product is targetted to some market segment (set of users). Many companies 1.2.3 Software Projects Being Undertaken by Indian Companies
find it advantageous to develop product lines that target slightly different market segments Indian software companies have excelled in executing software services projects and have
based on variations of essentially the same software. For example, Microsoft targets desktops made a name for themselves all over the world. Of late, the Indian companies have
and laptops through its Windows 8 operating system, while it targets high-end mobile slowly started to focus on product development as well. Can you recall the names of a few
handsets through its Windows mobile operating system, and targets servers through its software products developed by Indian software companies? Let us try to hypothesise the
Windows server operating system. reason for this situation. Generic product development entails certain amount of business
In contrast to the generic products, domain specific software products are sold to risk. A company needs to invest upfront and there is substantial risks concerning whether
specific categories of customers and are said to have a vertical market. Domain specific the investments would turn profitable. Possibly, the Indian companies were risk averse.
software products target specific segments of customers (called verticals) such as banking, Till recently, the world-wide sales revenue of software products and services were
telecommunication, finance and accounts, and medical. Examples of domain specific evenly matched. But, of late the services segment has been growing at a faster pace due
software products are BANCS from TCS and FINACLE from Infosys in the banking to the advent of application service provisioning and cloud computing. We discuss these
domain and AspenPlus from Aspen Corporation in the chemical process simulation. issues in Chapter 15.
Software services
1.3 EXPLORATORY STYLE OF SOFTWARE DEVELOPMENT
Software services covers a large gamut of software projects such as customization,
outsourcing, maintenance, testing, and consultancy. At present, there is a rapid growth We have already discussed that the exploratory program development style refers to an informal
in the number of software services projects that are being undertaken world-wide and development style where the programmer makes use of his own intuition to develop a
software services are poised to become the dominant type of software projects. One of program rather than making use of the systematic body of knowledge categorized under
the reasons behind this situation is the steep growth in the available code base. Over the the software engineering discipline. The exploratory development style gives complete
past few decades, a large number of programs have already been developed. Available freedom to the programmer to choose the activities using which to develop software.
programs can therefore be modified to quickly fulfil the specific requirements of any Though the exploratory style imposes no rules a typical development starts after an
customer. At present, there is hardly any software project in which the program code initial briefing from the customer. Based on this briefing, the developers start coding to
is written from scratch, and software is being mostly developed by customizing some develop a working program. The software is tested and the bugs found are fixed. This
existing software. For example, to develop a software to automate the payroll generation cycle of testing and bug fixing continues till the software works satisfactorily for the
activities of an educational institute, the vendor may customize an existing software that customer. A schematic of this work sequence in a build and fix style has been shown
might has been developed earlier for a different client or educational institute. Due to graphically in Figure 1.4. Observe that coding starts after an initial customer briefing
heavy reuse of code, it has now become possible to develop even large software systems
in rather short periods of time. Therefore, typical project durations are at present only
a couple of months and multi-year projects have become very rare.
Development of outsourced software is a type of software service. Outsourced software
projects may arise for many reasons. Sometimes, it can make good commercial sense for
a company developing a large project to outsource some parts of its development work to
other companies. The reasons behind such a decision may be many. For example, a company
might consider the outsourcing option, if it feels that it does not have sufficient expertise
to develop some specific parts of the software; or it may determine that some parts can be
developed cost-effectively by another company. Since an outsourced project is a small
FIGURE 1.4 Exploratory program development.