0% found this document useful (0 votes)
14 views17 pages

Se - Unit I

The document discusses software engineering concepts including the definition of software engineering, the need for software engineering due to issues like large and complex software, and changing requirements, and characteristics of good software. It also covers software development processes and process models, and the differences between a software process and software product.

Uploaded by

Vishnu Priyan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views17 pages

Se - Unit I

The document discusses software engineering concepts including the definition of software engineering, the need for software engineering due to issues like large and complex software, and changing requirements, and characteristics of good software. It also covers software development processes and process models, and the differences between a software process and software product.

Uploaded by

Vishnu Priyan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

Software Engineering

UNIT-I Introduction
1.Software: -
Software is nothing but collection of computer programs and related documents that are planned
to provide desired features, functionalities and better performance.

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.

Engineering on the other hand, is all about developing products, using well-defined, scientific
principles and methods.

Software Engineering: The application of a systematic, disciplined, quantifiable approach to the


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

Software product classified in 2 classes:


1. Generic software: developed to solution whose requirements are very common fairly stable
and well understood by software engineer.
2. Custom software: developed for a single customer according to their specification.

1.1 Need of Software Engineering: -

The need of software engineering arises because of higher rate of change in user requirements
and environment on which the software is working.

Large software - It is easier to build a wall than to a house or building, likewise, as the size of
software become large engineering has to step to give it a scientific process.

Scalability- If the software process were not based on scientific and engineering concepts, it
would be easier to re-create new software than to scale an existing one.

Cost- As hardware industry has shown its skills and huge manufacturing has lower down the
price of computer and electronic hardware. But the cost of software remains high if proper
process is not adapted.

Dynamic Nature- The always growing and adapting nature of software hugely depends upon the
environment in which user works. If the nature of software is always changing, new
enhancements need to be done in the existing one. This is where software engineering plays a
good role.

Quality Management- Better process of software development provides better and quality
software product.
1.2 Software Engineering Goals
Readability (understood by those who maintain it)
Correctness
Reliability (high performance)
Re usability
Extensibility (ability to perform its operations)
Flexibility
Efficiency
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
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.
1.3 Evolution of Software Engineering:
1.4 Software Problem and Prospects:-

Software engineering is the systematic approach to the development, operation, maintenance,


and retirement of software. There are few fundamental problems that are:-
 The Problem of scale: A fundamental problem of software engineering is the problem of
scale; the methods that are used for developing small systems generally do not scale up to
large systems. A different set of methods has to be used for developing large software.
 Cost, schedule and quality: The cost of developing a system is the cost of the resources
used for the system, which, in the case of software, are the manpower, hardware,
software, and the other support resources.
 The Problem of consistency: Though high quality, low cost and small cycle time are the
primary objectives of any project, for an organization there is another goal: consistency.
An organization involved in software development does not just want low cost and high
quality for a project, but it wants these consistently.

1.5 What Is a Software Development Project?

Several types of software development projects are within the scope of this book. They range
from repeatable projects that have been done many times before to projects that are cutting edge
problem solving projects. Each presents its own special challenge to the developer. The example
given below will be the staging area for exploring effective approaches to software development
project management (SDPM).

Definition: Software Development Project


A software development project is a complex undertaking by two or more persons within the
boundaries of time, budget, and staff resources that produces new or enhanced computer code
that adds significant business value to a new or existing business process.

Although this is a restrictive definition, it does define the types of software development projects
that are addressed in this book. The criteria for these projects are that they have the potential of
adding significant business value and are not trivial undertakings. These development projects
will have significant business value, be highly visible, be of moderate to high complexity, and
were needed yesterday.

1.5.1 Software Development Process Model: -

Software process can be defining as the structured set of activates that are required to develop the
software system. To solve actual problems in an industry setting, a software engineer or a team
of engineers must incorporate a development strategy that encompasses the process, methods,
and tools layers. This strategy is often referred to as a process model or a software engineering
paradigm.
A process model for software engineering is chosen based on the nature of the project and
application, the methods and tools to be used, and the controls and deliverables that are required.

