Download as pdf or txt
Download as pdf or txt
You are on page 1of 12

Chapter 1

Introduction

1.1 History of software engineering


The birth and evolution of software engineering as a discipline within
computer science can be traced to the evolving and maturing view of
programming activity. In early days of computing, the problem of
programming was viewed essentially as how to place a sequence of
instructions together to get the computer to do something useful.
As computers became cheaper and more common, more and
more people started using them. Higher level languages were invented in the
late 1950s to make it easier to communicate with the machine. It was the
time that “programming” attained the status of a profession: You could ask a
programmer to write a program for you, instead of doing it yourself.
Very few large software projects were being done at the
time- the early 1960s. For example, the CTSS operating system developed at
MIT was indeed a large project. In the middle to late 1960s, truly large
software systems were attempted to be built commercially. For example, the
OS 360 operating system for the IBM 360 computer family.
The people on these large projects quickly realized that
building large software systems was significantly different from building
smaller systems. There were fundamental difficulties in scaling up the
techniques of small program development to large software development.
The term “Software Engineering” was invented around this
time; and conferences were held to discuss the difficulties these projects
were facing in delivery the promised products.
Large software projects were universally over budget and
behind schedule. Another term invented at the time was “software crisis”. It
appeared that the problems seen in building large software systems were not
a matter of putting computer instruction together. Rather, the problems
being solved were not well understood.
People on the project had to spend a lot of time communicating
with each other rather than writing code. People sometimes even left the
project, and this affected not only the work they had been doing, but the
work of the others who were depending on them. Replacing an individual
required an extensive amount of training about the “folklore” of the project
requirements and the system design.
Any change in the original system requirements seemed to affect
many parts of the project, further delaying delivery of the system. These
kinds of problems just did not exist in the early “programming” days and
seemed to all for a new approach.

Prepared by: Er. Ravi Khadka (NAST) Page 1


Many solutions were proposed and tried. Some suggested that the
solution lay in better management techniques. Others proposed different
team organizations. Yet others argued for better programming languages
and tools. Many called for organization wide standards such as uniform
coding conventions. A few called for the use of mathematical and formal
approaches.
There was no shortage of ideas. The final consensus was that the
problem of building software should be approached in the same way that
engineers had built other large complex systems, such as bridges, refineries,
factories, ships and airplanes. The point was to view the final software
system as a complex product and the building of it as an engineering job.
The engineering approach required management, organization, tools,
theories, methodologies and techniques. Thus, software engineering was
born.

1.2 Introduction to software engineering


 Software:
A program or set of programs containing instructions which
provide desire functionality.
 Engineering:
It is a process of designing and building something that serves a
particular purpose.
 Software Engineering:
 A systematic approach to the development, operation and
maintenance of desired software.
 Software engineering is an engineering discipline that is concerned
with all the aspects of software production from the early stages of
system speciation to maintain the system after it has gone into use.
 Software engineering encompasses a process, a collection of
method and array of tools that allows professional to build high
quality software in timely manner.
 Thus, the software engineering includes overall activities
performed during the production of software such as
 Requirement analysis
 Planning
 Designing
 Estimation
 Scheduling and module development
 Combination of module for overall product
 Testing
 Delivery to the owner
 Feedback from the customer

Prepared by: Er. Ravi Khadka (NAST) Page 2


 Software engineering process:
 A road map that help us to create a timely, high quality result.
 A process is a collection of activities, action and task that are
performed when some work product is to be created.
 In context of software engineering, a process is not a rigid
description for how to built computer software.
 Rather, it is an adoptable approach that enables a people doing the
work (the software team) to pick and choose the appropriate set of
work, action and task.
 The major thing is to deliver software in timely manner and with
sufficient quality to satisfy those who have sponsored its creation
and those who will use it.
 Software process framework(SPF):
 A process framework establish the foundation for a complete
software engineering process by identifying that are applied to all
the software projects, regardless of the size or complexity.
 In general, software process framework include following
activities:
a. Communication
 Before any technical work can commence, it is
critically important to communicate and collaborate
with the customer and other stakeholders.
 A stakeholder is anyone who has a stake in the
successful outcome of the project i.e business
managers, end users, software engineers, support
peoples etc.
 The intend is to understand stake holder objectives
