Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 45

Software Definition

• In the context of software engineering, software refers to computer


programs and related data that provide the instructions for telling a
computer what to do and how to do it. Software is typically created using a
programming language and is stored on a computer's hard drive or other
storage medium.
• Software can be classified into two main categories:
• system software and application software.
• System software includes the operating system and other software that
enables the computer to function, such as device drivers and utility
programs.
• Application software refers to programs that enable users to perform
specific tasks, such as word processing, spreadsheet management, and web
browsing.
Software dfn cont…

• Software development is the process of creating software using


programming languages and tools. Software engineers are responsible for
designing, implementing, and maintaining software systems to meet the
needs of users. They may work on a variety of projects, including
developing standalone applications, building software components that
are integrated into other systems, or creating operating systems or other
types of system software.
Engineering dfn.

• Engineering refers to the application of scientific and mathematical


principles to the design, development, and maintenance of systems,
structures, and machines. In the context of software engineering,
software engineering is the application of engineering principles to
the design, development, and maintenance of software systems.
Software engineering
• Software engineering is the study of how to design, develop, and maintain
software systems. It is a field of computer science that focuses on the
creation and development of computer programs and applications.

• Software engineering involves the use of a systematic and disciplined


approach to the design, development, testing, and maintenance of
software. This includes the use of tools, techniques, and processes to plan,
coordinate, and control the development of a software project.
Activities involved in software engineering include:

• Requirements gathering: This involves working with stakeholders to


identify and document the goals, objectives, and needs of the
software system.

• Design: This involves creating a plan or blueprint for the software


system, including its architecture, data structures, and algorithms.

• Implementation: This involves writing the code for the software


system based on the design.
Cont…
• Testing: This involves verifying that the software system functions as
intended and meets the specified requirements.

• Maintenance: This involves updating and modifying the software


system to fix bugs, improve performance, and add new features.

• Overall, the goal of software engineering is to create high-quality


