Document Sample
					              BY :

             Many people equate the term software with computer
   program. In fact, this is too restrictive a view. Software is not just the
   program but also all associated documentation and configuration data
   that are needed. Many people equate the term software with computer
   program to make this programs operate correctly. A software system
   usually consists of a number of separate programs, configuration
   files, which are used to setup these programs, system documentation,
   which describes the structure of the system, and user documentation
   which explains how to use the system and for software products, web
   sites for users to download recent product information.
             Software Engineering is a technological discipline that is
   used to provide a tool for developing a product. It is an outgrowth of
   software & hardware to meet the requirements. Software Engineering
   encompasses a process, management and technical methods and
             When tools are integrated so that information created by one
   tool can be used by another, a system for the support of software
   development, called Computer-Aided Software Engineering, is
   established. CASE combines software, hardware, and a Software
   Engineering Database to create a Software Engineering environment
   analogous to CAD/CAE (Computer-Aided Design/Engineering) for


       During the past decade, increasing intention has been focused on
the technology of computer software. As computing systems become
more numerous, more complex and more deeply embedded in modern
society the need for systematic approaches to software development and
software maintenance become increasingly apparent. Software
engineering is a field of study concerned with this engineering
       Software systems are now ubiquitous. Every simple software
systems have a high inherent complexity; so the engineering principles
have to be used in their development. Software is nothing but the
collection of instructions or the computer programs when executed by
desired functions to obtain desired output or to meet the required
               Software is intangible: it has no mass, no volume, no color,
no odor – no physical properties. Software does not degrade with time as
hardware does. Software failures are caused by design and
implementation errors, not by degradation. Because software is
intangible, extra-ordinary measures should be taken to determine the
status of a product in development. Because software has no physical
properties, it is not subject to the laws of gravity or the laws of electro
dynamics. There are no Newton‟s laws or Maxwell‟s equation to guide
software development. Intangibility and lack of physical properties for
software limit the number of fundamental guidelines and basic
constraints available to shape the design and implementation of a
software product.
             Computer software has become a driving force; it is the
engine that drives business decision-making. It serves as the basis for
modern scientific investigation and engineering problem solving. It is a
key factor that differentiates modern products and services. It is
embedded in systems of all kinds: transportation, medical,
telecommunications, military, industrial processes, entertainment, office
products, ----------------- the list is almost endless. Software is virtually
inescapable in a modern world. And as we more into the twenty first
century, it will become the driver for new advances in everything from
elementary education to genetic engineering.
            Computer software is the product that software engineering
design and build. Today, software takes on a dual role. It is a product, at
the same time, the vehicle for delivering a product.
            In order to develop a software product, user needs and
constraints must be determined and explicitly stated: the product must
be designed to accommodate implementers, users and maintainers; the
source code must be carefully implemented and thoroughly tested; and
supporting documents such as the principles of operation, the users
manual, installation instructions, training aids, and maintenances
documents must be prepared. The need for systematic approaches to
developments and maintenance of computer software products became
apparent in the 1960s.


           Software Engineering is an engineering discipline, which is
concerned with all aspects of software production from the early stages of
system specification through to maintaining the system after it has gone
into use. In this definition, there are two key phrases:

1. ‘Engineering discipline’ Engineer makes things work. They apply
   theories, methods and tools where these are appropriate but they use
   them selectively and always try to discover solutions to problems even
   when there are no applicable theories and methods to support them.
   Engineers also recognize that they must work to organizational and
   financial constraints, so they look for solutions within these
2. „All aspects of software production’ Software Engineering is not just
   concerned with the technical processes of Software development but
   also with activities such as software project management and with the
   development of tools, methods and theories to support software
            “More than a discipline or a body of knowledge, engineering is
a verb, an action word, a way of approaching a problem”
                                                       - Scott Whit mire
            A workshop was held in Garmisch West Germany, in 1968 to
consider the growing of software technology. That workshop, and a
subsequent one held in Rome, Italy in 1969, simulated widespread
interest in the technical and managerial processes used to develop and
maintain computer software (NAU 76). The term “Software Engineering”
was first used as a provocative theme for those workshops.
            According to Boehm (BOE7 6a), Software Engineering involves
“the practical application of scientific knowledge to the design and
construction of computer programs and the associated documentation
required to develop, operate and maintain them”. As Boehm points out,
the term “design” must be interpreted broadly to include activities such
as software requirement analysis and redesign during software
modification. The IEEE standard glossary of Software Engineering
terminology (IEEE 83) defines Software Engineering as: “The systematic
approaches to the development, operation, maintenance and retirement
of software”, where “software” is defined as: “computer programs,
procedure, rules and possible associated documentation and data
pertaining to the operation of a computer system”.
            The primary goals of Software Engineering are to improve the
