Professional Documents
Culture Documents
System Decomposition
System decomposition begins by decomposing the system into cohesive, well-defined
subsystems. Subsystems are then decomposed into cohesive, well-defined
components. Components are then decomposed into cohesive, well-defined sub-
components:
In fact, there is no important distinction between system, sub-system, component, and
sub-component. So the above process can be reduced to a simpler iterative process:
Q.2 Name and explain the eight design issues in software
design.
A number of key issues must be dealt with when designing software. Some are quality
concerns that all software must address—for example, performance, security, reliability,
usability, etc. Another important issue is how to decompose, organize, and package
software components. This is so fundamental that all design approaches address it in
one
way or another Software Design Principles, Software Design Strategies and Methods).
In
contrast, other issues “deal with some aspect of software’s behavior that is not in the
application domain, but which addresses some of the supporting domains”. Such
issues,
which often crosscut the system’s functionality, have been referred to as aspects, which
“tend not to be units of software’s functional decomposition, but rather to be properties
that affect the performance or semantics of the components in systemic ways”. A
number
of these key, crosscutting issues are discussed in the following sections (presented in
alphabetical order).
2.1 Concurrency
Design for concurrency is concerned with decomposing software into processes, tasks, and
threads and dealing with related issues of efficiency, atomicity, synchronization, and scheduling.
2.2 Control and Handling of Events
This design issue is concerned with how to organize data and control flow as well as how to
handle reactive and temporal events through various mechanisms such as implicit invocation
and call-backs.
2.3 Data Persistence
This design issue is concerned with how to handle long-lived data.
2.4 Distribution of Components
This design issue is concerned with how to distribute the software across the hardware
(including computer hardware and network hardware), how the components communicate, and
how middleware can be used to deal with heterogeneous software.
2.5 Error and Exception Handling and Fault Tolerance
This design issue is concerned with how to prevent, tolerate, and process errors and deal with
exceptional conditions.
2.6 Interaction and Presentation
This design issue is concerned with how to structure and organize interactions with users as
well as the presentation of information (for example, separation of presentation and business
logic using the Model-View-Controller approach). Note that this topic does not specify user
interface details, which is the task of user interface design (see topic 4, User Interface Design).
2.7 Security
Design for security is concerned with how to prevent unauthorized disclosure, creation,
change, deletion, or denial of access to information and other resources. It is also
concerned with how to tolerate security-related attacks or violations by limiting damage,
continuing service, speeding repair and recovery, and failing and recovering securely.
Access control is a fundamental concept of security, and one should also ensure the
proper use of cryptology.
Q.3 Explain the system issues and their relationship with the
system design
Solution: To ensure that the product outcomes align with expectations and
requirements, a solid process and line of communication need to be
established. Remember the following best practices.
End User: End user basically the user which will use your
application to get benefit from it and in return become a source of
income to you.
Developer : Developer are the people which will maintain your
product and will check timely that is anything required or need to
do changes in your system to make it better and user friendly for
the clients.
Q.5. What are the six general trade-off issues in a software design
process?
Reliability
Expandability
Programmability
Maintainability
Compatibility
Adaptability
Availability
Development Status and Cost
In order to read a file and parse it while reading into some meaningful data,
one can either read it step by step at every line or may also load the entire
content in memory, which would not be recommended for large text cases
e.g text editors like Microsoft Word. In general, to throw away the stack
concept completely, it is needed. And also when we want things to do
concurrently i.e. non-preemptive multitasking, we need coroutines for
concurrency.
How Coroutines Works
It is almost similar to threads but one main difference is that threads are
typically preemptively scheduled while coroutines are not and this is
because threads can be rescheduled at any instant and can execute
concurrently while coroutines rescheduled at specific points and not
execute concurrently.
o State Machines
o Actor Model
o Generators
o Communicating Sequential Processes
o Reverse Communication
Benefits of Coroutines