Chapter 4 Software Architecture

Réussis tes devoirs et examens dès maintenant avec Quizwiz!

What is a service, component and module?

-A service is a coherent unit of functionality. This may mean different things at different levels of the system. -A component is a named software unit that offers one or more services to other software components or to the end-users of the software. When used by other components, these services are accessed through an API. -A module is a named set of components. The components in a module should have something in common. For example, they may provide a set of related services.

What three types of servers do web-based applications usually include?

-A web server that communicates with clients using the HTTP protocol. It delivers web pages to the browser for rendering and processes HTTP requests from the client. -An application server that is responsible for application-specific operations. -A database server that manages the system data and transfers these data to and from the system database.

What are the layer functionalities in a web-based application?

-Browser-based or mobile user interface: A web browser system interface in which HTML forms are often used to collect user input. -Authentication and UI management: A user interface management layer that may include components for user authentication and web page generation. -Application-specific functionality: An "application" layer that provides functionality of the application. -Basic shared services: A shared services layer that includes components that provide services used by the application layer components. -Database and transaction management: A database layer that provides services such as transaction management and recovery.

What 3 issues must you consider for your software product when choosing multi-tier and service-oriented architectures?

-Data type and data updates -Frequency of change -The system execution platform

What are the technology choices?

-Database: Should you use a relational SQL database or an unstructured NoSQL database? -Platform: Should you deliver your product on a mobile app and/or a web platform? -Server: Should you use dedicated in-house servers or design your system to run on a public cloud? If a public cloud, should you use Amazon, Google, Microsoft, or some other option? -Open source: Are there suitable open-source components that you could incorporate into your products? -Development tools: Do your development tools embed architectural assumptions about the software being developed that limit your architectural choices?

What are the three types of application service integration?

-Full integration: Services are aware of and can communicate with other services through their APIs. -Partial integration: Services may share service components and databases, but they are not aware of and cannot communicate directly with other application services. -Independent: These services do not use any shared system services or databases, and they are unaware of any other services in the system. They can be replaced by any other comparable service.

What 4 things to consider with different delivery platforms (phone or tablet)?

-Intermittent connectivity: You must be able to provide a limited service without network connectivity. -Processor power: Mobile devices have less powerful processors, so you need to minimize computationally intensive operations. -Power management: Mobile battery life is limited, so you should try to minimize the power used by your application. -On-screen keyboard: On-screen keyboards are slow and error prone. You should minimize input using the screen keyboard to reduce user frustration.

What do you need to create a reliable, secure, and efficient product?

You need to pay attention to its overall organization, how the software is decomposed into components, the server organization, and the technologies used to build the software. In short, you need to design the software architecture.

What are two things you can do to control architectural complexity?

-Localize relationships: If there are relationships between components A and B (say), they are easier to understand if A and B are defined in the same module. You should identify logical component groupings (such as the layers in a layered architecture) with relationships mostly within a component group. -Reduce shared dependencies: Where components A and B depend on some other component or data, complexity increases because changes to the shared component mean you have to understand how these changes affect both A and B. It is always preferable to use local data wherever possible and to avoid sharing data if you can.

What are The importance of architectural design issues(5)?

-Non-functional product characteristics: Non-functional product characteristics such as security and performance affect all users. -Product Lifetime: If you anticipate a long product lifetime, you need to create regular product revisions. -Software reuse: You can save a lot of time and effort if you can reuse large components from other products or open-source software. -Number of users: The number of users can change very quickly so design your architecture so that your system can be quickly scaled up and down. -Software compatibility: It is important to maintain compatibility with other software so that users can adopt your product and use data prepared using a different system.

What are the four types of components?

-Part-of One component is part of another component. For example, a function or method may be part of an object. -Uses One component uses the functionality provided by another component. -Is-located-with One component is defined in the same module or object as another component. -Shares-data-with A component shares data with another component.

What are the iLearn architectural design principles?

-Replaceability: It should be possible for users to replace applications in the system with alternatives and to add new applications. -Extensibility: It should be possible for users or system administrators to create their own versions of the system. -Age-appropriate: Age-appropriate interfaces. -Programmability: It should be easy for users to create their own applications by linking existing applications in the system. -Minimum work: Users who do not wish to change the system should not have to do extra work.

What are the 7 Non-functional system quality attributes?

-Responsiveness: Does the system return results to users in a reasonable time? -Reliability: Do the system features behave as expected by both developers and users? -Availability: Can the system deliver its services when requested by users? -Security: Does the system protect itself and users' data from unauthorized attacks and intrusions? -Usability: Can system users access the features that they need and use them quickly and without errors? -Maintainability: Can the system be readily updated and new features added without undue costs? -Resilience: Can the system continue to deliver user services in the event of partial failure or external attack?

What are the three general design guidelines to help to control complexity?

-Separation of concerns: Organize into components focused on a single concern. -Stable interfaces: Design interfaces that are coherent and change slowly. -Implement once: Avoid duplicating functionality in different places.

Why is architecture important?

-The architecture of a system has a fundamental influence on the non-functional system properties. -The software architecture you choose affects the complexity of your product. The more complex a system, the more difficult and expensive it is to understand and change.

What is a component?

A component is an element that implements a coherent set of functionality or features.

What is abstraction in software design?

Abstraction in software design means that you focus on the essential elements of a system or software component without concern for its details.

What is architecture?

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.

When choosing an architecture for your system, what trade-offs do you need to make?

Because it is impossible to optimize everything, you have to make a series of trade-offs when choosing an architecture for your system. Some examples are: -maintainability vs. performance; -security vs. usability; -availability vs. time to market and cost.

What are client-server architectures?

Client-server architectures are a type of distribution architecture that is suited to applications in which clients access a shared database and business logic operations on those data.

What are cross-cutting concerns?

Cross-cutting concerns are systemic concerns; that is, they affect the whole system. In a layered architecture, cross-cutting concerns affect all layers in the system as well as the way in which people use the system.

What is decomposition?

Decomposition involves analyzing large-scale architectural components and representing them as a set of finer-grain components.

What is centralized security architecture?

It is based on the principle that if you maintain all of your information in one place, then you can apply lots of resources to protect that information and ensure that intruders can't get it.

What are the most commonly used architectures for web-based systems?

Multi-tier client-server and service-oriented architectures are the most commonly used architectures for web-based systems.

What does the architecture of a software product affect?

Performance, usability, security, reliability, and maintainability.

What does the distribution architecture in a system defines?

The distribution architecture in a system defines the organization of the servers in that system and the allocation of components to these servers.


Ensembles d'études connexes

PNU 133 Honan PrepU Teaching & Learning / Patient Education

View Set

theology 3b- morality- section 1; part 3 review

View Set