Lecture Notes Se
Lecture Notes Se
1. The cost and impact of proposed changes are evaluated to understand their effect on the
system and implementation cost.
2. If the changes are approved, a new software release is planned.
3. During release planning, all changes such as bug fixes, adaptations, and new features are
reviewed.
4. Decisions are made on which changes will be included in the next version.
5. The approved changes are then designed, implemented, and tested in an iterative
development cycle.
Characteristics Of Software:
Functionality – The software provides all required features and performs its intended
tasks correctly according to user requirements.
Usability – The software is easy to learn, understand, and use, improving user
satisfaction and productivity.
Efficiency – The software delivers good performance while using minimum system
resources such as memory, CPU, and time.
Portability –The software can be transferred and run on different hardware or operating
systems with little or no modification.
Integrity – The software ensures data accuracy and prevents unauthorized access or
manipulation.
Additional Characteristics
If you’re dealing with enterprise-level software or highly regulated environments, you may also
consider these:
Interoperability – Ability to work with other systems.
Security – Protection against threats and vulnerabilities.
Testability – Ease with which software can be tested.
Reusability – Ability to reuse components across different systems.
From functionality and usability to efficiency and integrity, these characteristics define the
overall quality and success of a software product. By prioritizing these attributes, software
engineers can create future-ready solutions that meet both technical and user-centric goals
The software provides all required features and performs its intended tasks correctly according to
user requirements.
MODULE 1
Time
Quality
Cost
The wider scope
The software project follows the end-to-end Software Development Lifecycle (SDLC), which
encompasses many steps from gathering requirements to developing and testing to releasing the
product and, finally, ongoing maintenance.
(See how product management supports the IT organization.)
Now, let’s turn to the four phases.
Phase 1: Inception (Scoping & Justifying a Project)
The main goal of a software project is to deliver a reliable, high-quality software product that
meets user requirements within time and cost constraints.
MODULE 1
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:
1) Management Myths:
Managers in charge of developing high-quality software are frequently under pressure to stick
to budgets, meet deadlines, and improve overall quality.
Myth1: A book of standards is enough.
Reality: Standards are rarely used, often incomplete, and may be outdated.
2) Customer Myths
The customer may be users, technical staff, marketing/sales, or another company, and their
myths create false expectations that lead to dissatisfaction with the developer.
Myth1: General goals are enough to start development.
Reality: Clear, detailed requirements and documentation are essential.
3) Practitioners’ Myths
Developers believe their work is finished once the software runs, but in reality ongoing testing,
feedback, and maintenance are required.
Myth1: Work ends once the software runs.
Reality: Maintenance, feedback, and updates take most of the effort.
Some guidelines are followed when designing a project. These guidelines are outlined
below.
Planning: Before starting a project, clear objectives and timelines are defined for smooth
execution.
Risk Analysis: Possible risks like changing requirements are identified, and their impact
on time and cost is estimated.
Monitoring Progress: The project plan is regularly tracked and updated when required.
Quality Assurance: The plan includes methods to ensure software quality within
planned time and cost.
Flexibility: The project plan allows changes to be made as the project evolves.
Identification of Project Requirements – Determine what the project needs and its
objectives.
Identification of Cost Estimates – Assess the expected costs to complete the project.
Identification of Risks – Identify potential issues or challenges that may affect the project.
Identification of Critical Success Factors – Determine key elements that will make the
project successful.
Preparation of Project Plan – Develop a detailed plan outlining how the project will be
executed.
Commencement of the Project – Officially start the project based on planning and
preparation.
MODULE 1
Scheduling and management involve planning, tracking, and controlling project time, tasks, and
resources to deliver quality software on time and within budget.
Scheduling Techniques
Tools Used
Abstraction: Higher layers use services from lower layers without needing to know
implementation details, simplifying complexity.
Separation of Concerns: Each layer handles specific tasks (e.g., presentation, data
management, business rules).
Examples: OS kernels (hardware, drivers, user programs), or web applications (UI,
backend logic, database).
The Four Layers of Software Engineering (Process-Focused):
A generic process framework encompasses five activities which are given below one by
one:
Communication:
Interaction with customers and stakeholders to gather requirements.
Planning:
Decide tasks, schedule, risks, and required resources.
Modeling:
Create models to understand requirements and system design.
Construction:
Develop code and test the software to build the product.
Deployment:
Deliver the software to customers, collect feedback, and make improvements.
Umberalla activities
Umbrella activities support and manage the software process across all development phases.
Stage 1 : Planning
In this stage, the team first decides what the project is about and what the software should include.
Then, they clearly define the goals the software needs to achieve. Finally, they plan the required
time, money, and people needed to complete the project successfully.
Stage 4 : Development(Coding)
In the development stage, programmers write code by following coding standards to ensure
consistency. The code is made scalable so it can handle future growth, managed using version
control, and regularly reviewed to improve quality and reduce errors.
Stage 5 : Testing
In the system testing stage, the software is tested manually to find errors in functionality and
behavior, and then automated testing is used to repeatedly verify performance, accuracy, and
reliability.
Stage 6 : Deployment
In the deployment and maintenance stage, the software is released using proper planning and
automated deployment methods. After release, the system is maintained to fix issues and
improve performance, and user feedback is collected for future updates.
Stage 7 : Maintenance
The software life cycle does not end after deployment; it continues with maintenance to keep the
system useful and reliable. During this phase, bugs are fixed, libraries are upgraded, performance
is improved, and new features are added. The main outputs of this stage are patches, updates, and
new software versions, handled by support engineers and developers.
Common Models
Waterfall Model
Agile Model
V-Model
Spiral Model
Incremental Model
RAD Model
The goal of the SDLC is to produce high-quality software that meets or exceeds customer
expectations, reaches completion within time and cost estimates, and is efficient to maintain.
INTRODUCTION TO SOFE:
MODULE 1
Conventional Models
What is Conventional Models
Conventional Models in Software Engineering (also called traditional process models) are
structured, plan-driven approaches used to guide software development.
They emphasize thorough documentation, well-defined phases, and sequential progress.
Key Characteristics
Linear Progression: Each phase must be completed before the next begins.
Extensive Upfront Planning: Detailed requirements and design are established early.
Defined Phases & Deliverables: Clear milestones and outputs for each stage.
Documentation-Heavy: Significant emphasis on producing detailed documents.
Less Flexibility: Changes are difficult and costly to incorporate once a phase is complete.
Common Conventional Models
1. Waterfall Model
2. V-Model
3. Spiral Model
4. Incremental Model (can be seen as a hybrid)
5. Iterative Model
6. Prototyping Model
1. Waterfall Model
The Waterfall Model is a conventional and sequential software development model in
which development progresses through a fixed set of phases, with each phase completed
before the next one begins.
The typical phases include requirements analysis, system design, implementation (coding),
testing, deployment, and maintenance.
In this model, requirements are gathered and documented at the beginning, and there is
little scope for change once development starts.
The Waterfall Model is easy to understand and manage because of its structured approach
and clear documentation at every stage.
However, testing is performed only after implementation, so errors discovered late can be
costly to fix.
Due to its rigid nature, the Waterfall Model is best suited for small projects with well-
defined, stable requirements and minimal expected changes.
Advantages
Simple and easy to understand and manage.
Clear stages and defined deliverables for each phase.
Ideal for projects with very stable and well-understood requirements.
Disadvantages
Highly inflexible; difficult and costly to accommodate changes after a phase is completed.
Testing happens late in the cycle, making defect discovery expensive.
High risk if requirements are not fully understood or change during development.
2. V-Model
The V-Model (Verification and Validation Model) is a traditional software development
model that extends the Waterfall approach by emphasizing testing at every stage of
development.
It is called the V-Model because its structure forms a “V” shape, where the left side
represents verification activities such as requirement analysis and system design, and the
right side represents corresponding validation activities through testing.
In this model, each development phase has a directly related testing phase: requirements
are validated through acceptance testing, system design through system testing, high-level
design through integration testing, and low-level design through unit testing.
Coding is performed at the bottom of the V, after which testing activities are carried out in
sequence.
The main advantage of the V-Model is early test planning, which helps detect defects at an
early stage and improves software quality.
However, it is rigid and does not handle changes easily, making it most suitable for projects
with clear, stable requirements and for safety-critical systems where reliability is essential.
Advantages
Early test planning leads to better quality.
Clear definition of testing activities for each development phase.
Improved defect detection likelihood due to early test case design.
Disadvantages
Still relatively inflexible to requirement changes.
Can be complex to manage if not well-defined from the start.
Not ideal for projects with evolving or uncertain requirements.
3. Spiral Model
The Spiral Model is a risk-driven software development model that combines iterative
development with systematic planning and control.
In this model, the software is developed through a series of loops or spirals, where each
loop represents a development phase.
Every spiral consists of four main activities: planning, risk analysis, engineering (design
and implementation), and evaluation by the customer.
The key strength of the Spiral Model is its strong focus on identifying and reducing risks
early in the development process, making it well suited for large, complex, and high-risk
projects.
It also allows for continuous user feedback and gradual refinement of requirements.
However, the model is expensive, requires skilled risk analysis, and is not suitable for small
or low-risk projects.
Advantages
Excellent for large, complex, and high-risk projects.
Risk management is integrated throughout the lifecycle.
Allows for changes and feedback throughout iterations.
Disadvantages
Can be complex and expensive to manage.
Requires significant expertise in risk analysis.
Not suitable for small or low-risk projects.
4. Incremental Model
The Incremental Model is a software development approach in which the system is
designed, implemented, and tested in small, manageable increments, with each increment
adding new functionality to the existing system.
Instead of delivering the complete product at once, a basic working version is released first,
followed by successive versions that enhance features and performance.
This model allows early delivery of usable software, continuous user feedback, and easier
identification of defects.
It reduces overall project risk and supports changes more effectively than purely sequential
models. However, it requires careful planning and a well-defined overall architecture from
the beginning.
The Incremental Model is best suited for projects where requirements can be divided into
independent modules and early delivery is important.
Advantages
Early delivery of working software
More flexible than waterfall
Easier to test and debug
Disadvantages
Higher costs
More time spent on testing
Difficulty in tracking progress
5. Iterative Model
The Iterative Model is a software development approach in which the system is developed
through repeated cycles (iterations), with each iteration producing an improved and more
complete version of the software.
Instead of building the entire system at once, development begins with a basic version that
addresses core requirements, and additional features are added and refined in subsequent
iterations based on user feedback and evaluation.
Each iteration involves planning, design, implementation, and testing, allowing issues to
be identified and resolved early.
The Iterative Model is flexible, supports changing requirements, and improves overall
quality through continuous testing and refinement. However, it requires effective
management and may lead to scope creep if not properly controlled.
Advantages
Handles changing requirements
Customer involvement is high
Disadvantages
Less Predictable Timeline and Budget
May Not Suit Small or Simple Projects
[Link] Model
The Prototyping Model is a software development approach in which a preliminary version
of the system (prototype) is built to better understand and clarify user requirements.
This prototype allows users to interact with the system and provide feedback, helping
developers identify missing, unclear, or incorrect requirements at an early stage. Based on
user feedback, the prototype is refined or discarded before developing the final system.
Prototyping is especially useful when requirements are not well defined or when user
interaction plays a major role.
The model improves user satisfaction and reduces misunderstandings, but it may lead to
poor design or inadequate documentation if the prototype is mistakenly evolved into the
final product without proper planning.
Advantages
Suitable for large systems.
Customer communication is available.
Quality of software is good.
It helps to identifying the requirements.
Disadvantages
It is very difficult to predict how the system will work after development.
This model is time consuming.
MODULE 1
Integration testing
System testing
[Link]
In this step, the development team will deploy the working project to end users.
Once an iteration is finished and fully tested, the software is ready to be released to the end
users. In Agile, deployment isn't a one-time event—it's an ongoing process. Updates and
improvements are rolled out regularly, making sure the software keeps evolving and getting
better with each release.
[Link]
This is the last step of the Agile Model. In this, the team receives feedback about the
product and works on correcting bugs based on feedback provided by the customer.
Take feedback from customers, users, and stakeholders after each iteration.
Understand how well the product meets user needs and identify areas for improvement.
Make adjustments to the development plan based on feedback to improve the product
further.
Agile Methodologies
Scrum: A framework for managing complex projects, emphasizing teamwork,
accountability, and iterative progress.
Kanban: A method for visualizing workflow, limiting work in progress (WIP), and
maximizing efficiency.
Extreme Programming (XP): Focuses on engineering practices and team collaboration for
high-quality software.
Lean Software Development: Applies lean manufacturing principles to software
development, focusing on eliminating waste.
New changes can be implemented at a very low cost due to the frequency of new
increments.
Implementing a new feature requires developers to lose only a few days or even just hours
of work to get it back and implemented.
In the Agile model, unlike the Waterfall model, very limited planning is required to start a
project.
Agile believes that the needs of end users are always changing in the dynamic business and
IT world.
Changes can be discussed and features can be redesigned or removed based on feedback.
Advantages
Improved Quality
Flexibility & Adaptability
Disadvantages
Less Predictability
Depends on Team Experience
MODULE 1
Complex software projects are made more manageable by Unified Process. It breaks them
into smaller, iterative chunks.
Clear guidelines and workflows from Unified Process boost communication. It ensures
stakeholder collaboration is seamless.
Continuous feedback is emphasized by UP's approach. High-quality software meeting
requirements are the result.
Key Principles of Unified Process
Below are the key principles of the Unified Process:
Iterative and Incremental: Unified Process divides the development process into multiple
iterations, with each iteration adding new functionality incrementally.
Use Case Driven: The Unified Process focuses on identifying and prioritizing use cases
that represent the system's functionality from the user's perspective.
Architecture-Centric: The Unified Process emphasizes defining and refining the system
architecture throughout the development process.
Risk Management: Unified Process identifies and manages project risks proactively to
minimize their impact on the project's success.
Continuous Validation: Unified Process ensures continuous validation of the system's
requirements, design, and implementation through reviews, testing, and feedback.
Phases of Unified Process
Unified Process (UP) is characterized by its iterative and incremental approach to software
development.
The phases in Unified Process provide a structured framework for managing the various
activities and tasks involved in building a software system.
Here's an in-depth look at each phase:
1. Inception
This is the initial phase where the project's scope, objectives, and feasibility are determined.
Key activities in this phase include identifying stakeholders, defining the initial
requirements, outlining the project plan, and assessing risks.
The goal of this phase is to establish a solid foundation for the project and ensure that it is
worth pursuing.
2. Elaboration
In this phase, the project requirements are analyzed in more detail, and the architecture of
the system is defined.
Key activities include developing use cases, creating the architectural baseline, identifying
key components, and refining the project plan.
The goal of this phase is to mitigate major risks and establish a solid architectural
foundation for the project.
3. Construction
This is the phase where the actual implementation of the system takes place.
Key activities include developing, testing, and integrating the system components, as well
as continuously verifying that the system meets the requirements.
The goal of this phase is to build a complete, high-quality software product that is ready
for deployment.
4. Transition
In this final phase, the software is deployed to end users. Key activities include user
training, final system testing, and transitioning the system to the operations and
maintenance team.
The goal of this phase is to ensure a smooth transition from development to production and
to address any issues that arise during deployment.
These phases are iterative, meaning that they may be revisited multiple times throughout
the project to incorporate feedback, make improvements, and address changes in
requirements.
This iterative approach allows for flexibility and adaptability, making the Unified Process
well-suited for complex and evolving software projects.
UP defines a set of core workflows (disciplines) that are performed throughout the
project.
These include: Business Modeling, Requirements, Analysis & Design, Implementation,
Test, Deployment, Configuration & Change Management, Project Management,
Environment.
Advantages
Improved Quality
Iterative and Incremental Development
Disadvantages
Complex to Understand and Implement
Tool Dependency
MODULE 1
Extreme Programming
What is Extreme Programming (XP)?
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.
Agile principles
Working software is the key measure of progress in a project.
For progress in a project, therefore software should be developed and delivered rapidly in
small increments.
Even late changes in the requirements should be entertained.
Face-to-face communication is preferred over documentation.
Continuous feedback and involvement of customers are necessary for developing good-
quality software.
A simple design that involves and improves with time is a better approach than doing an
elaborate design up front for handling all possible scenarios.
The delivery dates are decided by empowered teams of talented individuals
Good practices in extreme programming
Some of the good practices that have been recognized in the extreme programming model and
suggested to maximize their use are given below:
Small projects: The XP model is very useful in small projects consisting of small teams as
face-to-face meeting is easier to achieve.
Projects involving new technology or Research projects: This type of project faces
changing requirements rapidly and technical problems. So XP model is used to complete
this type of project.
Web development projects: The XP model is well-suited for web development projects as
the development process is iterative and requires frequent testing to ensure the system
meets the requirements.
Collaborative projects: The XP model is useful for collaborative projects that require close
collaboration between the development team and the customer.
Projects with tight deadlines: The XP model can be used in projects that have a tight
deadline, as it emphasizes simplicity and iterative development.
Projects with rapidly changing requirements: The XP model is designed to handle rapidly
changing requirements, making it suitable for projects where requirements may change
frequently.
Projects where quality is a high priority: The XP model places a strong emphasis on testing
and quality assurance, making it a suitable approach for projects where quality is a high
priority.
Life Cycle of Extreme Programming (XP)
Planning: The first stage of Extreme Programming is planning. During this phase, clients
define their needs in concise descriptions known as user stories. The team calculates the
effort required for each story and schedules releases according to priority and effort.
Design: The team creates only the essential design needed for current user stories, using a
common analogy or story to help everyone understand the overall system architecture and
keep the design straightforward and clear.
Coding: Extreme Programming (XP) promotes pair programming i.e. wo developers work
together at one workstation, enhancing code quality and knowledge sharing. They write
tests before coding to ensure functionality from the start (TDD), and frequently integrate
their code into a shared repository with automated tests to catch issues early.
Testing: Extreme Programming (XP) gives more importance to testing that consist of both
unit tests and acceptance test. Unit tests, which are automated, check if specific features
work correctly. Acceptance tests, conducted by customers, ensure that the overall system
meets initial requirements. This continuous testing ensures the software's quality and
alignment with customer needs.
Listening: In the listening phase regular feedback from customers to ensure the product
meets their needs and to adapt to any changes.
Values of Extreme Programming (XP)
Communication: The essence of communication is for information and ideas to be
exchanged amongst development team members so that everyone has an understanding of
the system requirements and goals. Extreme Programming (XP) supports this by allowing
open and frequent communication between members of a team.
Simplicity: Keeping things as simple as possible helps reduce complexity and makes it
easier to understand and maintain the code.
Feedback: Feedback loops which are constant are among testing as well as customer
involvements which helps in detecting problems earlier during development.
Courage: Team members are encouraged to take risks, speak up about problems, and adapt
to change without fear of repercussions.
Respect: Every member's input or opinion is appreciated which promotes a collective way
of working among people who are supportive within a certain group.
MODULE 1
Scrum
What is a scrum
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.
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.
The Scrum Flow: Visualizing the Cycle
Scrum operates on an iterative and incremental cycle, allowing for continuous delivery and
adaptation.
Imagine a circular flow: Sprint Planning initiates the Sprint, followed by Daily Scrums
guiding the ongoing development.
At the end of the Sprint, the Sprint Review showcases the Increment and gathers feedback,
leading into the Sprint Retrospective to refine processes.
This cycle repeats, ensuring the product evolves based on feedback and changing needs.
Features of Scrum
Scrum framework works by dividing the large product into small sub-products. It's like a
divide and conquer strategy
In Scrum customer satisfaction is very important.
It can be difficult for the Scrum to plan, structure and organize a project that lacks a clear
definition.
MODULE 1
Functional Requirements
Functional requirements define the specific features and operations a system must perform
to meet business and user needs.
They describe what the system should do and how it should interact with users or other
systems.
Focus on system behavior and functionality.
Represent the features that can be directly observed and tested in the final product.
Common examples include user authentication, data processing, search, payment
handling, and report generation.
Non-Functional Requirements
Non-functional requirements (NFRs) define how a system should operate, focusing on
performance, reliability, and user experience rather than specific features.
They ensure the system is efficient, secure, and maintainable over time.
Performance – speed and responsiveness
Security – protection against unauthorized access
Usability – ease of use
Reliability – system stability and availability
Scalability – ability to handle growth
Maintainability – ease of updates and fixes
Portability – ability to run in different environments
MODULE 1
User Requirements
What is User Requirements
User requirements in software engineering define what end-users need and expect from a
system, described in simple, non-technical language to guide development, focusing on
high-level goals, features, and user interactions rather than how the system works
technically, forming the foundation for detailed system requirements.
They are gathered via interviews, surveys, and feedback, and documents like User
Requirements Specifications (URS) detail these needs for stakeholders, ensuring the final
product aligns with business goals and user tasks.
Key Characteristics
User-Focused: Written from the end-user's perspective, explaining what they want the
software to do, not how.
Natural Language: Uses simple, clear language, avoiding jargon, often expressed in user
stories or high-level statements.
High-Level: Describes goals, features, and desired outcomes (e.g., "The user shall be able
to upload photos").
Smart: Should be Specific, Measurable, Achievable, Relevant, and Time-bound (SMART)
where possible.
Types of User Requirements
1. Functional Requirements: What the system must do (e.g., user registration, search, payment
processing).
2. Non-Functional Requirements (Quality Attributes): How the system should perform (e.g.,
security, performance, usability, reliability).
Users Requirements of Document
Purpose in Software Development
Foundation: Serves as the basis for detailed system requirements, design, and testing.
Communication: Bridges the gap between non-technical users/stakeholders and the
technical development team.
Reduces Misunderstandings: Clearly defining needs early prevents costly changes later.
Examples
The system must allow customers to create an account with their email and
password."(Functional)
The application must load the user's dashboard in under 2 seconds. (Non-
Functional/Performance)
The production manager needs to view daily sales reports in PDF format."(Functional)
MODULE 1
System Requirements
What is System Requirements
System requirements describe what a software system should do and the constraints under
which it must operate.
They act as a formal agreement between stakeholders and the development team, clearly
defining the system’s functionality, performance, and limitations.
System requirements are usually documented in a Software Requirements Specification
(SRS) document.
Requirement Engineering
Requirement Engineering (RE) is a systematic and disciplined process of identifying, analyzing,
documenting, validating, and managing the requirements of a software system. It plays a critical
role in the success of software projects because requirements form the foundation for design,
development, testing, and maintenance.
Components of an SRS
An SRS document typically includes the following types of requirements:
Functional Requirements: Defines system behavior, processing logic, and expected
outputs, including calculations and validation rules.
Interface Requirements: Describes interactions with users, hardware, or other systems
via APIs, communication formats, and data streams.
Performance Requirements: Specifies system efficiency, such as response times,
memory usage, and error limits.
Non-Functional Requirements: Outlines quality parameters like usability, reliability,
scalability, security, and maintainability.
Design Constraints: Lists technical restrictions, such as specific algorithms, technology
standards, or resource limitations.
Appendices: Contains supporting information, including definitions, abbreviations,
diagrams, and tables.
Uses of the SRS Document
The SRS document is used by various project stakeholders:
Development Team: To build the product according to specific needs.
Testing Group: To generate test plans based on described external behavior.
Maintenance Staff: To understand the intended functions of the software.
Project Managers: To create plans and estimates for schedules and resources.
Customers: To understand what product they can expect and as a formal contract with
the developer.
Requirements Verification
Requirements verification is the process of confirming that requirements contain all necessary
elements of a well-written specification. It is a critical step that should be performed early and
often to prevent expensive rework later in development.
Importance of Verification
Ensures Quality: Guarantees specifications are complete, correct, and consistent.
Reduces Costs: Fixes errors in the documentation phase rather than in the final code.
Early Detection: Uncovers ambiguous or missing requirements to avoid cascading
issues.
Minimizes Risk: Reduces the likelihood of system failure during critical phases.
Verification Techniques
Inspection: A systematic, formal review by experts to find errors or omissions.
Testing: Executing tests (unit, integration, or acceptance) to verify functionality.
Walkthrough: A less formal review where stakeholders provide feedback.
Prototyping: Building a simplified version of the software to validate needs.
Feasibility Study
A feasibility study is a systematic analysis conducted to evaluate the practicality, costs, benefits,
and overall viability of a proposed system or project. It helps in deciding whether the project
should be approved, modified, postponed, or rejected. The study examines various aspects such
as technical, economic, operational, legal, and scheduling feasibility to ensure that the project
can be successfully completed within the given constraints and available resources.
Technical Feasibility
Evaluates availability of required technology and tools.
Checks technical skills and infrastructure readiness.
Ensures the system can be developed successfully.
Economic Feasibility
Estimates total project cost and expected benefits.
Performs cost-benefit analysis and ROI calculation.
Operational Feasibility
Examines compatibility with existing workflows.
Ensures smooth integration into daily operations.
Social Feasibility
Evaluates impact on society and stakeholders.
Measures social acceptance and cultural suitability.
Data Model
Represents data elements and their relationships visually.
Helps organize, store, access, and manage data efficiently.
Enables collaboration between business and technical teams.
Types of Data Models
Used to represent data at different levels of abstraction. It consists of
Conceptual Data Model
Represents high-level business concepts and relationships.
Focuses on understanding business requirements.
Used by stakeholders and analysts in early stages.
Logical Data Model
Defines entities, attributes, tables, and relationships.
Independent of any specific DBMS.
Used by data architects and analysts for design.
Physical Data Model
Represents actual database implementation.
Includes tables, columns, keys, and constraints.
Used by developers and database administrators.
Data Modeling Process
Data modelers work closely with stakeholders such as developers, database administrators and
business users at each stage to define entities and attributes, establish relationships and create
models that accurately represent data in a format usable by applications.
1. Identifying data sources: The first step is to identify and examine data sources, both internal
and external to the organization.
2. Defining Entities and Attributes: At this stage, data modelers identify entities (objects or
concepts) and their attributes (characteristics).
4. Choosing a model Type: Selecting the appropriate data model type is crucial and depends on
project requirements and data characteristics.
Association
Represents a connection between two or more classes.
Can be binary or multi-class association.
Shown using a solid line in UML.
Aggregation
A special association representing a “has-a” relationship.
Parts can exist independently of the whole.
Represents whole–part or container–content relation.
Composition
Stronger form of aggregation.
Parts cannot exist without the whole.
Parts are destroyed when the whole is destroyed.
Generalization
Represents inheritance between classes.
Child class inherits properties of parent class.
Shown with a solid line and arrow toward parent class.
Dependency
Indicates a weak relationship between classes.
Change in one class may affect another.
Represented using a dashed arrow line.
Realization
Represents implementation of an interface by a class.
Similar to inheritance but with interfaces.
Shown using a dashed line with arrow.
Cardinality
Represents how many times an entity participates in a relationship.
Defines how data in different tables are connected.
Helps identify number of possible relationship instances.
Mapping Cardinality
Specifies how many entities of one set relate to another.
Mainly used for binary relationships in ER models.
Helps in proper table linking and normalization.
Types of Cardinality
Types of cardinality in between tables are:
One-to-One Relationship
One entity in A relates to only one entity in B.
Relationship is unique and exclusive.
Used when entities are tightly linked.
One-to-Many Relationship
One entity in A relates to many entities in B.
Each entity in B relates to only one entity in A.
Commonly used in parent–child relationships.
Many-to-One Relationship
Many entities in A relate to a single entity in B.
B can be associated with multiple A entities.
Reverse form of one-to-many.
Many-to-Many Relationship
Entities in A relate to multiple entities in B.
Entities in B also relate to multiple entities in A.
Usually resolved using a junction table.
Modality
Also called participation constraint.
Defines whether relationship participation is optional or mandatory.
Uses values 0 (optional) and 1 (mandatory).
Optional Participation (Modality = 0)
Entity may or may not participate in the relationship.
Relationship occurrence is not compulsory.
Entity can exist independently.
Mandatory Participation (Modality = 1)
Entity must participate in the relationship.
Relationship occurrence is compulsory.
Entity cannot exist without the relationship.
Class-Based Modeling
Represents system structure using classes, objects, attributes, and relationships.
Helps visualize real-world concepts in an object-oriented manner.
Forms the foundation for UML class diagrams and OOP design.
Key Elements of Class-Based Modeling
Class
Acts as a blueprint for creating objects.
Ensures all objects share a common structure and behavior.
Objects
Instances of a class with actual values.
Maintain their own state and behavior.
Represent real-world entities like Student, Car, or Book.
Attributes
Define properties or data members of a class.
Store values with specific data types.
Help differentiate one object from another.
Operations (Methods)
Define actions or behaviors of a class.
Access or modify attribute values.
Support encapsulation and reusability.
Relationships between classes
In class diagrams, relationships between classes describe how classes are connected or interact
with each other within a system.
Entity Classes
Represent real-world business objects.
Store persistent data and attributes.
Contain business rules.
Boundary Classes
Handle interaction between users and the system.
Manage input and output interfaces.
Represent screens, forms, or APIs.
Control Classes
Manage system logic and workflows.
Coordinate between entity and boundary classes.
Handle validations and process flow.
Steps in Identifying Analysis Classes
Step 1: Study Requirements- Understand the domain, actors, and scenarios.
Step 2: Extract Nouns and Verbs
• Nouns → possible classes
• Verbs → possible operations/relationships
Step 3: Categorize Classes- Entity, boundary, and control.
Step 4: Eliminate Irrelevant Terms- Remove abstract, vague, or non-technical nouns.
Step 5: Validate with Stakeholders- Ensure completeness and correctness.
Step 6: Define Attributes & Responsibilities- Assign attributes, operations, and constraints.
Step 7: Create Initial Class Diagrams- Represent relationships among identified classes.
INTRODUCTION TO SOFTWARE: MODULE 2
In software engineering, attributes refer to the quality characteristics and data properties of a
system, while operations define the behaviors, functions, and lifecycle processes involved in
developing and managing that software.
Attributes in Software Engineering
Attributes describe the essential qualities and characteristics of a software product or system.
They can be generally categorized into product attributes (quality) and data attributes
(properties of an object).
1 . Product/Quality Attributes
These attributes, often referred to as non-functional requirements, define "how well" the software
performs its functions.
Conclusion
Software Design is a crucial stage in SDLC that ensures a well-structured, maintainable, and
efficient software system before development begins.
MODULE 2
1. Architectural Design
Defines the overall structure of the system and identifies major components and their
relationships.
2. High-Level Design
Breaks the system into subsystems and modules and explains their interaction.
3. Detailed Design
Specifies internal logic of each module including algorithms and data structures.
Software Design Concepts
Abstraction: Hides complexity and shows only essential features.
Information Hiding: Restricts access to internal module details.
Refactoring: Improves code structure without changing functionality.
Modularity: Divides system into smaller, manageable modules.
Design Patterns: Reusable solutions to common design problems.
Architecture: Blueprint of system structure and behavior.
Refinement: Gradual detailing of the system design.
Conclusion
Software design transforms requirements into a structured solution for implementation. It plays a
crucial role in SDLC by ensuring correctness, efficiency, maintainability, and clarity before
coding begins.
MODULE 2
1. Analyze Requirements: Identify both functional (what the system does) and non-functional
(performance, security, scalability) requirements.
2. Define System Structure: Break the system down into manageable modules or services
using a "divide and conquer" approach.
3. Choose Architectural Styles/Patterns: Select a proven pattern that fits your needs, such as
Layered, Microservices, or Event-Driven architecture.
4. Establish Component Interfaces: Define how various parts of the system will
communicate, such as through REST APIs, message queues, or direct calls.
5. Visualize and Document: Create diagrams (e.g., using the C4 model or UML) to provide a
clear blueprint for stakeholders and developers.
6. Prototype and Iterate: Build a small-scale version to validate your design decisions early
and refine them based on feedback.
When designing the fundamental structure of a software system, architects often rely on proven
solutions to recurring problems. These well-established approaches are known as architectural
styles and architectural patterns. They provide a vocabulary and a set of best practices that help create
robust, scalable, and maintainable software.
Think of architectural styles as the overall structural organization of a software system, defining the
types of components and their relationships. Architectural patterns, on the other hand, are reusable
solutions to common problems within a specific architectural style or even across different styles.
Patterns offer a more detailed design solution for particular aspects of the architecture.
Architectural Styles
Architectural styles represent a family of systems conforming to a common set of characteristics. They
define a vocabulary of components and connectors, along with constraints on how they can be
combined. Choosing the right architectural style early on significantly influences the quality attributes of
the software.
2. Layered Architecture
Organizes the system into a hierarchy of layers, where each layer performs a specific role and
communicates only with the layers immediately above and below it. Common layers include
presentation, business logic, and data access.
Characteristics:
• Improved testability.
3. Client-Server Architecture :
Distributes tasks between service providers (servers) and service requesters (clients). Clients initiate
requests, and servers respond with the requested information or service.
Characteristics:
4. Microservices Architecture
Structures an application as a collection of small, independent services, each running in its own process
and communicating through lightweight mechanisms, often HTTP APIs.
Characteristics:
Components communicate through asynchronous events. Producers emit events without knowing who
the consumers are, and consumers subscribe to the events they are interested in.
Characteristics:
Architectural Patterns
Architectural patterns provide reusable solutions to common problems within a given context. They
offer a proven template for solving a specific design challenge.
1. Model-View-Controller (MVC): A popular pattern for designing user interfaces, particularly in web
applications. It separates the application into three interconnected parts:
• Controller: Handles user input and updates the model and/or view.
2. Repository Pattern: Abstracts the data access layer, providing a consistent way to retrieve and persist
data without exposing the underlying data storage mechanism.
3. Service-Oriented Architecture (SOA): While often considered an architectural style, SOA can also be
viewed as a pattern that structures an application as a collection of loosely coupled services that
communicate through well-defined interfaces (often using protocols like SOAP).
4. Observer Pattern: Defines a one-to-many dependency between objects so that when one object (the
subject) changes state, all its dependents (observers) are notified and updated automatically.
MODULE 2
Golden Rules
Golden Rules of Software Engineering are fundamental principles that guide developers to build
high-quality, reliable, and maintainable software. These rules are often asked in exams and are
useful in real projects too.
A unit test is a small piece of code that checks if a specific function or method in is an
application works correctly. It will work as the function inputs and verifying the outputs.
These tests check that the code work as expected based on the logic the developer intended.
In these multiple tests are written for a single function to cover different possible scenarios
and these are called test cases. While it is ideal to cover all expected behaviours, it is not
always necessary to test every scenario. Unit tests should run one by one, it means that they
do not depend on other system parts like databases or networks. Instead, data stubs can be
used to simulate these dependencies. Writing unit tests is easiest for simple, self-contained
code blocks.
Unit testing strategies
To create effective unit tests, follow these basic techniques to ensure all scenarios are
covered:
Logic checks: Verify if the system performs correct calculations and follows the expected
path with valid inputs. Check all possible paths through the code are tested.
Boundary checks: Test how the system handles typical, edge case, and invalid inputs.
For example, if an integer between 3 and 7 is expected, check how the system reacts to a
5 (normal), a 3 (edge case), and a 9 (invalid input).
Error handling: Check the system properly handles errors. Does it prompt for a new
input, or does it crash when something goes wrong?
Integration Testing is important because it ensures that individual modules work together
correctly, detects interface or communication issues early, and improves the overall reliability,
performance, and quality of the software.
There are four main strategies for executing integration testing: big-bang, top-down, bottom-
up, and sandwich (or hybrid) testing. Each of these methods comes with its own set of
advantages and challenges, so it's important to choose the right one based on the specific
needs of your project. Those approaches are the following:
MODULE 2
Validation testing
The process of evaluating software during the development process or at the end of the
development process to determine whether it satisfies specified business requirements.
Validation Testing ensures that the product actually meets the client's needs. It can also be
defined as to demonstrate that the product fulfils its intended use when deployed on appropriate
environment.
Activities:
Unit Testing
Integration Testing
System Testing
User Acceptance Testing
Purpose
There are various types of validation testing that software teams can perform throughout the
development process to ensure the software meets user needs:
1. Functional Testing: Ensures the software's features work according to the specified
requirements. It involves testing individual functionalities of the application to ensure
the software behaves as expected.
2. Non-Functional Testing: Assesses aspects like performance, security, and usability
to ensure the software can handle real-world conditions. Accessibility testing, for
example, ensures the product is accessible to all users, including those with
disabilities.
3. User Acceptance Testing (UAT): In this phase, real users test the software to verify
that it meets their needs and expectations before release.
4. System Testing: Involves evaluating the software as a whole to ensure all
components work together correctly. This includes end-to-end testing of the entire
system.
5. Regression Testing: Ensures that new updates or changes to the software don’t
negatively impact existing functionality. Validation can help confirm that the software
update doesn't introduce new bugs.
6. Beta Testing: Performed in a real-world environment by end users, beta testing helps
identify any issues that may have been overlooked during earlier testing phases.
Black Box Testing: Focuses on testing the software without looking at the underlying
code. The tester inputs data and examines the outputs, verifying whether the software
behaves as expected.
White Box Testing: Involves testing the internal structures of the application, with a
focus on understanding the code and how it functions.
Test Automation: Tools can be employed to automate repetitive tasks in validation
testing, ensuring consistency and efficiency. Automation testing is particularly useful
for running large sets of test cases during regression
System testing
System Testing is a type of software testing that is performed on a completely integrated
system to evaluate the compliance of the system with the corresponding requirements. In
system testing, integration testing passed components are taken as input.
The goal of integration testing is to detect any irregularity between the units that are
integrated. System testing detects defects within both the integrated units and the whole
system. The result of system testing is the observed behaviour of a component or a system
when it is tested.
System Testing is carried out on the whole system in the context of either system
requirement specifications or functional requirement specifications or the context of both.
System testing tests the design and behaviour of the system and also the expectations of
the customer.
It is performed to test the system beyond the bounds mentioned in the software
requirements specification (SRS). System Testing is performed by a testing team that is
independent of the development team and helps to test the quality of the system impartial.
It has both functional and non-functional testing. System Testing is performed after the
integration testing and before the acceptance testing.
Test Environment Setup: Create testing environment for the better quality testing.
Create Test Case: Generate test case for the testing process.
Create Test Data: Generate the data that is to be tested.
Execute Test Case: After the generation of the test case and the test data, test cases are
executed.
Defect Reporting: Defects in the system are detected.
Regression Testing: It is carried out to test the side effects of the testing process.
Log Defects: Defects are fixed in this step.
Retest: If the test is not successful then again test is performed.
Types of testing
Functional Testing: This checks if the system’s features work as expected and meet the
defined requirements.
Performance Testing: This tests how the system performs under different conditions,
like high traffic or heavy use, to ensure it can handle the expected load.
Security Testing: This ensures the system’s security measures protect sensitive data from
unauthorized access or attacks.
Compatibility Testing: This makes sure the system works well across different
hardware, software, and network environments.
Usability Testing: This evaluates how easy and user-friendly the system is, making sure
it provides a good experience for users.
MODULE 2
Black-Box testing
Black-box testing is a Type of Software Testing in which the tester is not concerned with the
software’s internal knowledge or implementation details but rather focuses on validating
the functionality based on the provided specifications or requirements.
The testing of application without knowing the internal code or structure, following are the
various Types of Black Box Testing:
1. Functional Testing
Functional Testing is a type of Software Testing in which the system is tested against the
functional requirements and specifications. Functional testing ensures that the requirements
or specifications are properly satisfied by the application.
This testing is not concerned with the source code of the application. Each functionality
of the software application is tested by providing appropriate test input, expecting the
output, and comparing the actual output with the expected output.
This testing focuses on checking the user interface, APIs, database, security, client or
server application, and functionality of the Application Under Test. Functional testing
can be manual or automated. It determines the system’s software functional requirements.
2. Regression Testing
Regression Testing is like a Software Quality check-up after any changes are made. It
involves running tests to make sure that everything still works as it should, even after updates
or tweaks to the code. This ensures that the software remains reliable and functions properly,
maintaining its integrity throughout its development lifecycle.
Regression means the return of something and in the software field, it refers to the return
of a bug. It ensures that the newly added code is compatible with the existing code.
In other words, a new software update has no impact on the functionality of the software.
This is carried out after a system maintenance operation and upgrades.
3. Non-functional Testing
Non-functional Testing is a type of Software Testing that is performed to verify the non-
functional requirements of the application. It verifies whether the behaviour of the system is
as per the requirement or not. It tests all the aspects that are not tested in functional testing.
It is designed to test the readiness of a system as per non-functional parameters which are
never addressed by functional testing.
It is as important as functional testing.
It is also known as NFT. This testing is not functional testing of software. It focuses on
the software’s performance, usability, and scalability.
Advantages of Black Box Testing
The tester does not need to have more functional knowledge or programming skills to
implement the Black Box Testing.
It is efficient for implementing the tests in the larger system.
Disadvantages of Black Box Testing
There is a possibility of repeating the same tests while implementing the testing
process.
Without clear functional specifications, test cases are difficult to implement.
MODULE - 2
Conclusion
White box testing checks the internal code and logic of software to re-sure it to works properly and is
optimized. It includes unit testing, integration testing, and regression testing, using methods like statement
and branch coverage. While it helps catch defects early and improve performance, it requires knowledge
of programming to understand issues related to the software's external behaviour.
MODULE -2
ART_OF_DEBUGGING:
Debugging in Software Engineering is the process of identifying and resolving errors or bugs in a
software system. It's a critical aspect of software development, ensuring quality, performance, and user
satisfaction. Despite being time-consuming, effective debugging is essential for reliable and competitive
software products.
Here are we discussing the points related to Debugging in detail:
What is Debugging?
In the context of software engineering, debugging is the process of fixing a bug in the software. When
there's a problem with software, programmers analyze the code to figure out why things aren't working
correctly. They use different debugging tools to carefully go through the code, step by step, find the issue,
and make the necessary corrections.
Process of Debugging
Debugging is a crucial skill in programming. Here’s a simple, step-by-step explanation to help you
understand and execute the debugging process effectively:
Step 1: Reproduce the Bug
To start, you need to recreate the conditions that caused the bug. This means making the error
happen again so you can see it firsthand.
Seeing the bug in action helps you understand the problem better and gather important details for
fixing it.
Step 2: Locate the Bug
Next, find where the bug is in your code. This involves looking closely at your code and checking
any error messages or logs.
Developers often use debugging tools to help with this step.
Step 3: Identify the Root Cause
Now, figure out why the bug happened. Examine the logic and flow of your code and see how
different parts interact under the conditions that caused the bug.
This helps you understand what went wrong.
Step 4: Fix the Bug
Once you know the cause, fix the code. This involves making changes and then testing the program to
ensure the bug is gone.
Sometimes, you might need to try several times, as initial fixes might not work or could create new
issues.
Using a version control system helps track changes and undo any that don't solve the problem.
Step 5: Test the Fix
After fixing the bug, run tests to ensure everything works correctly. These tests include:
Unit Tests: Check the specific part of the code that was changed.
Integration Tests: Verify the entire module where the bug was found.
System Tests: Test the whole system to ensure overall functionality.
Regression Tests: Make sure the fix didn’t cause any new problems elsewhere in the application.
Step 6: Document the Process
Finally, record what you did. Write down what caused the bug, how you fixed it, and any other
important details.
This documentation is helpful if similar issues occur in the future.
Advantage of Debugging:
Improved system quality: By identifying and resolving bugs, a software system can be made more
reliable and efficient, resulting in improved overall quality.
Reduced system downtime: By identifying and resolving bugs, a software system can be made more
stable and less likely to experience downtime, which can result in improved availability for users.
Disadvantages of Debugging:
Time-consuming: Debugging can be a time-consuming process, especially if the bug is difficult to find or
reproduce. This can cause delays in the development process and add to the overall cost of the project.
Can be difficult to reproduce: Some bugs may be difficult to reproduce, which can make it challenging
to identify and resolve them.
Conclusion
In conclusion, debugging is an important part of software engineering, focused on finding and fixing
bugs in software systems. It helps improve system quality, reduce downtime, increase user satisfaction,
lower development costs, enhance security, and support system changes and testing.
MODULE-2
Importance of Analysis Model Metrics: Applying metrics at the analysis model stage offers several
significant benefits:
Early Estimation: Provides a basis for estimating project size, cost, and effort, even before
design or coding begins.
Risk Identification: Helps in identifying potential risks associated with unclear or complex
requirements.
Improved Planning: Facilitates better project planning and resource allocation.
Enhanced Communication: Offers a common, quantitative language for discussing
requirements and their implications among stakeholders.
Quality Assessment: Assesses the quality and completeness of the requirements document itself.
Key Metrics for the Analysis Model
Various metrics can be employed to evaluate the analysis model, each providing unique insights into the
software system’s characteristics and the quality of its requirements.
1. External Inputs (EIs): Data or control information that enters the system from outside sources.
2. External Outputs (EOs): Data or control information that leaves the system and goes to external
destinations.
3. External Inquiries (EQs): Inputs that result in an immediate output, typically a query to retrieve
data.
4. Internal Logical Files (ILFs): User-identifiable logical files within the system’s boundary.
5. External Interface Files (EIFs): User-identifiable logical files external to the system but
referenced by it.
Each of these components is then weighted based on its complexity (simple, average, or complex). The
unadjusted function point count is further refined by considering 14 “Value Adjustment Factors” (VAFs)
that account for various processing complexity characteristics, resulting in the final adjusted Function
Point count.
Conclusion
Metrics for the analysis model, particularly Function Point analysis, are indispensable tools for managing
software development effectively from its earliest stages. They provide quantitative insights into the
software’s functional size and the characteristics of its requirements, enabling better estimation,
planning, and risk management. By focusing on these early metrics, development teams can build a solid
foundation, leading to more predictable and successful software projects.
MODULE-2
Quality Metrics
Quality metrics for the design model focus on evaluating aspects that contribute to the overall quality,
maintainability, and effectiveness of the design. They help to ensure that the design meets requirements,
easy to understand, and is maintainable. Here are some commonly used quality metrics:
1. Modularity: This measures how well the design can be divided into cohesive and loosely coupled
modules,
2. Complexity: Evaluate the complexity of the design model using metrics like cyclomatic complexity or
the number of classes/ interfaces per package/ module.
3. Abstraction: Assess the level of abstraction in the design, indicating how well the design captures the
essential aspects while hiding the unnecessary details.
4. Coupling: Measures the degree of interdependence between the modules.
5. Cohesion: This evaluates how well elements within a module belong together. High cohesion means
that the elements within the module are closely related.
Performance Metrics
Performance metrics focus on evaluating how well the design supports the expected performance
characteristics of the software system. These help in assessing the efficiency, scalability, responsiveness,
and resource utilization of the design. Here are some commonly used performance metrics:
1. Scalability: It measures how well the design model accommodates the increase in workload. This
includes evaluating the ability to handle large datasets, higher user loads, or increased complexity
without significant degradation in performance.
2. Response Time: The time taken by the design model to respond to a user request. This metric is
important for assessing the responsiveness of the product.
3. Throughput: Measure of the rate at which the design model can process tasks within a given time
frame. This metric is important for systems handling large volumes of transactions.
4. Resource Utilization: Evaluation of the resources such as CPU, memory, and network bandwidth
consumed by the design model during the operation. Efficient resource utilization ensures optimal
performance.
5. Latency: The time taken for a request to travel from the source to the destination and back. Low
latency is critical for real-time applications where timely responses are important.
Usability Metrics
Usability metrics for the design model of the product focus on evaluating how user-friendly and effective
is the design in meeting user expectations. It helps to ensure that the design model supports efficient
navigation and overall user satisfaction. Here are some key usability metrics for the design model of the
product:
1. Efficiency: Evaluates how quickly a user can complete the tasks once they are familiar with the design
model. This includes metrics like task completion time and number of steps required to complete
common actions.
2. Effectiveness: Evaluate the accuracy with which the users can achieve their goals using the design
model. It includes metrics like error rates and task success rates.
3. Learnability: This measures how easy it is for first-time users to understand and navigate the design
model. This can be assessed through the time taken to complete basic tasks and ease of understanding
navigation pathways.
Reliability Metrics
Reliability metrics of the design model assess the ability to consistently perform as expected under various
conditions over time. These metrics help stakeholders assess the robustness and dependability of the
design model. Here are some common reliability metrics:
1. Fault Tolerance: Measures the design model's ability to continue operating properly in the presence
of faults and failures. This includes assessing how well the design model handles unexpected inputs,
errors in data, or component failures.
2. Failure Rate: Measures the frequency of failures encountered during operation. This involves
evaluating the number of failures per unit of time.
3. Mean Time Between Failure (MTBF): Calculates the average time interval between consecutive
failures of the design model. A higher MTBF indicates better reliability.
Cost Metrics
Cost metrics for the design model of the product are important for evaluating the financial implications
associated with developing and maintaining the product. This helps stakeholders understand and manage
costs effectively throughout the product lifecycle. Here are key cost metrics relevant to the design model:
1. Development Cost: Measures the total expenses incurred during the design phase. This includes
salaries of designers, software tools and licenses, and other development expenses.
2. Equipment Costs: This includes the costs associated with specialized tools, equipment, and software
used in the design process.
3. Testing Costs: Measures the expenses related to building prototypes, conducting testing, and
validating the design model. This includes material costs and labor costs for testing.
Conclusion
In conclusion, the metrics for the design model of the product are essential for guiding development
towards our goals. Tracking factors such as usability, scalability, and maintainability helps to ensure that
the design meets the customer's requirements. These metrics serve as a benchmark for success and enable
us to innovate effectively and deliver a product that stands out in both performance and user satisfaction.
MODULE 2
1. Product Metrics: Product metrics are used to evaluate the state of the product, tracing
risks and undercover prospective problem areas. The ability of the team to control quality
is evaluated. Examples include lines of code, cyclomatic complexity, code coverage,
defect density, and code maintainability index.
Examples:
2. Process Metrics: The team or organization. These metrics are used to optimize the
development process and maintenance activities of software. Examples include effort
variance, schedule variance, defect injection rate, and lead time.
Examples:
3. Project Metrics: The project metrics describes the characteristic and execution of a
project. Examples include effort estimation accuracy, schedule deviation, cost variance,
and productivity.
Project progress
Cost and schedule status
Resource utilization
Examples:
Productivity
Risk Exposure
Usually measures-
1. Defect Density: Defect density is a crucial metric for testing that measures the number
of defects found per unit of code. It is commonly expressed as defects per thousand lines
of code (KLOC) or defects per function point. A lower defect density generally indicates
higher software quality and more effective development and testing processes. This metric
helps in identifying modules or components that are particularly prone to bugs, allowing
teams to focus retesting or refactoring efforts. Furthermore, it serves as an important
indicator for gauging the cleanliness of the codebase.
2. Defect Removal Efficiency (DRE): It is a powerful metric for assessing the
effectiveness of the defect detection process. It calculates the percentage of defects found
before software release compared to the total number of defects found (both before and
after release). The formula for DRE is:
Higher DRE indicates a more efficient testing process that successfully identifies and
removes a large proportion of defects before the software reaches end -users. This metric
is a direct measure of effectiveness.
Testing metrics are used to measure how well software testing is done. They help us understand
the quality of the software and the effectiveness of testing. Test coverage tells us how much of
the program code is tested. Higher coverage means better testing and fewer chances of hidden
defects. The number of bugs found shows how many errors are detected during testing. By
studying bug severity, priority, and trends, we can understand software stability. The test case
execution rate shows how many test cases are executed in a given time. It helps measure testing
speed and efficiency. The retest pass rate shows how many failed test cases pass after bugs are
fixed. A high pass rate means bug fixes are effective.
Overall, testing metrics help teams track progress, improve quality, and deliver reliable
software.
MODULE 2
After software deployment, the product enters its maintenance phase, which can extend
for many years. Metrics for maintenance are crucial quantitative measures used to evaluate
the effort, cost, and overall effectiveness of maintaining the software. These metrics
provide vital insights into the long-term viability and cost of ownership of the software
product. By tracking how effectively defects are resolved, how efficiently changes are
implemented, and the resources consumed, organizations can optimize their maintenance
strategies, improve software longevity, and ensure continued user satisfaction.
Various types of metrics are used to evaluate the different aspects of software
maintenance, from bug fixes to enhancements and adaptations.
Mean Time to Change: It measures the average time taken to implement a change request
from its initiation to its successful deployment. A change request could be a bug fix, an
enhancement, or an adaptation to a new environment. A shorter MTTC generally indicates
better maintainability and a more efficient maintenance process. This metric helps teams
understand their agility in responding to evolving needs and issues.
Defect Fix Rate: It measures the speed and efficiency with which reported defects are
resolved and closed. It can be expressed as the number of defects fixed per unit of time
(e.g., per day or week) or the average time taken to fix a defect. A higher defect fix rate
reflects the responsiveness and efficiency of the maintenance team in addressing issues,
directly impacting user satisfaction and system reliability. It helps in assessing the capacity
of the team to handle incoming bug reports.
MODULE 2
In software engineering, a risk is a potential problem that may occur in the future and cause
loss or damage to a software project. Software risks arise due to uncertainty in requirements,
technology, resources, schedule, cost, or management decisions. Risk does not mean a problem
has already occurred; it indicates the possibility of a negative outcome. If risks are not identified
and managed properly, they may lead to project failure, cost overrun, schedule delay, or poor
software quality. Software risk management helps software engineers anticipate potential
problems and take preventive actions to minimize their impact. Therefore, understanding
software risks is essential for successful project execution.
1. Schedule Risk: Schedule related risks refers to time related risks or project delivery
related planning risks. The wrong schedule affects the project development and delivery.
These risks are mainly indicates to running behind time as a result project development
doesn't progress timely and it directly impacts to delivery of project. Finally if schedule
risks are not managed properly it gives rise to project failure and at last it affect to
organization/company economy very badly. Some reasons for Schedule risks –
2. Budget Risk: Budget related risks refers to the monetary risks mainly it occurs due to
budget overruns. Always the financial aspect for the project should be managed as per
decided but if financial aspect of project mismanaged then there budget concerns will
arise by giving rise to budget risks. So proper finance distribution and management are
required for the success of project otherwise it may lead to project failure. Some reasons
for Budget risks –
3. Operational Risks: Operational risk refers to the procedural risks means these are the
risks which happen in day-to-day operational activities during project development due
to improper process implementation or some external operational risks. Some reasons for
Operational risks –
Insufficient resources
Conflict between tasks and employees
Improper management of tasks
4. Technical Risks : Technical risks refers to the functional risk or performance risk which
means this technical risk mainly associated with functionality of product or performance
part of the software product. Some reasons for Technical risks –
5. Programmatic Risks: Programmatic risks refers to the external risk or other unavoidable
risks. These are the external risks which are unavoidable in nature. These risks come from
outside and it is out of control of programs. Some reasons for Programmatic risks –
Risk Identification is the first and most critical step in software risk management. It involves
the systematic process of identifying all possible risks that may negatively affect a software
project in the future. These risks may impact the project’s cost, schedule, quality, scope, or
performance. Since risks represent uncertainty, identifying them early helps organizations
prepare suitable plans to avoid or minimize losses. In software engineering, projects often fail
due to unidentified or poorly managed risks. Therefore, risk identification plays a key role in
improving project success and reliability.
Probability of occurrence
Impact on cost, schedule, and quality
4. Identify Opportunities: Risk management should not only focus on threats but also
identify opportunities that can positively impact the project, such as improved processes or
new technologies.
5. Allow Multiple Perspectives: Risk identification should involve different stakeholders like
developers, testers, managers, and customers. Multiple viewpoints help in identifying hidden
or overlooked risks.
6. Link to Project Objectives: Each risk should be linked to project goals such as time, cost,
quality, and performance. This helps in understanding how risks affect overall project success.
7. Detail the Risk Statements: Risks should be clearly and precisely documented. A good
risk statement includes:
9. Processes for Emergent Risks: Projects should have proper processes to identify and
manage new or unexpected risks that arise during development.
MODULE 2
Risk Projection, also known as Risk Estimation, is the process of evaluating the likelihood
(probability) and impact of identified risks in a software project. After risks are identified, it is
necessary to analyze how serious each risk is and how much damage it can cause. Risk
projection helps project managers prioritize risks and focus on the most critical ones. Risk
projection plays a key role in effective decision-making and resource allocation in software
projects.
1. Identify Risks
This is the first step in risk projection. In this step, all possible risks that may affect the software
project are identified. These risks may be related to cost, schedule, technology, resources, or
quality. The output of this step is a list of identified risks.
2. Estimate Likelihood
After identifying risks, the next step is to estimate the likelihood (probability) of each risk
occurring. Likelihood may be expressed qualitatively (high, medium, low) or quantitatively
(percentage). This step helps in understanding how often a risk may occur.
3. Estimate Impact
In this step, the impact of each risk is assessed. Impact refers to the extent of damage the risk
can cause if it occurs. It may affect project cost, schedule, quality, or performance. Higher
impact risks require more attention.
4. Prioritize Risks
Based on the estimated likelihood and impact, risks are ranked in order of importance. Risks
with high probability and high impact are given the highest priority. This step helps project
managers focus on the most critical risks.
In this step, appropriate strategies are developed to handle the prioritized risks. Risk response
plans may include:
Risk avoidance
Risk mitigation
Risk transfer
Risk acceptance
The circular flow of the diagram indicates that risk projection is an iterative process. As the
project progresses, new risks may emerge and existing risks may change. Therefore, the cycle
is repeated throughout the Software Development Life Cycle (SDLC).
Following the crucial steps of identifying and projecting potential threats, the next stage
in effective risk management is risk refinement. This process involves taking each major
risk that has been identified and breaking it down into more detailed and manageable sub -
risks. The primary purpose of risk refinement is to gain a deeper, more granular
understanding of the specific elements that contribute to a broader risk. By doing so,
project teams can develop more precise analyses, create highly focused mitigation plans,
and ultimately implement more effective strategies to address potential problems before
they become critical.
Risk refinement systematically examines each projected risk in greater detail. It moves
beyond a general understanding to pinpoint the specific factors that might cause a risk to
materialize. For example, if “High staff turnover” is identified as a major project risk
during the risk projection phase, risk refinement would delve into the specific reasons or
sub-components that could lead to staff turnover within the software project.
Let’s consider the broad risk previously identified: “High staff turnover”.
Risk refinement would break this general risk down into more specific and actionable sub -
risks. This makes it easier to understand the root causes and develop targeted solutions.
Sub-risks for “High staff turnover” could include:
The process of risk refinement offers several significant advantages for managing software
projects more effectively:
A reactive risk strategy is characterized by a “wait and see” approach. In this model, the
project team only responds to risks once they have materialized into actual problems or
crises. There is little to no prior planning or anticipation of potential issues.
Characteristics:
No Prior Planning: Risks are not actively identified or analyzed before they
occur.
Crisis Management: The focus is on fixing problems as they arise, often
leading to hurried and less efficient solutions.
Unforeseen Impacts: When risks turn into problems, they can cause
significant, unexpected impacts on project schedules, budgets, and product
quality.
Stressful Environment: This approach often creates a high-pressure and
stressful working environment due to constant “fire-fighting.”
Analogy: Imagine a team that only calls the fire department after the building is
already ablaze, without ever having planned for fire safety.
In contrast, a proactive risk strategy involves actively anticipating and planning for
potential risks before they have a chance to affect the project. This approach is highly
recommended in software engineering due to the complex and often unpredictable nature
of development.
Characteristics:
Analogy: This is like installing smoke detectors, having fire extinguishers, and
practicing evacuation drills long before any fire ever starts.
RMMM:
Typically, a risk management strategy can be found in the software project plan. Risk
mitigation, monitoring, and a management plan can be used to categorize this (RMMM). All
tasks in this plan are completed as part of a risk analysis.
Risk" refers to a situation that could result in a loss or jeopardise the project's progress but has
not yet occurred.
The Risk Mitigation, Monitoring, and Management (RMMM) plan is a document that outlines
all risk analysis activities. This document is sometimes included in the overall project plan by
the project manager.
Risk Management:
A software project can be associated with a wide range of threats. It is necessary to classify
risks into distinct classes in order to be able to systematically identify the critical risks that
may harm a software project. After that, the project manager can determine whether risks
from each category are crucial to the project.
Risk management is the process of identifying, addressing, and resolving problems before
they harm the project.
The risks can be broadly categorised into three categories, as illustrated below:
1. Project risks are those that have an impact on the project's schedule or resources.
2. Product risks affect the quality or performance of the product being developed.
3. Business risks are risks to the corporation developing or licensing the software.
Risk Management Activities: Risk management is assessing the unfavourable events that could
occur, their likelihood of occurring, and the losses that would result if they did. While
considering this, solutions can be designed to lessen the possibility of the content being a risk
or having an impact. As a result, risk management is centred on risk assessment and control.
In most cases, a risk management approach can be found in the software project plan. This can
be broken down into three sections: risk mitigation, monitoring, and management (RMMM).
All work is done as part of the risk analysis in this strategy. The project manager typically uses
this RMMM plan as part of the overall project plan.
Some development teams use a Risk Information Sheet(RIS) to document risk. For faster
information handling, such as creation, priority sorting, searching, and other analyses, this RIS
is controlled by a database system.
Risk Mitigation
Risk Mitigation is a technique for avoiding risks (Risk Avoidance).
The following are steps to take to reduce the risks:
Identifying the risk.
Getting rid of the causes that lead to the production of risk.
Controlling the relevant documents regularly.
Conducting timely reviews to accelerate the process.
Risk Monitoring
Risk monitoring is an activity used to track a project's progress.
The following are the critical goals of the task.
To see if the risks that were anticipated actually happen.
To verify that the risk aversion steps defined for risk are adequately implemented.
To gather information for future risk assessments.
To determine which risks generate which problems throughout the project.
Drawbacks of RMMM
It raises the cost of the project.
Time will be needed more.
A larger project's implementation of an RMMM could prove to be a time-consuming
process in and of itself.
RMMM cannot guarantee a project will be risk-free; in fact, hazards could materialise
after the project has been delivered.
Conclusion
We learned about risk management activities and the RMMM plan in this article. We also infer
from this article how project managers do risk management, and the RMMM plan is one of
these techniques.
MODULE-2
Quality Concepts
In the realm of software engineering, a clear understanding of quality concepts is
fundamental to developing successful and reliable software. These concepts lay the
groundwork for what software quality truly entails, how it is perceived, and how it can be
achieved.
Product Revision: Addresses the ease with which software can be changed,
encompassing maintainability, flexibility, and testability. These are crucial
concepts for the long-term life of the software.
Conclusion
Producer (Author): The individual who created the work product being reviewed.
Their role is to provide context and clarify points, and later to address the identified
defects.
Moderator: The facilitator of the FTR meeting. The moderator ensures the
meeting stays on track, enforces the rules, keeps participants focused on defect
finding, and manages time.
Reviewers: The individuals who examine the work product, identify defects, and
offer constructive feedback. They are typically peers or subject matter experts.
Recorder (Scribe): The person responsible for documenting all defects identified
during the meeting, as well as any action items or follow-up tasks
Benefits of Formal Technical Reviews
Early Defect Removal: FTRs are highly effective at finding errors early in the
lifecycle, before they become expensive.
Improved Software Quality: They directly lead to more reliable, robust, and
maintainable software.
Cost Reduction: The cost of fixing defects found in reviews is substantially lower
than fixing them in later phases like testing or after deployment.
Conclusion:
2. Cause Analysis:
Once data is collected, statistical tools are used to analyze it and identify the most
significant sources of defects. Common techniques for cause analysis in SSQA include:
Pareto Analysis (80/20 Rule): This technique helps identify the “vital few” causes
that contribute to the “trivial many” defects. For example, it might show that 80%
of defects originate from only 20% of the possible causes (e.g., unclear
requirements or specific coding practices).
Scatter Diagrams: Used to explore the relationship between two variables, such
as lines of code and number of defects.
Control charts are a key statistical tool in SSQA for monitoring the software process over
time. They help determine if a process is stable and operating within acceptable limits, or
if it is “out of control” due to a special cause variation
Based on the insights gained from defect analysis and process monitoring, specific
recommendations for process improvement are formulated. These improvements aim to
eliminate the root causes of defects, leading to a more efficient and higher -quality
development process. Examples might include:
Enhanced training programs.
Refined coding standards.
More rigorous review procedures.
Better communication protocols.
Benefits of Statistical Software Quality Assurance:
Data-Driven Decisions: Moves quality management from subjective opinions to
objective, measurable facts.
Targeted Improvements: Identifies the most impactful areas for process changes,
leading to more efficient resource allocation.
Reduced Defect Rates: By addressing root causes, SSQA helps reduce the overall
number of defects in software.
Conclusion
Statistical Software Quality Assurance (SSQA) is a vital component of modern software
quality management. By systematically applying statistical methods to defect data, SSQA
provides profound insights into the underlying causes of software problems. This data-
driven approach, utilizing tools like Pareto analysis and control charts, enables
organizations to identify key areas for process improvement, ultimately leading to reduced
defect rates, enhanced software reliability, and more efficient development cycles.
MODULE -2
IBM DOORS
JIRA
Rational RequisitePro
Helix RM
Polarion
Version Control Tools (Git)
7. Traceability Tools
Gantt Chart
Gantt charts are an industry standard that helps in tracking both time and
interdependencies between tasks
Gantt charts are an essential tool to show different phases, jobs, and resources involved in
project management
Critical Path Method (CPM)
Critical Path Method (CPM) is a crucial tool for determining the progress of the project to
ensure that the project is on schedule
CPM helps in determining the essential or critical path by finding out the longest stretch of
dependent tasks
PERT Chart
The Program Evaluation and Review Technique (PERT) helps in analyzing the tasks to
complete the project and the time required to complete those tasks
PERT simplifies the planning and scheduling of large and complex projects
Work Breakdown Structure (WBS) is a process of organizing the team's work into
manageable sections
Project Documentation
Project documentation is created during the project lifecycle, which involves project
scope, its schedule, and the risk analysis
Project documents help in better understanding and risk analysis of the project
Project planning tools play a crucial role in the successful execution of software projects.
They help project managers define project scope, allocate resources effectively, schedule
tasks, estimate cost and time, and identify potential risks in advance. By providing a clear
roadmap of project activities, these tools ensure better coordination and control throughout
the project lifecycle. Moreover, project planning tools support monitoring and tracking of
progress, enabling timely decision-making and corrective actions when deviations occur.
They improve communication among team members and stakeholders through visual plans,
reports, and dashboards.
In conclusion, the effective use of project planning tools leads to improved productivity,
reduced project risks, better time and cost management, and higher chances of delivering
projects on schedule with the desired quality. Hence, project planning tools are essential for
achieving successful and well-managed software projects.
MODULE - 2
Testing Tools:
Delivering high-quality software requires powerful, efficient, and scalable testing solutions.
Software testing tools are essential for streamlining testing workflows and improving
application reliability, user satisfaction, and time-to-market.
What are Testing Tools?
Testing tools are specialized software applications designed to evaluate the functionality,
performance, and security of other software or systems. These tools are integral to the
software development process, enabling developers to verify that their code meets the
specified requirements and behaves as expected under various conditions.
Testing tools cover a range of testing types, including unit testing, integration testing, visual
testing, and accessibility testing. Each tool is specialized to handle different aspects of
testing, providing detailed diagnostics and helping to streamline the development process.
Top Software Testing Tools:
Browser Stack:
BrowserStack is a full stack cloud-based testing platform that allows users to run application
tests across 3500+ real device-browser combinations. It offers support for both manual and
automated testing, test case management, visual testing, low-code automation, and robust
reporting features via its robust tools to ensure that you have an end-to-end solution for all
your software testing needs.
Key Features:
Browser Stack Test Management is a highly regarded tool that enhances the testing process
by efficiently handling both manual and automated test cases. It streamlines the setup,
management, and monitoring of test cases, providing integrated workflows and easy-to-use
dashboards for immediate insight into software quality.
Key Features:
Testing tools are crucial for verifying whether a software functions as expected and
maintaining high software quality and reliability. Manual Testing is labour-intensive and
prone to errors, making it inefficient for large-scale software projects.
Cost: The most critical factors when choosing a testing tool are budget, cost, and end-
user requirements. Depending on the size of your team or your usage choice, you need
Compatibility: Your testing tools should efficiently run and execute test cases on
different cross-browser platforms, and it will save time from running test cases on
Conclusion:
Choosing the right testing tool depends on the specific requirements of the project, the
budget, and the technical expertise of the team. Employing the most apt testing tool
effectively can lead to higher quality products, improved user satisfaction, and a
Risk identification is essential for successful software project management as it involves recognizing potential issues before they cause problems, thereby allowing for strategic planning and prevention. This reduces the uncertainty inherent in software projects and supports improved planning and decision-making, thus preventing unexpected failures and losses . Methods used in risk identification include analyzing past projects, using expert knowledge, and involving multiple stakeholders to get varied perspectives. This process also includes early identification, evaluating the likelihood and impact of risks, and recording them systematically for continuous management throughout the project lifecycle .
Validation testing is critical because it ensures that the software meets the specified business requirements and fulfills its intended use when deployed. This testing confirms that software not only works as expected but also satisfies the clients' needs, increasing customer satisfaction . The main types of validation testing include Functional Testing, which checks if the software features work according to specified requirements, Non-Functional Testing, which assesses aspects like performance and usability, User Acceptance Testing, where real users verify that the software meets their expectations, System Testing, which evaluates the entire software system, and Beta Testing, conducted in real environments to identify overlooked issues .
Integration testing focuses on verifying the interactions between units or modules to ensure they function together properly after individual unit testing. Its main objective is to detect interface and communication issues between the integrated components early in the development process. It is usually performed after unit testing and before system testing . System testing, on the other hand, evaluates the entire integrated system as a whole to ensure that it meets defined requirements and specifications. It tests both functional and non-functional aspects of the system, assessing its performance under various conditions, such as high traffic load and security vulnerabilities. System testing is conducted after integration testing and before the acceptance testing phase, serving as a precursor to validating the system's overall quality and reliability .
Test Automation in validation testing presents challenges such as initial setup cost, maintenance of automated test scripts, and possible issues with rapidly evolving codebases that require frequent updates to tests. Despite these challenges, the benefits include enhanced testing efficiency through the automation of repetitive tasks, improved consistency and coverage of test cases, and faster feedback cycles, which help in early defect detection and resolution . Automation is particularly effective for large-scale regression testing, where repeating a large number of tests manually would be inefficient .
Regression testing is distinct from other types because it ensures that new updates or changes do not negatively impact the existing functionalities of the software. It acts like a quality check-up after modifications or maintenance operations, verifying that the software remains reliable, functional, and free from new bugs introduced by code changes . This type of testing is vital for maintaining software quality, as it allows developers to ensure that any enhancements do not compromise the integrity or performance of the existing product, thereby keeping user confidence and satisfaction intact .
Risk Mitigation in software project management refers to the strategies and actions designed to reduce the adverse impacts of identified risks on a project. Its key components include identifying the risk, eliminating the factors that contribute to the risk, regularly reviewing and controlling relevant documentation, and conducting timely reviews to accelerate corrective processes . Effective risk mitigation creates plans to avoid, transfer, or accept risk consequences based on their assessment, thus maintaining project stability and performance .
Black Box Testing offers significant advantages as it doesn’t require testers to understand or interact with the software's code. This approach focuses on evaluating functionality against specified requirements, ensuring that the application performs as expected from the user's perspective . It is most beneficial in scenarios where the tester needs to validate user interfaces, APIs, and system behaviors without the need for deep technical knowledge of the underlying code. This method is particularly useful for verifying outputs based on inputs and is ideal for user acceptance and functional testing .
Risk Projection assists in prioritizing risks by evaluating the likelihood of occurrence and the potential impact of each identified risk. This process allows project managers to rank risks based on their severity, focusing attention and resources on the most critical ones that could significantly affect the project’s cost, schedule, quality, or performance . By accurately projecting risks, project managers can develop strategic responses, ensure appropriate resource allocation, and sustain project progress through effective risk mitigation planning .
Usability Testing is significant in the system testing process because it evaluates how user-friendly and accessible a software system is, ensuring that end-users have a positive and efficient interaction with the product. This type of testing focuses on the design, ease of navigation, and overall user satisfaction, impacting the user's experience directly . By identifying any usability issues early, developers can enhance the software's interface and usability, thus boosting user satisfaction and reducing complaints or churn after deployment .
Risk Monitoring plays a crucial role in software risk management by tracking the progress of a project, ensuring that anticipated risks are managed effectively, and that risk aversion measures are adequately implemented. Its primary goals include verifying the occurrence of predicted risks, gathering data for future risk assessments, and determining the connection between specific risks and project outcomes . This activity is integral to maintaining project continuity and achieving objectives by adjusting management strategies in response to evolving risks .