Software Engineering
Software Engineering
2. Change Proposal:
Formal document proposing modifications or enhancements to software.
Includes rationale, expected benefits, resource estimates, and potential risks.
Used to communicate proposed changes to stakeholders for evaluation and approval.
4. New System:
Significantly revised version of existing software.
May involve rewriting code, adopting new technologies, or rearchitecting.
Developed to address substantial changes in business processes or technological
advancements.
2. Application Software:
Solves specific business needs or facilitates technical decision-making.
Processes business or technical data to support operations or management.
Includes real-time control of business functions.
4. Embedded Software:
Resides within systems or products to implement and control features.
Can perform specialized functions or provide extensive control capabilities.
5. Product-line Software:
Designed to provide specific capabilities for widespread use.
Targets niche or mass consumer markets with tailored functionalities.
6. Web Application:
Client-server programs run on web browsers.
Evolving from simple hypertext to sophisticated computing environments.
Supports e-commerce, B2B applications, and standalone computing functions.
3. Software myths
Most, experienced experts have seen myths or superstitions (false beliefs or interpretations) or
misleading attitudes (naked users) which creates major problems for management and technical
people. The types of software-related myths are listed below.
Myth 2:
Myth 3:
Outsourcing a project ensures success if there is clear communication and feedback.
Reality: Internal issues within the company can still affect the outsourced project,
leading to complications and potential failures.
Myth 2:
Software is flexible and can easily accommodate new requirements during
development.
Reality: Changes become increasingly costly and complex as development progresses,
impacting timelines and budgets.
Myth 2:
Testing software is only feasible when it is operational.
Reality: Quality Assurance (QA) can be implemented throughout development to
evaluate software performance and ensure it meets standards.
Myth 3:
Excessive documentation impedes software development.
Reality: Balancing documentation with coding and problem-solving tasks is essential
for efficient development processes.
Layer 1 — Tools:
Involves selecting semi-automated and automated tools for the project.
Examples include choosing Microsoft Publisher for web design, Selenium for cross-
platform testing, and an IDE for app development.
Tools should integrate effectively with the chosen operating system and with each other.
Layer 2 — Method:
Establishes the methods and technical knowledge for software development.
Tasks include selecting methods for communication, analysis, modeling, program
construction, testing, and support.
Emphasizes how tools chosen in the first layer will be utilized effectively.
Layer 3 — Process:
Focuses on the framework needed to deliver software effectively.
Includes sub-layers:
Communication: Essential for understanding client needs and ensuring team alignment.
Planning: Mapping out development processes, goals, milestones, and plans.
Modeling: Creating visual representations of the final product for client visualization.
Construction: Coding and testing the software product.
Deployment: Releasing the actual software for testing, evaluation, and feedback.
2. Design Phase:
Objective: Transform SRS into a blueprint for software development.
Activities: Define software architecture, high-level and detailed design.
Document: Software Design Document (SDD) captures design decisions and rationale.
1. Requirement analysis: In the first phase of the incremental model, the product
analysis expertise identifies the requirements. And the system functional requirements
are understood by the requirement analysis team. To develop the software under the
incremental model, this phase performs a crucial role.
2. Design & Development: In this phase of the Incremental model of SDLC, the design
of the system functionality and the development method are finished with success.
When software develops new practicality, the incremental model uses style and
development phase.
3. Testing: In the incremental model, the testing phase checks the performance of each
existing function as well as additional functionality. In the testing phase, the various
methods are used to test the behaviour of each task.
Alignment with User Needs: Results in a final product closely matching user
requirements.
Error Reduction: Iterative refinement reduces errors over successive iterations.
High Performance and Quality: Focus on continuous improvement leads to
higher performance and quality of the final product.
2. Incremental Model
In the incremental model, we first build the project with basic features and then evolve
the project in every iteration, it is mainly used for large projects. The first step is to
gather the requirements and then perform analysis, design, code, and test and this
process goes the same over and over again until our final project is ready.
3. Spiral Model
The spiral model is a combination of waterfall and iterative models and in this, we focused
on risk handling along with developing the project with the incremental and iterative
approach, producing the output quickly as well as it is good for big projects. The software
is created through multiple iterations using a spiral approach. Later on, after successive
development the final product will develop, and the customer interaction is there so the
chances of error get reduced.
UNIT – 2
1. Agile Principles
There are 12 agile principles mentioned in the Agile Manifesto. Agile principles are guidelines
for flexible and efficient software development. They emphasize frequent delivery, embracing
change, collaboration, and continuous improvement. The focus is on delivering value,
maintaining a sustainable work pace, and ensuring technical excellence.
1. Our highest priority is to satisfy the client through early and continuous delivery of
valuable computer software.
2. Welcome dynamic necessities, even late in development. Agile processes harness
modification for the customer’s competitive advantage.
3. Deliver operating computer software often, from a pair of weeks to a couple of months,
with a preference to the shorter timescale.
4. Business individuals and developers should work along daily throughout the project.
5. The build comes around actuated people. offer them the setting and support they have,
and trust them to urge the task done.
6. the foremost economical and effective methodology of conveyancing info to and among
a development team is face-to-face speech.
7. Working with computer software is the primary life of progress.
8. Agile processes promote property development. The sponsors, developers, and users
will be able to maintain a relentless pace indefinitely.
9. Continuous attention to technical excellence and smart style enhances nimbleness.
10. Simplicity—the art of maximizing the number of work not done—is essential.
11. the most effective architectures, necessities, and styles emerge from self–organizing
groups.
12. At regular intervals, the team reflects on a way to become simpler, then tunes and
adjusts its behaviour consequently.
2. Extreme Programming
Extreme Programming (XP) is an Agile software development methodology that focuses on
delivering high-quality software through frequent and continuous feedback, collaboration, and
adaptation. XP emphasizes a close working relationship between the development team, the
customer, and stakeholders, with an emphasis on rapid, iterative development and deployment.
3. Dynamic System Development Methods [DSDM]
The Dynamic Systems Development technique (DSDM) is an associate degree agile code
development approach that provides a framework for building and maintaining systems. The
DSDM philosophy is borrowed from a modified version of the sociologist principle—80 % of
An application is often delivered in twenty percent of the time it’d desire deliver the entire (100
percent) application.
DSDM is An iterative code method within which every iteration follows the 80% rule that
simply enough work is needed for every increment to facilitate movement to the following
increment. The remaining detail is often completed later once a lot of business necessities are
noted or changes are requested and accommodated.
DSDM Lifecycle:
1. Feasibility Study:
It establishes the essential business necessities and constraints related to the applying to be
designed then assesses whether or not the application could be a viable candidate for the
DSDM method.
2. Business Study:
It establishes the use and knowledge necessities that may permit the applying to supply
business value; additionally, it is the essential application design and identifies the
maintainability necessities for the applying.
3. Functional Model Iteration:
It produces a collection of progressive prototypes that demonstrate practicality for the client.
(Note: All DSDM prototypes are supposed to evolve into the deliverable application.) The
intent throughout this unvarying cycle is to collect further necessities by eliciting feedback
from users as they exercise the paradigm.
4. Design and Build Iteration:
It revisits prototypes designed throughout useful model iteration to make sure that everyone
has been designed during a manner that may alter it to supply operational business price for
finish users. In some cases, useful model iteration and style and build iteration occur at the
same time.
5. Implementation:
It places the newest code increment (an “operationalized” prototype) into the operational
surroundings. It ought to be noted that:
(a) the increment might not 100% complete or,
(b) changes are also requested because the increment is placed into place. In either case, DSDM
development work continues by returning to the useful model iteration activity.
4. Scrum Framework
Scrum is a management framework that teams use to self-organize tasks and work towards
a common goal. It is a framework within which people can address complex adaptive
problems while the productivity and creativity of delivering products are at the highest
possible value. Scrum is a management framework that teams use to self-organize and work
towards a common goal.
Scrum allows us to develop products of the highest value while making sure that we
maintain creativity and productivity.
The iterative and incremental approach used in scrum allows the teams to adapt to the
changing requirements.
Silent features of Scrum
Scrum is a light-weighted framework
Scrum emphasizes self-organization
Scrum is simple to understand
Scrum framework helps the team to work together
Lifecycle of Scrum
Sprint: A Sprint is a time box of one month or less. A new Sprint starts immediately
after the completion of the previous Sprint. Release: When the product is completed, it
goes to the Release stage.
Sprint Review: If the product still has some non-achievable features, it will be checked
in this stage and then passed to the Sprint Retrospective stage.
Sprint Retrospective: In this stage quality or status of the product is checked. Product
Backlog: According to the prioritize features the product is organized.
Sprint Backlog: Sprint Backlog is divided into two parts Product assigned features to
sprint and Sprint planning meeting.
5. Scrum Master
A Scrum master is the facilitator of scrum, a lightweight agile framework focusing on time-
boxed iterations called sprints. Scrum masters act as coaches to the rest of the team,
or servant leaders, as the Scrum Guide puts it.
Good scrum masters are committed to the foundational elements of scrum but remain
flexible and open to opportunities for the team to improve their workflows.
It specifies “What should the software It places constraints on “How should the
system do?” software system fulfill the functional
requirements?”
Functional requirement is specified by Non-functional requirement is specified by
User. technical peoples e.g. Architect, Technical
leaders and software developers.
2. Functional Requirements:
3. Non-Functional Requirements:
Performance: Describes criteria related to system performance under certain
conditions (e.g., response time, throughput, etc.).
Reliability: Specifies requirements related to the reliability and availability of the
software system.
Usability: Describes requirements related to the usability and user interface of the
software.
Security: Specifies requirements related to data security, access control, etc.
Compatibility: Specifies requirements related to compatibility with other systems
or platforms.
Legal and Regulatory Requirements: Specifies any legal or regulatory requirements
that the software must adhere to.
User Interfaces: Describes the interfaces through which users interact with the
system.
Hardware Interfaces: Describes requirements related to hardware connections or
interfaces.
Software Interfaces: Describes requirements related to interfaces with other
software systems.
5. System Features:
Describes the different features of the software system in detail.
6. Other Requirements:
Documentation Requirements: Describes the documentation that needs to be
produced alongside the software.
Quality Assurance: Describes requirements related to testing, quality assurance, and
validation.
Maintenance and Support: Describes requirements related to maintenance and
support of the software after deployment.
1. Feasibility Study:
It focuses on Economic Feasibility as the most crucial aspect.
Legal Feasibility is considered less important.
2. Requirements Elicitation:
Sources of domain knowledge include customers, business manuals, existing
software, standards, and stakeholders.
Techniques include interviews, brainstorming, task analysis, Delphi technique, and
prototyping.
3. Requirements Specification:
UNIT – 3
1. System Models
System model is a procedure of creating abstract models to understand the system to be
developed. It is an important step while creating software because, with the help of an abstract
model, software developers can easily explain the system's structure and behaviour to
customers.
1. Context Model:
The external perspective model represents how the system that must be built will interact
with other systems within its environment. It shows the boundaries of a system that includes
various automated systems in an environment. The requirements of employees and
stakeholders are discussed while creating the context model to decide the system's
functionality that needs to be developed. It shows the relationships between the system to
be created and other systems.
It is used to explain developers, stakeholders, or customers. Some factors need to be kept
in mind while creating the context model. The factors can be the overall cost of the system,
the time required to analyse the system, etc.
Examples of the Context Model: ATM
The main system is connected to actors in an environment. The actors can be users and
other systems.
The Bank ATM System is used to dispense cash and permit to make other banking
transactions. The Local Branch Accounting System contains the accounts of the local
branch users. The Bank ATM System interacts with the Local Branch Accounting System
to get the user account details. The Account Database allows user to access their
information. The Hardware/ Software Maintenance Staff tests and maintains the ATM. The
Security System is used to protect the ATM from hackers. The Cash Counter Staff is used
to count the cash.
2. Behavioural Model:
The behavioural model is used to illustrate the dynamic behaviour of the system at the time
when the model is executing. The behavioural model depicts what occurs or what should
occur when a system reacts to a stimulus from its environment.
Two kinds of behavioural models explain the system's behaviour in software engineering.
The two models are the data processing model and the state machine model.
o Data Processing Model: In this model, Data Flow Diagrams (DFDs) represent the
system's data processing.
o State Machine Model: In this model, state diagrams represent the system's response
to external events.
2. Object Models
The object model visualizes the elements in a software application in terms of objects. In
this chapter, we will look into the basic concepts and terminologies of object–oriented
systems.
Key Concepts in Object Models:
1. Objects:
Objects represent the fundamental entities or things within the system. They
encapsulate both data (attributes or properties) and behaviour (methods or
functions) that operate on the data.
Example: In a banking application, objects could include Customer, Account,
Transaction, etc.
2. Classes:
Classes define the blueprint for creating objects. They specify the properties
(attributes) and behaviours (methods) that objects of the class will exhibit.
Example: A Customer class would define attributes like name, address, and methods
like depositMoney, withdrawMoney.
3. Attributes and Methods:
Attributes: These are the properties or data fields that characterize an object's state.
Methods: These are functions or procedures that define the behaviors or actions that
objects can perform.
Example: For a Customer object, attributes could be name and address, while
methods could be depositMoney and withdrawMoney.
4. Relationships:
Relationships describe how objects interact or collaborate with each other within
the system.
Types of relationships include association (a simple relationship between objects),
aggregation (a part-whole relationship), and inheritance (a mechanism where one
class inherits the properties and behaviours of another).
5. Interfaces:
Interfaces define a contract specifying the methods that a class must implement.
They provide a way to achieve abstraction and polymorphism in object-oriented
design.
Example: An interface for a PaymentProcessor could define methods like
processPayment and refundPayment.
3. Structured Methods
Structured methods in software engineering refer to systematic approaches for analysing,
designing, and documenting software systems. These methods emphasize a disciplined and
organized way of developing software, typically characterized by the following principles:
1. Modularity: Breaking down the software system into manageable modules or components,
each responsible for specific functionality. This promotes easier development, testing, and
maintenance.
2. Hierarchy: Structuring the software design in a hierarchical manner, where higher-level
modules encapsulate lower-level ones. This hierarchical structure helps in managing
complexity and promoting reusability.
3. Top-down Design: Starting the design process from high-level modules and progressively
refining the design to lower levels of detail. This approach ensures that the overall system
architecture is well-defined before diving into specific implementation details.
4. Abstraction: Using abstraction to hide unnecessary details and focus on essential aspects of
the software system. Abstraction helps in managing complexity and improving clarity in
design.
5. Clear Documentation: Emphasizing clear and structured documentation throughout the
software development lifecycle. This includes documenting requirements, design decisions,
module interfaces, and testing procedures, ensuring transparency and facilitating collaboration
among team members.
6. Standardization: Following standardized notations and practices for diagrams,
documentation, and methodologies. This promotes consistency and clarity across different
phases of software development.
5. Design Concepts
Design concepts in software engineering encompass fundamental principles and ideas that
guide the process of designing software systems. These concepts are crucial for creating
software that is efficient, maintainable, scalable, and meets user requirements. Here are some
key design concepts:
1. Abstraction:
Definition: Abstraction focuses on hiding complex implementation details and
emphasizing only the essential features of an object or system.
Purpose: Simplifies design, reduces complexity, and improves clarity by focusing on
what an object does rather than how it does it.
2. Modularity:
Definition: Modularity involves dividing a software system into separate, independent
modules or components.
Purpose: Enhances maintainability, reusability, and scalability by allowing changes to
one module without impacting others.
3. Encapsulation:
Definition: Encapsulation bundles data (attributes) and methods (functions) that operate
on the data into a single unit (object).
Purpose: Promotes data security, hides implementation details, and ensures controlled
access to data through well-defined interfaces.
4. Inheritance:
Definition: Inheritance allows one class (subclass or derived class) to inherit properties
and behaviours from another class (superclass or base class).
Purpose: Facilitates code reuse, promotes hierarchical classification, and supports
polymorphism.
5. Polymorphism:
Definition: Polymorphism allows objects of different classes to be treated as objects of
a common superclass.
Purpose: Enables flexibility and extensibility by allowing methods to be called on
objects of different types, facilitating dynamic binding and method overriding.
6. Coupling and Cohesion:
Coupling: Refers to the degree of dependency between modules or components within
a system.
Cohesion: Refers to the degree to which elements within a module or component are
related.
Purpose: Loose coupling and high cohesion are desired to minimize dependencies and
improve modularity, making systems easier to understand, maintain, and extend.
6. Design Model
1. Data Design:
Transforms information domain model into data structures required to implement software.
2. Architectural Design:
Defines relationship among the major structural elements of a program
3. Interface Design:
Describes how the software communicates with itself, to systems that interact with it and with
humans.
4. Procedural Design:
Also Component Level.
Transforms structural elements of the architecture into a procedural description of software
construction.
1. Unit Testing:
The unit test focuses on the internal processing logic and data structures within the boundaries
of a component. This type of testing can be conducted in parallel for multiple components.
2. Integration Testing:
Integration testing is the second level of the software testing process comes after unit testing.
In this testing, units or individual components of the software are tested in a group. The focus
of the integration testing level is to expose defects at the time of interaction between integrated
components or units.
Once all the components or modules are working independently, then we need to check the
data flow between the dependent modules is known as integration testing.
3. Validation Testing:
Validation testing is testing where tester performed functional and non-functional testing.
Here functional testing includes Unit Testing (UT), Integration Testing (IT) and System
Testing (ST), and non-functional testing includes User acceptance testing (UAT).
Validation testing is also known as dynamic testing, where we are ensuring that "we have
developed the product right." And it also checks that the software meets the business needs
of the client.
4. System Testing:
To check the end-to-end flow of an application or the software as a user is known as System
testing. In this, we navigate (go through) all the necessary modules of an application and check
if the end features or the end business works fine, and test the product as a whole system.
It is end-to-end testing where the testing environment is similar to the production
environment.
3. Black – Box & White Box Testing
4. Software Quality
Software Quality shows how good and reliable a product is. To convey an associate degree
example, think about functionally correct software. It performs all functions as laid out in
the SRS document. But, it has an associate degree virtually unusable program. even though it
should be functionally correct, we tend not to think about it to be a high-quality product.
2. Software Risks
3. Risk identification
Risk Identification: The project organizer needs to anticipate the risk in the project as early as
possible so that the impact of risk can be reduced by making effective risk management
planning.
A project can be of use by a large variety of risk. To identify the significant risk, this might
affect a project. It is necessary to categories into the different risk of classes.
4. Risk Projection
Risk projection, also called risk estimation, attempts to rate each risk in two ways—the
likelihood or probability that the risk is real and the consequences of the problems associated
with the risk, should it occur.
The project planner, along with other managers and technical staff, performs four risk
projection activities:
(1) Establish a scale that reflects the perceived likelihood of a risk.
(2) Delineate the consequences of the risk.
(3) Estimate the impact of the risk on the project and the product.
(4) Note the overall accuracy of the risk projection so that there will be no misunderstandings.
5. Risk Refinement
Risk refinement in software engineering involves continuously assessing, analysing, and
updating identified risks throughout the project lifecycle. This iterative process includes initial
risk identification, thorough analysis of impact and likelihood, development of mitigation
strategies, ongoing monitoring, and updating risk assessments based on evolving project
conditions. Effective communication and integration with project management processes
ensure proactive risk management and support project success.
6. RMMM Plan
A risk management technique is usually seen in the software Project plan. This can be divided
into Risk Mitigation, Monitoring, and Management Plan (RMMM). In this plan, all works are
done as part of risk analysis. As part of the overall project plan project manager generally uses
this RMMM plan.
In some software teams, risk is documented with the help of a Risk Information Sheet (RIS).
This RIS is controlled by using a database system for easier management of information i.e
creation, priority ordering, searching, and other analysis. After documentation of RMMM and
start of a project, risk mitigation and monitoring steps will start.
Risk Mitigation :
It is an activity used to avoid problems (Risk Avoidance).
Steps for mitigating the risks as follows.
Finding out the risk.
Removing causes that are the reason for risk creation.
Controlling the corresponding documents from time to time.
Conducting timely reviews to speed up the work.
Risk Monitoring :
It is an activity used for project tracking.
It has the following primary objectives as follows.