What is software architecture?

Software architecture is the result of the decomposition of a system into subsystems providing a set of functionalities and collaborating in the realization of its requirements. It is defined by Bass et al. as the structure of the system made of software components, their externally visible properties, and the relationships between these components (Bass et al., 2003; Bass et al., 2012). By casting details aside, the architecture depicts the software systems at a level of abstraction that is high enough to ease the reasoning about the different steps of their life cycle (Ducasse and Pollet, 2009). These include the understanding, construction, reuse, analysis, evolution, and management of the software (Garlan, 2000). Bass et al. further discuss different advantages of an explicitly designed and documented architecture (Bass et al. 2003):

• Stakeholder communication: the architecture represents the system at a high level of abstraction. As such it can serve as a basis for the discussion between the different stakeholders involved in the system development.

• System analysis: explicitly representing the architecture at the beginning of the system development requires some analysis. Indeed, decisions related to architectural design have a significant impact on the ability of the system to respond or not to critical requirements (e.g., maintainability, availability, and performance).

• Large-scale reuse: the architecture of systems that meet similar requirements is often the same and can therefore support large-scale software reuse.

Hofsmeister et al. argue that the different steps of architectural design drive the designers to early take into account the key elements of the design process (Hofsmeister et al., 2000). They explain that the software architecture can act as a design plan that allows negotiating the system requirements and structuring the discussions between the stakeholders. In addition, they suggest that the software architecture is essential to address the complexity of a system.

As stated in (Ducasse and Pollet, 2009), the literature (e.g., (Kazman and Carriere, 1999; Medvidovic and Jakobac, 2006)) generally distinguishes between the conceptual architecture and the concrete architecture. The term concrete architecture designates the architecture that is derived from source code’s artifacts. The concrete architecture is also called the as-built, as-implemented, realized, or physical architecture. The conceptual architecture designates in turn the architecture that either exists in human minds or in the documentation of software. The conceptual architecture is also referred as the idealized, as-designed, logical or intended architecture.

Architectural styles

The business value of a system is the fruit of its quality attributes as perceived by acquirers as well as end-users (Sury, Abran and April, 2003). The architecture of a system determines the quality attributes that this system will have at the end of its development. In this context, a quality attribute is defined as “a measurable or testable property of a system that is used to indicate how well the system satisfies the needs of its stakeholders” (Bass et al., 2012). The organization of the architecture of a system with respect to some quality attributes can be achieved using architectural styles that support these attributes. These quality attributes are also referred as non-functional requirements (Abran et al. 2004; Bourque and Fairley, 2014). Since the lack of quality attributes unsatisfies users, leads to financial loss, and might also threaten lives, quality attributes have become critical for the system (Sury, Abran and April, 2003).

Definition 

Medvidovic and Jakobak (Medvidovic and Jakobak, 2006) describe the architectural style as “a key design idiom that implicitly captures a large number of design decisions, the rationale behind them, effective compositions of architectural elements, and system qualities that will likely result from the style’s use”. According to Le Métayer (Le Métayer, 1998), « the architecture style can be seen as the « type » (or form) that the architecture must have at run time, that is to say the possible connections between its individual components ». It therefore represents a form of codification of the aspects that must be met by the architecture it structures (Bhattacharya and Perry, 2005). An architectural style governs the vocabulary of components and connectors used when instantiating this style, together with a set of constraints on how they should be arranged (Garlan and Shaw, 1996). As such, the definition of an architectural style involves the following concepts:
• The components: they are the « principal processing units and data stores » (Clements et al., 2003). A component is implemented as an abstract unit of software instructions and internal state that allows transforming data through its interface (Fielding, 2000).
• The connectors: they are the « pathways of interaction between the components » (Clements et al., 2003). Hence, a component has a set of connectors determining how it can interact with other components. Connectors allow transferring data from one component’s interface to another without altering these data (Fielding, 2000).
• The constraints: they are the rules that define how the components and connectors must be assembled in order to create a valid instance of the style (Clements et al., 2003). These constraints can either be topological or semantic. A system that is compliant to a given architectural style must conform to its constraints at design time and during its evolution (Clements et al., 2003). These constraints express the fundamental rules embodied by the architectural style.

LIRE AUSSI :  Tout savoir sur les réseaux informatiques

