DevTeach 2007 -- Test-Driven Architecture (Mario Cardinal)

Mario is going to record his presentation and posting it at his blog (www.mariocardinal.com).

Architecture establishes the context for implementation.

Damn Jeremy Miller!!!  His big head is now blocking my view.  Oh, now it’s not.

Architects reduce complexity of the problem space by taking fundamental decisions that are costly to reverse.

Tests remove ambiguity

  • 2 classes of stakeholders

Tests provide explicit complex

Tests are a design task

Wow….dense slides, but no time to read all the data….

Tests are operational artifacts and must be living and evolutionary.

Testing is a validation of architecture.

Responsibility of an Architect

  • reduce complexity of the problem space

  • execution related irreversible decisions (i.e. presentation, processing, state management)

  • load time (configuration, deployment)
  • design time experience (team members skill set, process for development, tooling, staging environment)* share among the team members and stakeholders the solutions to reduce complexity

Architecture of structure is easier if you divide and conquer.

Layered architecture is a common technique to break apart complicated software systems into components.  Each layer, division in the Divide and Conquer mentality, needs to have the same level of granularity.

Divide upon a stable abstraction.  Structure all the main components interactions through interfaces.   Accept the fact that these interfaces are now almost impossible to change.

Building reversibility into architecture increases the complexity.  More seams in your application architecture increases complexity too.

Don’t divide your application based on the physical deployment of the application.  Deployment decisions should come after the architectural design.  Make a distinction between the seams owned by the EAI guys and the seams owned by the developers.  Don’t make seams just for the ease of deployment by the IT guys.

Creating only what you need allows you to evolve you code and architecture to the needs defined.

Architecture is what is not reversible.

Test only the risky interfaces.  Risk == Probability of change * Impact

Wow….Bellware just slammed an unnamed (for reasons I’ll leave alone too) fellow CodeBetter member.

Udi Dahan quote….”Everything is a people problem”