Resumes
Brent Arias
Roger Arias
Contact Brent
· Consultants:
Ignorance is Bliss
· Patterns:
Design Patterns
· Topics:
Architectural Reqs
SEI CMMI
The Rational Edge
Architecture Essays
MSF Agile
UML Quick Ref
Risk Reduction Requirement Types
Maintaining this site does have its costs. If you'd like to contribute, please follow the PayPal link below.


Software Architecture: The Matrix
Brent Arias

(updated Mar 20, 2006)

A principle concern of a software architect is delineating the scope of a system to be built.  To pin down that scope, the architect will need every technique or "device" in his bag of tricks.  And once that scope is established, the architect needs more such devices to aid his team in fulfilling the vision of that scope.  Here I will elaborate on one such significant device that can help with both of these needs. 

There is an identity relationship between the requirements of a project and the scope of a project.  Thus, any device that helps discern requirements is a device that helps define scope.  Architects, system analysts, and others involved with requirements elicitation often brain-storm categories of requirements to ask probing questions, such as "have we addressed requirements from the category of accessibility?"  Unfortunately, all too often the outline of categories is reinvented for each project despite the genericness of such categories.  Perhaps this is because industry defined and suggested categories, such as FURPS from the Rational Unified Process, are inadequate or insufficiently defined.

However, experience suggests that the problem does not necessarily stem from the uniqueness of any given project.  In other words, it should be possible to elaborate and standardize an outline of requirements categories to serve as an architect's device with readily repeatable or duplicatable benefits in requirements elicitation.  To this end I will suggest an outline that could potentially be used with  all projects as a solicitous device for defining scope.  And to foster acceptance of this outline, I will capitalize on the existing FURPS+ model and simply elaborate, comment, and extend it as follows:

  • Functionality
    • The justification for the existance of a system
    • The solution to the primary problem or business need
    • Usually embodied by Use Cases
    • Interactions, validations, algorithms
    • Typically captured as use cases or business rules
  • Usability
    • Human Factors Engineering - ergonomics
    • Look and Feel – platform or application standards
    • Accessibility - from where and how the system can be accessed
    • Interoperability - open architecture (e.g. Eclipse plugin?)
    • Connectivity - communication options (e.g. RS-232 networking?)
  • Reliability
    • Accuracy - the correctness of output
    • Availability - meantime between failures
    • Recoverability - from partial system failures
    • Verifiability - (contractual) runtime reporting on system health
    • Survivability - continuous operations through disasters (earthquake, war, etc.)
  • Performance
    • Efficiency - of space (bandwidth, RAM, etc)
    • Speed - time constraints
    • Scalability - well handling under increasing load
  • Supportability
    • Maintainability (i.e. "build-time" issues)
      • Testability - at unit, integration, and system levels
      • Buildability - fast build times, simple build process, versioning robustness
      • Extensibility/Expandability - inexpensive to alter and does not break when changed
      • Portability - Minimal Vendor or platform dependency
      • Reusability - ease of isolating and transferring significant components
      • Internationalalization / Localization
    • Serviceability (i.e. "run-time" issues)
      • Continuity - administrative downtime constraints
      • Manageability – of fielded product
      • Configurability/Modifiability – of fielded product
      • Updateability - mode of distributing/installing updates
      • Deployability - mode of installation
      • Restorability – from archives
      • Logging - of debug data
  • Security
    • Integrity Verification – seal of no tampering
    • Confidentiality Preservation – of data
    • Authorization/Access Permission – seal of proper user administration
    • Identity Verification – e.g. digital certificates
    • Authenticity Permission – e.g. logon paradigm
    • Availability of Service – seal of unblocked communication
    • Nonrepudiation Evidence – seal of proper origin or destination of data
    • Auditing Evidence – of sensitive operations

Whatever the tool for tracking requirements, whether a spreadsheet or RequisitePro, I suggest not requiring the analyst(s) to categorize beyond the main headings; a fine-grained categorization becomes too subjective and unacceptably slows requirements triage.  On the other hand, if a requirement seems to fit two main categories such that its placement is a coin-toss, this is probably because the requirement is overloaded.  Overloaded requirements are hard to test and difficult to cost, so steps should be taken to break it into two distinct requirements.  On the other hand, special accomodations for requirements of the Security category (particularly "Authenticity Permission") are usually needed, since typically they weave into functional requirements.  For example, logon steps are usually described in the use cases that are the domain of functional requirements.  Finally, care should be taken to distinguish between "ilities" that are formal requirements, and "ilities" that are architectural goals.  Requirements of the Supportability category often fall into this latter group and so probably should not be found in requirements documents.

So now the concern areas of a software architect, regarding the software itself, have been summarized in a handy outline.  But the value of this outline device increases when it is standardized across projects (or extended if necessary).  Assuming that costs are attached to requirements, patterns of development costs could now easily be assessed across projects in a relatively meaningful fashion - and thereby aid the costing estimates of future projects.  There would be cadveats of course since, for example, the security costs of PDA projects might always run lower than security costs of ASP.NET projects.  Ergo, the intersection of "FURPSSS" to "project type" produces a cost matrix that aids with estimates and resource planning for future related projects.

Another application of the FURPSSS outline would be for technology and product comparison reviews.  Imagine the benefit if articles that compared technologies, such as J2EE against .NET, would always use the above outline for product evaluations.  Furthermore, imagine having an online version of the "FURPSSS to Project Type" or "FURPSSS to technology type" matrix in which employees spontaneously contribute or insert comments.  For example, an employee might know that J2ME has a particular serious shortcoming in the area of performance - a shortcoming that is then briefly described and stored in a corporate accessible interface.  Granted, it is not necessary to have such a matrix if employees submit articles that are accessible with a search tool - but busy employees are likely more willing to write "matrix size" soundbites rather than full articles, and the matrix helps employees recall relevant factoids simply by its solicitous nature.

For collecting employee input, perhaps tapping the matrix is handled subtely through an appropriately configured trouble ticketing tool.  Or perhaps the matrix is given an express, high-profile web interface.  Either way, the organization that offers a cookbook of requirements categories has notably aided its software architects in making informed decisions to implement and fulfill the scope of a currently running project.  And since software architecture as a discipline is often too big to depend on the skills of a single individual or local team, perhaps one day "the matrix" could be offered on the Internet to permit architects across corporate and business sector boundaries to implicitly collaborate and share knowledge on the gamit of categories that constitute the architecture of a system.

If you feel there is a category or subcategory missing or poorly qualified from the above listing of "ilities," please send me a note suggesting the addition or alteration: panoply@att.net.

The copyright notice below applies to the reproduction of this article. The actual FURPS+ described herein, extended or otherwise, I do not copyright. Use or modify them freely.




Copyright © 2002-2003 Brent Arias. All Rights Reserved. Please read our Terms and Conditions.


This site is optimized for at least 800x600 resolution (hi-color) viewing with a browser that supports style sheets.
Contact Webmaster