Software engineering
Software
Some of the constituted items of software are described below.
Program:
The program or code itself is definitely included in the software.
Data:
The data on which the program operates is also considered as part of the
software (e.g. browser is a s/w and browsing history, recent, cookies etc. are its data).
Documentation:
All the documents related to the software are also considered as part of the software.
Engineering
The process of productive use of scientific knowledge is called engineering.
OR
Engineering is the process of designing and building something that serves a particular
purpose and finds a cost-effective solution to problems.
Software engineering
Software Engineering as defined by IEEE;
“The application of a systematic, disciplined, quantifiable approach to the development,
operation, and maintenance of software; that is, the application of engineering to
software.”
Before explaining this definition lets first look at another definition of Software
Engineering given by Ian Somerville.
“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 production”.
Software Engineering is the set of processes and tools to develop software.
Software
Engineering is the combination of all the tools, techniques, and processes
that used in
software production. Therefore Software Engineering encompasses all those
things that
are used in software production like:
Programming Language
Programming Language Design
Software Design Techniques
Tools
Testing
Maintenance
Development etc.
So all those thing that are related to software are also related to software
engineering.
Nature of software
In software engineering, the nature of software refers to its fundamental characteristics and
properties that differentiate it from physical products. These characteristics are:
No Wear and Tear
Unlike hardware, software does not physically degrade over time. However, it can become
obsolete or inefficient due to changes in the environment (e.g., operating systems, hardware
updates).
Developed, Not Manufactured
Unlike physical products, software is developed through engineering processes (e.g., design,
coding, and testing) rather than being manufactured in a factory.
Intangible
Unlike physical products, software is not a tangible entity. It consists of code and data, which
makes it abstract and conceptual.
Complex and Evolving
Software can be highly complex, with millions of lines of code. It constantly evolves due to
changing requirements, bug fixes, and technological advancements.
Customizable and Scalable
Software can be modified and extended to meet different needs, making it highly flexible
compared to physical products.
Reusability
Software components, modules, and libraries can be reused across multiple applications,
reducing development time and costs.
Understanding these properties helps software engineers create efficient, maintainable, and
scalable software systems.
Software Crisis
What is Software Crisis?
Software built using old tools and techniques often failed due to incompleteness, late delivery,
over-budgeting, and unreliable systems (Software crisis, 1960s). In 1960, a conference
introduced the term software crisis, highlighting the inability to handle complexities in software
development. The term of Software Engineering was also coined in the same conference,
emphasizing the need to apply engineering principles to software development, similar to
building cars or electronic devices. This realization led to the realization that coding alone was
insufficient for complex software construction.
A brief history of the term Software Engineering
Computer systems were very new and primitive in early fifties and the use of software
was also very limited at that time. It was limited to some scientific applications or used to
process the data of census. In 1960s a great amount of rapid improvement was made in
hardware. New hardware and new computer systems were made available. These
computer systems were far more powerful than the computers of early fifties. It is all
relative, the computers of 1960s are primitive as compare to the computers we have these
days but were far more powerful than the computers of early fifties. More powerful
hardware resulted into the development of more powerful and complex software. Those
very complex software was very difficult to write. So the tools and techniques that were
used for less complex software became inapplicable for the more complex software. Lets
try to understand this with the help of an example.
Let’s imagine a person who use to live in a village and who have constructed a hut for
him to live. Definitely he should have face some problems in the beginning but was
managed to build a hurt for him. Now if you ask him to construct another hut, he may be
able to construct one more easily and in a better way. This new hut may be better than the
first one and he may construct it in a relatively less time. But if you ask him to construct
concrete and iron houses then he may not be able to handle it. Since he made a hut and he
know how to make a place to live so you may expect from him to build concrete and iron
buildings. If this is the case then you should all agree that the building constructed by that
person will not have a stable structure or he may not even be able to build one.
In early 60s software had suffered from the similar kind of problem to which we call
Software Crisis. Techniques that were used to develop small software were not applicable
for large software systems. This thing resulted in the following consequences.
As a result of these problems a conference were held in 1960 in which the term software
crisis was introduced. And the major issue discussed was that the development of
software is in crisis and we have not been able to handle its complexities. And the term of
Software Engineering was also coined in the same conference. People have said that, we
should use engineering principles in developing software in the same way as we use these
principles in developing cars, buildings, electronic devices etc. Software engineering is
the result of software crisis when people realized that it is not possible to construct
complex software using the techniques applicable in 1960s. An important result of this
thing was that people had realized that just coding is not enough.
Software engineering practice
Software engineering practice refers to the set of systematic methodologies, principles,
and techniques used in the development, maintenance, and management of software
systems to ensure reliability, efficiency, and quality.
It encompasses best practices such as requirements analysis, design, coding, testing,
deployment, and maintenance.
These practices are guided by software engineering principles, including modularity,
abstraction, reusability, and maintainability, to ensure the delivery of high-quality
software that meets user needs and business objectives.
Well-Engineered Software
Well-engineered software is one that has the following characteristics:
It is reliable
It has good user-interface
It has acceptable performance
It is of good quality
It is cost-effective
Software Development
The activities involved in software development can broadly be divided into two major
categories first is construction and second is management.
Construction
The construction activities are those that directly related to the development of software,
e.g. gathering the requirements of the software, develop design, implement and test the
software etc. Some of the major construction activities are listed below.
Requirement Gathering
Design Development
Coding
Testing
Management
Management activities are kind of umbrella activities that are used to smoothly and
successfully perform the construction activities e.g. project planning, software quality
assurance etc. These activities are also called umbrella activities. Some of the major
management activities are listed below:
Project Planning and Management
Configuration Management
Software Quality Assurance
Installation and Training
Software process
The systematic approach that is used in software engineering is sometimes called a software
process. A software process is a sequence of activities that leads to the production of a
software product. Four fundamental Software Engineering activities are common to all software
processes:
1. Software specification, where customers and engineers define the software that is to be
produced and the constraints on its operation.
2. Software development, where the software is designed and programmed.
3. Software validation, where the software is checked to ensure that it is what the
customer requires.
4. Software evolution, where the software is modified to reflect changing customer and
market requirements.