Reading: Software Design Flashcards

1
Q

What is software design?

A

Software design is the process of analyzing software requirements in order to produce a description of the software’s internal structure that will serve as the basis for its construction.

A software design (the result) describes the architecture—how software is decomposed
and organized into components—and the interfaces between those components. It should also describe the components at a level of detail that enables their construction.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

What is architectural design?

A

Architectural design (aka highlevel design aka top-level design) describes how software is organized into components

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

What is detailed design?

A

Detailed design describes the desired behavior of components within an architectural design.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

What is a software design priciple?

A

Software design principles are key notions that provide the basis for many different software design approaches and concepts.

Examples:
- abstraction
- coupling and cohesion
- decomposition and modularization
- encapsulation/information hiding
- separation of interface and implementation
- sufficiency, completeness, and primitiveness
- separation of concerns

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

What is abstraction?

A

A software design principle where “a view of an object that focuses on the information relevant to a particular purpose and ignores the remainder of the information”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

What is coupling? What is cohesion?

A

Coupling is defined as “a measure of the interdependence among modules in a computer program.”

Cohesion is defined as “a measure of the
strength of association of the elements within
a module”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

What is decomposition and modularization?

A

Large software is divided into a number of smaller named components having well-defined
interfaces that describe component interactions. Usually the goal is to place different functionalities and responsibilities in different components.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

What is encapsulation?

A

Encapsulation and information hiding means
grouping and packaging the internal details
of an abstraction and making those details
inaccessible to external entities.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

What is separation of interface and implementation?

A

Separating interface and implementation
involves defining a component by specifying a public interface (known to the clients)
that is separate from the details of how the
component is realized (see encapsulation and
information hiding).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

What is sufficiency, completeness, and primitiveness?

A

Achieving sufficiency and completeness
means ensuring that a software component
captures all the important characteristics of
an abstraction and nothing more.

Primitiveness means the design should be based on patterns that are easy to implement.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

What is separation of concerns?

A

Separation of concerns. A concern is an
“area of interest with respect to a software
design” [8]. A design concern is an area of
design that is relevant to one or more of its
stakeholders. Each architecture view frames
one or more concerns. Separating concerns
by views allows interested stakeholders to
focus on a few things at a time and offers a
means of managing complexity [9].

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

What are architectural viewpoints? Give some examples.

A

“A view represents a partial aspect of a software architecture that shows specific properties of a software system” [14*].

Examples:
- logical view (satisfying the functional requirements)
- process view (concurrency issues)
- physical view (distribution issues)
- development view (how the design is broken down into implementation units with explicit representation of the dependencies among the units).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

What is an architectural style? Give some examples.

A

An architectural style is “a specialization of element and relation types, together with a set of constraints on how they can be used” [14*].

An architectural style provides the software’s high-level organization.

Major architectural styles:
* General structures (for example, layers, pipes
and filters, blackboard)
* Distributed systems (for example, clientserver, three-tiers, broker)
* Interactive systems (for example, Model-ViewController, Presentation-Abstraction-Control)
* Adaptable systems (for example, microkernel, reflection)
* Others (for example, batch, interpreters, process control, rule-based).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

What are some general user interface design principles?

A
  • Learnability. The software should be easy to
    learn so that the user can rapidly start working with the software.
  • User familiarity. The interface should use
    terms and concepts drawn from the experiences of the people who will use the software.
  • Consistency. The interface should be consistent so that comparable operations are activated in the same way.
  • Minimal surprise. The behavior of software
    should not surprise users.
  • Recoverability. The interface should provide
    mechanisms allowing users to recover from
    errors.
  • User guidance. The interface should give
    meaningful feedback when errors occur and
    provide context-related help to users.
  • User diversity. The interface should provide appropriate interaction mechanisms
    for diverse types of users and for users with
    different capabilities (blind, poor eyesight,
    deaf, colorblind, etc.).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

What are some user interaction styles?

A
  • Question-answer. The interaction is essentially restricted to a single question-answer
    exchange between the user and the software.
    The user issues a question to the software,
    and the software returns the answer to the
    question.
  • Direct manipulation. Users interact with
    objects on the computer screen. Direct
    manipulation often includes a pointing
    device (such as a mouse, trackball, or a finger on touch screens) that manipulates an
    object and invokes actions that specify what
    is to be done with that object.
  • Menu selection. The user selects a command
    from a menu list of commands.
  • Form fill-in. The user fills in the fields of a
    form. Sometimes fields include menus, in
    which case the form has action buttons for
    the user to initiate action.
  • Command language. The user issues a command and provides related parameters to
    direct the software what to do.
  • Natural language. The user issues a command in natural language. That is, the natural
    language is a front end to a command language and is parsed and translated into software commands.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly