0% found this document useful (0 votes)
12 views

Assignment # 04

This document summarizes key factors that affect software design, including abstraction, modularity, cohesion, and coupling. It discusses how abstraction allows designers to think at a high level without implementation details and helps simplify problems and structure problem solving. Modularity allows breaking software into reusable components with standardized interfaces. Cohesion refers to logically grouping related elements, while coupling is defined as interdependence between system components and high coupling can compromise the system if a component fails. The document emphasizes the importance of increasing cohesion and decreasing coupling in software designs.

Uploaded by

Amna Amjid
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)
12 views

Assignment # 04

This document summarizes key factors that affect software design, including abstraction, modularity, cohesion, and coupling. It discusses how abstraction allows designers to think at a high level without implementation details and helps simplify problems and structure problem solving. Modularity allows breaking software into reusable components with standardized interfaces. Cohesion refers to logically grouping related elements, while coupling is defined as interdependence between system components and high coupling can compromise the system if a component fails. The document emphasizes the importance of increasing cohesion and decreasing coupling in software designs.

Uploaded by

Amna Amjid
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/ 4

Software Designs

Assignment# 4

Course Title: Software Design &Architecture

Submitted By: Amna Amjid F20-0020

Semester: 4th BS-SE-Sec“A”

Submitted To: Ma’am Sonia Rafaqat

Date: 8th, June, 2022

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

What is Good Design?

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.

Factors affecting software designs


Abstraction
An abstraction is a tool that allows a designer to think about a component at a high level
without worrying about the implementation's technical details. Abstraction can be applied to
both existing elements and newly developed components. It is one of the important factor that
effects software designs. How?
1. Problem Simplification: Real problems always have many details
irrelevant to their solution. Designers only focus on information required to solve the
problem.
2. Structuring Problem Solving: Many design problems are too large and
complex to solve all at once. One way to attack such a problem is to solve an abstract
version of the problem, then enhance the solution to account for more and more detail.
We call this process refinement. This top-down strategy is very common in design.
Modularity
The ability to break software into smaller pieces with standardized interfaces is a measure of
software modularity. Modularity in software is equivalent to modularity in hardware. We
intend to build products by merging reusable code chunks, so you only have to implement a

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.

You might also like