0% found this document useful (0 votes)
3 views

Topic 1 Notes (1)

Uploaded by

osiemomark25
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Topic 1 Notes (1)

Uploaded by

osiemomark25
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

Topic 1: Introduction to Software Engineering

Introduction
Software is more than just a program code. A program is an executable code, which serves some
computational purpose. Software is considered to be collection of executable programming code,
associated libraries and documentations. Software, when made for a specific requirement is called
software product.

Software is defined as a collection of programs, procedures, rules, data and associated


documentation. The s/w is developed keeping in mind certain h/w and operating system
consideration commonly known as platform. And engineering means systematic procedure to
develop software.
Important of software are due to much reason as it is used in:
i)Business decision making e.g. accounting s/w, billing s/w
ii)For scientific research and engineering problem solving. E.g. weather forecasting system, space
research s/w
iii)It is embedded in multifunctional systems such as medical, telecom entertainment etc. e.g. s/w
for medical patient automation, s/w of GSM/CDMA service provides.

Engineering on the other hand, is all about developing products, using well-defined, scientific
principles and methods.
Software engineering is an engineering branch associated with development of software product
using well-defined scientific principles, methods and procedures. The outcome of software
engineering is an efficient and reliable software product.
IEEE defines software engineering as:
The application of a systematic, disciplined, quantifiable approach to the development, operation
and maintenance of software; that is, the application of engineering to software.

Fritz Bauer, a German computer scientist, defines software engineering as:


Software engineering is the establishment and use of sound engineering principles in order to
obtain economically software that is reliable and work efficiently on real machines.

In short, Software engineering is a branch of computer science, which uses well-defined


engineering concepts required to produce efficient, durable, scalable, in-budget and on-time
software products.

Software Engineering is an engineering branch related to the evolution of software product using
well-defined scientific principles, techniques, and procedures. The result of software engineering
is an effective and reliable software product.

Types of software products:


-Generic products: This type of software product is developed by an organization and sold on
open market to any customer, (System software, application software)
-Customized (or bespoke) products: This type of software products are developed by a software
contractor and especially for a customer.
-Embedded Product: Combination of both hardware and software

Software Evolution
The process of developing a software product using software engineering principles and methods
is referred to as software evolution. This includes the initial development of software and its
maintenance and updates, till desired software product is developed, which satisfies the expected
requirements.

Evolution starts from the requirement gathering process. After which developers create a prototype
of the intended software and show it to the users to get their feedback at the early stage of software
product development. The users suggest changes, on which several consecutive updates and
maintenance keep on changing too. This process changes to the original software, till the desired
software is accomplished.
Even after the user has desired software in hand, the advancing technology and the changing
requirements force the software product to change accordingly. Re-creating software from scratch
and to go one-on-one with requirement is not feasible. The only feasible and economical solution
is to update the existing software so that it matches the latest requirements.

Software Evolution Laws


Lehman has given laws for software evolution. He divided the software into three different
categories:
 S-type (static-type) - This is a software, which works strictly according to defined
specifications and solutions. The solution and the method to achieve it, both are
immediately understood before coding. The s-type software is least subjected to changes
hence this is the simplest of all. For example, calculator program for mathematical
computation.
 P-type (practical-type) - This is a software with a collection of procedures. This is defined
by exactly what procedures can do. In this software, the specifications can be described but
the solution is not obvious instantly. For example, gaming software.
 E-type (embedded-type) - This software works closely as the requirement of real-world
environment. This software has a high degree of evolution as there are various changes in
laws, taxes etc. in the real world situations. For example, Online trading software.

Software Paradigms
Software paradigms refer to the methods and steps, which are taken while designing the software.
There are many methods proposed and are in work today, but we need to see where in the software
engineering these paradigms stand. These can be combined into various categories, though each
of them is contained in one another:

Programming paradigm is a subset of Software design paradigm which is further a subset of


Software development paradigm.

Software Development Paradigm


This Paradigm is known as software engineering paradigms where all the engineering concepts
pertaining to the development of software are applied. It includes various researches and
requirement gathering which helps the software product to build. It consists of –
 Requirement gathering
 Software design
 Programming

Software Design Paradigm


This paradigm is a part of Software Development and includes –
 Design
 Maintenance
 Programming

Programming Paradigm
This paradigm is related closely to programming aspect of software development. This includes –
 Coding
 Testing
 Integration

Characteristics of good software


A software product can be judged by what it offers and how well it can be used. This software
must satisfy on the following grounds:
 Operational
 Transitional
 Maintenance
Well-engineered and crafted software is expected to have the following characteristics:
Operational
This tells us how well software works in operations. It can be measured on:
 Budget
 Usability
 Efficiency
 Correctness
 Functionality
 Dependability
 Security
 Safety
Transitional
This aspect is important when the software is moved from one platform to another:
 Portability
 Interoperability
 Reusability
 Adaptability