1.5.2 Goal of Software Process Models: -


The goal of a software process model is to provide guidance for systematically coordinating and
controlling the tasks that must be performed in order to achieve the end product and their project
objectives. A process model defines the following:
 A set of tasks that need to be performed.
 The inputs to and output from each task.
 The preconditions and post-conditions for each task.
 The sequence and flow of these tasks.
We might ask whether a software development process is necessary if there is only one person
developing the software. The answer is that it depends. If the software development process is
viewed as only a coordinating and controlling agent, then there is no need since there is only one
person. However, if the process is viewed as prescriptive road map for generating various
intermediate deliverables in addition to the executable code for:

1.5.3 Characteristics of Software Process: -


Software is often the single largest cost item in a computer-based application. Though software
is a product, it is different from other physical products.
i. Software costs are concentrated in engineering (analysis and design) and not in production.
ii. Cost of software is not dependent on volume of production.
iii. Software does not wear out (in the physical sense).
iv. Software has no replacement (spare) parts.
v. Software maintenance is a difficult problem and is very different from hardware (physical
product) maintenance.
vi. Most software is custom-built.
vii. Many legal issues are involved (e.g. inter-actual property rights, liability).

1.5.4 Software Product: -


A software product, user interface must be carefully designed and implemented because
developers of that product and users of that product are totally different. In case of a program,
very little documentation is expected, but a software product must be well documented. A
program can be developed according to the programmer’s individual style of development, but a
software product must be developed using the accepted software engineering principles.

Various Operational Characteristics of software are:


 Correctness: The software which we are making should meet all the specifications stated
by the customer.
 Usability/Learn-ability: The amount of efforts or time required to learn how to use the
software should be less. This makes the software user-friendly even for IT-illiterate
people.
 Integrity: Just like medicines have side-effects, in the same way software may have
aside-effect i.e. it may affect the working of another application. But quality software
should not have side effects.
 Reliability: The software product should not have any defects. Not only this, it shouldn't
fail while execution.
 Efficiency: This characteristic relates to the way software uses the available resources.
The software should make effective use of the storage space and execute command as per
desired timing requirements.
 Security: With the increase in security threats nowadays, this factor is gaining
importance. The software shouldn't have ill effects on data / hardware. Proper measures
should be taken to keep data secure from external threats.
 Safety: The software should not be hazardous to the environment/life.

1.5.5 Difference between software process and software product: -

Software Product
Software Process
Processes are developed by individual user and It is developed by multiple users and it is used
it is used for personal use. by large number of people or customers.
Process may be small in size and possessing It consists of multiple program codes; relate
limited functionality. documents such as SRS, designing documents,
user manuals, test cases.
Process is generally developed by process Process is generally developed by process
engineers. engineers. Therefore systematic approach of
developing software product must be applied.
Software product relies on software process for It is important than software product. Multiuser
its stability quality and control Only one no lack of user interface.
person uses the process, hence lack of user
interface

1.6 EMERGENCE OF SOFTWARE ENGINEERING


These innovations and experiences of programming which have given their contribution in the
software engineering.
1.6.1 Early Computer Programming: Early commercial computers were too slow in speed and
very simple processing activity took significant computation time on those computers. Because ,
programs are very small in size and were not complicated. Those programs were mostly written
in assembly programming language with the length of the program of few hundred lines.
Different programmers are writing their programs in their own way and their own style. This
type of ad-hoc programming writing style is called exploratory programming style.
1.6.2 High-Level Programming languages Computers became more faster with the invention
and use of the semiconductors in the computers. With this powerful computers are available, that
makes possible to write more complex and large programs.
High level languages such as FORTRAN (FORmula TRANslation), COBOL (Common
Business Oriented Language) etc. are invented and reduce the effort of the software
development, because they are easy to learn, instructions are mostly in the English language and
they make possible where one line of high-level instruction is same as two or three lines of low-
level language programming code.
1.6.3 Control or Flow-based programming: Exploratory programming style is not sufficient
for the program having complex logic and larger size and they found difficult to find the errors,
and understanding the logic of the programs written.
To deal with this senior programmers advised to pay more attention on the control flow of the
program. It indicates the sequence in which the program statements are executed. Flow-chart is a
technique developed during this time to represent the programming sequence in pictorial way,
which provides ease explanation about control flow sequence of the program.
Even today this technique is used to represent the algorithm logic in easy way of representation..
Newer programming languages has adopted structured programming syntax to manage flow-
control of the program such as, if – then – else, do-while etc. The programs written in this type of
newer languages are more readable, their flowcharts are easy to understand and the programs are
more optimized in terms of processing and memory utilization (compare to using unconditional
jumps). This type programming languages which uses structured way of programming flow-
control are called structured programming languages. PASCAL, MODULA, C-Language are the
examples of structured programming languages.
1.6.4 Data-Structure Oriented programming When the ICs (Integrated Circuits) are invented
and used in the computer system, they become more powerful to solve the complex problem.
Programming languages based on control-flow would not be satisfactorily used to handle these
problems and more effective languages were needed.
These programs needs to pay much attention to the design of the data structures of the program
than to the design of the control flow of structure of programming.
Design techniques based on this principle are called data-structure oriented design technique. For
example, in the programming language like C, we can design our own data type like students,
customer, employee etc. using structure.
1.6.5 Data Flow-Oriented programming When the VLSI (Very Large-Scale Integration
Circuits) are implemented to the computer systems, they become more powerful and still faster
than its previous generation.
More effective techniques for designing software products and very soon data flow-oriented
design was proposed. This design insists that the major data items handled by a software product
is identified first and then the processing required on such data items has to be identified.
The processes of a software exchange data items, and its diagrammatic representation is called
data flow diagram. DFD was considered to be a generic technique, which can be used in the
modeling of all different types of software.
Example: The following example we have shown Data Flow modeling for car assembly plant.
In this Diagram Engine Store, Chassis Store etc. are considered as a data store from where we
take the data, whereas Fit Engine, Fit Doors etc. (which are denoted in the circle) are called
processes.
1.6.6 Object-Oriented programming: Data flow design technique is evolved by Object
Oriented design. In this any real word entity is represented in the form of objects, which can
have some data associated with it is called properties and actions which an object can perform is
represented as methods. The process of identifying properties and methods is called data
abstraction.
Object Oriented technique gain popularity because of its simplicity, reusability of design and
code, lesser development time and ease of maintenance.

It Summarize the evolution in the software industry. Here, we have pictorially shown how the
software design and programming technique methodologies have been improved from
Exploratory Design to Object-Oriented design.

1.7 Software Development Life Cycle/Process model/ Software Development Life Cycle: -

Software Development Life Cycle, SDLC for short, is a well-defined, structured sequence of
stages in software engineering to develop the intended software product. it is a team of engineers
must incorporate a development strategy that encompasses the process, method and tools layers.
Each phase has various activities to develop the software product. It also specifies the order in
which each phase must be executed.
A software life cycle model is either a descriptive or prescriptive characterization of how
software is or should be developed. A descriptive model describes the history of how a particular
software system was developed. The software development paradigm helps developer to select a
strategy to develop the software.
A software development paradigm has its own set of tools, methods and procedures, which are
expressed clearly and defines software development life cycle.

Definition: Software Development Life Cycle (SDLC) is a process used by software industry to
design, develop and test high quality software. The SDLC aims to produce a high-quality
software that meets or exceeds customer expectations, reaches completion within times and cost
estimates.
SDLC is the acronym of Software Development Life Cycle. It is also called as Software
development process. The software development life cycle (SDLC) is a framework defining
tasks performed at each step in the software development process. ISO/IEC 12207 is an
international standard for software life-cycle processes. It aims to be the standard that defines all
the tasks required for developing and maintaining software .
What is SDLC?
SDLC is a process followed for a software project, within a software organization. It consists of
a detailed plan describing how to develop, maintain, replace and alter or enhance specific
software. The life cycle defines a methodology for improving the quality of software and the
overall development process.

