[go: up one dir, main page]

0% found this document useful (0 votes)
7 views8 pages

Software Design

The document outlines the principles and methodologies of software design, emphasizing an iterative approach that evolves from high-level abstractions to detailed plans. It highlights core goals of high-quality design, key guidelines for assessing design quality, and the importance of technical reviews to ensure robustness. Additionally, it discusses design concepts such as modularity, abstraction, and the use of UML diagrams to document various design elements effectively.

Uploaded by

suriya prabha
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views8 pages

Software Design

The document outlines the principles and methodologies of software design, emphasizing an iterative approach that evolves from high-level abstractions to detailed plans. It highlights core goals of high-quality design, key guidelines for assessing design quality, and the importance of technical reviews to ensure robustness. Additionally, it discusses design concepts such as modularity, abstraction, and the use of UML diagrams to document various design elements effectively.

Uploaded by

suriya prabha
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

Software Design?

 Iterative translation of requirements into a high-level blueprint, progressively refined


into detailed plans.
 Starts with holistic abstraction, directly traceable to requirements; evolves into low-
level designs (e.g., data structures, detailed component behavior).

Core Goals of High-Quality Design


According to McGlaughlin, a robust design must:

1. Fully implement explicit requirements and capture implicit stakeholder needs.


2. Be readable and understandable for developers, testers, and maintainers.
3. Provide a complete picture—covering data, functional, and behavioral perspectives
through an implementation view.

Achieving these requires design principles, a systematic methodology, and rigorous reviews.

Key Design Quality Guidelines


To assess and drive quality, adhere to these guidelines:

1. Meaningful Architecture
o Built using known styles/patterns
o Consists of well-designed components
o Evolvable—supports iterative implementation and testing
2. Modularity
o Clearly partition the system into cohesive, logical subsystems
3. Multiple Representations
o Capture separate views of data, architecture, interfaces, and components
4. Appropriate Data Structures
o Choose structures aligned with target classes and derived from recognized
patterns
5. Functional Cohesiveness
o Components should encapsulate independent, well-defined functionalities
6. Interface Simplicity
o Interfaces should minimize complexity in inter-component and external
interactions
7. Traceable, Repeatable Methods
o Derive designs via repeatable methods rooted in requirement analysis
8. Effective Notation
o Use clear, expressive modeling notations (e.g., UML, structured diagrams)

Technical Reviews – Ensuring Design Quality


Because software isn’t executable at design time, use Technical Reviews (TRs) to catch issues
early:

 Participants (2–4):
o Review leader: sets agenda, directs discussion
o Recorder: documents findings
o Producer(s): creators of the design under review
o Other reviewers: peers who pre-read design artifacts
 Process:
o Pre-meeting: reviewers individually analyze the design artifact
o Meeting (60–90 mins): discuss errors, omissions, ambiguities
o Post-meeting: decide on required revisions before approval

These reviews are crucial risk-reducing checkpoints.

The Evolution of Design Methods


Design practices have evolved considerably:

Era Focus Key Methods


1970s Structured, top-down modular design DeRemer (1973), Wirth (1971), Dahl (1972)
Object-oriented design & architectural Jacobson (1992), Gamma et al. (1995),
1990s
patterns Kruchten (2006)
Aspect-oriented, Model-driven, Test-
2000s+ Clarke (2005), Schätz (2006), Astels (2004)
driven
Search-based software engineering
2010s+ Harman (2012)
(SBSE)
2010s+ Variability-intensive systems Gall et al. (2016)

Despite method differences, all incorporate:

1. Mapping requirements to design


2. Notations for components and interfaces
3. Heuristics for refinement
4. Quality assessment processes

Takeaways: Your Action Plan


1. Begin with high-level abstraction, map designs to requirements.
2. Apply design principles (e.g., modularity, clear interfaces).
3. Use familiar design patterns/styles and notational clarity.
4. Iterate and modularize, enabling phased implementation and testing.
5. Continuously review & refine via TRs before moving to coding.
6. Stay adaptive—embrace modern paradigms (OO, MDD, TDD, SBSE) as appropriate.
Design Concepts

1. Abstraction 🧠
Definition: Simplifying complexity by focusing on essential features and hiding implementation
details Course Hero+1SDE Coursepack+1.

 Procedural Abstraction: Treat functions/methods as black boxes defined by their names


(e.g., useCamera() hides elaborate internal steps).
 Data Abstraction: Define abstract entities (e.g., Camera with id, zoom, location) while
hiding internal representation.
Benefits: Keeps code portable, reusable, and easier to reason about
Reddit+3BrightHub+3Sentenz+3.

2. Refinement (Stepwise Refinement)


Definition: Breaking a high-level function or specification progressively into more detailed,
implementable steps .

 Complements Abstraction: One hides detail, the other reveals it in stages.


Example:

scss
CopyEdit
checkout():
validateCart()
calculateTotal()
authorizePayment()
saveOrder()
sendConfirmation()

Each step can be further refined into sub-methods.

3. Modularity & Separation of Concerns


Definition: Dividing a system into independently developed, testable units, each handling
distinct concerns Reddit+2SDE Coursepack+2CSL SRI+2.

 Achieved through clear interfaces and data encapsulation.


Key Properties Reddit+7Reddit+7Develop N Solve+7:

1. Decomposability – break down problems.


