Engineering Software Products Chapter 4 - Sommerville
Why is it important to try to minimize complexity in a software system?
Complexity arises because of the number and nature of relationships among components in a system. In a complex system, changing one component often means changes will need to be made to other components. A complex system is easier to break, so complexity should be minimized.
Extend the IEEE definition of software architecture to include a definition of the activities involved in architectural design.
Software architecture is the fundamental organization of a software system embodied in its components, their relationships to each other and to the environment, and the principles guiding its design and evolution. Architectural design requires considering issues such as non-functional product characteristics, product lifetime, software reuse, number of users and software compatibility. Architectural design also includes decomposing the system, organizing components, selecting a distribution architecture, choosing the outside technologies needed for product development, and making compromises to create the best system that can be delivered on time and on budget.
An architecture designed to support security may be based on either a centralized model, where all sensitive information is stored in one secure place, or a distributed model, where information is spread around and stored in many different places. Suggest one advantage and one disadvantage of each approach.
In a centralized model, where all of the data is stored in one place, accessing the data is easy and efficient, but the system's security is weaker, because security only needs to be breached in one location for the entire system to fail. In a distributed model, where data is stored in different places, accessing that data is slow and expensive. Security is also more expensive, but it is stronger, since a single security breach will only affect part of the system.
Briefly explain how structuring a software architecture as a stack of functional layers helps to minimize the overall complexity in a software product.
In a layered architecture, the system is decomposed into groups of related components, each of which are a separate area of concern. Within each layer, the components have independent functions and are ideally designed to interact only with the layer immediately below. In a layered model, components in lower levels never depend on higher level components. This means that after making changes to one layer, none of the layers below will need to be changed, only the effects on higher layers need to be considered.
Under what circumstances would you push as much local processing as possible onto the client in a client-server architecture?
Pushing processing onto the client side requires that the user's local device has lots of processing power. It makes sense to push processing to the client when the client needs to perform specialized tasks or use specialized views on a regular basis, when client interfaces need to be updated more often than the server, or when local input needs to be processed (data validation).
Explain why it would not be appropriate to use a multi-tier client server architecture for the iLearn system.
The multi-tier client server architecture would make updating the system with new functionality or adding new services more complex. In a client-server architecture, data is passed back and for the between the client which requests the data, and the server which is responsible for managing it. Many of the application services used in the iLearn system are independent and manage their own data, so it would not be appropriate to use a client-server architecture
You are developing a product to sell to finance companies. Giving reasons for your answer, consider the issues that affect architectural decision making (Figure 4.4) and suggest which two factors are likely to be most important.
The two most important factors will be non-functional product characteristics and software compatibility. The client is involved in finance, so security (a non-functional characteristic) will be a very important issue, since financial systems are susceptible to attack. The system security will possibly come into conflict with other characteristics, but compromises should probably be made to favor security. Software compatibility is important because it ensures the product can handle data prepared using a different system. For the customer, this means the product can be integrated into their existing business, and the product is more likely to be a success.