An architectural style is an element of primary importance in the architectural design (Mikkonen et al., 2004). It allows describing a family of architectures conforming to the set of constraints that it specifies (Tamzalit and Mens, 2010). These constraints allow the architectural style to guide the evolution of architecture toward this family of architectures (Tamzalit and Mens, 2010). This being said, most systems need to combine several architectural styles in order to organize their structure, since every architectural style supports specific quality attributes. This is achieved by using an architectural style for structuring the whole system, and using different architectural styles to organize the internal structure of the various parts of the system (Sommerville, 2007). A description of many common architectural styles can be found in (Shaw and Garlan, 1996; Clements et al., 2003; Bass et al., 2003). Examples of such styles include the layered, pipes and filters, and serviceoriented styles.

Architectural styles are usually classified into three categories of styles (Clements et al., 2003), namely: the module, the component-and-connectors and allocation styles. The module styles allow describing the architecture of a system as a static partition of its software’s functionalities. The component-and-connectors styles allow depicting the runtime behaviour of a system. The allocation styles allow describing the mapping of a software‘s entities to the resources (e.g., hardware, file systems) of its development and execution environments.

Table des matières

INTRODUCTION
CHAPTER 1 LITERATURE REVIEW
1.1 Basic concepts
1.1.1 What is software architecture?
1.1.2 Architectural styles
1.1.2.1 Definition
1.1.2.2 Example of architectural style: the layered style
1.1.3 Architectural views
1.1.4 Modernization of software systems
1.1.5 KDM: the Knowledge Discovery Metamodel
1.1.6 Architectural reconstruction
1.2 Software architecture reconstruction approaches
1.2.1 Approaches targeting architecture recovery in general
1.2.2 Approaches targeting the layered style
1.3 Synthesis
1.3.1 Limitations of the software architecture recovery approaches
1.3.2 Limitations of software architecture recovery approaches targeting the
layered architectures
CHAPTER 2 STRUCTURAL-BASED LAYERING APPROACH
2.1 Extracting layering rules
2.1.1 The abstraction rules
2.1.2 The responsibility rule
2.1.3 The transversality rule
2.1.4 The protection against variations rules
2.2 Overview of the proposed approach
2.3 Facts extraction
2.4 The layered architecture recovery as an optimization problem
2.4.1 Translating the layered architecture recovery into an optimization problem
2.4.1.1 Extracting layers’ dependency attributes from the Incremental
Layer Dependency rule
2.4.1.2 Extracting constraints from the layered style
2.4.1.3 Translating the Layering recovery problem into an Optimization
Problem
2.4.2 Solving the layering recovery optimization problem
2.4.2.1 Using metaheuristics to solve optimization problems
2.4.2.2 Using hill-climbing to solve the layered recovery problem
2.4.2.3 On the stochasticity of the layering algorithm
2.4.2.4 Incremental computation of LaQ
2.5 The layered architecture recovery as a quadratic semi-assignment problem
2.5.1 Factors for Layers Assignment
2.5.2 Layers Recovery as a Quadratic Semi-Assignment Problem
2.5.3 Solving the layering recovery QSAP
2.5.3.1 A tabu search based layering algorithm
2.6 Chapter summary
CHAPTER 3 REALEITY: A TOOL FOR RECOVERING SOFTWARE LAYERS
FROM OBJECT ORIENTED SYSTEMS
3.1 Description
3.2 Extraction
3.3 Layering
3.4 Visualization
3.5 Commands
3.6 Example
3.7 Summary
CHAPTER 4 EVALUATING THE STRUCTURAL-BASED RECOVERY
APPROACH
4.1 Experimentation setup
4.1.1 Experimentation questions
4.1.2 Analyzed systems
4.1.3 Setting the parameters of the layering algorithms
4.2 EQ1: what is the effect of altering the values of the factors on the convergence of our
algorithms?
4.2.1 Experimental results with hill climbing
4.2.2 Experimental results with tabu search
4.2.2.1 Analysis of the influence of the number of iterations
4.2.2.2 Analysis of the influence of the tabu list
4.2.3 Comparison of the two layering algorithms
4.3 EQ2: What are the values of factors (ap, ip, sp and bp) that best correspond to the
common understanding of the layered style?
4.4 EQ3: How do the layering results evolve across evolutions of a software system and
what does it tell about the architectural evolution of the system?
4.4.1 Stability of the algorithm
4.4.2 Similarity of the set of values of the setups factor that yield the layering
that matches the known architecture of the system across its revisions
4.5 EQ4: is the layering approach performant regarding the size of the system at hand?
4.6 EQ5: Is the approach more authoritative than other architecture recovery approaches?
4.7 Threats to validity
4.8 Chapter summary
CHAPTER 5 CONCLUSION

Cours gratuitTélécharger le document complet

 

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *