Software Engineering Notes
Software Engineering Notes
Chapter 1
Q1. What is software engineering? What is the role of software
engineering? Compare hardware and software characteristics.
Answer -->
Software engineering is the application of engineering principles to the
development of software. It is a systematic approach to the design,
development, testing, deployment, and maintenance of software systems.
The role of software engineering is to create high-quality software that meets
the needs of its users and is reliable, efficient, maintainable, and portable.
Software engineers use a variety of tools and techniques to design, develop,
and test software systems.
Hardware and software characteristics
Hardware
Tangible: Hardware can be seen and touched.
Perishable: Hardware can degrade over time due to wear and tear.
Fixed: Hardware has a fixed capacity and cannot be easily changed.
Specialized: Hardware is designed for a specific purpose.
Reusable: Hardware can be reused for different purposes.
Software
Intangible: Software cannot be seen or touched.
Non-perishable: Software does not degrade over time.
Extensible: Software can be easily changed and updated.
General-purpose: Software can be used for a variety of purposes.
Non-reusable: Software is typically designed for a specific purpose and
cannot be easily reused for other purposes.
Comparison of hardware and software characteristics
Tangible Yes No
Perishable Yes No
Fixed Yes No
Specialized Yes No
Reusable Yes No
Extensible No Yes
General-purpose No Yes
Non-reusable No Yes
Examples
Hardware: A computer, smartphone, or tablet.
Software: A web browser, operating system, or word processor.
Application layer: This layer contains the code that implements the user-facing
functionality of the software system.
Presentation layer: This layer is responsible for displaying the user interface
and handling user input.
Business logic layer: This layer contains the code that implements the core
business logic of the software system.
Data access layer: This layer is responsible for storing and retrieving data
from the database.
Infrastructure layer: This layer provides the underlying infrastructure for the
software system, such as the operating system and networking services.
The layers in a software system are typically interconnected, and each layer
depends on the layers below it. For example, the application layer cannot function
without the presentation layer, which in turn cannot function without the business
logic layer.
Software engineers use the layered approach to design, develop, and test software
systems. By breaking down the system into different layers, they can focus on each
layer independently and ensure that the system is well-organized and easy to
maintain.
Here is an example of how the layered approach can be used to develop a simple
web application:
Application layer: This layer would contain the code that handles user
requests and generates the HTML output.
Presentation layer: This layer would be responsible for rendering the HTML
output to the user's browser.
Business logic layer: This layer would contain the code that implements the
application's logic, such as processing user data and interacting with the
database.
Data access layer: This layer would provide the code for connecting to the
database and retrieving and storing data.
Infrastructure layer: This layer would provide the underlying infrastructure for
the web application, such as the web server and the database.
By using the layered approach, the software engineers can develop each layer
independently and ensure that the web application is well-organized and easy to
maintain.
The layered approach to software engineering is a powerful tool that can help to
create high-quality, maintainable, and extensible software systems.
The SDLC can be followed in a linear fashion, with each phase completed before the
next phase begins. However, many teams use an iterative approach, where they go
back and forth between phases as needed.
The goal of this phase is to understand the needs of the users and stakeholders, and
document the requirements for the software system. This can be done through
interviews, surveys, and workshops.
Once the requirements have been gathered, they need to be analyzed to ensure that
they are complete, consistent, and feasible. The requirements should also be
prioritized so that the team knows what needs to be implemented first.
System design:
The goal of this phase is to design the architecture of the software system, including
the different components of the system and how they will interact with each other.
The system design should be documented in a way that is clear and easy to
understand.
The system design should also be reviewed by stakeholders to ensure that it meets
their needs.
Implementation:
The goal of this phase is to write the code for the software system and test it to
ensure that it meets the requirements. The code should be written in a way that is
modular and easy to maintain.
The implementation phase should also include unit testing, integration testing, and
system testing.
Testing:
The goal of this phase is to test the software system to identify and fix any defects.
Testing should be done at all levels of the software system, from unit testing to
system testing.
The testing phase should also include user acceptance testing, which is a test that is
conducted with real users to ensure that the software system meets their needs.
Deployment:
The goal of this phase is to make the software system available to users. This may
involve installing the software on users' computers, or making it available through a
web browser or mobile app.
The deployment phase should also include training users on how to use the software
system.
Maintenance:
The goal of this phase is to fix any defects that are reported by users and add new
features to the software system as needed. The maintenance phase should also
include keeping the software system up to date with the latest security patches.
The SDLC is a valuable tool that can help software development teams to produce
high-quality software that meets the needs of its users. By following the SDLC,
teams can reduce the risk of developing software that is not meeting the
requirements, and they can also produce software that is more maintainable and
extensible.
Q4. Define software process. Discuss The process framework
Activities. List out the various process models.
Answer -->
Software process is a set of activities and associated outcomes that produce a
software product. It is a systematic approach to the development, testing,
deployment, and maintenance of software systems.
Process framework activities are the fundamental activities that are common to all
software processes. These activities include:
Communication: This involves communicating with stakeholders, including
users, customers, and management.
Planning: This involves defining the goals of the software project and
developing a plan to achieve those goals.
Modeling: This involves creating models of the software system, such as use
cases, sequence diagrams, and class diagrams.
Construction: This involves writing the code for the software system and
testing it to ensure that it meets the requirements.
Deployment: This involves making the software system available to users.
Process models are specific ways of organizing and executing the software
development process. There are many different process models available, each with
its own strengths and weaknesses.
Some of the most common process models include:
The choice of process model will depend on the specific needs of the software
project. For example, a waterfall model may be appropriate for a project with well-
defined requirements and a predictable schedule. An iterative or agile model may be
more appropriate for a project with complex requirements or a changing
environment.
Software process models can be combined to create hybrid models that meet the
specific needs of a project. For example, a project may use a waterfall model for the
initial requirements gathering and design phases, and then switch to an iterative
model for the implementation and testing phases.
Software process models are an important tool for software development teams. By
choosing the right process model, teams can improve the quality, efficiency, and
predictability of their software development projects.
Q.5 Explain in brief the process model which is used in the situation
where requirement is well defined and stable (Water fall Model).
Answer -->
The waterfall model is a sequential process model, where each phase of the
development process is completed before the next phase begins. It is a good choice
for projects with well-defined requirements and a predictable schedule.
The waterfall model is a good choice for projects where the requirements are well-
defined and stable. This is because the waterfall model allows for a thorough
planning and design process. Once the requirements are finalized, the team can
focus on implementing and testing the system.
Here are some of the advantages of using the waterfall model for well-defined and
stable requirements:
Planning and control: The waterfall model provides a clear and structured
approach to planning and control. This can help to reduce the risk of project
delays and budget overruns.
Quality: The waterfall model allows for a thorough planning and design
process, which can help to produce high-quality software.
Predictability: The waterfall model can help to create a predictable schedule
for the project. This is important for projects with tight deadlines.
Overall, the waterfall model is a good choice for projects with well-defined and stable
requirements. It provides a clear and structured approach to planning and control,
which can help to produce high-quality software on a predictable schedule.
The spiral model is based on the idea that software development is a process of risk
management. The model progresses through a series of cycles, each of which
includes the following steps:
1. Planning: The team identifies and assesses the risks associated with the
project.
2. Risk analysis: The team develops strategies to mitigate the risks identified in
the planning step.
3. Engineering: The team implements the strategies developed in the risk
analysis step.
4. Evaluation: The team evaluates the results of the engineering step and
identifies any new risks.
5. Decision: The team decides whether to continue to the next cycle or to
terminate the project.
Overall, the spiral model is a good choice for projects with complex or uncertain
requirements. It is a flexible and risk-driven model that can help to ensure that the
final product meets the customer's needs.
The prototype model is a good choice for projects where the customer needs to see
a working version of the software before making a final decision. It is also a good
choice for projects where the requirements are not well-defined or are likely to
change.
The best choice of process model will depend on the specific needs of the project. If
the project has complex or uncertain requirements, then the spiral model may be a
better choice. If the project needs to get early customer feedback, then the prototype
model may be a better choice.
The incremental process model is based on the idea that it is better to deliver a
working system early and often, rather than waiting until the end of the project to
deliver a complete system. This allows the customer to use the system and provide
feedback, which can be used to improve the next increment.
The diagram shows that the system is developed in a series of increments, each of
which is implemented, tested, deployed, and evaluated. The customer provides
feedback on each increment, which is used to improve the next increment.
Early delivery: The customer can start using the system early in the
development process.
Flexibility: The requirements can be changed more easily as the system is
developed.
Reduced risk: The risk of project failure is reduced because the system is
developed in smaller increments.
However, the incremental process model also has some disadvantages, including:
Here are some examples of projects that are well-suited for the incremental process
model:
A web application where the customer needs to start using the system early to
get feedback from users.
Agile development is often used for projects where the requirements are uncertain or
likely to change, such as web applications and software systems that are being
developed in response to changing market conditions.
Here are some of the key benefits of agile development:
Reduced risk: Agile development helps to reduce the risk of project failure by
delivering the software in smaller increments and getting feedback from the
customer early and often.
Increased customer satisfaction: Agile development helps to increase
customer satisfaction by delivering working software early and often, and by
giving the customer a say in the development process.
Improved quality: Agile development helps to improve the quality of the
software by focusing on continuous testing and feedback.
Increased team morale: Agile development can help to increase team morale
by giving the team more autonomy and by allowing them to see the results of
their work more quickly.
Overall, agile development is a powerful methodology that can help teams to deliver
high-quality software on time and within budget.
Here are some examples of projects that are well-suited for agile development:
A web application where the requirements are likely to change based on user
feedback.
Break down the project into tasks: The first step in project scheduling is to
break down the project into smaller, more manageable tasks. This will make it
easier to estimate the time and resources needed for each task, and to
identify any potential risks or dependencies.
Estimate the time and resources needed for each task: Once the project has
been broken down into tasks, the next step is to estimate the time and
resources needed for each task. This can be done using a variety of methods,
such as expert judgment, historical data, or analogy.
Identify dependencies: Dependencies are relationships between tasks that
require one task to be completed before another task can start. It is important
to identify all dependencies at the start of the project scheduling process so
that tasks can be sequenced in the correct order.
Create a schedule: Once the time and resources needed for each task have
been estimated and dependencies have been identified, the next step is to
create a schedule. This can be done using a variety of tools, such as Gantt
charts, PERT charts, or critical path method (CPM) diagrams.
Monitor and update the schedule: Once the schedule has been created, it is
important to monitor it closely and make updates as needed. This is because
things don't always go according to plan, and there may be unexpected
delays or changes in requirements.
By following these basic principles, project managers can create effective project
schedules that help to ensure that projects are delivered on time and within budget.
By following these tips, project managers can create and manage effective project
schedules that help to ensure the success of their projects.
There are a number of different techniques that can be used to track project
scheduling. Some of the most common techniques include:
Gantt charts: Gantt charts are a type of bar chart that shows the start and end
dates of each task on a project schedule. Gantt charts can be used to track
the progress of individual tasks and to identify any potential delays.
Earned value management (EVM): EVM is a project management
methodology that uses a set of metrics to track the progress of a project and
to identify any potential problems. EVM metrics include planned value (PV),
earned value (EV), and actual cost (AC).
Schedule variance (SV): SV is a measure of how much a project is ahead or
behind schedule. SV is calculated by subtracting EV from PV.
Schedule performance index (SPI): SPI is a measure of how well a project is
meeting its schedule goals. SPI is calculated by dividing EV by PV.
Set up regular status meetings: Schedule regular status meetings with the
project team to discuss the progress of the project and to identify any potential
problems.
Use a project management tool: Use a project management tool to track the
progress of the project and to generate reports.
Monitor key metrics: Monitor key metrics such as SV and SPI to identify any
potential problems early on.
Take corrective action early: If you identify any potential problems early on,
take corrective action immediately. This will help to minimize the impact of the
problem on the project schedule.
By following these tips, project managers can effectively track project scheduling and
identify any potential problems early on. This helps to ensure that projects are
completed on time and within budget.
Q3. What do you mean by risk? What is software risk? Explain all
types of software risk.
Risk is the possibility of something happening that will have a negative impact on a
project or organization.
Software risk is the possibility of something happening that will prevent a software
project from being completed successfully.
Requirements risk: This is the risk that the requirements for the software are
not well-defined or complete. This can lead to problems such as delays, cost
overruns, and dissatisfied users.
Technical risk: This is the risk that the software cannot be developed using
the available technology or that the development process will be too complex.
This can lead to delays, cost overruns, and poor quality software.
Project management risk: This is the risk that the software project will not be
managed effectively. This can lead to delays, cost overruns, and poor quality
software.
People risk: This is the risk that the people involved in the software project will
not have the skills or experience necessary to complete the project
successfully. This can lead to delays, cost overruns, and poor quality
software.
External risk: This is the risk that something outside of the control of the
software project team will have a negative impact on the project. This could
include things like changes in market conditions, changes in government
regulations, or natural disasters.
Software risks can be mitigated by taking steps to identify and address them early
on. This can be done through risk analysis, risk management planning, and risk
monitoring.
A new programming language is used for the project, and the team does not
have enough experience with the language.
The project is using a third-party library that is not well-supported.
The project is using a new technology that is not yet proven in the real world.
The project is being developed in a hurry, and the team does not have
enough time to test the software thoroughly.
The project is using a complex development methodology that the team is not
familiar with.
The project is being outsourced to a vendor that has a poor track record.
The project is being developed for a new market, and the team does not have
a good understanding of the needs of the users.
The project is being developed for a government agency, and the agency is
likely to change its requirements frequently.
By understanding the different types of software risk and taking steps to mitigate
them, software project teams can increase their chances of success.
There are a number of different techniques that can be used for risk identification,
including:
Once all of the potential risks have been identified, they need to be prioritized based
on their likelihood and impact. This will help the project team to focus on the most
important risks first.
By following these tips, project teams can effectively identify all of the potential risks
that could impact their project. This will help them to develop mitigation plans and
increase their chances of success.
A risk table is a table that lists all of the potential risks that have been identified for a
project. Each risk is assigned a likelihood and an impact score. The likelihood score
is a measure of how likely the risk is to occur, and the impact score is a measure of
how much damage the risk could cause to the project if it does occur.
Once the risks have been assigned likelihood and impact scores, they can be ranked
in order of priority. This will help the project team to focus on the most important risks
first.
The project team can use the risk table to develop mitigation plans for the high-
priority risks. Mitigation plans are plans that are put in place to reduce the likelihood
or impact of a risk.
For example, the project team could develop a mitigation plan for the "requirements
change" risk by creating a change management process. This process would help to
ensure that any changes to the requirements are properly reviewed and approved
before they are implemented.
By using a risk table, the project team can identify the risks that are most likely to
impact the project and develop mitigation plans to reduce the likelihood or impact of
these risks. This will help the project team to increase its chances of success.
Use historical data: If possible, use historical data from previous projects to
estimate the likelihood and impact of risks. This will help to make the risk
projections more accurate.
Involve subject matter experts: Involve subject matter experts in the risk
projection process. These experts can provide valuable insights into the
likelihood and impact of specific risks.
Be realistic: Don't underestimate or overestimate the likelihood or impact of
risks. It is important to strike a balance between the two.
Update the risk table regularly: The risk table should be updated regularly
throughout the project lifecycle. This will help to ensure that the risk
projections are accurate and that the mitigation plans are effective.
By following these tips, project teams can effectively project the risks that could
impact their project. This will help them to develop mitigation plans and increase their
chances of success.
The RMMM process can be broken down into the following steps:
1. Identify risks: The project team identifies all of the potential risks that could
impact the project. This can be done through brainstorming, review of
historical data, expert judgment, and scenario analysis.
2. Assess risks: The project team assesses the likelihood and impact of each
risk. This helps the team to prioritize the risks and to focus on the most
important ones first.
3. Mitigate risks: The project team develops mitigation plans for the high-priority
risks. These plans should focus on reducing the likelihood or impact of the
risks.
4. Monitor risks: The project team tracks the risks that have been identified and
assesses their status on an ongoing basis. This helps the team to identify any
new risks that may have emerged and to make adjustments to the mitigation
plans as needed.
5. Communicate risks: The project team communicates risks to stakeholders on
an ongoing basis. This helps stakeholders to understand the risks that could
impact the project and to make informed decisions.
By following these tips, project teams can effectively mitigate, monitor, and manage
risks throughout the project lifecycle. This will help them to increase their chances of
success.