Software development is a complicated process. It requires careful
planning and execution to meet the goals. Sometimes a developer
must react quickly and aggressively to meet everchanging market
demands. Maintaining software quality hinders fast-paced software devel-
opment, as many testing cycles are necessary to ensure quality products.
This chapter provides an introduction to the software development pro-
cess. As you will learn, there are many stages of any software develop-
ment project. A commercial software product is usually derived from
market demands. Sales and marketing people have first-hand knowledge
of their customers’ requirements. Based upon these market requirements,
senior software developers create an architecture for the products along
with functional and design specifications. Then the development process
starts. After the initial development phase, software testing begins, and
many times it is done in parallel with the development process. Documen-
tation is also part of the development process because a product cannot be
brought to market without manuals. Once development and testing are
done, the software is released and the support cycle begins. This phase
may include bug fixes and new releases.
After reading this chapter, you should understand how software develop-
ment is done and the components of a software development system. At
the end of the chapter, you will find an introduction to Linux Standard
Base. This chapter is not specific to a particular hardware platform or
tools. You will start learning about components of an actual software
development platform in the next chapter.
1.1Life Cycle of a Software Development Project
Software development is a complicated process comprising many stages. Each stage requires a
lot of paperwork and documentation in addition to the development and planning process. This
is in contrast to the common thinking of newcomers to the software industry who believe that
software development is just “writing code.” Each software development project has to go
through at least the following stages:
•Requirement gathering
•Writing functional specifications
•Creating architecture and design documents
•Implementation and coding
•Testing and quality assurance
•Software release
•Documentation
•Support and new features
Figure 1-1 shows a typical development process for a new product.
There may be many additional steps and stages depending upon the nature of the software
product. You may have to go through multiple cycles during the testing phase as software testers
find problems and bugs and developers fix them before a software product is officially released.
Let us go into some detail of these stages.
1.1.1Requirement Gathering
Requirement gathering is usually the first part of any software product. This stage starts
when you are thinking about developing software. In this phase, you meet customers or prospec-
tive customers, analyzing market requirements and features that are in demand. You also find out
if there is a real need in the market for the software product you are trying to develop.
In this stage, marketing and sales people or people who have direct contact with the cus-
tomers do most of the work. These people talk to these customers and try to understand what
they need. A comprehensive understanding of the customers’ needs and writing down features of
the proposed software product are the keys to success in this phase. This phase is actually a base
for the whole development effort. If the base is not laid correctly, the product will not find a
place in the market. If you develop a very good software product which is not required in the
market, it does not matter how well you build it. You can find many stories about software prod-
ucts that failed in the market because the customers did not require them. The marketing people
Life Cycle of a Software Development Project3
usually create a
Marketing Requirement Document
or MRD that contains formal data represen-
tation of market data gathered.
Spend some time doing market research and analysis. Consider your competitors’ prod-
ucts (if any), a process called competitive analysis. List the features required by the product. You
should also think about the economics of software creation at this point. Is there a market. Can I
make money. Will the revenue justify the cost of development
1.2Components of a Development System
Like any other system, a development system is composed of many components that work
together to provide services to the developer for the software development task. Depending upon
the requirements of a project, different types of components can be chosen. Many commercial
companies also sell comprehensive development tools. On Linux systems, all of the develop-
ment tools are available and you can choose some of these depending upon your level of exper-
tise with these tools and your requirements. Typically each development platform consists of the
following components:
•Hardware platform
•Operating system
•Editors
•Compilers and assemblers
•Debuggers
•Version control system
•Collaboration and bug tracking
Let us take a closer look on these components and what role they play in the development
cycle.
1.2.1Hardware Platform
This is the tangible part of the development system. A hardware platform is the choice of
your hardware, PC or workstation, for the development system. You can choose a particular
hardware platform depending upon different factors as listed below:
CostDepending upon budget, you may chose different types of hardware.
Usually UNIX workstations are costly to buy and maintain. On the
other hand, PC-based workstations are cheap and the maintenance
cost is also low.
PerformanceUsually UNIX workstations have high performance and stability as
compared to PC-based solutions.
ToolsYou also need to keep in mind availability of development tools on a
particular platform.
Development TypeIf the target system is the same as the host system on which develop-
ment is done, the development is relatively easy and native tools are
cheap as well, compared to cross-platform development tools.
Depending upon these factors, you may make a choice from the available hardware plat-
forms for development.
If hardware is part of the final product, selection of hardware platform also depends upon
customer/market requirement.
1.2.2Operating System
Choice of a particular operating system may be made depending upon:
•Cost
•Availability of development tools
•Hardware platform
•Native or cross compiling
Some operating systems are cheaper than others. Linux is an excellent choice, as far as
cost is concerned. Linux is also a very good operating system as it has all of the development
tools available. Now you can install Linux on high-end workstations from Sun Microsystems,
HP, and IBM as well as commodity PC hardware available everywhere. It provides stability and
most of the people are familiar with development tools. You can also use the operating system
for cross-platform development using GNU tools.
1.2.3Editors
Editors play an important role in the development work. Easy-to-use and feature rich edi-
tors, like Emacs, increase developers’ productivity. You should look at a few things while select-
ing editors. These features include:
•Understanding syntax of language
•Collapsing of context
•Support of tags
•Opening multiple files
•Easy editing for generally used editing functions like cut, copy, paste, search, replace
and so on
•Multiple windows
•Support of user defined functions and macros
If you look at the open source community, you can find a lot of good editors available to
developers. The most commonly used editors are Jed, Emacs and Xemacs. However, many other
variants of these editors are also available. You can also use X-Windows-based editors available
on Linux platform. A lot of people also edit in vi or vim, both of these have been very popular
historically.
.2.4Compilers and Assemblers
Compilers and assemblers are the core development tools because they convert source
code to executable form. Quality of compilers does affect the output code. For example, some
compilers can do much better code optimization compared to others. If you are doing some
cross-platform development, then your compiler should support code generation for the target
machine as well.
GNU compilers collection, more commonly called GCC, is a comprehensive set of com-
pilers for commonly used languages including the following:
•C
•C++
•Java
•Fortran
In addition to GCC, you can find a lot of other open source compilers available for Linux.
Some of these are introduced in Chapter 3.
GNU utilities set, also known as binutils, includes GNU assembler and other utilities that
can be used for many tasks. GNU assembler is used whenever you compile a program using
GNU compiler.
1.2.5Debuggers
Debuggers are the also an important part of all development systems. You can’t write a
program that is free of bugs. Debugging is a continuous part of software development and you
need good tools for this purpose. GNU debugger, more commonly known as GDB, is a common
debugger. Many other debuggers are also built on this debugger. The GNU debugger and some
other debuggers will be introduced later in this book.
1.2.6Version Control Systems
The revision control system is a must for any serious development effort where multiple
developers work on a software product. The most popular version control system on Linux is
known as Concurrent Versions System or CVS. CVS allows many people to work on files at the
same time and provides a central repository to store files. Developers can check out files from
this repository, make changes and check the files back into the repository. CVS also works with
editors like GNU Emacs.
When multiple developers are modifying the same file at the same time, conflict may
occur between different changes made by multiple developers. When a conflict is detected in the
files being checked in, CVS provides a mechanism to merge the files appropriately.
CVS can be used over secure links as well. This is required when developers are not phys-
ically located at the same place. A server on the Internet can be used to provide secure access to
the central software repository
There are other version control systems as well which are popular in the software develop-
ment community. Examples are Aegis, PRCS, RCS and SCCS.
1.2.7E-mail and Collaboration
In any software development project, collaboration among developers, designers and
architects as well as marketing people is a must. The objective can be achieved in many ways.
Probably e-mail is the most efficient and cheapest way. Some collaboration tools provide more
functionality than just e-mailing.
1.2.8X-Windows
X-Windows is much more than just a GUI interface on Linux, but for development pur-
poses, it provides a very good user interface. This is especially useful for editors like Emacs.
1.2.9Miscellaneous Tools
Many miscellaneous tools are also important during the development process. Some of
these tools are listed below:
•The
make
utility
•The
ar
program
•The
ranlib
utility
•The
hexdump
utility
Information about these tools is provided later in this book.
1.3Selection Criteria for Hardware Platform
The development process needs computers, networks, storage, printing and other hardware com-
ponents. However the important hardware decision is the selection of PCs and workstations for
developers. There is no hard and fast rule about how to select a particular hardware platform. It
depends upon the requirements of a development project. Some factors that you may keep in
mind are as follows:
•Cost of the hardware.
•Availability of desired operating system on the hardware. For example, you can’t run
HP-UX on PCs.
•Availability of development tools.
•Maintenance cost.
There may be other factors as well and you are the best person to judge what you need.
However, keep in mind that reliability of hardware is one major factor that people usually over-
look. If you buy cheap systems that decrease productivity of developers, you lose a lot of money.
1.4Selection Criteria for Software Development Tools
After selecting the hardware, software development tools are the next major initial expense in
terms of money and time to set these up. Selection of software development tools depends upon
the choice of hardware and operating system. In many cases GNU tools are very well suited.
Selection of development tools also has a major effect on the productivity of the whole develop-
ment team.
1.5Managing Development Process
In large software development projects, management of the development process is a big task
and a dedicated person may be needed to take care of this aspect of the project. A development
manager usually acts as a binding and coordinating force among different parties with conflict-
ing interests. These parties include:
•Marketing and sales people who put forward requirements, change requirements and
come up with new requirements, usually when much of the work is already done!
•Architecture and design people.
•Software developers who always think that they always have less amount of time.
•Release management people.
•Software testers.
•Documentation writers.
•Senior managers who often push to complete the project earlier than the deadline.
Coordinating all of these parties is not an easy task. The manager has to convince senior
management that a new feature needs that much time for development. At the same time he has
to push developers to meet the deadlines. Some of the important tasks of software management
in a real-life project are as follows.
1.5.1Creating Deadlines
The manager usually coordinates with the software developers to set reasonable dead-
lines for certain features. These deadlines must conform to the product delivery time lines.
The manager may have to arrange additional resources to complete feature development in the
allotted time.
Project management software can help a manager to set and meet deadlines and track
completion of different components.
.5.2Managing the Development Team
The manager has to keep track of how development among different parts of the software
is going on. If part of the product is behind schedule, she has to re-arrange resources to get it
back on track.. She may also need to hire new people to finish the development of a particular
component on schedule.
1.5.3Resolving Dependencies
Usually software components are dependent on one another. If the development of one
component is lagging behind, it may affect development of other components. The develop-
ment manager needs to keep an eye on these dependencies and how these may affect the over-
all progress of the project. Well-known project management methods are usually helpful for
this task.
1.6Linux Development Platform Specifications (LDPS) and Linux
Standard Base (LSB)
Linux Development Platform Specifications
or LDPS was an effort to design a common specifi-
cation so that programs developed on one Linux distribution could be easily ported to other dis-
tributions. The specifications define components and packages that must be present on Linux
development workstations. The latest version of the specifications at the time of writing this
book is available at http://www.freestandards.org/ldps/1.1/ldps-1.1.html web site.
Linux Standard Base
or LSB (http://www.linuxbase.org) is the new forum to standardize
Linux distributions. LSB specifications 1.1.0 is available at the time of writing this book. LSB
compliant applications can run on any LSB compliant distribution without any modification or
recompilation process. Specifications are detailed and the latest version can be found at http://
www.linuxbase.org/spec/.
1.6.1Libraries
The following libraries will be available on LSB compliant systems. While developing
applications for Linux, the developer can assume presence of these libraries on target machines,
provided the target is LSB compliant.
•libX11
•libXt
•libGL
•libXext
•libICE
•libSM
•libdl
•libcrypt
No comments:
Post a Comment