Subject: Software Engineering Object-Oriented Design in Software Engineering
Subject: Software Engineering Object-Oriented Design in Software Engineering
Engineering
Object-oriented Design in Software
Engineering
In the object-oriented design approach, the system is considered a collection
of objects (i.e., entities). An object-oriented design is a model that works as a
plan for software creation. The objects share the same data and each object
manages its own state data. Every object belongs to a class and has internal
data that represents its current state.
The concept of encapsulation would make data global to the methods that
need it but still prevent other methods from gaining access. It allows
modifications of methods used by objects without affecting the other parts of
the system.
2. Inheritance
Inheritance is a property in which a child or subclass derives functionalities of
a parent or super class. When we derive an object from one base object then
the property available inside the base object is automatically accessible inside
the derived object. The object-oriented design allows similar classes layered
one upon another, with lower or sub-classes being able to import, implement,
and reuse variables and functions from their immediate superclasses.
For example, a class “Dog” would inherit all of the methods like (eat(), drink())
of the parent class “Animal” in addition to the specific methods(bark(), breed(),
color()).
3. Polymorphism
Polymorphism is a Latin word, where ‘poly’ means many and ‘morph’ means
form. Polymorphism is the ability of an object to take on many forms keeping
their internal architecture the same. In other words, in object-oriented design,
polymorphism is a technique where methods have the same name and
perform similar functions but differ in arguments.
4. Abstraction
Abstraction is referred to as details hiding. Abstraction refers to representing
essential features of an object without showing the implementation details. In
object-oriented design, abstraction is used to handle complexity. It focuses on
selecting the necessary methods and attributes.
2. Modularity
In object-oriented dеsign, modularity is referred to breaking down a problеm
(program) into a sеt of modulеs so as to rеducе thе overall complexity of thе
problem. Thе complеx systеm, whеn dividеd into smallеr componеnts, makes
thе codеbasе easier to understand, writе, and maintain.
5. Reduced complexity
Object-oriented design breaks down complex systems into more manageable
components ensuring easier maintenance, code reuse, and efficient
development.
Architectural design
is a process for identifying the sub-systems making up a system and the
framework for sub-system control and communication. The output of this
design process is a description of the software architecture. Architectural
design is an early stage of the system design process. It represents the link
between specification and design processes and is often carried out in
parallel with some specification activities. It involves identifying major
system components and their communications.
Software architectures can be designed at two levels of abstraction:
Systems in the same domain often have similar architectures that reflect
domain concepts. Application product lines are built around a core
architecture with variants that satisfy particular customer requirements. The
architecture of a system may be designed around one of
more architectural patterns/styles, which capture the essence of an
architecture and can be instantiated in different ways.
The particular architectural style should depend on the non-functional
system requirements:
Architectural views
Each architectural model only shows one view or perspective of the system.
It might show how a system is decomposed into modules, how the run-time
processes interact or the different ways in which system components are
distributed across a network. For both design and documentation, you
usually need to present multiple views of the software architecture.
4+1 view model of software architecture:
Architectural patterns
Patterns are a means of representing, sharing and reusing knowledge. An
architectural pattern is a stylized description of a good design practice,
which has been tried and tested in different environments. Patterns should
include information about when they are and when the are not useful.
Patterns may be represented using tabular and graphical descriptions.
Model-View-Controller
Serves as a basis of interaction management in many web-based
systems.
Decouples three major interconnected components:
o The model is the central component of the pattern that
directly manages the data, logic and rules of the application.
It is the application's dynamic data structure, independent of
the user interface.
o A view can be any output representation of information, such
as a chart or a diagram. Multiple views of the same
information are possible.
o The controller accepts input and converts it to commands for
the model or view.
Supported by most language frameworks.
UML has two main categories of diagrams: Structural Diagrams and Behavioral Diagrams.
1. Structural Diagrams:
These focus on the static structure of the system (i.e., what the system is made of).
Class Diagram: Shows the classes in the system and their relationships. It’s one of the
most important diagrams in object-oriented design.
Object Diagram: Represents instances of objects in a system, showing their relationships
at a particular point in time.
Component Diagram: Shows the physical components in a system and their
relationships (e.g., database, web servers, etc.).
Deployment Diagram: Describes the physical hardware components and their
interactions, showing how software components are deployed on the hardware.
Package Diagram: Organizes and groups related classes and components into packages
to manage the complexity of large systems.
Composite Structure Diagram: Shows the internal structure of a class and how its parts
collaborate to realize the class’s behavior.
2. Behavioral Diagrams:
These focus on the dynamic behavior of the system (i.e., how the system works over time).
Use Case Diagram: Represents the functional requirements of a system. It shows the
system's actors (users or external systems) and their interactions with the system.
Sequence Diagram: Describes how objects interact in a sequence over time, showing
method calls and returns between objects.
Activity Diagram: Represents the workflow of a system or process, including actions,
decisions, and parallel processes.
State Diagram: Shows the various states an object can be in during its lifecycle and how
it transitions between states based on events.
Communication Diagram: Focuses on the interactions between objects in the system,
but unlike the sequence diagram, it emphasizes the relationships between the objects.
Interaction Overview Diagram: Combines aspects of activity and sequence diagrams to
show the flow of control across different interactions.
Timing Diagram: Depicts the timing of events and interactions in the system over time,
focusing on how certain conditions change at specific times.
UML Tools:
Lucidchart
Visual Paradigm
Enterprise Architect
StarUML
Draw.io
Example Scenario:
Imagine you're designing an online shopping system. You might create the following UML
diagrams:
1. Use Case Diagram: Depicts the interactions between customers, the system, and the admins
(e.g., Customers can browse products, add items to cart, and make payments).
2. Class Diagram: Shows classes like Customer, Order, Product, and their relationships (e.g., a
Customer places an Order for Products).
3. Sequence Diagram: Shows how objects (e.g., Customer, Order, Payment) interact when a
customer checks out.
4. Activity Diagram: Represents the checkout process, showing actions like selecting items, adding
to the cart, and making payments.
1. Requirement Analysis: Like any design approach, FOD starts with gathering and
analyzing the requirements of the system to understand what functions the system must
perform.
2. High-Level Design: The high-level design involves defining the major functions or
procedures of the system. These functions are identified based on the requirements and
are mapped out to give an overall structure to the system.
3. Decomposition: In this stage, the high-level functions are broken down into smaller,
more specific sub-functions. The process continues recursively until each function is
simple enough to be implemented easily.
4. Detailed Design: This is where each function is designed in detail. This includes
specifying the inputs, outputs, logic, and any error handling. The detailed design also
considers how data will be passed between functions.
5. Implementation: After the design is finalized, the implementation phase begins. The
system is coded based on the function-oriented design, with each function being
implemented separately and integrated to form the complete system.
6. Testing: Testing is done at multiple levels, starting with individual function testing (unit
testing) and progressing to integration testing, where the interactions between functions
are tested.
Example:
Consider a simple function-oriented design for a banking system. The system needs to process
customer transactions, check account balances, and update records. In FOD, the system could be
structured as follows:
1. High-Level Functions:
o ProcessTransaction(): This function might take details of a transaction (like
deposit or withdrawal), check if it's valid, and call other functions to update the
records.
o CheckBalance(): This function will take an account number as input and return
the current balance.
o UpdateAccount(): This function will update the balance after a transaction is
made.
2. Sub-functions:
o ValidateTransaction(): A sub-function within ProcessTransaction() that
checks if a transaction is valid (e.g., ensuring there are sufficient funds).
o RecordTransaction(): A sub-function within ProcessTransaction() that logs
the transaction details into the database.
Change Control: Change control is a formal process used to request, review, approve,
or reject changes to the software system. Changes can include:
o New features or functionality.
o Bug fixes.
o Configuration updates.
o Environment changes.
A change management process ensures that changes are documented and tracked, and
that potential impacts are understood before the change is implemented.
Reusability patterns
refer to proven strategies or design approaches that promote the creation of reusable software
components. These patterns guide developers in structuring code, systems, and architecture in ways
that maximize the potential for reuse.
1. Modularization Pattern
Modularization is the practice of breaking down a software system into smaller, independent
modules that can be developed, tested, and reused separately. Each module typically has a single
responsibility or a small set of related responsibilities.
Key Principles:
Encapsulation: Each module should hide its internal workings and expose only necessary
interfaces. This improves maintainability and reusability.
Cohesion: Modules should focus on a single, well-defined responsibility to increase their
reusability.
Loose Coupling: Modules should have minimal dependencies on each other, so they can be
reused independently in different contexts.
Example:
Libraries and Frameworks: A common example of modularization is a library that provides a set
of functions for handling network communication, which can be reused in various applications
requiring network interaction.
2. Factory Pattern
The Factory Pattern is a design pattern that provides an interface for creating objects, but leaves
the decision of which class to instantiate to subclasses or other factory classes. This allows for
the creation of flexible and reusable code by decoupling object creation from the rest of the
application.
Key Principles:
Abstract Factory: Provide a common interface for creating related objects.
Object Creation: Create objects through methods without specifying the exact class to
instantiate.
Example:
A Database Connection Factory class can create different database connection objects based on
the configuration (e.g., MySQL, PostgreSQL, or SQLite) without altering the core logic of the
application.
3. Strategy Pattern
The Strategy Pattern allows algorithms or behaviors to be selected at runtime based on the
needs of the application, making it easy to reuse different strategies in multiple contexts.
Key Principles:
Context and Strategy: The context class uses different strategy implementations
interchangeably. This allows you to change the behavior of an algorithm without changing the
class that uses it.
Decoupling Behavior from Class: The Strategy Pattern decouples algorithms from the classes
that use them, making it easy to swap out or extend behaviors.
Example:
In a payment system, the payment calculation logic could vary depending on the payment
method (credit card, PayPal, etc.). The strategy pattern allows different payment strategies to be
reused across multiple payment processing classes.
4. Decorator Pattern
The Decorator Pattern is a structural pattern that allows behaviors to be added to objects
dynamically without affecting the behavior of other objects in the same class hierarchy. It
enhances reusability by allowing reusable functionality to be added in a flexible and non-
intrusive way.
Key Principles:
Composition over Inheritance: Instead of subclassing to add features, you can compose classes
by wrapping objects with decorators.
Dynamic Behavior: This allows dynamic behavior extensions without altering the original class.
Example:
In a text editor, you could have a base text object that is then decorated with additional
features, such as spell-checking or encryption, using the decorator pattern. Each feature can be
reused in different combinations.
Key Principles:
Common Algorithm Structure: The parent class provides a template of the algorithm, defining
the order of operations, but leaves certain steps to be filled in by subclasses.
Avoiding Duplication: Common functionality is placed in the parent class, while variations are
handled in the subclasses.
Example:
A data processing pipeline might define common steps (e.g., "fetch data", "clean data",
"process data"), but each specific data source can implement its own version of "fetch data"
while reusing the common pipeline structure.
6. Observer Pattern
The Observer Pattern is used to allow a subject (e.g., an object) to notify multiple observers
(other objects) when its state changes. This promotes reusability by allowing different
components of a system to react to changes in a decoupled way.
Key Principles:
Publish-Subscribe: Objects can subscribe to the state changes of another object without having
to be directly dependent on it.
Loose Coupling: The subject and observers are loosely coupled, making it easy to add or remove
observers without affecting the subject or other observers.
Example:
A newsfeed system where the state of new posts (subject) notifies all subscribers (observers)
when a new post is added. The subscribers can react by displaying the post in different places.
Quality Assurance (QA) in software engineering
is a critical practice focused on ensuring that software applications meet specific requirements,
work as expected, and provide a positive user experience. The goal is to identify and fix issues
early in the development process, improving the overall quality of the product. QA in software
engineering goes beyond just testing; it involves the entire process of software development and
delivery.
1. QA vs. Testing:
Quality Assurance (QA) is a broader term that involves all activities that ensure the
software development process and the final product meet specified quality standards. It
includes process management, improvement, and prevention of defects.
Software Testing is a subset of QA. It specifically refers to the process of executing the
software to identify bugs or defects and validate that it functions as expected.
There are several types of testing that fall under the umbrella of QA in software engineering:
Unit Testing: Testing individual components or modules of the software to ensure they
work correctly in isolation.
Integration Testing: Testing the interactions between different modules or components
to ensure they work together as expected.
System Testing: Testing the entire system as a whole to ensure that it meets the
requirements.
Acceptance Testing: Verifying that the software meets the end-user requirements and is
ready for deployment.
Regression Testing: Testing the software to ensure that new changes haven’t broken
existing functionality.
Performance Testing: Evaluating the software's performance, such as speed, scalability,
and resource usage under different conditions.
Security Testing: Identifying vulnerabilities and ensuring the software is secure against
potential threats.
User Interface (UI) Testing: Testing the software’s user interface to ensure it is
intuitive, responsive, and user-friendly.
4. QA Methodologies:
5. Automation in QA:
Automation plays a critical role in modern software QA. Automated testing helps improve
efficiency, accuracy, and repeatability in testing. Some of the benefits of automated testing
include:
Popular tools for automated testing include Selenium, JUnit, TestNG, Cypress, and Appium.
6:Challenges in QA:
Complexity of Testing: Modern applications are often complex and may include mobile,
cloud, microservices, and other elements that make testing more difficult.
Maintaining Test Coverage: Ensuring that all areas of the software are adequately tested
can be challenging as the application grows and changes.
Time and Resource Constraints: QA teams must often balance thorough testing with
tight deadlines and limited resources.
Test Environment Management: Managing different environments (e.g., production,
staging, test) and ensuring tests are performed in the correct environment.
Continuous Change: With agile development practices, software changes frequently,
requiring constant updates to test cases and strategies.
QA is crucial for:
Improving User Experience: Well-tested software leads to fewer bugs and issues, which
results in better user satisfaction.
Reducing Costs: Identifying defects early in the process helps prevent costly rework
later.
Ensuring Reliability: QA ensures that the software performs as expected under a variety
of conditions.
Building Reputation: High-quality software enhances the reputation of the development
team and the organization.
Software Specification
refers to the detailed description of the functionality, behavior, and requirements of a software
system. It is an essential part of the software development life cycle and acts as a blueprint for
both the development and testing of the software. The software specification helps stakeholders
(e.g., developers, testers, clients) understand what the system is supposed to do and how it will
be structured.
1. High-level Specifications:
o Broad and general description of the software. Typically used during the initial
stages of a project and focuses on the goals and purpose of the system.
2. Detailed Specifications:
o A comprehensive and precise description of all requirements and system
components. It is often used later in the project and becomes the basis for
development and testing.
3. Technical Specifications:
o Focuses on the technical details required for system implementation, such as
coding standards, libraries, frameworks, and technology stack.
Clear Communication: Ensures that developers, testers, clients, and other stakeholders
are on the same page regarding the functionality and design of the system.
Reduces Misunderstandings: By having a well-documented specification,
misunderstandings between developers and stakeholders are minimized.
Guides Development: Serves as a reference throughout the development process to
ensure the system meets the desired requirements.
Improves Testing: Provides a clear basis for creating test cases and ensuring the system
behaves as expected.
UML (Unified Modeling Language): Often used to create diagrams like use case
diagrams, class diagrams, and sequence diagrams to represent system components and
behavior.
Flowcharts: Used to represent process flows and system logic.
Prototypes/Mockups: Visual representations of the user interface to show how the
system will look
Requirement Engineering
in software engineering refers to the process of defining, documenting, and managing the
requirements of a software system. It involves identifying the needs of the stakeholders (such as
clients, users, and other relevant parties), translating these needs into technical specifications,
and ensuring that the software development team clearly understands what needs to be built.
The goal of requirement engineering is to ensure that the final software product meets the
expectations and needs of the stakeholders, as well as being feasible, testable, and maintainable.
1. Requirements Elicitation:
o This is the process of gathering requirements from stakeholders, including end-
users, customers, and other interested parties.
o Techniques used in this phase include:
Interviews: One-on-one or group discussions to understand user needs.
Surveys/Questionnaires: To gather information from a larger audience.
Workshops: Collaborative sessions with stakeholders to identify and
discuss requirements.
Observation: Analyzing users as they work to understand their needs and
challenges.
Prototyping: Building a quick prototype to gather feedback and refine
requirements.
2. Requirements Analysis:
o In this phase, the gathered requirements are analyzed and refined. The goal is to
identify any conflicts, ambiguities, or inconsistencies and ensure that the
requirements are clear, complete, and achievable.
o The analysis often includes:
Prioritization: Deciding which requirements are most important based on
factors like business value, urgency, and feasibility.
Feasibility Analysis: Assessing whether the requirements can be
implemented within the given constraints (e.g., budget, time, technology).
Modeling: Using diagrams like use case diagrams, flowcharts, or data
flow diagrams to represent the system’s behavior and structure.
3. Requirements Specification:
o This phase involves documenting the requirements in a formal and structured
way. The goal is to create a clear, unambiguous, and traceable document that can
guide development and testing.
o This document is often referred to as the Software Requirements Specification
(SRS).
Functional Requirements: Describes what the system should do, i.e., its
features and functionality.
Non-functional Requirements: Specifies how the system should
perform, including performance, security, and usability.
Interface Requirements: Describes how the system will interact with
external systems or users.
4. Requirements Validation:
o Validation ensures that the documented requirements are correct and meet the
needs of the stakeholders.
o Techniques used in this phase include:
Reviews/Inspections: Formal walkthroughs where stakeholders review
the requirements document for completeness, correctness, and feasibility.
Prototyping: Creating a prototype to validate whether the requirements
accurately reflect the user’s needs.
Use Case Scenarios: Running through typical use cases to check if the
system’s behavior aligns with expectations.
5. Requirements Management:
o This is an ongoing process that involves keeping track of changes to the
requirements and ensuring that all stakeholders are kept up to date.
o It includes:
Change Management: Handling modifications to the requirements that
may occur due to shifting business needs, feedback, or unforeseen
technical constraints.
Traceability: Ensuring each requirement is linked to specific design
elements, implementation, and test cases.
Version Control: Keeping track of different versions of requirements as
they evolve over time.
Types of Requirements
1. Functional Requirements:
o These describe what the system must do. They define the functionality and
features that the software must support.
o Example: "The system must allow users to log in with a username and password."
2. Non-functional Requirements:
o These specify how the system should behave and focus on aspects such as
performance, security, usability, and reliability.
o Example: "The system must process 1000 transactions per second."
3. User Requirements:
o These describe the needs and expectations of the end-users. They are often written
in natural language and can be vague or high-level.
o Example: "The user should be able to search for products easily."
4. System Requirements:
o These provide detailed technical specifications that describe the system's internal
operations and behavior. System requirements are often more formalized and
precise.
o Example: "The system shall store user data in a relational database."
1. Interviews: Speaking directly with stakeholders to gather their needs, expectations, and
preferences.
2. Workshops: Collaborative sessions where stakeholders collectively define the
requirements.
3. Surveys and Questionnaires: Collecting data from a large group of users to understand
their needs.
4. Prototyping: Creating a preliminary version of the software to help stakeholders better
visualize requirements.
5. Observation: Watching end-users interact with existing systems to identify requirements
based on how they work.
6. Document Analysis: Reviewing existing documentation to extract relevant information
about the system or domain.
1. Clear Understanding of Needs: Ensures that developers, clients, and stakeholders have
a shared understanding of what the system will do.
2. Risk Reduction: Helps identify potential issues and risks early in the project, allowing
for corrective action.
3. Foundation for Design and Development: Provides a solid foundation for the design
and implementation phases, ensuring that the software meets the users' needs.
4. Cost Control: By defining clear requirements upfront, unnecessary changes or scope
creep can be minimized, helping to keep costs within budget.
System Modeling
in software engineering refers to the process of creating abstract representations (models) of a
software system. These models serve to understand, analyze, design, and document various
aspects of the system, including its structure, behavior, and interactions. The purpose of system
modeling is to provide a visual or conceptual framework that helps developers and stakeholders
grasp complex systems more easily and communicate ideas effectively.
Models act as blueprints that guide the development process, from requirement gathering
through design and implementation, while also helping to address potential issues before they
arise.
1. Structural Models:
o Focus on the organization or structure of the system and how its components
interact.
o These models represent the static aspects of the system.
Examples:
oClass Diagram (UML): Shows the static structure of the system by illustrating
classes, their attributes, methods, and relationships (e.g., inheritance, association).
o Component Diagram (UML): Displays the physical and logical components of
the system and how they interact.
o Data Flow Diagram (DFD): Represents how data moves through a system,
focusing on data sources, destinations, processes, and data stores.
2. Behavioral Models:
o Focus on the dynamic behavior and interactions within the system over time.
o These models describe how the system behaves in response to events or inputs.
Examples:
o Use Case Diagram (UML): Describes the interactions between actors (users or
external systems) and the system, detailing what functionality the system
provides.
o State Diagram (UML): Models the different states a system or object can be in
and the transitions between these states.
o Sequence Diagram (UML): Shows the sequence of messages exchanged
between objects or components over time to accomplish a particular behavior.
o Activity Diagram (UML): Represents the flow of control or data within a
system, often used for modeling business processes or workflows.
3. Interaction Models:
o Focus on how various system components interact with each other and with users.
o They are used to visualize the communication and data exchange between
different parts of the system.
Examples:
Examples:
o Data Flow Diagrams (DFD): Depict how data flows through the system, how
it’s processed, and where it is stored.
o Flowcharts: Visual representations of processes that show how individual
operations are connected in sequence.
5. Deployment Models:
o Focus on how the software will be deployed and the relationship between
software components and hardware components.
Examples:
1. Clarification of Requirements:
o System models help in clarifying and formalizing requirements by representing
how the system should behave and how its components will interact.
o They offer a clearer understanding of the system, making it easier to identify
errors or omissions in the requirements.
2. Effective Communication:
o Models act as a visual tool for communicating the system's design and
functionality to stakeholders, including developers, testers, clients, and other
stakeholders.
o They help in bridging gaps between different stakeholders who may have varying
levels of technical knowledge.
3. Simplification of Complex Systems:
o Modeling complex systems simplifies their understanding by abstracting details
and focusing on the essential elements and relationships within the system.
o They provide a high-level overview and then allow zooming into detailed
components.
4. Facilitating Design and Architecture:
o System modeling is critical during the design phase as it helps developers
understand the structure and behavior of the system, ensuring that the architecture
meets the functional and non-functional requirements.
o It helps in identifying components, their responsibilities, and how they interact,
which forms the basis for system design and implementation.
5. Identifying Potential Issues Early:
o Modeling allows for early detection of potential issues such as system
bottlenecks, poor interactions between components, or insufficient coverage of
functionality.
o By detecting these problems in the modeling phase, changes can be made before
the system is developed, saving time and resources.
6. Documentation and Knowledge Transfer:
o System models serve as documentation that can be referenced throughout the
system’s lifecycle, ensuring knowledge transfer between teams, especially when
maintenance or updates are needed.
o They provide a useful reference for new team members who are trying to
understand the system.
7. Test Planning and Validation:
o Models are useful in defining test cases by identifying potential test scenarios and
validating system behavior.
o They also aid in defining expected results and edge cases for testing.
Software Prototyping
in software engineering is an approach used to develop a working model (prototype) of a
software application. This prototype is created early in the software development process to
visualize and test aspects of the system before full development begins. Prototyping helps both
developers and stakeholders understand how the system might function and how user
requirements will be met.
The goal of prototyping is to quickly create a preliminary version of the software that can be
iterated upon based on feedback from users and stakeholders. It provides a way to refine and
clarify requirements, discover potential design flaws, and validate the user experience early in
the development process.
1. Throwaway/Rapid Prototyping:
o Description: A prototype is built quickly with minimal effort, focusing only on
the core functionality required to gather user feedback. Once feedback is
gathered, the prototype is discarded, and the actual system is built based on the
learned insights.
o Use Case: This approach is often used when the requirements are unclear or
incomplete and when the development team needs to explore various design
options.
o Advantages:
Allows rapid feedback from users.
Helps uncover potential design flaws early.
Useful when requirements are not well understood.
o Disadvantages:
The prototype is discarded, meaning effort is wasted.
It may not always accurately represent the final system.
2. Evolutionary Prototyping:
o Description: An initial prototype is developed with some basic functionality, then
it evolves incrementally as users interact with it, providing feedback for
improvements and new features. This type of prototype is iteratively refined over
time until it becomes the final system.
o Use Case: This approach is used when requirements are expected to change
frequently or when there is a need for continuous user involvement.
o Advantages:
Supports ongoing user feedback, leading to a better final product.
Reduces the risk of building a system that doesn’t meet user needs.
The prototype evolves into the final product, reducing wasted effort.
o Disadvantages:
Can be time-consuming and costly due to the continuous iteration.
Difficult to manage scope creep or changing requirements over time.
3. Incremental Prototyping:
o Description: The software is built and delivered in parts (increments), where each
part is a working prototype of a specific feature or component. Each increment is
developed based on feedback from the previous one.
o Use Case: This is often used when the system can be broken down into smaller,
independent parts that can be developed separately.
o Advantages:
Provides users with partial working versions of the system early on.
Can help in managing complex systems with multiple modules or features.
Reduces risk by developing and testing in smaller chunks.
o Disadvantages:
Integration of increments can become difficult if the architecture is not
designed well.
May require more resources to create multiple prototypes or parts.
4. Extreme Prototyping (Web Development):
o Description: An approach used in web development, combining elements of
rapid prototyping with user-centered design principles. The first phase involves
creating a functional prototype with user feedback, followed by continuous
refinement and testing.
o Use Case: Mainly used for developing web applications where early user
interaction and feedback are essential.
o Advantages:
Focuses heavily on user experience and satisfaction.
Provides users with tangible feedback quickly.
o Disadvantages:
Time-consuming as prototypes need constant refinement based on
feedback.