Operationalizing Architecture in an agile Software Project
worked on by:
ArsenijSolovjev
Expose
One form of technical debt is architectural erosion[1]. As a recent
master's thesis[2] has shown, Saros is subject to it. The causes of
this haven't been specifically investigated, however I would argue this
is an issue of the development process. New developments on Saros are
being rigorously reviewed, and sometimes these address technical
debt. However, technical debt is not always obvious when it is
commited to code, there is no comprehensive overview of technical debt
and it is not being addressed systematically.
In my master's thesis I would like to improve the way architectural
erosion is handled in the development process by applying the
most-established in open-source architecture compliance checking
(
SonarQube[4]) on Saros. This would contribute to preventing
architectural erosion, as well as support architectural changes in
Saros. Using
SonarQube it is possible to alert the developers of new
architectural violations, to find and to inspect pre-existing
violations. Also having a formal description of the architecture would
ease new developers understand the system.
Saros's build-infrastructure would be extended to convey differential
architecture-checks upon a commit. This means the source code will be
checked for conformance to certain architecture rules. This would be
done by integrating
SonarQube's architecture rule constraints into the
development/build process. For the developer this would result in an
additional criteria required to pass a gerrit review. This way a
developer would need his patchset to be
- compilable,
- correct according to the unit test suite
- and to additionally conform to the Saros architecture.
It would also be of interest to see how we could use
some of the other features of Sonar, some of them overlap with
existing build steps inthe current build configuration. Currently
Jenkins is responsible for a number of tasks such as computing code
coverage, PMD source code analysis and
FindBugs. All of these tasks
belong to quality assurance, a field in which
SonarQube excels, so it
will be considered to delegate these tasks to
SonarQube. This would
leave Jenkins the responsibility to build, communicate with Gerrit,
and to delegate to Sonar.
As of now the Saros architecture is documented on its homepage[5], in
some theses as well as in the heads of it's developers. An aspiring
Saros-developer mightnot be aware of these resources or could simply
forget them. After my extension though, he would be forced to see
whether his patchset makes sense from an architectural point of view
and be forced to act upon that by either changing his patchsetor the
architecture itself. The exact behaviour of the developer is unknown,
and I would like to evaluate how this change would effect the current
development process. Also it is to be evaluated if the effort needed
to support this addition to the development process is worthwhile.
There are some obstacles to modifying the infrastructure in the
desired manner, which I seek to overcome.
- Saros's architecture is not formulated in a series of formal rules/specification, but rather verbally and graphically[5]. To overcome this, I would consult the existing documentation, some developers, as well as research Saros's commit message history on architectural ideas in Saros. With that knowledge I would proceed to create a basic set of rules, which should be extended and modified by future developers as is seen fit.
- SonarQube's capabilites in terms of defining architecture rules are limited to Sonar's interface. This poses an inconvenience, since if a developer would like to make changes to the architecture rules, he would be forced to use yet another tool in an already difficult process. A more preferable approach would be to have a DSL describing the architecture in the source code itself. This was already done in Anne Augustine's recent master's thesis[3], however her approach is tailored to a specific build infrastructure and cannot be applied to Saros. Hence I would like to investigate the possibilities of extending Sonar to provide this feature (i.e. to be able to make architecture checks on the basis of a specific document within the source code).
- Sonar's capabilities in respect to architecture checking are limited to formulating dependency rules (i.e. allowing/denying access to specific packages and classes). Software architecture has more facets though, as described in Kruchten's 4+1 View Model for instance. I would like to investigate the feasibility of implementing additional levels of architectural formalism and modelling.
This being done, I intend to provide support to a major project within
Saros, which involves abstracting Saros away from Eclipse. I
believe architectural constraints might provide an overview of Saros's
dependencies to Eclipse and would help developers keep them in check.
[1] Dewayne E. Perry and Alexander L. Wolf. Foundations for the
study of software architecture. Software Engineering Notes,
17(4):4052, 1992.
[2] Patrick Schlott. Analyse und Verbesserung der
Architektur eines nebenläufigen und verteilten Softwaresystems, FU
Berlin, AGSE, 2013.
[3] Anne Augustin. Integration von
Architekturmodellen in einen agilen Softwareentwicklungsprozess, FU
Berlin, 2013.
[4]
SonarQube.
http://www.sonarqube.org/
[5] Saros Homepage, architecture documentation page.
http://www.saros-project.org/architectureDocumentation
Milestones
Submission Date: 10.10.2014
Weeks: CW16 - CW41
saros.build Infrastructure += Sonarqube
- Migration of code coverage, PMD and Findbugs to Sonarqube, (3 days)
- Saros profile, additional metrics and evaluation. (1 day)
Development process += Architecture as an Artifact
- Differential issue reports (1 week)
- Create DSL to describe layers (0,5 week)
- Teach Sonarqube to use DSL (2,5 weeks)
- ACC are used in development (0,5 week)
Evaluate both of the above
- Develop an approach on how to elicit feedback from current devs
- Collect and reflect on feedback, adjusting process if necessary
Find a language to describe meaningful architectural concepts in Saros
- Literature research on ADLs
- Research on agile architecting (nice to have)
- Research on Saros's architecture through…
- …theses
- …documentation
- …code and git history
- Determine Saros' most important architecture rationales
- Use new knowledge of the essential architectural elements of Saros to better evaluate ADLs and similar.
Implement found language as a DSL
- Find and implement a way for reflexion checking between DSL and code itself
Evaluate, whether this is helpful to the developers