software systems that are reliable, efficient, and easy to maintain.
Tools used to plan, coordinate, and control
the development of a software project.
• There are many tools that can be used to plan, coordinate, and
control the development of a software project. Some of the most
common tools used in software project management include:
• Project management software: This type of software is used to create
and maintain a project plan, track progress, and manage resources.
Examples include Microsoft Project and Asana.
• Version control systems: These are used to track changes to the
source code of a software project and enable team members to
collaborate on development. Examples include Git and Subversion.
Cont…
• Bug tracking systems: These are used to track and resolve issues or
defects in the software. Examples include JIRA and Bugzilla.
• Collaboration tools: These are used to facilitate communication and
collaboration among team members. Examples include Slack and
Microsoft Teams.
• Automated testing tools: These are used to automate the testing
process and identify defects in the software. Examples include
Selenium and Appium.
• Documentation tools: These are used to create and maintain
documentation for the software project, such as user manuals and
technical specifications. Examples include Confluence and Doxygen.
• Overall, the specific tools used will depend on the needs and goals of
the software project, as well as the preferences of the project team.
Techniques, and processes used to plan, coordinate,
and control the development of a software project.
• There are many techniques and processes that can be used to plan,
coordinate, and control the development of a software project. Some of
the most common ones include:
• Waterfall model: This is a traditional approach to software development
that involves completing each phase of the development process (e.g.,
analysis, design, implementation, testing) before moving on to the next
phase.
• Agile development: This is an iterative and incremental approach to
software development that emphasizes flexibility and collaboration.
Agile development is typically organized around short development
cycles called "sprints," which allow the team to quickly respond to
changes and deliver working software on a regular basis.
Cont…
• Scrum: This is an agile framework for managing and completing
complex projects. It involves regular meetings called "scrums" where
team members discuss progress and identify any issues or blockers.
• Lean development: This is an approach to software development that
aims to eliminate waste and focus on delivering value to the customer
as quickly as possible.
• Six Sigma: This is a data-driven approach to process improvement that
aims to identify and eliminate defects in a process.
• Overall, the specific techniques and processes used in a software
project will depend on the needs and goals of the project, as well as
the preferences of the project team.
Software evolution
• software evolution is the process of adapting and changing a software
system over time in response to changing requirements, technology,
and other factors. In a software engineering course, students will learn
about the various factors that can drive software evolution, as well as
the techniques and processes that can be used to manage it effectively.
• Some of the key concepts related to software evolution that students
should learn about include:
• Maintenance: This refers to the activities and processes involved in
updating and modifying a software system to fix bugs, improve
performance, and add new features.
• Refactoring: This refers to the process of restructuring or reorganizing
the code of a software system in order to improve its design, without
changing its functionality.
Cont…
• Reengineering: This refers to the process of fundamentally redesigning
a software system in order to improve its performance or functionality.
• Reverse engineering: This refers to the process of analyzing a software
system in order to understand its structure and design.
• Porting: This refers to the process of adapting a software system to run
on a different platform or environment.
• Reuse: This refers to the use of existing software components or
systems in the development of a new software system.
• Overall, software evolution is an important aspect of software
engineering that involves adapting and changing software systems
over time to meet the changing needs of users and stakeholders.
Software laws
• The Law of Conservation of Complexity: This law suggests that the
complexity of a software system is constant, and that when one part
of the system becomes simpler, another part will become more
complex to compensate. This can make it difficult to reduce the
overall complexity of a software system.
• The Law of Increasing Difficulty: This law states that it becomes
increasingly difficult to make changes to a software system as it
evolves. This is because the system becomes more complex and
interdependent over time, and modifying one part of the system can
have unintended consequences on other parts of the system.
Cont…
• The Law of Declining Quality: This law states that the quality of a
software system tends to decline over time as changes are made to
the codebase. This is because changes to the codebase can introduce
new bugs and issues, and it can be difficult to maintain the same level
of quality as the system evolves.
• The Law of Requisite Variety: This law suggests that the complexity of
a software system should be matched by the complexity of the
processes used to develop and maintain it. If the processes used to
develop and maintain a software system are not sufficient to handle
its complexity, the system may become difficult to understand and
maintain.
Software categories according to Lehman
1980s .. S-type software
• "S-type software" or "static-type software" refers to software that is
designed to follow a set of predefined specifications and solutions.
This type of software is typically straightforward and easy to
understand, as the solution and the method for achieving it are
defined in advance. Because it is not subject to many changes, S-type
software is often considered to be the simplest type of software.
• An example of S-type software might be a calculator program that is
designed to perform basic mathematical calculations. This program
would follow a set of predefined rules for performing calculations,
and would not be subject to many changes or updates once it has
been developed.
P-type software
• P-type or practical-type software is software that is defined by a collection
of procedures or processes. These procedures may be well-defined, but
the solution to a problem is not immediately obvious. This type of
software is typically more complex than S-type software, as it may require
more problem-solving and decision-making on the part of the software
developer or engineer.
• An example of P-type software might be a gaming software. This type of
software may have well-defined procedures for things like character
movement, collision detection, and other gameplay mechanics, but the
overall solution to the game may not be immediately obvious. Developing
this type of software may require more problem-solving and decision-
making on the part of the developers, as they must determine the best
way to implement the various gameplay mechanics and features.
E-type software
• E-type or embedded-type software is software that is closely tied to
the requirements of a real-world environment. This type of software
is often designed to interact with external systems or devices, and
may be subject to frequent changes in response to changes in the
real-world environment.
• An example of E-type software might be an online trading software.
This type of software would need to be constantly updated to reflect
changes in laws, taxes, and other regulations related to trading. It
would also need to be able to interact with external systems such as
stock exchanges and financial data sources in order to function
properly.
The need for software engineering
• There is a need for software engineering because of the complexity and
scale of modern software systems. Software systems are an essential part
of many aspects of our lives, and they are often required to perform a
wide range of tasks and to work in a variety of different environments.
• To meet these challenges, software engineering provides a set of
principles, methods, and tools for designing, developing, testing, and
maintaining software systems. By applying these principles, software
engineers can create reliable, efficient, and maintainable software that
meets the needs of its users.
• Some specific reasons for the need for software engineering include:
• The increasing complexity of software systems: As software systems have
become more sophisticated, they have become more difficult to design,
develop, and maintain. Software engineering provides a structured
approach to addressing this complexity.
Cont…
• The importance of software quality: Software that is unreliable or
inefficient can have serious consequences, such as lost productivity,
financial losses, or even physical harm. Software engineering helps
ensure that software is of high quality and fit for its intended purpose.
• The need for rapid development: In today's fast-paced business
environment, it is often important to develop software quickly in order
to meet changing market needs. Software engineering provides a set of
tools and practices that can help teams develop software efficiently and
effectively.
• The need for maintainability: Software systems often need to be
updated and modified over time to meet changing user needs or to take
advantage of new technologies. Software engineering helps ensure that
software is designed in a way that makes it easy to maintain and modify.
Qualities of a good software
• Reliability: A good software should be reliable, meaning it should work
correctly and consistently under a variety of conditions. This includes
handling unexpected inputs and errors gracefully, and avoiding crashes or
other failures.
• Efficiency: A good software should be efficient, meaning it should use
resources (such as time and memory) efficiently. This is especially
important for software that is used frequently or in resource-constrained
environments.
• Usability: A good software should be easy to use, with a clear and
intuitive interface. This includes considerations such as layout, navigation,
and the use of language and other conventions.
Cont…