quality of software products and to increase the productivity and job
satisfaction of Software Engineers. Software Engineering is concerned
with development and maintenance of technological products; problem-
solving techniques common to all engineering disciplines are utilized.
            The customer may or may not be the end user of a software
product, and the customer, developer, end user, and maintainer may be
the same person; however, software products usually have multiple
customer representatives, multiple developers, multiple users, and
multiple maintainers. Some times, a software product is developed to
satisfy a perceived marketing opportunity with out having a specific
customer or group of users in mind.
            Software quality is a primary concern of a Software
Engineers. Software reliability is “the ability of a program to perform a
required function under stated conditions for a stated period of time”
(IEE 83). The degree of reliability required for a particular product can be
expressed in terms of the cost of product failure. The specification,
development, management and evolution of these software systems
makeups the discipline of Software Engineering.
             In general, Software Engineers adopt a systematic and
organized approach to their work, as this is often the most effective way
to produce high-quality software. However, engineering is all about
selecting the most appropriate method for a set of circumstances and a
more creative, informal approach to development may be effective in
some circumstances.


          Essentially, computer science is concerned with the theories
and methods, which underline computers and software systems where as
software engineering is concerned with the practical problems of
producing software. Some knowledge of computer science is essential for
software engineers in the same way that some knowledge of physics is
essential for electrical engineers.
            Ideally, all of software engineering should be under pinned by
theories of computer science but in reality this not the case. Software
Engineers must often use ad hoc approaches to develop the software.
Elegant theories of computer science cannot always be applied to real,
complex problems, which require a software solution.


            To gain an understanding of software, it is important to
examine the characteristics of software that make it different from other
things that human beings build.
      Software is a logical rather than a physical system element.
Therefore, software has characteristics that are considerably different
than those of hardware.
    1. Software is developed or engineered; it is not manufactured in the
       classical sense.
    2. Software doesn‟t “wear out”.
    3. Although the industry is moving toward component based
       assembly, most software continuous to be custom built.


           Computer aided software engineering (CASE) tools assist
software engineering managers and practitioners in every activity
associated with the software process. They automate project
management activities, manage all work products produced throughout
the process, and assist engineers in their analysis, design, coding and
test work. CASE tools can be integrated within a sophisticated
environment. Project managers and software engineers use CASE.
Software engineering is difficult. Tools that reduce the amount of effort
required to produce a work product or accomplish some project
milestone have substantial benefit. But there‟s something that‟s even
more important. Tools can provide new ways of looking at software
engineering information – ways that improve the insight of the engineer
doing and higher software quality.
            CASE is used in conjunction with the process model that is
chosen. If a full tool set is available, CASE will be used during virtually
every step of the software process. CASE tools assist a software engineer
in producing high-quality work products. In addition, the availability of
automation allows the CASE user to produce additional customized work
products that could not be easily or practically produced without tool
support. Use tools to complement solid software engineering practices –
not to replace them. Before tools can be used effectively, a software
process framework must be established, software engineering concepts
and methods must be learned, and software quality must be emphasized.
Only then will CASE provide benefit.

            A good workshop for any craftsperson – a mechanic, a
carpenter, or a software engineer – has three primary characteristics: (1)
a collection of useful tools that will help in every step of building a
product, (2) an organized layout that enables tools to be found quickly
and used efficiently, and (3) a skilled artisan who understands how to
use the tools in an effective manner. Software engineers now recognize
that they need more and varied tools along with an organized and
efficient workshop in which to place the tools.
            The workshop for software engineering has been called an
integrated project support environment (discussed later in this chapter)
and the tools that fill the workshop are collectively called computer-
aided software engineering.
            CASE provides the software engineer with the ability to
automate manual activities and to improve engineering insight. Like
computer-aided engineering and design tools that are used by engineers
in other disciplines, CASE tools help to ensure that quality is designed in
before the product is built.


             Computer aided software engineering can be as simple as a
single tool that supports a specific software engineering activity or as
complex as a complete “environment” that encompasses tools, a
database, people, hardware, a network, operating systems, standards,
and myriad other components. Each building block forms a foundation
for the next, with tools sitting at the top of the heap. It is interesting to
note that the foundation for effective CASE environments has relatively
little to do with software engineering tools themselves. Rather successful
environments for software engineering are built on an environment
architecture that encompasses appropriate hardware and systems
software. In addition, the environment architecture must consider the
human work patterns that are applied during the software engineering
             The environment architecture, composed of the hardware
