Unit 2 (Bca3) Software Engineering

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

System Design

In any development process, be it Software or any other tech, the most important stage is Design. Without the designing
phase, you cannot jump to the implementation or the testing part. The same is the case with the System as well.

System Design not only is a vital step in the development of the system but also provides the backbone to handle
exceptional scenarios because it represents the business logic of software.

system design acts as a backbone because no matter how good the coding part is executed, it, later on, becomes
irrelevant if the corresponding design is not good. So here we get crucial vital information as to why it is been asked in
every Product Based Company.

Objectives of System Design

Practicality: We need a system that should be targetting the set of audiences(users) corresponding to which they are
designing.

Accuracy: Above system design should be designed in such a way it fulfills nearly all requirements around which it is
designed be it functional o non-functional requirements.

Completeness: System design should meet all user requirements

Efficient: The system design should be such that it should not overuse surpassing the cost of resources nor under use as
it will by now we know will result in low thorough put (output) and less response time(latency).

Reliability: The system designed should be in proximity to a failure-free environment for a certain period of time.

b Time and space are just likely what we do for code chunks for individual components to work in a system.

Scalable(flexibility): System design should be adaptable with time as per different user needs of customers which we
know will keep on changing on time. The best example here out is the well-known firm: Nokia.

Idealized and constrained


idealized - the idealized process of system design involves creating a high-level blueprint or plan for a software system
that effectively addresses the requirements and objectives of a project. This design phase plays a critical role in the
software development lifecycle as it sets the foundation for the implementation and construction of the system.

Here are some key aspects of an idealized system design:

 Requirements Analysis: Before diving into design, it's essential to have a clear understanding of the project's
requirements. This includes functional requirements (what the system should do) and non-functional requirements
(performance, scalability, security, etc.). An idealized design process begins with a thorough analysis of these
requirements.

1
 Modularity: System design should promote modularity and separation of concerns. This means breaking the system
down into smaller, manageable modules or components, each responsible for a specific part of the functionality.
Well-defined interfaces between modules are crucial for maintainability and scalability.
 Abstraction: Design should employ various levels of abstraction to hide complex details and make the system more
understandable. This includes defining high-level architecture, data models, and interface specifications without
delving into the specific implementation details.
 Scalability: Consider how the system will grow and handle increased loads or functionality in the future. Scalability
should be designed into the system to accommodate changing requirements without major rework.
 Flexibility and Extensibility: A well-designed system should be flexible and extensible, allowing for easy
modifications and additions. This often involves using design patterns and principles like the Open-Closed Principle
to enable changes without altering existing code.
 Performance Optimization: Design should address performance concerns early on. Identify potential bottlenecks
and areas where optimization is required. This may involve choosing appropriate data structures, algorithms, and
architectural patterns.
 Security: Security considerations should be integrated into the design, including access controls, authentication
mechanisms, and data encryption. It's much more challenging to retrofit security into a system after it's been
implemented.
 Usability and User Experience (UX): Consider the user interface design and overall user experience. Ensure that the
system is intuitive and user-friendly.
 Testing and Quality Assurance: Define a testing strategy as part of the design process. This includes unit testing,
integration testing, and any other testing necessary to ensure the system meets its requirements.
 Documentation: Document the design thoroughly. This documentation should include architectural diagrams, data
flow diagrams, interface specifications, and any other relevant information that helps developers understand and
implement the design.
 Team Collaboration: Collaborate closely with developers, architects, and stakeholders throughout the design
process to ensure alignment with project goals and requirements.
 Review and Validation: Conduct design reviews and validations to identify potential issues or gaps in the design
before moving on to the implementation phase.

Constrained -Constrained design in system design within the context of software engineering refers to the process of
designing a software system while taking into consideration various constraints or limitations. These constraints can be
technical, budgetary, time-related, or even regulatory. The primary goal of constrained design is to create a system that
meets its objectives while adhering to these constraints.

Here are some common types of constraints in software system design:

 Technical Constraints: These constraints are related to the technical aspects of the system, such as the choice of
programming languages, development tools, hardware limitations, and architectural decisions. For example, a
system may need to run on specific hardware with limited resources, which imposes constraints on memory usage
and processing power.