• Maintainability: A good software should be easy to maintain and modify


over time, as the needs of its users or the environment in which it operates
change. This includes having a clear and well-organized codebase, as well as
adequate documentation and testing.

• Portability: A good software should be portable, meaning it should be able


to run on different platforms or environments without requiring significant
modification.
Cont…
• Security: A good software should be secure, meaning it should protect
against unauthorized access or manipulation of data. This includes
considerations such as authentication, encryption, and input validation.

• Scalability: A good software should be scalable, meaning it should be able to


handle an increasing workload without a decrease in performance. This is
especially important for software that is expected to be used by a large
number of users or to process large amounts of data.
Project planning in software engineering
• Project planning in software engineering refers to the process of
defining and organizing the tasks and resources needed to complete a
software development project. It involves identifying the goals of the
project, breaking down the work into smaller tasks, estimating the
time and resources needed to complete each task, and organizing
these tasks into a coherent plan.
• There are several steps involved in project planning:
• Define the project scope: The first step in project planning is to define
the goals and objectives of the project, as well as the constraints and
limitations that will impact the project. This includes identifying the
stakeholders (e.g. users, developers, managers) and determining the
requirements for the software.
Cont…
• Break down the work: The next step is to break down the work into smaller,
more manageable tasks. This can be done using techniques such as task
decomposition or user stories.
• Estimate task duration: The next step is to estimate how long each task will
take to complete. This can be done using techniques such as expert
judgment, historical data, or estimation tools.
• Organize the tasks: The final step is to organize the tasks into a coherent
plan. This may involve creating a Gantt chart or using project management
software to create a schedule and assign tasks to team members.
• Project planning is an important part of software engineering because it
helps ensure that the project is completed on time and within budget, and
that all stakeholders are aware of the progress and status of the project. It
also helps identify potential risks and issues early on, so that they can be
addressed before they become problems.
Software models… Waterfall model

• The waterfall model is a linear approach to the development process.


It involves breaking down the development of a software product into
distinct phases, and progressing sequentially through these phases.

• The phases of the waterfall model are:

• Requirements gathering and analysis: This phase involves gathering


and documenting the requirements for the software product.
Cont…
• Design: In this phase, a high-level design of the software product is
created.
• Implementation: During the implementation phase, the actual coding
of the software takes place.
• Testing: The software is tested to ensure that it meets the specified
requirements.
• Deployment: The final software product is deployed for use.
• Maintenance: This phase involves fixing any issues that arise with the
software after it has been deployed.
Pictorial representation
Requirements gathering and analysis
• Requirements gathering and analysis is the first phase of the waterfall
model, and it involves collecting and documenting the requirements
for the software product. This phase is important because it
establishes the foundation for the rest of the development process.
• During the requirements gathering and analysis phase, the
development team works with the client to understand their needs
and goals for the software product. This may involve conducting
interviews, gathering feedback from stakeholders, and creating a list
of functional and non-functional requirements for the software.
Cont…
• The requirements gathering and analysis phase is also an opportunity
to identify any potential risks or challenges that may arise during the
development process, and to put plans in place to mitigate them.
• Once the requirements have been gathered and analyzed, they are
typically documented in a requirements specification document,
which serves as a reference point for the rest of the development
process. This document may include a detailed description of the
software's intended functionality, as well as any constraints or
limitations that need to be taken into account.
Design

• During the design phase of the waterfall model, a high-level design of