Maintenance
This aspect briefs about how well a software has the capabilities to maintain itself in the ever-
changing environment:
 Modularity
 Maintainability
 Flexibility
 Scalability

Characteristics of a good software engineer


The features that good software engineers should possess are as follows:
Exposure to systematic methods, i.e., familiarity with software engineering principles.
Good technical knowledge of the project range (Domain knowledge).
Good programming abilities.
Good communication skills. These skills comprise of oral, written, and interpersonal skills.
High motivation.
Sound knowledge of fundamentals of computer science.
Intelligence.
Ability to work in a team
Discipline, etc.

Importance of Software Engineering

The importance of Software engineering is as follows:


1. Reduces complexity: Big software is always complicated and challenging to progress.
Software engineering has a great solution to reduce the complication of any project.
Software engineering divides big problems into various small issues. And then start solving
each small issue one by one. All these small problems are solved independently to each
other.
2. To minimize software cost: Software needs a lot of hardwork and software engineers are
highly paid experts. A lot of manpower is required to develop software with a large number
of codes. But in software engineering, programmers project everything and decrease all
those things that are not needed. In turn, the cost for software productions becomes less as
compared to any software that does not use software engineering method.
3. To decrease time: Anything that is not made according to the project always wastes time.
And if you are making great software, then you may need to run many codes to get the
definitive running code. This is a very time-consuming procedure, and if it is not well
handled, then this can take a lot of time. So if you are making your software according to
the software engineering method, then it will decrease a lot of time.
4. Handling big projects: Big projects are not done in a couple of days, and they need lots
of patience, planning, and management. And to invest six and seven months of any
company, it requires heaps of planning, direction, testing, and maintenance. No one can
say that he has given four months of a company to the task, and the project is still in its
first stage. Because the company has provided many resources to the plan and it should be
completed. So to handle a big project without any problem, the company has to go for a
software engineering method.
5. Reliable software: Software should be secure, means if you have delivered the software,
then it should work for at least its given time or subscription. And if any bugs come in the
software, the company is responsible for solving all these bugs. Because in software
engineering, testing and maintenance are given, so there is no worry of its reliability.
6. Effectiveness: Effectiveness comes if anything has made according to the standards.
Software standards are the big target of companies to make it more effective. So Software
becomes more effective in the act with the help of software engineering.

The software crisis


Since last 20-25 years, there has been a rapid increase in the development of programs using a
computer. Also, the difficulty level of software has increased to a greater extent. In other words, a
drastic change has occurred in the development of computer programs. In order to make the
programs more and more predictable, different types of patterns have been created. But the
software industry is still many years away from becoming a mature engineering discipline. Even
in today's society, software is viewed with suspicion by many individuals, such as senior managers
and customers, as something similar to black magic. The result is that software is one of the most
difficult artifacts of the modern world to develop and build. Developers work on techniques that
cannot be measured or reproduced. All this, lead to a new concept called 'software crisis'. It has
become the longest continuing crisis in the engineering world, and it continues unabated. The
difficulty of writing the code for a computer program which is correct and understandable is
referred to as software crisis. The term software crisis revolves around three concepts: complexity,
change and the expectations. Current System design approach is exceedingly empirical. It is unable
to cope with increasing systems complexity. A number of problems in software development were
identified in 1960s, 1970s, and 1980s. The problems that software projects encountered were: the
projects ran over-budget, caused damage to property even to life. Despite our rapid progress, the
software industry is considered by many to be in a crisis. Some 40 years ago, the term "Software
Crisis" emerged to describe the software industry's inability to provide customers with high quality
products on schedule. In general it refers to poorly written, hard to read, error-prone software that
often lacks good documentation. Software crisis is also referred to the inability to hire enough
qualified programmers. It has become the longest continuing "crisis" in the engineering world and
it continues unabated. The most visible symptoms of the software crisis are late delivery, over
budget; Product does not meet specified requirements, inadequate documentation. One of the most
serious complaints against software failure is the inability to estimate with acceptable accuracy the
cost, resources, and schedule necessary for a software project. Conventional assessment methods
have always produced positive results which contribute to the too well-known cost infested and
schedule slippage. As the world becomes more and more dependent on computers and as the
complexity of software systems continues to rise, the crisis can only get worse. It is particularly
severe in vital segments of the economy such as the health and financial services, and the
transportation, manufacturing, communication, power generation, and defense industries.

Factors contributing to the software crisis