2
 Budgetary Constraints: Budget constraints are related to financial limitations. Projects often have a predefined
budget that must be adhered to. Design decisions should take into account the cost of development, licensing fees,
and ongoing maintenance costs.
 Time Constraints: Time constraints are often a critical factor in software development. Projects may have strict
deadlines that need to be met. Design decisions must consider the time available for development, testing, and
deployment. Sometimes, the need for rapid development may lead to trade-offs in terms of design quality.
 Regulatory Constraints: In some industries, there are regulatory requirements that software systems must adhere to.
For example, healthcare systems must comply with HIPAA regulations, and financial software must meet specific
security and compliance standards. Design decisions should ensure that the system complies with these regulations.
 Performance Constraints: Some systems have stringent performance requirements. For example, a real-time system
in aerospace or automotive applications must meet specific response time constraints. Design decisions should focus
on optimizing performance within these limits.
 Scalability Constraints: If a system is expected to grow or handle a large number of users or data over time,
scalability constraints come into play. The design should allow for scalability to accommodate future growth without
significant reengineering.
 Security Constraints: Security is a critical concern in software design. Constraints related to security may include
encryption requirements, access control, and protection against common vulnerabilities like SQL injection or cross-
site scripting (XSS).
 Usability Constraints: Usability constraints involve considerations about the user experience. Design decisions should
take into account the needs and preferences of end-users, ensuring that the system is user-friendly and meets their
expectations.
 Integration Constraints: If the software system needs to integrate with other existing systems or third-party services,
design decisions should address compatibility and interoperability issues.

Process-oriented design- Process-oriented design in software engineering, also known as process-


centered design, is an approach that focuses on defining and optimizing the processes and workflows involved in
software development. This design approach places a strong emphasis on the steps, tasks, and activities that
software development teams follow to create a software product.

Key aspects of process-oriented design include:


 Process Definition: Creating well-defined and documented processes that outline the sequence of activities, roles,
responsibilities, and interactions among team members. These processes cover everything from requirements
gathering and design to coding, testing, and maintenance.

 Workflow Management: Ensuring that the software development workflow is efficient, logical, and well-structured.
This involves analyzing and optimizing the flow of work items, information, and tasks within the development team.

 Resource Allocation: Allocating resources such as personnel, time, and tools effectively to support the defined
processes. This ensures that the right people are working on the right tasks at the right time.

3
 Quality Assurance: Incorporating quality assurance and quality control processes throughout the development
lifecycle to identify and rectify issues early in the process.

 Documentation: Maintaining comprehensive documentation of the processes and workflows to facilitate


communication, training, and continuous improvement.

 Measurement and Metrics: Implementing metrics and key performance indicators (KPIs) to measure the
effectiveness and efficiency of the development processes. This allows for data-driven decision-making and process
improvement.

 Process Improvement: Continuously monitoring and refining the processes to adapt to changing project
requirements, technologies, and industry best practices.

Gane and sarson


Data flow diagrams are used to graphically represent the flow of data in a business information system. DFD
describes the processes that are involved in a system to transfer data from the input to the file storage and reports
generation.
Gane-Sarson notation was introduced in Chris Gane and Trish Sarson’s 1977 book, Structured Systems Analysis:
Tools and Techniques published in 1979. Gane-Sarson notation is used for data flow diagrams.

Gane-

4
Sarson DFD Symbols
Four basic symbols are used in data flow diagrams as shown in the Table illustrated below:

 Double Square
 Arrow
 Rectangle With Rounded Corners
 Open-Ended Rectangle (Closed On The Left Side And Open-Ended On The Right)

Entities
Entities represent people, organizations, or other things that interact with the system, i.e. entities are “outside of the
system,” that is they are part of a process, but external to the information system. They send or consume information,
and in Gane-Sarson notation are also called sources or sinks of information. If the same entity is shown more than
once in a diagram, a diagonal line is added to the lower right-hand corner to visually distinguish it.

For example, if the nurse entity was drawn twice, to keep from having a lot of diagonal line lines, a single diagonal line
would be added to the lower right-hand corner. Further, if a medical assistant entity was similarly drawn twice on the
same diagram, two diagonal lines would be added to visually distinguish it from the nurse and patient entities.