the software product is created. This design serves as a blueprint for
the rest of the development process, and it typically includes a
detailed description of the software's architecture, as well as the
specific technologies and components that will be used to build it.
• The design phase is an important step in the development process, as
it helps to ensure that the software will be scalable, maintainable, and
able to meet the needs of the client. It also helps to identify any
potential issues or challenges that may arise during the
implementation phase, and to put plans in place to address them.
Cont…
• There are several different approaches to designing software, and the
specific approach that is used may depend on the nature of the
project and the preferences of the development team. Some common
approaches include object-oriented design, component-based design,
and event-driven design.
• During the design phase, it is important to create a design that is both
feasible and aligned with the requirements gathered in the previous
phase. The design should also consider the long-term goals and needs
of the client, as well as any potential future enhancements to the
software.
Types of design.. Logical design
• Logical design refers to the process of defining the structure of a
software system at a high level of abstraction, without considering the
physical implementation details. It typically involves creating a model
of the system that represents the various components and their
relationships, as well as the functionality and data flows within the
system.
• Logical design is an important step in the software development
process, as it helps to define the overall architecture of the system
and to ensure that it will meet the needs of the client. It is typically
created during the design phase of the development process, and it
serves as a basis for the physical design of the system, which involves
deciding on the specific technologies and components that will be
used to build it.
Cont…
• There are several different approaches to logical design, and the
specific approach that is used may depend on the nature of the
project and the preferences of the development team. Some common
techniques for logical design include data modeling, object-oriented
design, and component-based design.
Physical design
• Physical design refers to the process of deciding on the specific
technologies and components that will be used to build a software
system. It involves taking the high-level design of the system, as
defined during the logical design phase, and determining the specific
hardware and software components that will be needed to
implement it.
• Physical design is an important step in the software development
process, as it helps to ensure that the system will be able to meet the
performance and scalability requirements of the client. It also helps to
identify any potential issues or challenges that may arise during the
implementation phase, and to put plans in place to address them.
Cont…
• There are several factors that may influence the physical design of a
software system, including the specific hardware and software
platforms that will be used, the performance and scalability
requirements of the system, and the availability of resources such as
personnel and budget. The physical design should be carefully
planned and documented, as it will serve as a roadmap for the rest of
the development process.
Implementation
• During the implementation phase of the waterfall model, the actual
coding of the software takes place. This phase involves taking the
high-level design of the software, as created during the design phase,
and turning it into a working product by writing the necessary code.
• The implementation phase is typically the longest phase of the
development process, and it involves a lot of collaboration between
the development team and the client. The development team may
work in iterative cycles, writing and testing small pieces of code and
then integrating them into the larger system.
• There are several factors that can impact the implementation phase,
including the complexity of the software, the skill level of the
development team, and the availability of resources such as
personnel and budget. It is important to have a clear plan in place for
the implementation phase, and to track progress and identify any
potential issues or challenges that may arise.
Testing
• During the testing phase of the waterfall model, the software is tested
to ensure that it meets the specified requirements. This phase is an
important step in the development process, as it helps to identify any
issues or defects in the software and to ensure that it is of high
quality.
• There are several different types of testing that may be performed on
software, including unit testing, integration testing, system testing,
and acceptance testing. Each of these types of testing serves a
specific purpose and focuses on a different aspect of the software.
Cont..(types of testing)
• Unit testing involves testing individual components or units of code to
ensure that they are working correctly. Integration testing involves
testing how different components of the software work together.
System testing involves testing the software as a whole, to ensure
that it meets the specified requirements. Acceptance testing involves
testing the software from the perspective of the end user, to ensure
that it is easy to use and meets their needs.
• Testing is typically an iterative process, and it may involve multiple
rounds of testing as issues are identified and addressed. It is
important to have a thorough and well-documented testing plan in
place, and to track the progress and results of the testing process.
Deployment
• During the deployment phase of the waterfall model, the final software
product is deployed for use. This phase involves making the software
available to the end users, and may involve installing the software on the
users' computers or servers, or making it available over the web.

• The deployment phase is an important step in the development process,


as it marks the transition from development to production. It is important
to have a well-planned and well-executed deployment process, as it can
have a significant impact on the success of the software.
Cont…
• There are several factors to consider when deploying software,
including the specific hardware and software platforms that will be
used, the availability of resources such as personnel and budget, and
the needs and preferences of the end users. The deployment process
may also involve activities such as training users on how to use the
software, providing documentation and support, and monitoring the
software for any issues or defects.
Maintenance
• Maintenance is the process of maintaining and improving a software
product after it has been deployed. It involves fixing any issues or
defects that are discovered in the software, and making
enhancements or improvements to the software as needed.

• Maintenance is an ongoing process that typically continues for the


entire lifetime of the software product. It is an important step in the
development process, as it helps to ensure that the software continues
to meet the needs of the users and to function effectively over time.
Cont…
• There are several types of maintenance that may be performed on software,
including corrective maintenance (fixing defects), adaptive maintenance
(making changes to the software to accommodate changes in the
environment), and perfective maintenance (making enhancements or
improvements to the software).

• The maintenance process may involve activities such as troubleshooting issues,


writing and testing code, and collaborating with the development team and
other stakeholders. It is important to have a well-documented maintenance
plan in place, and to track the progress and results of the maintenance process.

You might also like