Unit -1 Ntroduction to Software Engineering1
Unit -1 Ntroduction to Software Engineering1
NATURE OF SOFTWARE:
Software is a set of instructions, data or programs used to operate computers and execute specific
tasks. Software is a generic term used to refer to applications, scripts and programs that run on a
device.
The software is an instruction or computer program that when executed provides desired
features, function, and performance. A data structure that enables the program to adequately
manipulate information and documents that describe the operation and use of the program.
Characteristics of software:
There is some characteristic of software which is given below:
1. Reliability: The ability of the software to consistently perform its intended tasks without
unexpected failures or errors.
2. Usability: How easily and effectively users can interact with and navigate through the
software.
3. Efficiency: The optimal utilization of system resources to perform tasks on time.
4. Maintainability: How easily and cost-effectively software can be modified, updated, or
extended.
5. Portability: The ability of software to run on different platforms or environments
without requiring significant modifications.
Changing Nature of Software:
Nowadays, seven broad categories of computer software present continuing challenges for
software engineers. Which is given below:
2. System Software: System software is a collection of programs that are written to service
other programs. Some system software processes complex but determinate, information
structures.
3. Application Software: Application software is defined as programs that solve a specific
business need. Application in this area processes business or technical data in a way that
facilitates business operation or management technical decision-making. In addition to
conventional data processing applications, application software is used to control
business functions in real-time.
4. Engineering and Scientific Software: This software is used to facilitate the engineering
function and task. however modern applications within the engineering and scientific area
are moving away from conventional numerical algorithms. Computer-aided design,
system simulation, and other interactive applications have begun to take a real-time and
even system software characteristic.
4. Embedded Software: Embedded software resides within the system or product and is
used to implement and control features and functions for the end-user and for the system
itself. Embedded software can perform limited and esoteric functions or provide
significant function and control capability.
5. Product-line Software: Designed to provide a specific capability for use by many
customers, product-line software can focus on the limited and esoteric marketplace or
address the mass consumer market.
6. Web Application: It is a client-server computer program that the client runs on the web
browser. In their simplest form, Web apps can be little more than a set of linked hypertext
files that present information using text and limited graphics. However, as e-commerce
and B2B applications grow in importance. Web apps are evolving into a sophisticated
computing environment that not only provides a standalone feature, computing function,
and content to the end user.
7. Artificial Intelligence Software: Artificial intelligence software makes use of a
nonnumerical algorithm to solve a complex problem that is not amenable to computation
or straightforward analysis. Applications within this area include robotics, expert
systems, pattern recognition, artificial neural networks, theorem proving, and game
playing.
SOFTWARE ENGINEERING:
Software Engineering is the process of designing, developing, testing, and maintaining
software. It is a systematic and disciplined approach to software development that aims to create
high-quality, reliable, and maintainable software.
1. Software engineering includes a variety of techniques, tools, and methodologies,
including requirements analysis, design, testing, and maintenance.
2. It is a rapidly evolving field, and new tools and technologies are constantly being
developed to improve the software development process.
3. By following the principles of software engineering and using the appropriate tools and
methodologies, software developers can create high-quality, reliable, and maintainable
software that meets the needs of its users.
4. Software Engineering is mainly used for large projects based on software systems rather
than single programs or applications.
5. The main goal of Software Engineering is to develop software applications for improving
quality, budget, and time efficiency.
6. Software Engineering ensures that the software that has to be built should be consistent,
correct, also on budget, on time, and within the required requirements.
Software Processes is a coherent set of activities for specifying, designing, implementing and testing
software systems. A software process model is an abstract representation of a process that presents a
description of a process from some particular perspective.
One of the basic notions of the software development process is SDLC models which stands for
Software Development Life Cycle models. There are many development life cycle models that have
been developed in order to achieve different required objectives. The models specify the various stages
of the process and the order in which they are carried out. The most used, popular and important SDLC
models are given below:
Waterfall model
V model
Incremental model
RAD model
Agile model
Iterative model
Spiral model
Prototype model
Waterfall Model:
The waterfall model is a breakdown of project activities into linear sequential phases, where each phase
depends on the deliverable of the previous one and corresponds to a specialization of tasks. The
approach is typical for certain areas of engineering design.
V Model:
The V-model represents a development process that may be considered an extension of the waterfall
model and is an example of the more general V-model. Instead of moving down in a linear way, the
process steps are bent upwards after the coding phase, to form the typical V shape. The V-Model
demonstrates the relationships between each phase of the development life cycle and its associated
phase of testing.
Incremental model:
The incremental build model is a method of software development where the model is designed,
implemented and tested incrementally until the product is finished. It involves both development and
maintenance. The product is defined as finished when it satisfies all of its requirements. Each iteration
passes through the requirements, design, coding and testing phases.
Iterative Model:
The iterative approach begins by specifying and implementing just part of the software, which can then
be reviewed and prioritized in order to identify further requirements. This iterative process is then
repeated by delivering a new version of the software for each iteration.
RAD Model:
Rapid application development (RAD) is often referred as the adaptive software development. RAD is
an incremental prototyping approach to software development that end users can produce better
feedback when examining a live system, as opposed to working strictly with documentation. It puts less
emphasis on planning and more emphasis on an adaptive process.
Spiral Model:
A spiral model looks like a spiral with many loops. The exact number of loops of the spiral is unknown
and can vary from project to project. This model supports risk handling, and the project is delivered in
loops. Each loop of the spiral is called a Phase of the software development process.
The initial phase of the spiral model in the early stages of Waterfall Life Cycle that is needed to
develop a software product. The exact number of phases needed to develop the product can be varied
by the project manager depending upon the project risks. As the project manager dynamically
determines the number of phases, so the project manager has an important role to develop a product
using a spiral model.
Agile Model:
The Agile movement proposes alternatives to traditional project management. Agile approaches are
typically used in software development to help businesses respond to unpredictability which refer to a
group of software development methodologies based on iterative development, where requirements and
solutions evolve through collaboration between self-organizing cross-functional teams.
GENERIC PROCESS MODEL:
A process was defined as a collection of work activities, actions, and tasks that are performed when some
work product is to be created. Each of these activities, actions, and tasks reside within a framework or
model that defines their relationship with the process and with one another.
A generic process framework for software engineering defines five framework activities:
Communication
Planning
Modeling
Construction
Deployment
Communication:
Planning:
In this step, we plan the steps for project development. After completing the final discussion, we report on
the project.
Modelling:
In this step, we create a model to understand the project in the real world. We showcase the model to all
the developers. If changes are required, we implement them in this step.
Construction:
If any code is required for the project development, we implement it in this phase.
We also test the project in this phase.
Deployment:
In this phase, we submit the project to the clients for their feedback and add any missing requirements.
These five framework activities are used for all software developments independent of the application
domain, the size of the project, complexity or the efforts, etc. For most of the software projects, these
framework activities are applied iteratively where each of the iterations produces a subset of the overall
functionality and features of the software
Linear process flow: It executes each activity listed above in sequence form.
Iterative Process flow: This flow repeats one or more activities that are listed above before
starting the next activity.
Evolutionary Process flow: This flow carries out the activities listed above in a circular manner.
Each circle leads to the more complete version of the software
Parallel process flow: This flow executes the activities listed above in parallel with each other
i.e. modeling for one aspect of the software in parallel to another aspect of the software.
Generic Process framework provides a list of generic activities to most of the software models. But each
model will treat its activities in a different manner according to the project suitability and teams.
The name 'prescriptive' is given because the model prescribes a set of activities, actions, tasks, quality
assurance and change the mechanism for every project.
The waterfall model is also called as 'Linear sequential model' or 'Classic life cycle model'.
In this model, each phase is fully completed before the beginning of the next phase.
This model is used for the small projects.
In this model, feedback is taken after each phase to ensure that the project is on the right path.
Testing part starts only after the development is complete.
This model is not good for complex and object oriented projects.
It is a poor model for long projects.
The problems with this model are uncovered, until the software testing.
The amount of risk is high.
The incremental model combines the elements of waterfall model and they are applied in an iterative
fashion.
The first increment in this model is generally a core product.
Each increment builds the product and submits it to the customer for any suggested modifications.
The next increment implements on the customer's suggestions and add additional requirements in the
previous increment.
This process is repeated until the product is finished.
For example, the word-processing software is developed using the incremental model.
This model is flexible because the cost of development is low and initial product delivery is faster.
It is easier to test and debug during the smaller iteration.
The working software generates quickly and early during the software life cycle.
The customers can respond to its functionalities after every increment.
RAD model:
1. Business Modeling
Business modeling consist of the flow of information between various functions in the project.
For example what type of information is produced by every function and which are the functions to
handle that information.
A complete business analysis should be performed to get the essential business information.
2. Data modeling
The information in the business modeling phase is refined into the set of objects and it is essential for
the business.
The attributes of each object are identified and define the relationship between objects.
3. Process modeling
The data objects defined in the data modeling phase are changed to fulfil the information flow to
implement the business model.
The process description is created for adding, modifying, deleting or retrieving a data object.
4. Application generation
In the application generation phase, the actual system is built.
To construct the software the automated tools are used.
5. Testing and turnover
The prototypes are independently tested after each iteration so that the overall testing time is
reduced.
The data flow and the interfaces between all the components are are fully tested. Hence, most of the
programming components are already tested.
PERSONAL SOFTWARE PROCESS (PSP) AND TEAM SOFTWARE PROCESS (TSP):
Software is the set of instructions in the form of programs to govern the computer system and process
the hardware components. To produce a software product a set of activities is used. This set is called
a software process.
The personal software process (PSP) is focused on individuals to improve their performance. The PSP
is an individual process, and it is a bottom-up approach to software process improvement. The PSP is a
prescriptive process, it is a more mature methodology with a well-defined set of tools and techniques.
Following are the key features of the Personal Software Process (PSP):
Process-focused: PSP is a process-focused methodology that emphasizes the importance of
following a disciplined approach to software development.
Personalized: PSP is personalized to an individual’s skill level, experience, and work habits. It
recognizes that individuals have different strengths and weaknesses, and tailors the process to meet
their specific needs.
Metrics-driven: PSP is metrics-driven, meaning that it emphasizes the collection and analysis of
data to measure progress and identify areas for improvement.
Incremental: PSP is incremental, meaning that it breaks down the development process into
smaller, more manageable pieces that can be completed in a step-by-step fashion.
Quality-focused: PSP is quality-focused, meaning that it emphasizes the importance of producing
high-quality software that meets user requirements and is free of defects.
Improved quality: PSP emphasizes the importance of producing high-quality software that meets
user requirements and is free of defects. By collecting and analyzing data throughout the
development process, individuals can identify and eliminate sources of errors and improve the
quality of their work.
Personalized approach: PSP is tailored to an individual’s skill level, experience, and work habits,
which can help individuals work more efficiently and effectively.
Improved estimation: PSP emphasizes the importance of accurate estimation, which can help
individuals plan and execute projects more effectively.
Continuous improvement: PSP promotes a culture of continuous improvement, which can help
individuals learn from past experiences and apply that knowledge to future projects.
Complex: PSP can be complex, particularly for individuals who are not familiar with software
engineering concepts or who have limited experience in software development.
Limited to individual use: PSP is designed for individual use, which means that it may not be
suitable for team-based software development projects.
Metrics-driven: TSP is metrics-driven, meaning that it emphasizes the collection and analysis of
data to measure progress, identify areas for improvement, and make data-driven decisions.
Incremental: TSP is incremental, meaning that it breaks down the development process into
smaller, more manageable pieces that can be completed in a step-by-step fashion.
Following are the key advantage of the Team Software Process (TSP):
Improved productivity: TSP provides a structured approach to software development that can help
teams improve their productivity by breaking down the development process into smaller, more
manageable steps.
Improved quality: TSP emphasizes the importance of producing high-quality software that meets
user requirements and is free of defects. By collecting and analyzing data throughout the
development process, teams can identify and eliminate sources of errors and improve the quality of
their work.
Team collaboration: TSP promotes team collaboration, which can help teams work more efficiently
and effectively by leveraging the skills and expertise of all team members.
Improved estimation: TSP emphasizes the importance of accurate estimation, which can help
teams plan and execute projects more effectively.
Continuous improvement: TSP promotes a culture of continuous improvement, which can help
teams learn from past experiences and apply that knowledge to future projects.
Complex: TSP can be complex, particularly for teams that are not familiar with software
engineering concepts or who have limited experience in software development.
Heavy documentation: TSP requires a significant amount of documentation throughout the
development process, which can be burdensome for some teams.
Requires discipline: TSP requires teams to follow a disciplined approach to software development,
which can be challenging for some teams who prefer a more flexible approach.
Cost: TSP can be costly to implement, particularly if teams need to invest in training or software
tools to support the methodology.
Difference between Personal Software Process (PSP) and Team Software Process (TSP):
Project
Suitability PSP is more suited for large projects. TSP is more suited for small projects.
Project Phases PSP projects are typically TSP projects are typically completed in
completed in one phase. multiple phases.
Language Level PSP is a high-level language and it is TSP is a low-level language and it is
easy to learn and use. difficult to learn and use.
Portability PSP is a portable language and it can TSP is a platform-dependent language and it
Parameters PSP TSP
Compilation PSP is an interpreted language and it TSP is a compiled language and it needs to
does not need to be compiled. be compiled before it can be run.
Cost PSP is a free language and it can be TSP is a commercial language and it is not
downloaded from the internet. available for free.
Source PSP is an open-source language and TSP is a closed-source language and it is not
Availability it is available to everyone. available to everyone.
PROCESS TECHNOLOGY:
Process technology refers to the use of machines, equipment, and devices for operations for creating and
delivering products/services. In simple words, process technology is the application of equipment and
machinery to any operations process. Process technologies add value to the creation of any product or
service. Here, you should note that process technology is different from product or service technology.
Computer Numerically Controlled (CNC) Machine Tools: These tools perform metal-cutting and
forming operations, which are controlled by a computer.
Robots: These are ‘automatic position-controlled re programmable multi-function manipulators’ that
perform several tasks related to the handling of materials, parts, tools, or devices through variable
programmed motions.
Automated Guided Vehicles (AGVs): These are small, independently powered vehicles, used to
move materials to and from value-adding operations.
Flexible Manufacturing Systems (FMSs): These are computer-controlled semi-independent
workstations, connected by automated material handling and machine loading.
Computer-integrated Manufacturing (CIM): It is a manufacturing approach that uses computers to
monitor and control the entire production process. It integrates different individual processes to
exchange information with each other and initiate actions.
Information-processing Technology:
It includes devices, used to collect, manipulate, store, or distribute information. The several IT methods,
which are used for this purpose involve:
Local Area Network (LAN) helps in interconnecting computers within a limited area such as a
residence, school, laboratory, office, etc.
The Internet helps in accessing the World Wide Web (www), which is the distributed
hypermedia/hypertext system.
The technology is used to establish an interface between customers, staff, and the technology itself. It
either provides the immediate interface between an organization and its customers, such as in the case of a
bank’s Automated Teller Machine (ATM), or facilitates human interaction with customers.
Requirements engineering (RE) refers to the process of defining, documenting, and maintaining
requirements in the engineering design process. Requirement engineering provides the appropriate
mechanism to understand what the customer desires, analyzing the need, and assessing feasibility,
negotiating a reasonable solution, specifying the solution clearly, validating the specifications and
managing the requirements as they are transformed into a working system. Thus, requirement engineering
is the disciplined application of proven principles, methods, tools, and notation to describe a proposed
system's intended behavior and its associated constraints.
1. Feasibility Study
2. Requirement Elicitation and Analysis
3. Software Requirement Specification
4. Software Requirement Validation
5. Software Requirement Management
1. Feasibility Study:
The objective behind the feasibility study is to create the reasons for developing the software that is
acceptable to users, flexible to change and conformable to established standards.
Types of Feasibility:
1. Technical Feasibility - Technical feasibility evaluates the current technologies, which are needed
to accomplish customer requirements within the time and budget.
2. Operational Feasibility - Operational feasibility assesses the range in which the required
software performs a series of levels to solve business problems and customer requirements.
3. Economic Feasibility - Economic feasibility decides whether the necessary software can
generate financial profits for an organization.
Analysis of requirements starts with requirement elicitation. The requirements are analyzed to identify
inconsistencies, defects, omission, etc. We describe requirements in terms of relationships and also
resolve conflicts if any.
The models used at this stage include ER diagrams, data flow diagrams (DFDs), function decomposition
diagrams (FDDs), data dictionaries, etc.
o Data Flow Diagrams: Data Flow Diagrams (DFDs) are used widely for modeling the
requirements. DFD shows the flow of data through a system. The system may be a company, an
organization, a set of procedures, a computer hardware system, a software system, or any
combination of the preceding. The DFD is also known as a data flow graph or bubble chart.
o Data Dictionaries: Data Dictionaries are simply repositories to store information about all data
items defined in DFDs. At the requirements stage, the data dictionary should at least define
customer data items, to ensure that the customer and developers use the same definition and
terminologies.
o Entity-Relationship Diagrams: Another tool for requirement specification is the entity-
relationship diagram, often called an "E-R diagram." It is a detailed logical representation of the
data for the organization and uses three main constructs i.e. data entities, relationships, and their
associated attributes.
New requirements emerge during the process as business needs a change, and a better understanding of
the system is developed.
The priority of requirements from different viewpoints changes during development process.
The business and technical environment of the system changes during the development.
Software Requirements: Largely software requirements must be categorized into two categories:
2. Usability: A software has smart usability if completely different classes of users (i.e. knowledgeable
and novice users) will simply invoke the functions of the merchandise.
3. Re-usability: A software has smart re-usability if completely different modules of the merchandise
will simply be reused to develop new merchandise.
4. Correctness: Software is correct if completely different needs as laid out in the SRS document are
properly enforced.
5. Maintainability: A software is reparable, if errors may be simply corrected as and once they show
up, new functions may be simply added to the merchandise, and therefore the functionalities of the
merchandise may be simply changed, etc
6. Reliability: Software is more reliable if it has fewer failures. Since software engineers do not
deliberately plan for their software to fail, reliability depends on the number and type of mistakes
they make. Designers can improve reliability by ensuring the software is easy to implement and
change, by testing it thoroughly, and also by ensuring that if failures occur, the system can handle
them or can recover easily.
7. Efficiency. The more efficient software is, the less it uses of CPU-time, memory, disk space,network
bandwidth, and other resources. This is important to customers in order to reduce their costs of
running the software, although with today’s powerful computers, CPU time, memory and disk usage
are less of a concern than in years gone by.
REVIEW METRICS:
Review metrics provide software teams insight into what’s happening in the code review process.
Reaction time is the average number of hours it takes for a reviewer to respond to a set of PRs as a
reviewer.
Involvement is the percentage of pull requests that a reviewer participated in.
Influence is the ratio of follow-on commits made after a reviewer commented.
Review coverage is the percentage of hunks commented on by a reviewer.
---------------------------------------------XXXXXXXXXXXXXXXXX---------------------------------------------