and to gather requirements that help to define software
feature and functions.
b. Planning
 Software project require software project plan that
defines the software engineering work by describing :
 The technical task to be conducted
 The risk that are likely to be conducted
 The resources that will be required
 The product to be produced and
 The work schedule
c. Modeling
 As a bridge builder or architecture, both works with
mode is every day to understand the big mixture about
product such as what it look like architecturally.

Prepared by: Er. Ravi Khadka (NAST) Page 3


 A software engineering does the same thing by
creating model to better understand software
requirement and the design that will achieved those
requirements.
d. Construction
 This activity combines code generation and the testing
that is required uncovering error in the code.
e. Deployment
 The software as a complete entity or partially
completed incremented is deliver to the customer who
evaluate the deliver product and provide feedback
based on the evaluation.

1.3 Role of software engineering in system design


A software system is often a component of a much larger system. The
software engineering activity is therefore a part of a much larger system design
activity in which the requirements of the software are balanced against the
requirements of other parts of system being designed.
For example, a telephone switching system consists of computers,
telephone lines and cables, telephones, satellites and finally software to control
the various other components. It is the combination of all these components that
is expected to meet the requirements of the whole system.
Power plant or traffic monitoring system, banking system, hospital
administration system are other examples of systems that exhibit the need to
view the software as a component of a larger system.
A broader look at the general problem of software engineering is
required. It requires the software engineer to be involved when the requirements
are being development initially of the whole system. It requires that the software
engineer attempts to understand the application area well. The classic concern
of a software engineer is the choice of what should be done in hardware.
Software implementation offers flexibility, while hardware implementation
offers performance.

 Relationship of software engineering to other areas of computer


science

Software engineering has emerged as an important field within computer


science. Indeed, there is a relationship between it and many other areas in
computer science: these areas both influence and get influenced by
software engineering. In the following subsections, we explore the
relationship between software engineering and some of the important
fields of computer science.

Prepared by: Er. Ravi Khadka (NAST) Page 4


1. Programming Language
The software engineering on programming languages is rather
evident. Programming languages are the central tools used in software
development. As a result, they gave profound influence on how well we
can achieve our software engineering goals. In turn, these goals influence
the development of programming languages.
The most notable example of this influence in recent programming
language is the support of modularity features, such as separate and
independent compilation and the separation of speciation from
implementation in order to support team development of large software.
Programming languages such as Ada 95 and Java, for example,
support the development of “packages” – allowing the separation of the
package interface from its implementation and libraries of packages that
can be used as components in the development of independent software
system.
This is a step towards making it possible to build software by
choosing from a catalog of available components and combining them,
similarly to way hardware is built.
Another example is the introduction of exception-handling
constructs in programming languages. Conversely, programming
languages have influenced software engineering. One example is the idea
that requirements and design should be described precisely, possibly
using a languages as rigorous and machine-processible as a programming
language.

2. Operating System
The influence of operating system on software engineering is quite
strong primarily because operating systems were the first really large
software systems built, and therefore they were the first instances of
software that needed to be engineered.
Many of the first software design ideas originated from early
attempts at building operating systems. Virtual machines, levels of
abstraction, and the separation of policy from mechanism are all concepts
developed in the operating system field with general applicability to any
large software system.
The idea of levels of abstraction is just another approach to
modularizing the design of a system.
Examples of the influence of software engineering techniques on
the structures of operating systems can be seen in portable operating
systems and operating systems that are structured to contain a small
protected kernel that provides a minimum of functionality for interfacing
with the hardware and a non-protected part that provided the majority of
the functionality previously associated with operating systems.
Prepared by: Er. Ravi Khadka (NAST) Page 5
For example, the non-protected part may allow the user to control
the paging scheme, which has traditionally been viewed as an integral
part of the operating system.
Similarly, in early operating systems, the command language
interpreter was an integral part of the operating system. Today, it is
viewed as just another utility program. This allows, for example each user
to have a personalized version of the interpreter. On many UNIX
systems, there are at least three different such interpreters.