1.7.1 BASIC ACTIVITIES THAT CAN BE CARIED OUT IN LIFE CYCLE MODEL
ARE:
A few of software development paradigms or process models are defined in Fig:-1.1:
1. Waterfall model or linear sequential model or classic life cycle model: -
Sometimes called the classic life cycle or the waterfall model, the linear sequential model
suggests a systematic, sequential approach5 to software development that begins at the system
level and progresses through analysis, design, coding, testing, and maintenance.

Fig 1.1
Software requirements analysis: The requirements gathering process is intensified and focused
specifically on software. To understand the nature of the program(s) to be built, the software
engineer ("analyst") must understand the information domain for the software, as well as
required function, behavior, performance, and interface. Requirements for both the system and
the software are documented and reviewed with the customer.
Design: Software design is actually a multi-step process that focuses on four distinct attributes of
a program: data structure, software architecture, interface representations, and procedural
(algorithmic) detail. The design process translates requirements into a representation of the
software that can be assessed for quality before coding begins. Like requirements, the design is
documented and becomes part of the software configuration.
Code generation: The design must be translated into a machine-readable form. The code
generation step performs this task. If design is performed in a detailed manner, code generation
can be accomplished mechanistically.
Testing: Once code has been generated, program testing begins. The testing process focuses on
the logical internals of the software, ensuring that all statements have been tested, and on the
functional externals; that is, conducting tests to uncover errors and ensure that defined input will
produce actual results that agree with required results.

Maintenance: Software will undoubtedly undergo change after it is delivered to the customer (a
possible exception is embedded software). Change will occur because errors have been
encountered, because the software must be adapted to accommodate changes in its external
environment (e.g., a change required because of a new operating system or peripheral device), or
because the customer requires functional or performance enhancements. Software
support/maintenance reapplies each of the preceding phases to an existing program rather than a
new one.
Advantages of waterfall model: -
 This model is simple and easy to understand and use.
 Waterfall model works well for smaller projects where requirements are very well
understood.
 Each phase proceeds sequentially.
 Documentation is produced at every stage of the software's development. This makes
understanding the product designing procedure, simpler.
 After every major stage of software coding, testing is done to check the correct running
of the code. help us to control schedules and budgets.

Disadvantages of waterfall model: -


 Not a good model for complex and object-oriented projects.
 Poor model for long and ongoing projects.
 Not suitable for the projects where requirements are at a moderate to high risk of
changing.
 High amounts of risk and uncertainty.
 Customer can see working model of the project only at the end. after reviewing of the
working model if the customer gets dissatisfied then it causes serious problem.
 You cannot go back a step if the design phase has gone wrong, things can get very
complicated in the implementation phase.
1.7.2 RAPID APPLICATION MODEL
Rapid application development (RAD) is a software development methodology that uses
minimal planning in favor of rapid prototyping.
A prototype is a working model that is functionally equivalent to a component of the product. In
RAD model, the functional modules are developed in parallel as prototypes and are integrated to
make the complete product for faster product delivery.
 It is easier to incorporate the changes within the development process.
 It follow iterative and incremental model and have small teams comprising of developers,
domain experts, customer representatives and other IT resources working progressively
on their component or prototype.
 It successful is to make sure that the prototypes developed are reusable.
 RAD process enables a development team to create a fully functional system within very
short time periods (e.g., 􀏲􀏲 to 90 days).
 Used primarily for information systems applications, the RAD approach encompasses the
following phases shown in

Fig:-1.3:

Business modeling. The information flow among business functions is modeled in a way that
answers the following questions: What information drives the business process? What
information is generated? Who generates it? Where does the information go? Who processes it?
Data modeling. The information flow defined as part of the business modeling phase is refined
into a set of data objects that are needed to support the business. The characteristics (called
attributes) of each object are identified and the relationships between these objects defined.
Process modeling. The data objects defined in the data modeling phase are transformed to
achieve the information flow necessary to implement a business function. Processing
descriptions are created for adding, modifying, deleting, or retrieving a data object.
Application generation. RAD assumes the use of fourth generation techniques. Rather than
creating software using conventional third generation programming languages the RAD process
works to reuse existing program components (when possible) or create reusable components
(when necessary). In all cases, automated tools are used to facilitate construction of the software.
Testing and turnover. Since the RAD process emphasizes reuse, many of the program
components have already been tested. This reduces overall testing time. However, new
components must be tested and all interfaces must be fully exercised.

RAD approach has drawbacks:


 For large but scalable projects, RAD requires sufficient human resources to create the
right number of RAD teams.
 RAD requires developers and customers who are committed to the rapid-fire activities
necessary to get a system complete in a much-abbreviated time frame. If commitment is
lacking from either constituency, RAD projects will fail.
 Not all types of applications are appropriate for RAD. If a system cannot be properly
modularized, building the components necessary for RAD will be problematic. If high
performance is an issue and performance is to be achieved through tuning the interfaces
to system components, the RAD approach may not work.
 RAD is not appropriate when technical risks are high. This occurs when a new
application makes heavy use of new technology or when the new software requires a high
degree of interoperability with existing computer programs.

Advantages of the RAD model:


 Reduced development time.
 Increases re usability of components
 Quick initial reviews occur
 Encourages customer feedback
 Integration from very beginning solves a lot of integration issues.
Disadvantages of RAD model:
 Depends on strong team and individual performances for identifying business
requirements.
 Only system that can be modularized can be built using RAD
 Requires highly skilled developers/designers.
 High dependency on modeling skills
 Inapplicable to cheaper projects as cost of modeling and automated code generation is
very high.
When to use RAD model:
 RAD should be used when there is a need to create a system that can be modularized in
2-3 months of time.
 It should be used if there is high availability of designers for modeling a􀏲d the budget is
high enough to afford their cost along with the cost of automated code generating tools.
 RAD SDLC model should be chosen only if resources with high business knowledge are
available and there is a need to produce the system in a short span of time (2-3 months).

1.7.3 Spiral Model :


The spiral model, originally proposed by Boehm, is an evolutionary software process model that
couples the iterative nature of prototyping with the controlled and systematic aspects of the linear
sequential model. It provides the potential for rapid development of incremental versions of the
software.
Using the spiral model, software is developed in a series of incremental releases. During early
iterations, the incremental release might be a paper model or prototype. During later iterations,
increasingly more complete versions of the engineered system are produced.
A spiral model is divided into a number of framework activities, also called task regions. Project
entry point axis is defined this axis represents starting point for different types of project. Every
framework activities represent one section of the spiral path. As the development process starts,
the software team perform activities that are indirect by a path around the spiral model in a
clockwise direction. It begins at the center of spiral model.
Typically, there are between three and six task regions. In blow figure depicts a spiral model that
contains six task regions:
 Customer communication—tasks required to establish effective communication
between developer and customer.
 Planning—tasks required to define resources, time lines, and other project related
information.
 Risk analysis—tasks required to assess both technical and management risks.
 Engineering—tasks required to build one or more representations of the application.
 Construction and release—tasks required to construct, test, install, and provide user
support(e.g., documentation and training).
 Customer evaluation—tasks required to obtain customer feedback based on evaluation
of the software representations created during the engineering stage and implemented
during the installation stage.
Fig 1.6
Advantages of Spiral model: -
 High amount of risk analysis hence, avoidance of Risk is enhanced.
 Good for large and mission-critical projects.
 Strong approval and documentation control.
 Additional Functionality can be added at a later date.
 Software is produced early in the software life cycle.