The factors contributing to the software crisis are numerous. These main factors are named as
follows: -
1. Schedule and budget over shooting: The development of software applications is a
thriving business. Today the cost of software is typically about 80% of the cost of a
complete computer system in contrast to the situation in the late 1950s when the cost of
hardware was the major ingredient of the total cost of the system. A highly skilled designer
will be well paid and his involvement in a project introduces high labour costs. The
software development process is labour intensive and typically necessitates a high level of
skilled-man time units. Any increase in the time factor produces more cost for the product.
There is no sense in designing and implementing a system which will not be put into
practice. Sometimes the user supplies unrealistic and over ambitious requirements to the
designer and a good amount of designer time can be involved in identifying the invalidity
of the user’s requirements. The time required to carry out the feasibility check of user
requirements is also typically included in the schedule. Even a slight deviation from the
schedule can lead to cost increases. The computer environment can be defined as the
collection of hardware and software resources which are utilized in order to achieve a
particular effect, normally defined by a problem description, but including also the tools
used to realize a solution to the problem. These resources include the tools for the designer
who relies on them in any process of system Development. The collection of tools for each
project costs money which contributes to the development expenditure and increases the
cost of the product. Moreover, any variation in the environment in which a tool operates or
any malfunctioning of the tool causes by delays which ultimately means more cost. Poor
estimates of resources and inadequate financial planning also contribute to higher costs;
poor quality and cheap resources are rarely reliable and typically cost money. A designer
who is being unproductive adds additional expenditure so contributing to greater cost.
Time, effort and resources absorbed after completion of the schedule leads to an ultimate
increase in cost. Ad hoc development -performed without caring for documentation,
chronological recording, and verifying the system against the contract-generates confusion
and ambiguities leading to some maintenance problems. Typically delays in producing the
software systems are either because there is an overshoot in the budget or delay in delivery
of the system. On such occasions, the user refuses to accept the product due to its poor
quality. Moreover, potential advantages occur in hitting the markets before competitors do.
2. Productivity issues: The main challenge to software developers today is to increase the
output per time period of each worker. To understand the issue, let us refer to the industrial
revolution in the 18th century. With the achievements related to such a revolution, it
became possible for one worker to produce the same amount of work with a machine as
hundreds had previously done with their hands. To create an information revolution of a
similar kind it is likewise required that one worker must be employed to even greater effect
in producing code. This becomes possible if computer software factories are established to
produce quality software in bulk. Unfortunately, software production factories are not in
use on a large scale; thus a lot of effort form scientists and software engineers is expended.
It is worth noting that productivity can be measured, e.g. as the ratio of the number of lines
of source code produced per unit of time; care needs to be exercised to account for blank
lines of commentary, several statements packed into a single line, etc. Even the software
process itself can significantly affect the metric. The main strands of the software
productivity issue are people, the process, the product and the machines. Each strand has
many threads. The number of factors conspiring to reduce productivity is large and
numerous causes are interrelated. Small systems can be produced by an individual designer
facing minimal problems. The problems arising from individuals are due to their limitations
in capabilities, years of experience, language experience, and experience with similar
problems; the production of large systems by a team of designers offers a further set of
problems. Individual factors, team factors and the factors which are due to the nature and
degree of communication among the members of a team influence the extent of the
productivity.
Wrong selection of languages, unsuitable development methodologies, lack of attention to
verification, validation and the system environment -all these limit productivity at a
fundamental level. On the other hand the productivity level is greatly enhanced if a good
language which suits the problem requirements is chosen, a well defined and thoroughly
worked out methodology is adopted for design, the design process includes ‘walk throughs’
and milestones, implementation is carried out structurally, verified automatically and an
effective and supportive environment is used. The problems associated with the product
itself are: the kind of software, the quality requirements and the human interface. A
software product of poor quality is not attractive to the user. Moreover, to produce high
quality software needs time, commitment and other resources (e.g. tools) which affect the
level of productivity. If the product is not accepted by the user then the time of a skilled
designer is wasted. Low quality, large software products which do not meet the actual
development tie requirements and are developed without proper control and modularity
typically cause future maintenance problems.
3. Quality issues: There is little value in computer systems if they are not reliable, secure and
efficient. The emphasis must be on the quality of software product; indeed, the presence of
quality is a prime objective of software engineering. The total usefulness of a software is
sub-divided into current usefulness, which deals with the usage of the software in the
existing context, and potential usefulness which contributes to the usage of the same system
in any other context resulting from slight variation of the environments, changing
requirements, varying applications, etc

Software engineering principles


Software engineering is a layered technology. The bedrock that supports software engineering is
a quality focus. The foundation for software engineering is the process layer. Software engineering
process is the glue that holds the technology layers together and enables rational and timely
development of computer software.
Process defines a framework for a set of key process areas that must be established for effective
delivery of software engineering technology. The key process areas form the basis for management
control of software projects and establish the context in which technical methods are applied, work
product (models, documents, data, reports, forms, etc.) are produced, milestones are established,
quality is ensured, and change is properly managed.
Software engineering methods provide the technical how-to's for building software. That
encompass requirements analysis, design, program construction, testing, and support.
Software engineering methods rely on a set of basic principles that govern each area of the
technology and include modeling activities and other descriptive techniques.
Software engineering tools provide automated or semi-automated support for the process and the
methods. 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
(CASE), is established. CASE combines software, hardware, and a software engineering database
(a repository containing important information about analysis, design, program construction, and
testing) to create a software engineering environment analogous to CAD/CAE (computer-aided
design/engineering) for hardware.

You might also like