3. Databases
Database represent another class of large software systems whose
development has influenced software engineering through the discovery
of new design techniques. Perhaps the most important influence of the
database field on software engineering is through the notion of “data
independence”, which is yet another instance of the separation of
speciation from implementation. The database allows applications to be
written the use data without worrying about the underlying representation
of the data.
Another interesting impact of database technology on software
engineering is that it allows database systems to be used as components
of large software systems. Since databases have solved the many
problems associated with the management of concurrent access to large
amount of information by multiple users, there is no need to reinvent
these solutions when we are building a software system: we can simply
use an existing database system as a component.
One interesting influence of software engineering on database
technology has its roots in early attempts to use databases to support
software development environments. This experience showed that
traditional database technology was incapable of dealing with the
problems posed by software engineering processes.
For example, the following requirements are not handled well by
traditional databases:
 Storing large unstructured object such as code and
executable code
 Storing large structured objects such as source programs or
user manuals
 Maintaining different versions of the same object; and
storing objects, such as a product, with many structured and
unstructured fields.
There is presently considerable work going on in the database area
to address such problems, ranging from introducing new models
for databases to adapting current database models.

Prepared by: Er. Ravi Khadka (NAST) Page 6


4. Artificial Intelligence
Artificial intelligence is another field that has exerted influence on
software engineering. The technique supported by artificial intelligence
includes the user of logic in both software specifications and
programming languages.
The logical orientation seems to be filling the gap between
specification and implementation higher than before. The logical
approach to specification and programming is also called declarative. The
idea is that we declare the specifications or requirements rather than
specifying them procedurally; the declarative description is then
executable. Logical programming language such as PROLOG helps us
follow this methodology.
Software engineering techniques have been used in those artificial
intelligence systems known as expert systems. These systems are
modularized, with a clear separation between the facts known by the
expert systems and the rules used by the systems for processing the facts.
For example, a rule to decide on a course of action. This separation
has enabled the building and commercial availability of “expert system
shells” that include rules only.
A user can apply the shell to an application of interest by supplying
application specific facts. The idea is that the expertise about the
application is provided by the user and the general principles are
providing by the shell.
A different kind of symbiosis is currently taking place at the
intersection of software engineering and artificial intelligence.
Techniques of artificial intelligence are being applied to improve
software engineering tasks.
For example, programming assistant is developed to act as
consultants to the programmer, watching for common programming
idioms or the system requirements. Such assistants are also being
developed to help in the testing activities of the software development, to
debug the software.
The problem of providing interfaces for non-expert users-for
example, through the use of natural language-was first attacked by AI.
Cognitive models were also used to model the user. These works have
influenced the area of user-interface design in software engineering.

Prepared by: Er. Ravi Khadka (NAST) Page 7


1.4 Software Development and Software Engineering
 Software development is the process of computer programming,
documenting, texting and bug fixing involved in creating and
maintaining applications and frameworks resulting in a software
product.
 The need for better quality control of the software development
process has given rise to the discipline of software engineering,
which aims to apply the systematic approach exemplified in the
engineering paradigm to the process of software development.
 Software development and software engineering are interrelated
terms, but they don’t mean quite the same thing.
 A software engineer is engaged in software development; not all
software developers, however, are engineers.
 Software engineering means applying engineering principles to
software creation.
 Software engineers begin with a thorough study of requirements.
They work through the development process in a systematic way:
this is called software development life cycle.
 Software Engineering is nothing but a discipline and systematic
approach to software development. (In a cost effective manner)
 All software engineering is software development, but not all
software development is software engineering.

Software development activities are:


1. Identification of need
2. Planning
3. Designing
4. Implementation, testing and documenting
5. Development and maintenance

1.5 Attributes of good (quality) software


The software quality attributes has been given the acronym FURPS;
functionality, usability, reliability, performance and supportability.
The FURPS quality attributes represent a target for all software
design.
1. Functionality
 Refers to degree of performance of the software
against its intended purpose.

2. Usability
 Refers to the extent to which the software can be used
with ease.

Prepared by: Er. Ravi Khadka (NAST) Page 8


 Software must be usable by the users for which it was
designed.
 This means it should have an appropriate user
interface and adequate documentation.

3. Reliability
 Refers to the ability of the software to produce desired
functionality under the given conditions.

4. Performance
 It is measured by considering processing speed,
response time, resources consumption and efficiency.

5. Supportability
 Refers to the ease with which software developers can