Disadvantages of Spiral model: -


 Can be a costly model to use.
 Risk analysis requires highly specific expertise.
 Projects success is highly dependent on the risk analysis phase.
 Doesn’t work well for smaller projects.

When to use Spiral model:


 When costs and risk evaluation is important.
 For medium to high-risk projects.
 Long-term project commitment unwise because of potential changes to economic
priorities.
 Users are unsure of their needs.
 Requirements are complex.
 New product line.
 Significant changes are expected (research and exploration).

1.7.4 Agile SDLC model is a combination of iterative and incremental process models with
focus on process adaptability and customer satisfaction by rapid delivery of working software
product. Agile Methods break the product into small incremental builds. These builds are
provided in iterations. Each iteration typically lasts from about one to three weeks. Every
iteration involves cross functional teams working simultaneously on various areas like –
 Planning
 Requirements Analysis
 Design
 Coding
 Unit Testing and
 Acceptance Testing.
At the end of the iteration, a working product is displayed to the customer and important
stakeholders.

What is Agile?

Agile model believes that every project needs to be handled differently and the existing methods
need to be tailored to best suit the project requirements. In Agile, the tasks are divided to time
boxes (small time frames) to deliver specific features for a release.

Iterative approach is taken and working software build is delivered after each iteration. Each
build is incremental in terms of features; the final build holds all the features required by the
customer.

Here is a graphical illustration of the Agile Model −


Agile Manifesto principles −

 Individuals and interactions − In Agile development, self-organization and motivation


are important, as are interactions like co-location and pair programming.
 Working software − Demo working software is considered the best means of
communication with the customers to understand their requirements, instead of just
depending on documentation.
 Customer collaboration − As the requirements cannot be gathered completely in the
beginning of the project due to various factors, continuous customer interaction is very
important to get proper product requirements.
 Responding to change − Agile Development is focused on quick responses to change
and continuous development.

Agile Vs Traditional SDLC Models

Agile is based on the adaptive software development methods, whereas the traditional SDLC
models like the waterfall model is based on a predictive approach. Predictive teams in the
traditional SDLC models usually work with detailed planning and have a complete forecast of
the exact tasks and features to be delivered in the next few months or during the product life
cycle.

Predictive methods entirely depend on the requirement analysis and planning done in the
beginning of cycle. Any changes to be incorporated go through a strict change control
management and prioritization.

Agile uses an adaptive approach where there is no detailed planning and there is clarity on
future tasks only in respect of what features need to be developed. There is feature driven
development and the team adapts to the changing product requirements dynamically. The
product is tested very frequently, through the release iterations, minimizing the risk of any major
failures in future.

Customer Interaction is the backbone of this Agile methodology, and open communication
with minimum documentation are the typical features of Agile development environment. The
agile teams work in close collaboration with each other and are most often located in the same
geographical location.

The advantages of the Agile Model are as follows −

 Is a very realistic approach to software development.


 Promotes teamwork and cross training.
 Functionality can be developed rapidly and demonstrated.
 Resource requirements are minimum.
 Suitable for fixed or changing requirements
 Delivers early partial working solutions.
 Good model for environments that change steadily.
 Minimal rules, documentation easily employed.
 Enables concurrent development and delivery within an overall planned context.
 Little or no planning required.
 Easy to manage.
 Gives flexibility to developers.

The disadvantages of the Agile Model are as follows −

 Not suitable for handling complex dependencies.


 More risk of sustainability, maintainability and extensibility.
 An overall plan, an agile leader and agile PM practice is a must without which it will not
work.
 Strict delivery management dictates the scope, functionality to be delivered, and
adjustments to meet the deadlines.
 Depends heavily on customer interaction, so if customer is not clear, team can be driven
in the wrong direction.
 There is a very high individual dependency, since there is minimum documentation
generated.
 Transfer of technology to new team members may be quite challenging due to lack of
documentation.

You might also like