platform and system support, lays the groundwork for CASE. But the
CASE environment itself demands other building blocks. A set of
portability services provides a bridge between CASE tools and their
integration framework and the environment architecture. The integration
framework is a collection of specialized programs that enables individual
CASE tools to communicate with one another, to create a project
database, and to exhibit the same look and feel to the end-user
Portability services allow CASE tools and their integration framework to
migrate across different hardware platforms and operating systems
without significant adaptive maintenance.

         Quote: “The most valuable CASE tools are those that
     contribute information to the development process”.
                                                      - Robert Dixon.


             A number of risks are inherent whenever we attempt to
categorize CASE tools. There is a subtle implication that to crate an
effective CASE environment, one must implement all categories of tools –
this is simply not true. Confusion (or antagonism) can be created by
placing a specific tool within one category when others might believe it
belongs in another category. Some readers may feel that an entire
category has been omitted – thereby eliminating an entire set of tools for
inclusion in the overall CASE environment.
            CASE tools can be classified by function, by their role as
instruments for managers or technical people, by their use in the various
step of the software engineering process, by the environment architecture
(hardware and software) that supports them, or even by their origin or
cost [QED89]. The taxonomy presented here uses function as a primary


            If an organization works to improve a business (or software)
process, it must first understand it. Process modeling tools are used to
represent the key elements of a process so that it can be better
understood. Process management tools provide links to other tools that
provide support to define process activities.


            Tools in this category focus on two primary areas: software
project effort and cost estimation and project scheduling. Estimation
tools compute estimated effort, project duration, and recommended
number of people for a project. Project scheduling tools enable the
manager to define all project tasks, create a task network, represent task
interdependencies, and model the amount of parallelism possible for the


            Analysis and design tools enable a software engineer to
create models of the system to be built. The models contain a
representation of data, function, and behavior and characterizations of
data, architectural, component-level and interface design. By performing
consistency and validity checking on the models, analysis and design
tools provide a software engineer with some degree of insight into the
analysis representation and help to eliminate errors before they
propagate into the design, or worse, into implementation itself.

            When large systems are developed, things “fall into the
cracks.” That is, the delivered system does not fully meet customer
specified requirements. The objective of requirements tracing tools is to
provide a systematic approach to the isolation of requirements, beginning
with the customer request for proposal or specification.


            The programming tools category encompasses the compilers,
editors, and debuggers that are available to support most conventional
programming languages.


            In their directory of software testing tools, software quality
engineering (SQE95) defines the following testing tools categories.

     Data acquisition – tools that acquire data to be used during testing.
     Static measurement – tools that analyze source code without
      executing test cases.
    Dynamic measurement – tools that analyze source code during
    Simulation – tools that simulate function of hardware or other
    Test management – tools that assist in the planning, development,
      and control of testing.
    Cross-functional tools – tools that cross the bounds of the preceding
            It should be noted that many testing tools have features that
   span two or more of the categories.


            Identifying potential risks and developing a plan to mitigate,
monitor, and manage them is of paramount importance in large projects.
Risk analysis tools enable a project manager to build a risk table by
providing detailed guidance in the identification and analysis of risks.


            Document production and desktop publishing tools support
nearly every aspect of software engineering and represent a substantial
“leverage” opportunity for all software developers. Documentation tools
provide an important opportunity to improve productivity.

            The project schedule and project plan must be tracked and
monitored on a continuing basis. Tools in the category are often
extensions to project planning tools.


            Tools for legacy software address a set of maintenance that
currently absorb a significant percentage of all software-related effort the
reengineering tools category can be sub-divided into following functions.

    Reverse engineering to specification tools takes source code as
     input and generate graphical structured analysis and design
     models where-used lists and other design information.
    Code restructuring and analysis tools analyze program syntax,
     generate a control flow graph, and automatically generate a
     structured program.
    On – line system reengineering tools are used to modify on-line
     database systems (e.g. convert IDMS or DB2 files into entity-
     relationship format).
            These tools are limited to specific programming languages
   and require some degree of interaction with the software engineer.


             As computing systems became larger and more complex, it
became apparent that the demand for computer software was growing
faster than our ability to produce and maintain it.


   1. Software Engineering –6th edition by IAN SOMMERVILLE.
   2. Software Engineering concepts by Richard Fairly.
   3. Software Engineering –A practitioner‟s Approach- 5th edition by
      Roger S. Pressman.
   4. (B0E76a) Boehm, B.: “Software Engineering,” IEEE Transactions
      on Computers, vol. C-25, no. 12, December 1976.
   5. (IEEE83) IEEE Standard Glossary of Software Engineering
      Terminology, IEEE Standard 729-1983.
   6. (NAU76) Naur, P., et al. (eds): Software Engineering: Concepts and
      Techniques, Petrocelli /Charter, New York, 1976.