Process
Processes are the actions that directly change the data. Whenever an action takes place, a new output is formed based
on that action. Typical processes include calculations, data sorting or set of specific rules that a business may follow.
 The Process Should Be Named Or Described With A Single Word (A Verb), Phrase, Or Simple Sentence That Describes
What The Process Does.
 Similar To Other Notations, A Good Name Will Generally Consist Of A Verb-Object Phrase Such As Check Availability.
 In Some Cases, The Processes Are Named For A Role, An Organization, Or A Machine That Performs The Process.
 Processes Are Given A Number In The Upper Right-Hand Corner; This Is An Identifier And Does Not Imply Sequence.

Data Flow
Data flow is the lines with arrows that are used to mark where the data flows. As external entities create processes and
interact with data stores, data flow lines map out these inputs and outputs. Data flow lines are an essential aspect of a
data flow diagram as they tie all of the information together. They are also marked with labels that briefly define what
each data flow is accomplishing.
 Gane Sarson Notation Uses Straight Arrows.
 Arrows Should Be Named To Indicate The Meaning Of The Data That Moves Along The Flow That Is, A Noun.
 Data Flows With A Verb Name Signify A Process That Has Been Omitted. Data Flow In And Out Of A Process Must Be
Altered In Some Way.

5
Data Store
Datastores are files or storage areas that contain information that can be called on at a later date. They typically
appear as database tables or spreadsheets. Like processes, data stores receive simple labels explaining their purpose
or order.
 The Datastore Is Used To Model A Collection Of Data At Rest.
 Datastores Can Be In Computerized Or Non-Computerized Forms, Such As Paper Charts, Microfiche, Index Cards, Etc.
 Stores Are Passive; Processes Put Data In Or Read Data.
 Like Processes, Data Stores Can Be Given An Identifying Number, E.G., D1, D2, Etc., Where “D” Denotes A Data Store
And The Number Serves As A Unique Identifier.
 Like Entities, Data Stores Can Be Drawn More Than Once On A Diagram.

Yourdon and Coad / DeMarco Notation


Yourdon and Coad method includes components for creating data-flow diagrams and also object state diagrams.
Some unique attributes of their DFD notation include:
 A Data Store Is Represented As Two Parallel, Horizontal Lines.
 Processes Are Represented By A Circle

6
S

Object-oriented Design
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.

Object–oriented design results in a design having several different levels of modularity which includes the major system
components broken down into subsystems (a modular system level), and data manipulation operations are
encapsulated into objects.

Object Oriented Design (OOD) in software engineering focuses on improving the quality, usability, and productivity of
system analysis and design. The objective of this phase is to design and refine the classes, attributes, methods, and
structures that are identified during the analysis phase, user interface, and data access. The other classes or objects that
enable the implementation of the requirement are also identified and defined during this step.

Principles of Object-Oriented Design

1. Encapsulation

Encapsulation can also be referred to as data hiding. It is a combination of data(i.e. characteristics) and function(i.e.
behavior) in a single unit. In encapsulation, the data and the methods that act on the data are hidden inside the object.
By encapsulation that access of the data is controlled and can only be accessed through the method which acts as an
interface.
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.

7
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.

Polymorphism is divided into 2 sub-principles:

Static Binding or Compile time polymorphism: Method overloading is a compile-time polymorphism where more than
one method has the same name, and belongs to the same class but has different parameters and return type.

Dynamic Binding or Run-time polymorphism: Method overriding is a run-time polymorphism where the child class
overrides the same method as the parent class. In method overriding, it is decided in runtime which method is going to
be called.

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.

Benefits of Object-Oriented Design

1. Reusability of code

Code reuse can greatly optimize the development process of applications and result in increased productivity. It
improves code quality, saves time, reduces development risks, prevents code bloat, optimizes the overall cost, and
resolves the technical challenges associated with software products.

Thе inheritance propеrty in object-oriented dеsign providеs reusability of codе by dеfining a nеw class from thе already
еxisting class. Morеovеr, object-oriented design emphasizes thе usе of rеusablе componеnts and dеsign pattеrns,
which can savе timе and еffort in software development by rеducing thе need to writе nеw codе from scratch.

