Part B: Software Architecture Flashcards

1
Q

Modular design

It is generally accepted that a good software design will be modular. Why is modularity so important?

A

Make use of the divide and conquer principle.

Modularity ensures ease of understanding and allocation of work. Reuse of working modules and Organisation of testing.

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

Modular design

What twin characteristics represent effective modularity?

A
Tights cohesion: Each module is focused on one aspect of behavior
Loose coupling: Each module knows as little as possible about mother modules
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Architectural definitions

What is meant by the “architecture of a software system”?

A

Defines the system in terms of computational components and the relationship between those components.

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

Architectural definitions

What are the key differences between an “application” and a “component”?

A

Application: A number of applications may make up a single software system. Often used synonymously with a 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.

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

Architectural definitions

From a coding perspective, what is a component framework?

A

A set of libraries that do a particular job, that is used in the coding when creating the application.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
Poor cohesion and coupling
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
A

The reason it’s bad design is because it ties the two of them together. For example if you think about the relationship of a company. Instead of having a Janitor and a boss in a bi-directional relationship you could split the janitor up into a class between them called staff. This will allow the structure and design to be more versatile and agile. If you would change the boss you would have to re-add all the existing relationships between the boss and janitors. While on the split up design you would only have to add it to the staff class.

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

Poor cohesion and coupling

How would you modify the diagram to show how to refactor this arrangement to improve the design?

A

Take the coupling part that ties the two classes together, into a third class instead which both the first and second class can depend upon.

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

Refactoring

What is meant by the term “refactoring”?

A

Code refactoring is the process of improving and restructuring existing code without changing its external behaviour.

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

Refactoring

How does refactoring fit into agile software development?

A

In agile methods there is often a separate activity of refactoring where the design is improved, after each increment.

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

Development infrastructure

What is meant by the term “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.

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

Development infrastructure

List the types of technology decision that have to be considered when specifying the development infrastructure

A

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
12
Q

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
13
Q

Reuse can be considered in two broad dimensions: (a) implementation or code reuse; (b) concept reuse. List different forms of code-based reuse.

A
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
14
Q

Technical debt
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

Entropy is the measure of chaos. Over time the entropy in a system is expected to increase. The more technical debt that is introduced in the code (or architecture), the more chaos or entropy exist in the application. At some point in time you reach a level where the application needs to be reproduced, because it cannot be fixed any more

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

Buy, build or outsource
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

If you buy a product “off-the-shelf” you probably get a product that is well tested, and not used only by your company, but many other companies. You might need to adapt your processes to fit the product.
If you decide to build the software yourself, you get a lot of control of the application, you can choose exactly how it will work and respond to certain tasks.
If you outsource the software to another company, you do not have any of the possible challenges that reside within software development. Someone else is responsible for the application, you act only as a customer and a user.

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

What is meant by the acronym “COTS”?

A

COTS - commercial off the shelf software. Third Party solution

17
Q

What problems or compromises may be necessary when adopting a COTS-based solution?

A
Not needed features, but paid for
Commission from vendor
Good fit, some overlap of work
Own system needs adapting 
COTS ned wrapping 
Wait for COTS feature 
Need intermediate product
Delay or forego feature
18
Q

Architectural significance
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”.

19
Q

MDA
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
PIM - Platform Independent Model, describes the functionality of a system without any platform-specific details.
PSM - Platform Specific Model, includes details of the target platform, e.g., .NET or J2EE.