Sei sulla pagina 1di 4

Software engineering, what is it, what are the aspects, and how do you

perceive it.

An early definition of software engineering was proposed by Fritz Bauer

“The establishment and use of sound engineering principles in order to


obtain economically software that is reliable and works on real machines.”

Another definition given in the IEEE Standard Glossary of Software


Engineering Terminology is-

“Software engineering is the application of a systematic, disciplined,


quantifiable approach to the development, operation, and maintenance of
software; that is, the application of engineering to software.”

It is an outgrowth of hardware and system engineering. Its three key


elements are –methods, tools and procedures-that enable the manager to
control the process of software development and provide the practitioner
with a foundation for building high-quality software in a productive way.

Software engineering methods provide the technical “how to’s “ for building
a software, that include gathering data for project planning and estimation,
system and software requirements analysis, design of data structure,
program architecture and algorithm procedure, coding, testing, and
maintenance. Often a special language-oriented or graphical notation is
introduced, along with criteria for ensuring software quality.

Software engineering tools provide automated or semi-automated support


for methods. Today, tools exist to support each of the methods noted above.
When tools are integrated so that the information created by one tool can be
used by another, a system for the support of software development, called
computer aided software engineering (CASE), is established. CASE combines
software, hardware, and a software engineering database ( a data structure
containing important information about analysis, design, code, and testing)
to create a software engineering environment that is analogous to CAD/CAE
for hardware.

Software engineering procedures are the glue that holds the methods and
tools together and they enable rational and timely development of computer
software. Procedure define the sequence in which the methods will be
applied, the deliverables(documents, reports, forms, etc.) that are required,
the controls that help ensure quality and coordinate change, and the
milestones that enable software managers to assess progress.
The classical model for software building is sometimes called “the waterfall
model”, which is a systematic approach to software development that starts
at the system level and progresses through analysis, design, coding, testing
and maintenance.

System engineering and analysis: This involves establishing requirements of


the system elements and then allocating a subset of these requirements to
the software. This system view is essential when the software must interface
with other elements such as hardware, people, and databases. System
engineering and analysis encompasses requirements gathering at the
system level with a small amount of top-level design and analysis.

Software requirements analysis: The gathering process is intensified and


focused specially on software. The software engineer (analyst) must
understand the information domain, the required function, performance, and
interfacing. Requirements for both the software and the system are
documented and reviewed with the customer.

Design: Designing is a multistep process that focuses on various attributes


like data structure, software architecture, procedural detail, and interface
characterization. The main idea behind designing is to study the various
aspects and assessing them for quality before the actual coding begins. The
final stage involves documenting the design and attaching it as a part of the
software configuration.

Coding: This involves translating the design into the actual code, which is the
actual software. Many a times, the coding process is divided into various
parts, such that each individual process can be coded in a simpler and less
tedious way, but ensuring that the communication between the various parts
remains hassle free. This, at times may reduce the complexity of software
development, at the same time maintaining the complexity of the overall
software problem at hand.

Testing: This involves testing the code developed, of errors, and making sure
that the defined input will produce the actual results that agree with required
results.

Maintenance: change is a part of life, and it holds for software too. There will
be errors encountered which need to be attended to. Then most software
models are a part of reality, and as the reality evolves the software should do
the same if it doesn’t want to become obsolete. At times, changes may be
required because of the advent of a new software or a new peripheral device,
or the customer requires functional or performance enhancements. Software
maintenance reapplies each of the preceding life-cycle steps to an existing
program rather than a new one.

Apart from the above mentioned points, there are various aspects of
software engineering which cannot be overlooked. For example the
efficiency with which software is developed is of crucial importance. Total
cost and development time of software projects is high. Regular cooperation
between people is an integral part of programming in the large. Since the
problems are large, many people have to work together at solving those
problems. There must be clear arrangements for the distribution of work,
methods of communication, responsibilities, and so on. Discipline is one of
the keys to the successful completion of a software development project.
The software has to support its users effectively. The software is developed
in order to support users at work. The software should be user friendly and fit
user’s tasks. User manuals and training material may have to be written, and
attention must be given to developing the environment in which the new
system is going to be installed. Software engineering is a field in which
members of one culture create artifacts on behalf of members of another
culture. Software engineers are expert in programming one or more areas
such as programming in Java, software architecture, testing, or UML, but they
are not experts in areas such as library management, or banking or petrol
pump management etc. but still, they have to develop systems for such
domains. Lack of knowledge of these real life domains is a common source of
problems in software development projects.

Software engineering has many facets. It is certainly not the same as


programming, though programming is an integral part of software
development. Mathematical aspect plays a role since we are concerned with
the correctness of software. Sound engineering practices are needed to get
useful products. Psychological aspects play a role in the communication
between human and machine, and between humans. Finally the
development process needs to be controlled, which is a management issue.

Software engineering has a considerable overlap with computer science. It


has a similar inclination to focus on clean aspects of software development
that can be formalized in both teaching and research. But it also has to deal
with such matters as management of huge development projects, human
factors(regarding both the developers and the users) and cost estimation
and control. Software engineers must engineer software. To conclude, I
would like to say, that even though it has many things in common with other
fields of engineering and computer science too, but, it has a face of its own
in many ways untouched by the other spheres of engineering or computer
science, a face that gives it a separate identity.

Potrebbero piacerti anche