Unit 1 Overview of Software Engineering
Unit 1 Overview of Software Engineering
Software encompasses computer programs that execute within a computer of any size and architecture,
documents that describes operations/use of program and data structures.
It can be thought as an information transformer that gathers, produce, manage, modify, display and
transmit information.
It acts as a communicator between end user and computer systems/mobile phones/any digital system.
Software allows system to perform designed operation and generate desired output.
It is a logical term.
Software Characteristics:
● Bathtub curve shows that in early stages of life hardware faces initial failures due to
manufacturing defects.
● These defects can be corrected and hardware is launched again.
● After correction, failure rate drops to steady-state level and hardware works smoothly for some
period of time.
● As time passes failure rate rises again as hardware components suffer from cumulative effects
of dust, heat, vibrations, careless handlings and many other environmental conditions. i.e.
hardware starts to wear out.
● Software is not susceptible to the environmental malfunctioning that causes hardware wear out.
● In software, undiscovered defects causes high failure in initial phase.
● These defects are corrected and the curve flattens.
● During its lifetime, software undergo changes. However changes made to software may cause
new defects and failure rate rises suddenly.
● The curve given below shows failure curve for software:
● In software, gradually the minimum failure rate level begins to rise and software performance
starts declining.
● When hardware components wear out, it is replaced by spare part. There are no software spare
parts.
Software Applications:
Two important factors are considered in determining the nature of software applications:
1. Content: It refers to the meaning and form of input/output data. E.g. input data is stored in the
database, output can be produced in the form reports.
2. Determinacy: Predictability of order and timing of information. E.g. in analysis algorithms input
data is given in some predefined order, algorithm is executed on it without interruption and result
is produced.
2. Real time software: These software’s monitors, analyzes, controls real time events as they occur.
➢ E.g. air traffic controllers, web browsers, satellite tracking system, GPS, online gaming, chat
applications, SCADA etc.
➢ There are different components of real time software: data collecting components that collect
real time data from data sources, analysis components that analyze collected data, process that
data, control/output components produce output in desired form, monitoring components
coordinates activities of all other components.
6. Artificial Intelligence software: Softwares like pattern recognition, neural networks, expert
systems, decision support systems that involve complex problems come under this category.
➢ AI software uses non-numerical algorithms.
7. Networking and web based software: It provides required support for network communication.
➢ Network software enables computers to interact with each other over networks with data storage
facilities.
➢ E.g. It includes all network management softwares, server software, security and encryption
software and software to develop web-based applications like HTML, PHP, XML etc.
8. Personal computer software: Softwares in this category are used by any user on his/her personal
computer for day to day activities.
➢ E.g. Word processing software, spreadsheets sheets, graphics, multimedia, entertainment
software, database tools, gaming software etc.
Software Myths: These are false beliefs, considerations or interpretations about software and the process
that is used to build/develop it. Software myths are misleading attitudes that have caused serious
problems for managers and practitioners. Following are some of the software myths:
1. Management myths: Managers with software responsibilities are often under pressure to
maintain budget, development schedule and ensure quality improvement etc. Software manager
grasps some myths that may sometimes lessen his pressure.
➢ Myth 1: We have all standards and procedures available for software development.
Reality/fact: A book of Standards may exists but are software developers aware of it. Existing
processes may be incomplete or need to update as per requirements to ensure good quality,
timely delivery of product.
➢ Myth 2: If we get behind schedule, more programmers can be added to achieve timely delivery
of product.
➢ Myth 3: If I decide to outsource the software project to a third party. I can just relax and third
party will be responsible for product development.
2. Customer myths: Customers can be direct users of software, a technical team or other company.
In many cases Customer believes myths about software that leads to false expectations and
results in dissatisfaction with the developer.
➢ Myth 1: A general statement of objectives is sufficient to begin writing programs and details can
be filled later.
➢ Myth 2: Software requirement continuously changes, but changes can be easily accommodated
because software is flexible.
Reality/fact: Software requirements change continuously, but the impact of changes varies
with the time at which change is introduced. When requirement changes are requested at early
stages, the cost impact is relatively small. As time passes, cost impact grows rapidly.
3. Practitioner’s myths: These are the false beliefs of software developers regarding the software
development process.
➢ Myth 1: once we write the program and get it to work, our job is done.
Reality/fact: Program writing is not the only task of software development team. After
successful delivery of product, the required maintenance support must also be extended by team to
the customer.
➢ Myth 3: Software engineering will make us create voluminous and unnecessary documentation
and will slow down the process.
Types of software: Softwares are broadly classified into 2 types. system software and application
software.
1. System software: It is a set of programs that help to control or manage hardware devices
connected to computers and other important resources of the system.
➢ E.g. compilers, editors, file management utilities that process determinate data. Operating
system, drivers that process indeterminate data.
➢ It controls computer’s internal functioning. It serves as an interface between hardware and user
applications.
➢ Characteristics of system software:
I. Closely related to system.
II. Faster in performance and processing.
III. Mostly written in low-level language.
IV. System softwares often work in background.
V. Difficult to manipulate as it has complex design.
VI. System softwares are less interactive with users.
➢ E.g. Operating system, device drivers, firmwares, language translators etc.
2. Application software: It refers to the software that performs specific function for user.
Software engineering:
➢ Definition: Software engineering is a technological and managerial discipline concerned with
system development and maintenance of software products that are developed, and modified on
time and within given cost estimates.
➢ Goals of software engineering:
I. Improve quality of software product by applying various software engineering principles and
techniques.
II. Increase productivity by using modern tools and methodologies to streamline the development
process. Complete projects faster.
III. Develop a reliable software product.
IV. Make product adaptable to changing work environment.
1. Software engineer must be a good programmer. He/she must possess a knowledge of dat
structures, algorithms and one or more programming languages.
2. He/she must be familiar with several design approaches and must be able to translate
vague/incomplete requirements into specifications.
3. He/she must be able to move/work among several levels of abstractions( logical,physical,view) at
different stages of project development.
4. Software engineer must develop a good communication skills so that he/she can effectively
communicate with customers.
5. Software engineer must be a strong problem solver to work on bigger and complex projects.
1. Requirements gathering
2. Planning and designing a product
3. Writing code
4. Testing of written code
5. Maintenance of delivery product
6. Update or upgrade software as per requirements
Software engineering is a layered technology comprising different layers in order to ensure a good quality
and timely delivery of software product to customers. All the layers are connected to each other.
1. Process layer is the foundation for software engineering. It holds all technology layers together
that enables timely delivery of software. Process defines framework that must be established for
the effective delivery of software engineering technology. The software process covers all
activities, tasks such as communication, planning, modeling, construction, deployment that are
required to be carried out for software development.
2. Methods specifies how to carry out each task involved in software development process. In
method layer we will be choosing how to use different tools and technologies that we have
selected for our project development.
3. Tools provide automated or semi automated support for process and methods. We have to select
tools to carry out different tasks in development process. E.g. choose tools for web design, testing,
database handling etc. These tools need to be integrated with each other so that information
created by one tool can be used by another.
4. Quality focus: Emphasising on the testing of software product to ensure that product meets
customer’s requirements. It also focuses on real world testing to determine how efficient, usable
and reusable software will be.
Generic process framework/ The software process: The software process is a collection of all actions,
activities and tasks that are performed for software development. It is not a rigid framework, it’s an
adaptable approach that enables software development teams to choose appropriate actions and tasks
for development.
Small number of framework activities are identified that are applicable for all software projects regardless
of size or complexity. A generic process framework for software engineering encompasses following
activities:
Umbrella Activities: software engineering process framework activities are accompanied by number of
umbrella activities.
➢ Umbrella activities are series of steps or procedures followed by software development team to
maintain progress, quality, changes and risk of complete software development task.
➢ Following are the typical umbrella activities:
1. Software project tracking and control: Make a development plan before actual development
starts. It allows the team to assess/check the progress of software development against project
plan and take necessary actions further to maintain schedule.
2. Risk management: Identify risks that may affect the project outcome or quality of product.
3. Software quality assurance: defines and conducts activities required to ensure software quality.
Quality means user experience, product performance, workload flexibility must be tested and
verified at different phases of development. A dedicated team must be there to perform quality
assurance work.
4. Technical reviews: Assess software product to find and rectify errors if any before they are
propagated to next activity.
5. Measurements: Defines and collects measures for product, process and project that helps team
to deliver product that meets customer’s needs. Product measurements metrics are size and
complexity of software, quality and reliability of software. Process performance can be measured
by its efficiency in fault detection etc.
6. Software configuration management: It includes activities to manage effects of change
throughout the software development process.
7. Reusability management: Defines standards for reuse of product. Establishes mechanism to
create reusable components.
8. Document preparation and production: It encompasses activities required to create work
products such as models, documents, forms, logs and lists etc.
➢ A product is nothing but a Software that encompasses computer programs that execute within a
computer of any size and architecture, documents that describes operations/use of program and
data structures.
➢ Process is a series of predictable steps to develop any software product. It enables timely product
delivery and high quality results.
➢ Process provides stability, control and organisation on activity.
➢ Process is the approach taken/adopted to develop a software.
➢ Processes are software dependent.
➢ Different indicators are defined to determine the process maturity called software process
assessment mechanism.
➢ Process maturity refers to how a process evolves over time. Productivity, quality improves over
time through consistent gains.
➢ Quality, timeliness, and long term viability of a product are the best indicators of process
efficiency.
➢ A generic process framework for software engineering defines five framework activities:
communication,planning,modeling,construction and deployment. A common process framework
represents the process flow that describes how above mentioned framework activities and tasks
are organised with respect to time, and sequence. It is shown by the software process framework
diagram below:
➢ A process flow can be linear that executes each of the five activities in sequence one after another.
➢ An iterative process flow repeats one or more of the activities before proceeding to the next
activity.
➢ An evolutionary process flow executes activities in a circular manner.
➢ A parallel process flow executes one or more activities in parallel with other activities.
➢ Software engineering instructe(SEI) uses 5 point grading scheme to determine an organisation’s
current state of process maturity.
➢ Capability Maturity Model(CMM) defines key activities required at different levels of process
maturity.
Milestones: A software project is planned as a series of activities to be completed within defined time
period. Milestone can be defined as a recognisable endpoint of software project activity.
Deliverables: It simply represents a final working software product, a designed document or a project
plan that can be submitted to the customer, client or end users.
Module: The module in software is a small part of a software that is responsible for performing any kind
of functionality.
➢ It is also refer to as a sub program/a piece of code. A bigger and complex project is divided into
smaller modules(sub programs) each of which is capable of performing a functionality
independently.
➢ Each of the module can be built and tested selectively.
➢ These independent modules are integrated together in order to get a final working product. This
type of software building is known as component-based software.