2. Composability – assemble modules back.
3. Understandability – each module is clear and focused.
4. Continuity – changes in one module won’t shatter others.
5. Protection – isolate failures to their modules.
4. Information Hiding & Encapsulation
Definition: Restricting visibility of a module’s internal details to prevent external code from
depending on them GeeksforGeeks+1BrightHub+1.

 Encapsulation binds data + methods, enforcing controlled access.


Benefits: Minimizes unintended dependencies, enhances maintainability and robustness
Sentenz+1Reddit+1.

5. Functional Independence
Definition: Each module should perform a coherent function with minimal dependencies on
others .

 Measured by:
o Cohesion: internal relatedness.
o Coupling: inter-module dependency.
Goal: High cohesion + low coupling for modules that are both useful and stable
Course HeroReddit+15BrightHub+15Medium+15.

6. Architecture
Definition: The overall structure including modules, their interactions, and extra-functional
requirements like performance, scalability, and security .
Models:

 Structural — static organization of components.


 Framework — use of architectural patterns.
 Dynamic — evolving behavior over time.
 Process — business/workflows.
 Functional — feature decompositions
GeeksforGeeks+15Wikipedia+15Wikipedia+15Wikipedia.

7. Design Patterns
Definition: Named, reusable solutions to common design problems within a context,
encapsulating best practices .
Benefits:

1. Identify relevant patterns.


2. Save design effort through reuse.
3. Identify proven strategies for new designs.

8. Refactoring
Definition: Restructuring code/design internally without changing external behavior to improve
clarity and maintainability Summary PlanetWikipedia+9Reddit+9Summary
Planet+9GeeksforGeeks+6Wikipedia+6Wikipedia+6.
Example: Splitting a monolithic class into more cohesive units to enhance readability and
testability.

9. Design Classes
Definition: Refining high-level analysis classes into concrete, implementable classes.
Well-formed design classes should be :

1. Complete & Sufficient – include needed attributes and methods.


2. Primitive – each method does one thing.
3. High Cohesion – concentrated responsibilities.
4. Low Coupling – follows the Law of Demeter (only interact with neighbors).

--

The Design Model Overview


 Analogy: Like house plans, the software design model begins with a holistic view and
refines to detailed specifics (e.g., architectural layout → component plumbing)
 Two dimensions (see figure 9.4):
1. Process dimension – stages of design activities
2. Abstraction dimension – evolving from analysis to implementation details
 Shift from analysis to design may blur, but models are refined in parallel: architecture →
interfaces & components → deployment

📐 Design Modeling Principles


1. Traceability
o Every design element links back to requirements—supporting rationale and
verification
2. Architectural-first
o Start with system structure before diving into component specifics
3. Equal data & processing design
o Thoughtful data modeling simplifies system logic and architecture
4. Well-designed interfaces
o Clean contracts for internal and external communication enhance reliability
5. User-focused UI
o A well-designed user interface shapes perception—even flawless internals fail
without it
6. Functional independence
o Components serve a single purpose to uphold cohesion
7. Loose coupling
o Minimize interdependencies to reduce risk and improve maintenance
8. Clarity in all models
o Diagrams should clearly communicate to coders, testers, and maintainers
9. Iterative design
o Refine complexity, simplify, and correct flaws over multiple iterations
10. Support agile workflows

 Maintain lightweight, living documentation synced with code, including rationale and
alternatives

🗂️Design Model Elements


1. Data Design

 From high-level user data models to database schemas and data structures
 Guides component and algorithm design; essential for performance and maintainability

2. Architectural Design

 Defines the system’s structure and conceptual integrity, much like a house’s floor plan
 Informed by domain models, architectural styles, and analysis packages
TutorialsPoint+6Scribd+6studylib.net+6Visual Paradigm
Guides+6GeeksforGeeks+6UML Diagrams+6GeeksforGeeksVisual Paradigm
Guides+5Software Ideas+5GeeksforGeeks+5

3. Interface Design
a. User Interface

 Should be intuitive, accessible, aesthetically pleasing—aligned with UX principles

b. External Interfaces

 Must clearly specify data format, protocols, error-handling, and security mechanisms

c. Internal Interfaces

 Define APIs and message exchanges between components; often specified via UML
interfaces or collaboration diagrams Scribd
4. Component-Level Design

 Like room-specific blueprints: each component details data structures, algorithms, and its
interface
 Represented in UML component diagrams, with optional pseudocode or activity
diagrams Wikipedia+12Scribd+12GeeksforGeeks+12

5. Deployment-Level Design

 Maps software components/artifacts onto hardware nodes and environments


o Nodes: physical devices (servers, smartphones) or virtual environments (JVM,
containers)
o Artifacts: deployable binaries, scripts, databases UML
Diagrams+9GeeksforGeeks+9Visual Paradigm Guides+9
 Includes both specification-level (generic) and instance-level (specific environment)
diagrams UML Diagrams

🧩 Diagram Types & Usage


Diagram Type Purpose & Focus

Illustrates modular structure, provided/required interfaces, and dependencies


Component Diagram
TutorialsPoint+7Wikipedia+7GeeksforGeeks+7

Visualizes software on hardware; shows nodes, communication links, and


Deployment Diagram
artifacts

Composite Structure Zooms into parts, ports, and connectors within a classifier

C4 Model
Offers multi-level architecture views from system to component
(Context/Container)

✅ Summary
 The design model is the structured blueprint of your software—from macro architecture
to micro logic
 It ensures traceability, modularity, clarity, and testability, supporting both traditional
and agile processes
 Uses a family of UML diagrams and design principles to document structure, interfaces,
components, and deployments effectively

You might also like