Part B: Software Architecture Flashcards

1
Q
  1. Modular design (max 4 points)
    It is generally accepted that a good software design will be modular. Why is modularity so important? What twin characteristics represent effective modularity?
A
Modularity means that the complexity of a system is divided up into simpler modules. 
“Divide and conquer”
Some advantages of this include:
-	Ease of understanding
-	Allocation of work
-	Organisation of testing
-	Module substitution
-	Reuse of working modules

The twin characteristics that represent effective modularity is:

  • Tight cohesion
  • Each module is focused one aspect of behaviour
  • Loose coupling
  • Each module knows as little as possible about any other modules
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q
  1. Architectural definitions (max 5 points)
    What is meant by the “architecture of a software system”? What are the key differences between an “application” and a “component”? From a coding perspective, what is a component framework?
A

“Architecture of a software system”
Defines the system in terms of computational components and the relationships between those components

“Application”
Often used synonymously with “software system”
A number of applications may make up a single software system

“Component”
An element of computational capability that is insufficient of itself to act as an application delivering business value, but may be a valuable development asset through reuse in multiple applications

“Component framework”
In essence, component-frameworks breaks the system down into variant “components” that represent abstract processing that the system support. These components are generally thought of as “pluggable” in the sense that the system can be configured with a set of components to accomplish a particular task or a set of tasks.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q
20.	Poor cohesion and coupling	(max 6 points)
Given a bi-directional navigation relationship between two classes in a UML design class diagram, explain why this arrangement is usually an indication of poor cohesion and coupling in the design. (3p) How would you modify the diagram to show how to refactor this arrangement to improve the design? (3p)
A

Abstract C out of A, so B does not need to depend on A. No more bi-directional. The diagram now looks more complex, but is a more accurate representation of the complexity of the problem domain.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q
  1. Refactoring (max 5 points)
    What is meant by the term “refactoring”? (1p) How does refactoring fit into agile software development? (2p) Include in your answer refactoring’s relationship to testing (2p)
A

What is meant by the term “refactoring”?
“refactoring” is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behaviour
Taken from: Refactoring.

How does refactoring fit into agile software development?
As the software code base grows it can become very complex and difficult to maintain. Refactoring offers a solution to this, by allowing the developers to improve and adapt the inner workings of the code, without altering its behaviour.
source

Include in your answer refactoring’s relationship to testing
To ensure that the code’s external behaviour stays the same when refactoring, there should be regression testing in place. Black box testing can be used, as the internals will change but the externals should remain the same.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q
  1. Development infrastructure (1) (max 3 points)
    What is the meant by the term “development infrastructure”? List the types of technology decision that have to be considered when specifying the development infrastructure
A

technical infrastructure are the real stuff, the hardware, what servers, what type of servers, where to place them locally or in the cloud
Design for reuse/Design to reuse
System under development (hardware, UI, application language, database, operating system…)
System to build it (methods, IDE, GUI builder, code development tools, testing environment, host platform)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
  1. Development infrastructure (2) (max 3 points)
    How might the development infrastructure be related to the choices that have been made or need to be made for the system under development?
A

The development infrastructure might impose constraints on what is possible to deliver in the SUD. E.g., if you want to use a specific type of database, that must be supported by the development infrastructure in the form of hardware and operating system

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q
  1. Reuse (1) (max 3 points)
    Reuse can be considered in two broad dimensions: (a) implementation or code reuse; (b) concept reuse. List different forms of code-based reuse.
A
Software Libraries
Design patterns
Frameworks
High-order function
Retrocomputing
Computer security
Components
Using existing libraries?
If a specific form of mathematical operation/calculation is done repeatedly and from different part of the code base, it could be taken out as a separate function/class that is called from the other parts of the code base.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q
  1. Reuse (3) (max 4 points)
    The promise of reuse does not seem to have been realized. What factors may inhibit the successful adoption of software reuse?
A

● Organizational and administrative impediments - Difficult to structure an organization with lots of reusable assets.
● Economic impediments - Supporting corporate-wide reusable assets requires economic investment, needs to be prioritized and funded.
● Lack of technical skills - Developers lack knowledge of fundamental design patterns in their domain, which makes it hard for them to understand how to create and/or reuse frameworks and components effectively.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q
  1. Software maintenance (1) (max 3 points)
    Explain briefly why software “maintenance” is different from the maintenance of a physical system. Describe four different types of software maintenance.
A

The Four types of software maintenance:
Corrective maintenance is a reactive modification of a software product to correct a known problem.
Adaptive maintenance is the modification of software to keep it usable after a change to its operating environment
Perfective maintenance improves the software’s functionality and usability. It includes refining and deleting existing features as well as adding new features, easily making it the largest category of software maintenance.
Preventive maintenance is the modification of software to detect and correct software errors before they take effect.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q
  1. Software maintenance (2) (max 4 points)
    Briefly describe the factors that can be expected to have an impact upon the cost of maintaining a software system or the software component of a wider product.
A

There are two types of cost factors involved in software maintenance:
- Non-Technical Factors
- Technical Factors
Non-Technical:
- Application Domain
“If the application of the program is defined and well understood, the system requirements may be definitive and maintenance due to changing needs minimized.

