Part B: Software Architecture Flashcards
Modular design
It is generally accepted that a good software design will be modular. Why is modularity so important?
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.
Modular design
What twin characteristics represent effective modularity?
Tights cohesion: Each module is focused on one aspect of behavior Loose coupling: Each module knows as little as possible about mother modules
Architectural definitions
What is meant by the “architecture of a software system”?
Defines the system in terms of computational components and the relationship between those components.
Architectural definitions
What are the key differences between an “application” and a “component”?
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.
Architectural definitions
From a coding perspective, what is a component framework?
A set of libraries that do a particular job, that is used in the coding when creating the application.
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
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.
Poor cohesion and coupling
How would you modify the diagram to show how to refactor this arrangement to improve the design?
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.
Refactoring
What is meant by the term “refactoring”?
Code refactoring is the process of improving and restructuring existing code without changing its external behaviour.
Refactoring
How does refactoring fit into agile software development?
In agile methods there is often a separate activity of refactoring where the design is improved, after each increment.
Development infrastructure
What is meant by the term “development infrastructure”?
technical infrastructure are the real stuff, the hardware, what servers, what type of servers, where to place them locally or in the cloud.
Development infrastructure
List the types of technology decision that have to be considered when specifying the development infrastructure
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 might the development infrastructure be related to the choices that have been made or need to be made for the system under development?
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.
Reuse can be considered in two broad dimensions: (a) implementation or code reuse; (b) concept reuse. List different forms of code-based reuse.
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.?
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?
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
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.
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.