transfer software from one platform to another,
without (or with minimum) changes.

Some other attributes are:


Maintainability
 Software must evolve to meet changing needs of the
customers.

Dependability
 Software must be secure and safe.
 Dependable software should not cause physical or
economical damage in the event of the system failure.

1.6 Some challenges of software engineering

 Heterogeneity challenge
 Every organization is required to operate as a distributed
system across the network that includes different types of
computer and with different types of supporting system.
 Heterogeneity challenge is the challenge of developing
software that is flexible enough to cope with heterogeneous
system.

 Delivery challenge
 Traditional software engineering techniques are time
consuming.
 The time they take is required to achieve software quality.

Prepared by: Er. Ravi Khadka (NAST) Page 9


 However, business organization today must be responsive
and change very rapidly.
 Their supporting software must change equally.
 The delivery challenge is the challenge to provide the
software within short time without comprising software
quality.

 Trust challenge
 Trust challenge is to develop a technique that demonstrates
that software can be trusted by its users.

 Budget and cost


 Maintaining and updating

1.7 Software engineering ethics


 Software engineers shall commit themselves to making the analysis,
specification, design, development, testing and maintenance of
software beneficial and respected profession.
 In accordance with their commitment to health, safety and welfare of
the public.
Software engineers shall adhere to following eight principles:
a) Public
Software engineers shall act consistently with the public
interest.
b) Client and employer
Software engineers shall act in a manner that is in the best
interests of their client and employer, concistent with the
public interest.
c) Product
Software engineers shall ensure that their products and
related modifications meet the highest professional standards
possible.
d) Judgment
Software engineers shall maintain integrity and
independence in their professional judgment.
e) Management
Software engineering mangers and leaders shall subscribe to
and promote an ethical approach to the management of the
software development and maintenance.
f) Profession
Software engineers shall advance the integrity and reputation
of the profession consistent with the public interest.

Prepared by: Er. Ravi Khadka (NAST) Page 10


g) Colleagues
Software engineers shall be fair t and supportive of their
colleagues.
h) Self
Software engineers shall participate in lifelong learning
activities regarding the practice of their profession and shall
promote an ethical approach to the practice of the profession.

1.8 Difference between software engineering and system engineering


Software engineering is concerned with all aspect of the development and
evolution of the computer system or other complex system. Software plays
major roles in system engineering.
System engineering is concerned with all aspect of computer-based
systems development including hardware, software and process
engineering. Software engineering is part of this process concerned with
developing the software infrastructure, control, applications and databases in the
system. System engineers are involved in system specification, architectural
design, integration and deployment.
Software engineering is largely focused on developing quality software
that meets the software requirements specification. Systems engineering works
at a higher level of abstraction, and is typically responsible for determining the
needs of the clients and end users to develop the software requirement
specifications themselves.
System engineering is concerned with all aspects of the development and
evolution of complex systems…whereas software engineering is concerned with
the practical problems of producing software”. Software is a major component
of system development. System engineering involves hardware, software, and
process engineering. System engineer concern themselves with system
specifications, architectural design, implementation, and deployment. “They are
less concerned with the engineering of the system components (hardware,
software, etc.)”.To demonstrate the difference between the software and system
engineering, a car dealership application will be used as an example system.

A car dealership application would require mechanical, electrical, and software


engineering disciplines to be designed. Mechanical engineers would be required
to provide the specifications of the cars the dealership has and to provide service
and repairs to malfunctioning vehicles. Software engineers would be required to
create the application and user interface design. Available cars must have the
most up to date specifications, should any changes have been made. Electrical
engineers might be needed should any car have its electrical systems modified.
The system engineering team would have to specify system requirements to be
partitioned (GUI, database, allowed repairs, service, etc.). The software
engineer would have to develop the GUI and maintain the database of cars sold
Prepared by: Er. Ravi Khadka (NAST) Page 11
or available. The system engineers would have to assign requirements to sub-
systems such as the databases i.e. what functions it should have. System
engineers should also design the functions of the interface for subsystems such
as the database. The interface’s functions should be agreed upon by the
collective disciplines and the software engineer would develop this GUI (guided
user interface).

Prepared by: Er. Ravi Khadka (NAST) Page 12

You might also like