If the form is entirely new, it is likely that the initial conditions will be modified frequently, as user gain experience with the system.”

  • Staff Stability
    “It is simple for the original writer of a program to understand and change an application rather than some other person who must understand the program by the study of the reports and code listing.”
  • Program Lifetime
  • “Programs become obsolete when the program becomes obsolete, or their original hardware is replaced, and conversion costs exceed rewriting costs.”
  • Dependence on External Environment
    If an application is dependent on its external environment, it must be modified as the climate changes.
  • Hardware Stability
    “If an application is designed to operate on a specific hardware configuration and that configuration does not changes during the program’s lifetime, no maintenance costs due to hardware changes will be incurred.”

Technical:
- Module Independences
It should be possible to change one program unit of a system without affecting any other unit.

  • Programming Language
    Programs written in a high-level programming language are generally easier to understand than programs written in a low-level language.
  • Programming Style
    The method in which a program is written contributes to its understandability and hence, the ease with which it can be modified.
  • Program Validation Testing
  • Documentation
  • Configuration Management Techniques
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q
  1. Technical debt (1) (max 3 points)
    The term “entropy” has been adopted from the realm of thermodynamics. What does “entropy” mean with respect to a software application? The term “technical debt” has emerged within the Agile community – how would you relate this concept to the entropy of an application?
A

“Software entropy is a measure of the inherent instability built into a software system with respect to altering it.” - https://www.toptal.com/software/software-entropy-explained

“The second law of thermodynamics, in principle, states that a closed system’s disorder cannot be reduced, it can only remain unchanged or increase. A measure of this disorder is entropy. This law also seems plausible for software systems; as a system is modified, its disorder, or entropy, tends to increase. This is known as software entropy.” - wikipedia

“Technical debt is a concept in software development that reflects the implied cost of additional rework caused by choosing an easy (limited) solution now instead of using a better approach that would take longer” - Wikipedia

If we bought technical debt (we bought time) meaning we are not in full control and will hurry to get the application working, disregarding software quality. Hence when we bought technical debt, the entropy that measures the inherent instability built into a software system would increase.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q
  1. Technical debt (2) (max 3 points)

How can an organization counter the effects of technical debt in its code base?

A

● Spreading awareness within the organization. If more people are aware of technical debt, they will prioritize avoiding it.
● Follow good coding practices (loose coupling, high cohesion, etc.)
● Good tests with high coverage
● Code reviews

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q
  1. Buy, build or outsource (max 6 points)
    Organisations that need a new application to support their business processes, but are not themselves software development companies, have to choose between buying, building or outsourcing the new software. For each of these options give the factors that would favour that choice.
A
Answer:
Buy:
-	if it fits and time/price are acceptable
-	if there is no/little need for adaptation
-	if future plans are in step
Build:
-	if these is nothing that fits
-	and if resources is available
-	also if:
-	there is an advantage to being first 
-	confidentiality is imperative
-	integration is complex
-	outsourcing risk is high
Outsource:
-	If the specification is clear
-	if they have resource and quality of process
-	if there are adequate feedback mechanism 
-	if the relationship is sound
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q
  1. COTS (max 4 points)

What is meant by the acronym “COTS”? What problems or compromises may be necessary when adopting a COTS-based solution?

A

COTS - Commercial off-the-shelf Software
Taken from PDF p.219
“Security implications - Software security is a serious risk of using COTS software. If the COTS software contains severe security vulnerabilities it can introduce significant risk into an organization’s software supply chain. The risks are compounded when COTS software is integrated or networked with other software products to create a new composite application or a system of systems. The composite application can inherit risks from its COTS components.”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q
  1. Stakeholders (max 4 points)
    Looking at a “system under development” in a lifecycle
    - during the project to build the system,
    - at delivery and roll out,
    - then during live operation
    what different roles and stakeholders could have interests that would need to be reflected in the system’s architecture
A
During project:
-	Developers
-	Architect
-	Maintainers
-	Testers
Delivery and roll out:
-	Config engineers
-	Acquirers
-	Assessors
-	Production engineers
-	Suppliers
Live operation:
-	Users
-	Sales
-	Communicators
-	Support staff
-	System admins
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q
  1. Architectural significance (max 3 points)
    In the “4+1 view” put forward by the RUP as an architectural model, the “+1 view” is the “Use case view”. In this view the architect identifies “architecturally significant use cases, scenarios, classes”. What does “architecturally significant” mean and how does this concept shape the RUP approach to developing a system?
A

The other 4 views are glued together with this “+1”-view.
“The most critical functionality of the system is captured in the form of scenarios (or use cases). By critical we mean: functions that are the most important, the raison d’être of the system, or that have the highest frequency of use, or that present some significant technical risk that must be mitigated”.

17
Q
  1. MDA (max 3 points)
    What does the “MDA” acronym stand for and what is the core concept it embraces? Explain the difference between a “PIM” and a “PSM”.
A

MDA - Model Driven Architecture is an approach to software design, development and implementation. MDA provides guidelines for structuring software specifications that are expressed as models.
Taken from: https://www.omg.org/mda/

PIM - A platform independent model is a view of a system from the platform independent viewpoint. A PIM exhibits a specified degree of platform independence so as to be suitable for use with a number of different platforms of similar type (OMG, 2003).

PSM - A platform specific model is a view of a system from the platform specific viewpoint. A PSM combines the specifications in the PIM with the details that specify how that system uses a particular type of platform (OMG, 2003). In other words: the PSM is a more detailed version of a PIM. Platform specific elements are added. When defining a PSM a target Platform Model has to be available.