There are many aspects to look at when one is trying to define or describe the architectural elements of a system.
Etc, etc, etc....
One aspect that I see that is completely missed by by most software vendors and system developers and integrators is what I call Testing Architecture.
I define testing architecture as a description of the testing tools, products and other system components that are dedicated to supporting testability of the solution.
Testing architecture describes the patterns used to support building testable components, and provides guidance on when and how to utilize stubs, mocks, data setup and cleaning services, automated testing frameworks and other testing artifacts.
Finally Testing Architecture describes testing coverage metrics for various aspects of the solution, and lists any constraints that may limit the use of automated testing.
It's time for major software vendors to take a page from many OSS groups and start making tests and testability far more prominent in there solution.