Architecture Review Checklist - Software Services and Middleware

  1. Describe how error conditions are defined, raised and propagated between application components.
  2. Describe the general pattern of how methods are defined and arranged in various application modules.
  3. Describe the general pattern for how method parameters are defined and organized in various application modules. (Are [in], [in/out], [out] parameters always specified in the same order?) Do Boolean values returned by modules have a consist outcome?
  4. Describe the approach that is used to minimize the number of round trips between client and server calls particularly for out of process calls, and when complex data structures are involved.
  5. Describe the major data structures that are passed between major system components.
  6. Describe the major communication protocols that are used between major system components.
  7. Describe the marshaling techniques that are used between various system components. Describe any specialized marshaling arrangements that are used.
  8. Describe to what extent the system is designed with stateful and stateless components.
  9. Describe how and when state is saved for both stateful and stateless components.
  10. Describe the extent to which objects are created, used, and destroyed versus reused through object pooling.
  11. Describe the extent to which the system relies on threading or critical section coding.
  12. Describe the approach and the internal documentation that is used internally in the system to document the methods, methods arguments and method functionality.
  13. Describe the code review process that was used to build the system.
  14. Describe the unit testing that has been used to test the system components
  15. Describe the pre and post condition testing that is included in various system modules.
  16. Describe the assertion testing that is included with the system.
  17. Do components support all the interface types they need to support or are certain assumptions made about what types of components will call other components either in terms of language bindings or other forms of marshaling.
  18. Describe the extent to which big endian or little endian data format problems need to be handled across different platforms.
  19. Describe if numbers or strings need to be handled differently across different platforms.
  20. Describe whether the software needs to check for floating point round off errors.
  21. Describe how time and data functions are Year 2000 compliant.
  22. Describe what tools or process have been used to test the system for memory leaks, reachability or general robustness
  23. Describe the layering of the systems services software. Describe the general number of links between major system components. Is the system composed of a lot of point to point interfaces or are major messaging backbones used instead?
  24. Describe to what extent the system components are either loosely coupled or tightly coupled.
  25. What requirements does the system need from the infrastructure in terms of shared libraries, support for communication protocols, load balancing, transaction processing, system monitoring, naming services or other infrastructure services?
  26. Describe how the system and system components are designed for refactoring.
  27. Describe how the system or system components rely on common messaging infrastructure versus a unique point to point communication structure.

Copyright The Open Group, 2001