8
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.

3. Flexibility and scalability

Object-oriented dеsign hеlps developers dеsign software systems that arе flеxiblе еnough to adapt for any codе
modification and to changing businеss rеquirеmеnts. Inheritance and polymorphism provide flеxibility for your
codеbasе. Object-oriented design also offers developers to dеsign softwarе systеms that are scalablе to handlе changes
in usеr dеmand and businеss requirements ovеr timе.

4. Improved maintainability

Object-oriented design promotes modular and reusable design that helps easier code maintenance and update over
time.

5. Reduced complexity

Object-oriented design breaks down complex systems into more manageable components ensuring easier maintenance,
code reuse, and efficient development.

Booch approach
The Booch approach in software engineering refers to a methodology and notation developed by Grady Booch, a
prominent software engineer and one of the original developers of the Unified Modeling Language (UML). The Booch
methodology provides a structured and systematic approach to software design, analysis, and development. It has
evolved over the years and has contributed to the development of UML.

Here are key aspects of the Booch approach in software engineering:

1).Object-Oriented Focus: The Booch approach is firmly rooted in object-oriented principles. It emphasizes the use of
classes, objects, inheritance, and encapsulation as fundamental concepts for software design and development.

2).Abstraction: It promotes the use of abstraction to simplify complex systems. Abstraction involves identifying essential
aspects of a system and representing them at different levels of detail. The Booch approach uses abstraction to create
models of software systems.

3).Three Major Models: The Booch approach uses three primary models to describe a software system:

a. Analysis Model: This model focuses on understanding the problem domain and requirements of the software. It
involves identifying the key objects and their relationships.

b. Design Model: In this stage, the software is designed in terms of classes, interfaces, and their relationships. The
design model is created based on the analysis model.

9
c. Implementation Model: This is the stage where the actual code is written, following the design model.

4).Notation: The Booch approach provides a notation for representing these models. This notation includes diagrams
and symbols to describe the structure and behavior of the software system.

5).Iterative and Incremental: Like many modern software development methodologies, the Booch approach is iterative
and incremental. It allows for refinements and adjustments in each phase of development, based on feedback and
changing requirements.

6).Encourages Documentation: The Booch approach emphasizes the importance of documenting the software design
and development process. This documentation helps in understanding the system and facilitating communication
among team members.

7).Evolution into UML: Grady Booch was one of the key contributors to the development of the Unified Modeling
Language (UML). UML is an industry-standard modeling language that integrates aspects of the Booch approach along
with contributions from other methodologies. Today, UML is widely used for software modeling and design.

The Booch approach, with its focus on object-oriented principles and systematic modeling, has had a significant
influence on the field of software engineering. While it's less commonly used as a standalone methodology today, its
concepts and principles are still integral to software development processes, especially through the use of UML.

Coupling and Cohesion


Introduction: The purpose of Design phase in the Software Development Life Cycle is to produce a solution to a problem
given in the SRS(Software Requirement Specification) document. The output of the design phase is Software Design
Document (SDD).

Coupling and Cohesion are two key concepts in software engineering that are used to measure the quality of a software
system’s design.

Both coupling and cohesion are important factors in determining the maintainability, scalability, and reliability of a
software system. High coupling and low cohesion can make a system difficult to change and test, while low coupling and
high cohesion make a system easier to maintain and improve.

Modularization: Modularization is the process of dividing a software system into multiple independent modules where
each module works independently. There are many advantages of Modularization in software engineering. Some of
these are given below:

 Easy to understand the system.


 System maintenance is easy.
 A module can be used many times as their requirements. No need to write it again and again.

Coupling: Coupling is the measure of the degree of interdependence between the modules. A good software will
have low coupling. High coupling means that modules are closely connected and changes in one module may affect

10
other modules. Low coupling means that modules are independent and changes in one module have little impact on
other modules.

Types of Coupling:

Data Coupling: If the dependency between the modules is based on the fact that they communicate by passing only
data, then the modules are said to be data coupled. In data coupling, the components are independent of each other
and communicate through data. Module communications don’t contain tramp data. Example-customer billing system.

Stamp Coupling In stamp coupling, the complete data structure is passed from one module to another module.
Therefore, it involves tramp data. It may be necessary due to efficiency factors- this choice was made by the insightful
designer, not a lazy programmer.

Control Coupling: If the modules communicate by passing control information, then they are said to be control coupled.
It can be bad if parameters indicate completely different behavior and good if parameters allow factoring and reuse of
functionality. Example- sort function that takes comparison function as an argument.

External Coupling: In external coupling, the modules depend on other modules, external to the software being
developed or to a particular type of hardware. Ex- protocol, external file, device format, etc.

Common Coupling: The modules have shared data such as global data structures. The changes in global data mean
tracing back to all modules which access that data to evaluate the effect of the change. So it has got disadvantages like
difficulty in reusing modules, reduced ability to control data accesses, and reduced maintainability.

11
Content Coupling: In a content coupling, one module can modify the data of another module, or control flow is passed
from one module to the other module. This is the worst form of coupling and should be avoided.

Cohesion: Cohesion is a measure of the degree to which the elements of the module are functionally related. It is the
degree to which all elements directed towards performing a single task are contained in the component. Basically,
cohesion is the internal glue that keeps the module together. A good software design will have high cohesion.

Types of Cohesion:

Functional Cohesion: Every essential element for a single computation is contained in the component. A functional
cohesion performs the task and functions. It is an ideal situation.

Sequential Cohesion: An element outputs some data that becomes the input for other element, i.e., data flow between
the parts. It occurs naturally in functional programming languages.

Communicational Cohesion: Two elements operate on the same input data or contribute towards the same output
data. Example- update record in the database and send it to the printer.

Procedural Cohesion: Elements of procedural cohesion ensure the order of execution. Actions are still weakly connected
and unlikely to be reusable. Ex- calculate student GPA, print student record, calculate cumulative GPA, print cumulative
GPA.

Temporal Cohesion: The elements are related by their timing involved. A module connected with temporal cohesion all
the tasks must be executed in the same time span. This cohesion contains the code for initializing all the parts of the
system. Lots of different activities occur, all at unit time.

Logical Cohesion: The elements are logically related and not functionally. Ex- A component reads inputs from tape, disk,
and network. All the code for these functions is in the same component. Operations are related, but the functions are
significantly different.

12
Coincidental Cohesion: The elements are not related(unrelated). The elements have no conceptual relationship other
than location in source code. It is accidental and the worst form of cohesion. Ex- print next line and reverse the
characters of a string in a single component.

Advantages of low coupling:

Improved maintainability: Low coupling reduces the impact of changes in one module on other modules, making it
easier to modify or replace individual components without affecting the entire system.

Enhanced modularity: Low coupling allows modules to be developed and tested in isolation, improving the modularity
and reusability of code.

Better scalability: Low coupling facilitates the addition of new modules and the removal of existing ones, making it easier
to scale the system as needed.

Advantages of high cohesion:

Improved readability and understandability: High cohesion results in clear, focused modules with a single, well-defined
purpose, making it easier for developers to understand the code and make changes.

Better error isolation: High cohesion reduces the likelihood that a change in one part of a module will affect other parts,
making it easier to

isolate and fix errors. Improved reliability: High cohesion leads to modules that are less prone to errors and that function
more consistently,

leading to an overall improvement in the reliability of the system.

Disadvantages of high coupling:

Increased complexity: High coupling increases the interdependence between modules, making the system more
complex and difficult to understand.

Reduced flexibility: High coupling makes it more difficult to modify or replace individual components without affecting
the entire system.

Decreased modularity: High coupling makes it more difficult to develop and test modules in isolation, reducing the
modularity and reusability of code.

Disadvantages of low cohesion:

Increased code duplication: Low cohesion can lead to the duplication of code, as elements that belong together are split
into separate modules.

13
Reduced functionality: Low cohesion can result in modules that lack a clear purpose and contain elements that don’t
belong together, reducing their functionality and making them harder to maintain.

Difficulty in understanding the module: Low cohesion can make it harder for developers to understand the purpose and
behavior of a module, leading to errors and a lack of clarity.

Design metrics -

