Assignment # 04
Assignment # 04
Assignment# 4
1
Quality Attributes of Software Design and Architecture
Each architecture style has its advantages, disadvantages, and potential risks. Choosing the
right style to satisfy required functions and quality attributes is very important. Quality
attributes are identified in the requirement analysis process. Quality attributes can be
categorized into the following three groups:
1. Implementation attributes (not observable at runtime)
• Interoperability: universal accessibility and the ability to exchange data among
internal components and with the outside world. Interoperability requires loose
dependency of infrastructure.
• Maintainability and extensibility: the ability to modify the system and conveniently
extend it.
• Testability: the degree to which the system facilitates the establishment of test cases.
Testability usually requires a complete set of documentation accompanied by system
design and implementation.
• Portability: the system's level of independence on software and hardware platforms.
Systems developed using high-level programming languages usually have good
portability. One typical example is Java—most Java programs need only be compiled
once and can run everywhere.
2. Runtime attributes (observable at runtime)
• Availability: a system's capability to be available 24/7. Availability can be achieved
via replication and careful design to cope with failures of hardware, software, or the
network.
• Security: a system's ability to cope with malicious attacks from outside or inside the
system. Security can be improved by installing firewalls, establishing authentication
and authorization processes, and using encryption.
• Performance: increasing a system's efficiency with regard to response time,
throughput, and resource utilization, attributes which usually conflict with each other.
• Usability: the level of human satisfaction from using the system. Usability includes
matters of completeness, correctness, compatibility, as well as a friendly user
interface, complete documentation, and technical support.
3. Business attributes
• Time: to market: the time it takes from requirements analysis to the date a product is
released.
• Cost: the expense of building, maintaining, and operating the system.
• Lifetime: the period that the product is “alive” before retirement
2
It makes a product useful and understandable, is innovative, aesthetic, unobtrusive, honest,
long-lasting, thorough to the last detail, environmentally friendly, and involves as little design
as possible. Designers strive for good design.
“You cannot understand good design if you do not understand people.”
— Dieter Rams
Dieter Rams, a German industrial designer known for his "less is more" approach to design,
spoke on the nature of excellent design and what it needs of designers. Rams had a huge
impact on the way most consumer products looked and worked in the late twentieth and early
twenty-first centuries. Rams' hallmarks can be seen everywhere, from alarm clocks to
toothbrushes, coffeemakers, and much more. Honesty, restraint, and simplicity are the
hallmarks of his style. Rams surveyed the environment around him in the late 1970s, noticing
"an impenetrable mix of forms, colours, and noises," and asked himself, "Is my design good
design?" Rams' response is encapsulated in ten principles, according to which good design:
1. Makes a product useful.
2. Is aesthetic.
3. Makes a product understandable.
4. Is unobtrusive.
5. Is honest.
6. Is long-lasting.
7. Is thorough down to the last detail.
8. Is environmentally friendly.
9. Involves as little design as possible.
3
feature or functionality once and then reuse it as much as possible. A modularity is also
affects the software designs.
A software module provides its interface to other modules both internally and externally, both
inside the module system and to other systems. Externally exposed interfaces are part of the
external Application Program Interface (API) of the module system (API). Changes in APIs
will have an influence on other apps, thus they should be properly designed.
Cohesion
Cohesion refers to putting things together that make sense — like a package. You can choose
to create your packages, modules, or classes in a consistent manner from a development
standpoint. Consider the Python math package, for example. Because it contains everything
relevant to mathematical operations, the math package is cohesive. There isn't a single thing
in it that isn't mathematical. Cohesion also effects the software design we must sure to
increase cohesion in our designs
Coupling
Coupling is defined as when packages, modules, classes, or files are highly interconnected
but I think this isn't the finest system implementation. Why? Because some of the system's
pieces rely on the malfunctioning package, if one of them changes or breaks, the entire
system might be compromised.
I understand that a heavily connected system is easier to implement at first, but it will be far
more difficult to debug and fix if any component fails. We must sure to decrease the coupling
in our designs.