Software Engineering notes
Software Engineering notes
Software Development
Software engineering is nothing but a disciplined approach to develop software.
Now we will look at some of the activities involved in the course of software
development.
The activities involved in software development can broadly be divided into two
major categories.
first is construction and second is management.
The construction activities are those that are directly related to the construction or
development of the software.
While the management activities are those that complement the process of
construction in order to perform construction activities smoothly and
effectively.
Construction
The construction activities are those that directly related to the development of
software,
e.g. gathering the requirements of the software, develop design, implement and test
the software etc. Some of the major construction activities are listed below.
Requirement Gathering
Design Development
Coding
Testing
Management
Management activities are kind of umbrella activities that are used to smoothly and
successfully perform the construction activities e.g. project planning, software
quality assurance etc. Some of the major management activities are listed below.
Management activities support construction by helping it run smoothly and
successfully.
Management
Management activities protect and guide the construction process, ensuring it runs
smoothly. As shown in Figure 1, these activities surround the construction work.
They focus on managing the process, not on building itself.
As mentioned earlier, management activities are like a protective cover around the
construction activities, making sure the construction process goes smoothly. This
idea is shown in Figure 1, where you can see that construction is surrounded by
management activities. This means that all construction work is guided by certain
rules and processes. These rules are about managing the construction work, not the
actual building process.
Processes: The processes are set of key process areas (KPAs) for effectively
manage and deliver quality software in a cost effective manner.
The processes define the tasks to be
performed and the order in which they are to be performed. Every task has some
deliverables and every deliverable should be delivered at a particular milestone.
Processes: Processes are important steps that help manage and deliver quality
software in an efficient and cost-effective way. They outline the tasks that need to
be done and the order in which to do them. Each task has specific results, and these
results must be completed at certain points in the project.
Methods: Methods provide the technical “how-to’s” to carry out these tasks. There
could
be more than one technique to perform a task and different techniques could be
used in
different situations.
Methods are the "how-to’s" or techniques used to complete the tasks. There can be
different ways to do the same task, and different methods may be used depending
on the situation.
Tools: Tools provide automated or semi-automated support for software processes,
methods, and quality control.
Tools: Tools are programs or systems that help make the software development
process faster and easier by automating some tasks and checking quality.
Software development activities can be done in a repeated cycle, and this cycle is
called the software development loop. This means the process of developing
software is done in steps that are repeated until the software is complete and
working properly.
Problem Definition: In this stage, we figure out what problem the software will
solve. We make sure we understand exactly what is needed for the software before
we start building it
Technical Development: In this stage we try to find the solution of the problem on
technical grounds and base our actual implementation on it. This is the stage where
a new
system is actually developed that solves the problem defined in the first stage.
Solution Integration: If there are already developed system(s) available with
which our
new system has to interact then those systems should also be the part of our new
system.
All those existing system(s) integrate with our new system at this stage.
Technical Development: In this stage, we figure out how to solve the problem
using technology and start building the software to do that.
Solution Integration: If there are other systems that our new software needs to
work with, we make sure they connect and work together properly.
Status Quo: After going through the previous three stages successfully, when we
actually
deployed the new system at the user site then that situation is called status quo. But
once
we get new requirements then we need to change the status quo.
Status Quo: After completing the previous stages and successfully installing the
new system for the user, this situation is called the "status quo." But once we
receive new requirements, we have to update or modify the current system to
meet those new needs.
After receiving new requirements, we repeat all the steps in the software
development loop. The software created through this process is flexible, meaning
it can be easily updated and integrated with existing systems.
Software Construction
Here once again look at the construction activities of the software from a different
perspective. This section provides with a sequence of questions that have to answer
in
different stages of software development.
Vision: In this step, we figure out why we are building the software and what
business goals we want to achieve with it.
Development: Here, we decide how the system will be designed, how it will be
built, and how we will test it to make sure it works.
Software engineering
The term is made up of two words: software and engineering.
Software is more than just a program. A program is executable code that
performs a specific task. Software is a collection of executable code, libraries, and
documentation. When software is created for a specific purpose, it is called a
software product.
Engineering, on the other hand, is the process of developing products using clear,
scientific principles and methods.
Software engineering is a field of engineering focused on creating software
products using clear methods, principles, and steps. The goal is to produce
software that is both efficient and reliable.
Definitions:
IEEE defines software engineering as:
1. Using a careful and organized approach to develop, run, and
maintain software. In simple terms, it means applying engineering to
create software.
2. Studying the methods mentioned above.
Fritz Bauer, a German computer scientist, defines software engineering as:
Using strong engineering principles to create software that works well, is
reliable, and runs smoothly on real machines, all while being cost-effective.
Software Evolution
Software evolution is the process of developing and improving a software product
using software engineering methods. This includes both the first development of
the software and its maintenance and updates until it fully meets the required
goals.
Nature of software
Computer Science
• Focus: Creating and improving computer programs and systems.
Work: Building software, websites, and other digital tools.
• Skills Needed: Math, problem-solving, understanding how computers work,
and organizing data.
• Specializations: Smart computers (AI), teaching computers to learn
(machine learning), protecting data (cybersecurity), and studying how computers
solve problems (computational theory).
Software Engineering
• Focus: Making sure coding follows best practices and works as expected.
• Work: Writing software, fixing errors, and launching programs.
• Skills Needed: Problem-solving, logical thinking, math, and persistence.
Information Technology (IT)
• Focus: Keeping computer systems, networks, and databases running
smoothly.
• Work: Setting up, managing, and fixing computer programs and systems.
• Skills Needed: Organizing data, good communication, teamwork, and
managing projects.
• Applications: Helping businesses use technology effectively.
Key Characteristics of Software
• Intangible: Software is not a physical object; it cannot be touched or felt.
• Evolvable: Software can be easily updated and improved over time.
• Complexity: Software systems can be complicated because different parts
depend on each other.
• Perishability: Software doesn’t wear out, but it can become outdated.
• Scalability: Software can handle more users or tasks without physical
limitations.
Definition of Software
Software is a set of programs, data, and instructions that help a computer
perform specific tasks or provide services.
Components:
Programs (code)
Data (processed by programs)
Documentation (manuals, user guides)
Differences Between Software and Hardware
• Wear and Tear: Hardware breaks down over time, but software does not
physically wear out.
• Design and Development: Creating software requires logical thinking and
problem-solving, while hardware involves physical construction.
• Replication: Software can be copied and shared easily at little to no cost,
unlike hardware, which must be physically manufactured.
More Differences Between Software and Hardware
• Tangibility: Hardware is a physical object you can touch, while software
exists as code and data.
• Upgradability: Software can be updated easily, while upgrading hardware
often requires replacing parts.
• Functionality: Hardware provides the foundation (e.g., computers, servers),
while software tells the hardware what to do.
• Dependency: Software needs hardware to run, but hardware can exist
without software (though it won’t function as a computer).
• Failure Modes: Hardware fails due to physical damage or aging, while
software issues are usually caused by bugs or compatibility problems.
Types of Software
• System Software: Includes operating systems (like Windows, macOS, Linux)
and utility programs that help manage a computer.
• Application Software: Programs for users, such as word processors, games,
and business applications.
• Embedded Software: Built into devices like home appliances, cars, and
medical equipment to control their functions.
• Web-Based Software: Runs on the internet and is accessed through a
browser (e.g., Google Docs, online banking).
• AI/ML Software: Uses artificial intelligence and machine learning to
improve and adapt over time (e.g., chatbots, recommendation systems).
Key Challenges in Software Development
• Requirements Volatility: Software needs and goals often change during
development.
• Quality Assurance: Making sure the software works correctly and meets
user expectations.
• Scalability and Performance: Ensuring the software runs efficiently as more
users or data are added.
• Security: Protecting software and user data from cyber threats and attacks.
Systematic Approach
A systematic approach means following a clear process to develop software. Two
common methods are
• Agile: A flexible method where the project is done in small steps. You get
feedback often and can make changes anytime.
• Waterfall: A step-by-step method where you finish one phase before
starting the next. It’s harder to make changes once you move forward
The incremental model is a simpler version of the waterfall model. It breaks the
project into smaller cycles that include planning, designing, developing, and
testing, with each cycle creating a new version of the software. Each new version
improves on the previous one.
First, a basic version of the system with just a few features is built and given to
the customer. Then, more versions are created and delivered to the customer
until the final version of the system is ready.
A, B, and C are parts of the software that are developed and delivered in stages.
Phases of incremental model
The software requirements are first divided into smaller parts, which are built and
delivered step by step.
In Requirement Analysis,
In Requirement Analysis, the plan is made only for the next increment, not for the
entire project. This makes it easier to adjust the software based on the customer's
needs.
Implementation:
When the final version is ready, it’s fully set up at the customer’s site for them to
use.
In implementation After the last version (version n), it is now deployed at the
client site.
Types of Incremental Model
1. Staged Delivery Model
2. Parallel Development Model
Staged Delivery Model
Construction of only one part of the project at a time.
Building one part of the project at a time.
Parallel Development Model: Different parts of the system are developed at the
same time. This can reduce the overall development time (Time to Market) if
there are enough resources available.
When to use the Incremental Process Model