Analyzing Software Architecture Training

Analyzing architecture is all about finding structural decay in applications and systems to determine whether the architecture is still satisfying the business concerns (performance, scalability, fault tolerance, availability, and so on) and also whether the architecture supporting the application functionality is still viable. This is known as “architectural vitality”. While the functionality of a system may be sound, the architecture supporting that functionality may not be. For example, performance and scalability may have been the number one concern 5 years ago, but today agility, testability, and deployability is the number one concern to support high levels of competitive advantage and time-to-market. Does the architecture support these “-ilities”? If not, the company is likely to fail in today’s highly competitive market.

In this intense 1-day hands-on workshop you will learn what structural decay means and how to detect it. You will also learn what it means to “analyze an architecture”, and how to measure and quantify various “-ilities” such as performance, scalability, testability, maintainability, and so on. Using your own application or a real-world application supplied in the class, you will first see how to apply macro-level (design) analysis techniques to detect elements of decay. Leveraging source code metrics and open-source analysis tools, you will then see how to apply micro-level (source code) analysis techniques to identify decay in your architecture. You will also learn how to perform risk analysis against your architecture to help identify and prioritize architectural refactoring efforts, and also how to assess the level of modularity in your application in preparation for the move to microservices.

Course Agenda

Introduction

  • Defining structural decay
  • What is analyzed when analyzing an architecture?
  • Exercises: determining “-ilities” 

Macro (Design) Level Analysis Techniques

  • Leveraging Fitness Functions
  • Measuring and analyzing general decay indicators
    • Performance 
    • Scalability
    • Agility
    • Fault Tolerance
    • Testability
    • Deployability
  • Architecture style-specific decay indicators
    • Microservices
    • Service-Based
    • Microkernel
    • Layered
  • Exercises: Analyzing and interpreting macro-level characteristics

Micro (Source Code) Level Analysis Techniques

  • Leveraging fitness functions for analysis thresholds 
  • Mapping source code metrics to “-ilities”
  • Mapping source code metrics to business concerns

Using Code Analysis Tools for Architecture

  • JDepend
  • X-Ray
  • CodeCity
  • Writing your own custom analyzer
  • Exercises: Analyzing and interpreting micro-level characteristics

 Refactoring 

  • Component size refactoring
  • Component coupling refactoring

Automated Governance 

  • Writing automated governance tests
  • Validating architecture compliance using ArchUnit
  • Exercises: Compliance testing

Analyzing Architectural Risk 

  • Risk dimension
  • Risk assessments
  • Risk storming
  • Exercises: Identifying architecture risk using risk storming


©2019 Developer To Architect