Design metrics in software engineering are quantitative measures used to evaluate the quality, complexity,
maintainability, and other attributes of a software system's design. These metrics help software developers and project
managers assess the design's effectiveness and make informed decisions throughout the software development
lifecycle. Design metrics can be used to identify potential issues, prioritize areas for improvement, and track progress in
design enhancements. Some common design metrics include:

1. Cyclomatic Complexity: This metric measures the complexity of a software system's control flow by counting the
number of linearly independent paths through the code. A high cyclomatic complexity indicates more complex and
potentially error-prone code.
2. Depth of Inheritance Tree (DIT): DIT measures how many levels of inheritance exist in a class hierarchy. A high DIT
can make the codebase more challenging to understand and maintain.
3. Class Coupling: This metric evaluates the number of dependencies a class has on other classes. High class coupling
can lead to a lack of modularity and can make the system less adaptable to change.
4. Fan-Out: Fan-out measures the number of classes a particular class depends on or interacts with. It helps identify
highly interconnected classes and potential trouble spots.
5. Fan-In: Fan-in measures the number of classes that depend on a particular class. This metric can help identify classes
with high responsibility or influence within the system.
6. Lack of Cohesion in Methods (LCOM): LCOM measures the lack of cohesion within a class by evaluating the number
of methods that don't use a shared set of instance variables. High LCOM can indicate poor encapsulation.
7. Abstractness (A): Abstractness measures the ratio of abstract classes (e.g., interfaces or abstract base classes) to
concrete classes in a system. It can help evaluate the level of abstraction and reusability in the design.
8. Instability: Instability measures the ratio of efferent coupling (dependencies external to a component) to total
coupling. It helps assess the system's stability, where an unstable system is more prone to change.
9. Normalized Distance (ND): ND combines abstractness and instability to assess the balance between abstraction and
stability. It helps identify classes that may need refactoring.
10. Design Patterns Usage: This metric counts how often design patterns (e.g., Singleton, Factory, Observer) are used in
the codebase. It can indicate how well-established and maintainable the design is.
11. Code Smells: Various design metrics can help identify code smells, such as long method lengths, high parameter
counts, and excessive nesting, which can signal areas for improvement.

These design metrics are valuable for identifying potential design issues early in the software development process,
enabling developers to make design improvements, enhance maintainability, and ultimately produce higher-quality
software systems. It's important to note that no single metric is a silver bullet, and a combination of these metrics is
often used to gain a more comprehensive understanding of a software system's design quality.

14
design documentation standard
Design documentation standards are a set of guidelines and best practices for creating and maintaining documentation
related to the design of a product, system, or project. These standards ensure consistency, clarity, and effectiveness in
conveying design information to stakeholders, including team members, clients, and future maintainers. The specific
requirements for design documentation can vary depending on the industry and the nature of the project. Below, I'll
provide a general outline of key components to consider when establishing design documentation standards:

1).Title Page:

 Project or system name


 Date of creation
 Version or revision number
 Author(s) and contact information
 Confidentiality and security classification (if applicable)
2).Table of Contents:

 A clear, organized list of document sections and their page numbers.

3).Introduction:

 Briefly describe the purpose and scope of the design documentation.


 Provide an overview of the project or system being documented.
4).Document Revision History:

 A table tracking changes made to the document, including dates, authors, and a summary of revisions.

5).Design Requirements:

 List and describe the specific requirements that the design must meet.
 Include any regulatory or industry standards that apply.
6).System Architecture:

 Describe the overall system architecture, including high-level diagrams and block diagrams.
 Detail the components and their interactions.
7).Detailed Design:

 Provide in-depth information about each system component, module, or subsystem.


 Include detailed diagrams, such as flowcharts, state diagrams, or UML diagrams.
 Document data structures, algorithms, and interfaces.
 Explain design decisions and rationale.
8).User Interface Design (if applicable):

 Describe the user interface elements, such as screens, buttons, and menus.
 Include wireframes, mock-ups, or design prototypes.

15
 Address usability and accessibility considerations.
9).Hardware Design (if applicable):

 Document the hardware components, connections, and specifications.


 Include schematics, layouts, and circuit diagrams.
10).Software Design (if applicable):

 Detail software components, modules, and functions.


 Document data flow, control flow, and algorithms.
 Discuss software architecture, design patterns, and coding standards.

16

You might also like