Skip to main content

If you don't have an IBM ID and password, register here.

By clicking Submit, you agree to the developerWorks terms of use.

The first time you sign into developerWorks, a profile is created for you. This profile includes the first name, last name, and display name you identified when you registered with developerWorks. Select information in your developerWorks profile is displayed to the public, but you may edit the information at any time. Your first name, last name (unless you choose to hide them), and display name will accompany the content that you post.

All information submitted is secure.

The first time you sign in to developerWorks, a profile is created for you, so you need to choose a display name. Your display name accompanies the content you post on developerworks.

Please choose a display name between 3-31 characters. Your display name must be unique in the developerWorks community and should not be your email address for privacy reasons.

By clicking Submit, you agree to the developerWorks terms of use.

All information submitted is secure.

Analyze use cases by architectural relevance

Using architectural mechanisms to improve the software development life cycle

Benjamin A. Lieberman, Ph.D. ( blieberman@BioLogicSoftwareConsulting.com), Principal Architect, BioLogic Software Consulting, LLC
Ben Lieberman
Benjamin A. Lieberman serves as principal architect for BioLogic Software Consulting, providing expertise consulting and training on a wide variety of software development topics, including requirements analysis, software analysis and design, configuration management, and development process improvement. Dr. Lieberman specializes in object-oriented architectures and distributed computing. You can reach him at blieberman@BioLogicSoftwareConsulting.com.

Summary:  A key best practice for software development is to focus on resolving high-risk items early to reduce the likelihood of derailing the delivery schedule. Developing the architecturally relevant aspects early in the life cycle can reduce technical risks, but deciding which aspects of a system are architecturally relevant is often a subjective exercise. In this article, you learn how to use architectural mechanisms, such as persistence, networking, and security, to assess and qualitatively rank use cases and scenarios for architectural relevance. Architects and project managers can then use these rankings to more effectively schedule resources and organize projects.

Date:  23 Jan 2007
Level:  Introductory

Comments:  

Introduction

The term architectural relevance refers to a system aspect, either functional or nonfunctional, that is central to determining the fundamental structure of that system. One of the core best practices for software development is to focus on the highest areas of system risk early in the development project. Typically, an architecturally relevant use case requires one or more of these high-risk areas. For example, if the system is intended to perform video on demand (VOD) delivery, an architecturally relevant aspect would be the translation of the video signal to the correct target device. This step would necessarily include the ability to retrieve video content, transform the signal as necessary for display, and select the correct translation device to assign a specific delivery channel. By choosing to develop this functional area first, rather than a lower-risk area, you can address a large set of technical risks early in the project. The difficulty is in finding all the system aspects, assigning them to the architecturally relevant category, and ranking them appropriately.

Ranking system aspects can often lead to identifying nearly all of the functionality as architecturally significant; every part of the system is seen as required and important. Following iterative development practices, however, forces the selection of only 10 to 20 percent of the features for scheduled delivery at the end of each iteration. How then shall the development team choose among all of the desired system functionality? The growing consensus among software architects is that the best way to achieve this ranking is by associating system use cases with specific architectural mechanisms required to realize the detailed functionality.


Defining architectural mechanisms

An architectural mechanism can be defined as a recurring service utilized by many, if not most, parts of the software system. Architectural mechanisms represent the core operational services that the system architecture is expected to provide to the business processing logic. Table 1 summarizes the primary mechanisms found in many software systems. As you can see, an architectural mechanism is identified as a general category of system behavior rather than a specific business function. For example, in a billing application, billing or ordering would not be mechanisms, but transaction management (and perhaps workflow) would be used to implement those core business functions.


Table 1. Architectural mechanisms
MechanismDescription
Auditing/loggingProvides system audit trail of processing
CommunicationsProvides the protocols and networking necessary for one part of the application to pass messages to another or to an external system
Conversion/translationModifies system data from one form to another
DebuggingProvides support for application error analysis
DistributionPerforms processing logic spread over multiple processing units
Error handlingRecovers from predictable system-error conditions
Event managementSupports sending and receiving asynchronous event messages
GraphicsSupports user interface services, such as 3-D rendering
LicensingAcquires, tracks, and monitors license usage
MailPermits sending and receiving e-mail-based communications
MessagingPosts and receives defined interprocess messages
Online assistanceProvides user support in the form of online help, mouse-over notices, context-sensitive help, and so on
PersistenceStores application information
PrintingSupports a variety of output devices, including color printing, plotting, and rendering for offset printing
Process managementPermits process and thread management
Redundancy/failover Ensures system availability in the event of foreseeable failures
ReportingReports generation and delivery frameworks
Resource managementManages system resources, such as connections, sockets, memory, and CPU
SchedulingManages the timing of tasks and events
SecurityAuthenticates and authorizes access to system functionality
TimePermits synchronization of servers, events, tasks, and other time-related operations
Transaction management Ensures atomic, consistent, isolated, and durable (ACID) properties for system behavior
WorkflowCreates, orders, and executes specific tasks in a specific order

However, simply listing a mechanism as architecturally relevant is not helpful to the architect trying to determine which functionality uses these mechanisms. To assign mechanisms to use cases or other requirements, it is helpful to identify the core characteristics of each mechanism. If a particular feature uses these characteristics, it is likely that the associated mechanism is needed. Continuing the billing example, some of the characteristics of a use case called "Manage Customer Billing" might involve operation history (auditing), recovery and tracing (error handling), ACID properties (transaction management), and intersystem synchronization (communications). Table 2 shows the common characteristics for each architectural mechanism identified in Table 1.


Table 2. Architectural mechanism characteristics
MechanismCharacteristics
Auditing/loggingEntry content, durability, message structure (hierarchical, linked, or independent messages), history, traceability
CommunicationsSource/target messaging, latency synchronization, packet size, protocol
Conversion/translationFormat mapping, data format of source, data format of target, algorithm performance, caching rules/standards
DebuggingLogging, file management, detailed processing information
DistributionNetworking, protocol, latency
DeploymentVersioning, error handling, logging and recording, recovery fault tracing
Event managementEvent generation, event capture, processing interrupts, process flow control
GraphicsVisual output device management, processing performance, 2-D/3-D rendering
LicensingLicense acquisition, software installation control, usage tracking, financial remuneration
MailSending e-mail, receiving e-mail, controlling spam/virus attacks
MessagingMessage duration, delivery recipients, distribution, guaranteed delivery, identification
Online assistanceUser help, context-sensitive assistance, user manuals
PersistenceGranularity, volume, duration, access, reliability
PrintingOutput device management, rendering to external devices, document formatting, translation
Process managementOperating system access, performance, batch job operations, asynchronous processes redundancy/failover
NetworkingMonitoring, alarming, data integrity, external synchronization
ReportingData extraction, data transformation, data loading, warehousing
Resource managementSystem access, memory allocation, CPU allocation, file access, pooled connections
SchedulingTask linking/dependency, timed event management, batch execution
SecurityUser roles, access level, access rules, privilege types
TimeSynchronization
Transaction managementRecovery, durability, isolation, atomicity, consistency, coordination
WorkflowTask linking, task automation, business logic

Ranking use cases

Architectural mechanisms are important because they tend to affect the system as a whole by cutting across component boundaries. A familiar example is data persistence. Virtually all applications are required to store some form of data, even if it is little more than user preferences. Data can be stored many ways, each with different degrees of difficulty, such as in a database or through file system access. Moreover, many mechanisms may be implemented with frameworks, where the core elements of the mechanism are provided by either a commercial or open source product. In these cases, the architect and project manager will need to consider the consequences of tight coupling to a nonlocal source, with all of the consequences inherent in that decision.

Mechanisms often interact with and enhance or limit one another. For example, the auditing/logging mechanism is constrained by the persistence, security, and transaction mechanisms. This constraint is due to the nature of auditing, where the audit trail requires storage to a nonvolatile source (such as a database or log file), limitations to access, and the assurance of integrity of the recorded operation.

Note, however, that architectural mechanisms are not the same as architectural drivers. A driver represents an overall system goal, such as performance or scalability, whereas mechanisms are techniques to achieve these goals. Likewise, an architectural constraint may affect several mechanisms and limit the possible solutions. An example would be the difference between identifying a communication mechanism and a system requirement for using a particular communication protocol. Therefore, when identifying potential mechanisms for association with a selected element of system functionality, be careful to separate the driving forces from the implementation techniques.

Architectural mechanisms are always involved in any substantial software development project, but it is not always clear which use cases use which mechanisms. Use Table 2 as a guide to look for the characteristics of each mechanism during a use-case review or walkthrough. For example, consider the video delivery system. Here are some of the proposed use cases:

  • Manage customer order
  • Prepare billing statement
  • Translate video signal
  • Download video content
  • Transmit video signal

Assuming that the use-case writer has created a summary for each use case (or better yet, detailed most of them), it is possible to discover likely mechanisms. Often a simple description is enough to suggest mechanisms of interest, but occasionally it is necessary to identify the basic and alternate use-case flows before you can make a final determination. Table 3 shows the summary analysis for the "transmit video signal" use case of the video delivery system. Clearly, this feature set has a large number of associated mechanisms and is a likely candidate for early development.


Table 3. Example use-case architectural analysis
Use caseCharacteristicsMechanism
Transmit video signalMemory allocation, CPU allocation, file accessResource management
Event capture, processing interruptsEvent management
Visual output device management, processing performance, 2-D/3-D renderingGraphics
Synchronization, packet size, protocolCommunication
Data format of source, data format of target, algorithm performanceConversion/translation

Identifying and associating architectural mechanisms with specific use cases makes it possible to determine the functionality most likely to exercise large parts of the system architecture. The more mechanisms associated with a use case, the larger the impact on the final design. To establish an initial ranking, simply count the number of mechanisms expected for each use case. You can then order each use case from highest to lowest, with the higher ranked use cases slated for early iteration development.

Applying a weight scale

It is important to note, however, that not all implementations are equal. Mechanisms for security may be quite complex for a distributed architecture and much simpler for basic intranet access. The database manufacturer may provide the mechanism for access to a database, or you may need to interface to a legacy system by writing a custom driver component. To account for these differences, you should consider each identified mechanism for likely complexity of implementation. This requires you to make a judgment call based on the business and technical context of the final system. Consider using the weighting scheme outlined in Table 4: basic (1), intermediate (2), and advanced (3). This scale allows you to apply a weighting factor to each mechanism based on the difficulty for implementation.


Table 4. Use-case architectural mechanism ranking
Use caseMechanismDifficulty
Use case #1

Persistence

Security

Networking

Audit

1

1

3

1

Use case #2

E-mail

Transaction management

Scheduling

Audit

1

3

2

2

Use case #3

Persistence

Transaction management

Audit

1

2

1

Based on Table 3, the most architecturally relevant use case is #2 with 8 points, followed by #1 with 6 points, and finally, #3 with 4 points. Even though use case #1 has the same number of mechanisms, #2 has more complex implementation, so you should assign this use case to an early development iteration.

In legacy systems, use this technique to identify which of the requested functional changes will cause the highest impact (and therefore greatest risk) to the existing system. Here the challenge is to identify whether the functional request is affecting the architecturally relevant use cases, and if so, which of the mechanisms are likely to be modified. You can perform a similar analysis to rate and rank each requested change.

Once you've identified the key use cases, you can use this information to organize the development effort, particularly in the architecture definition phase. During this phase, the goals are to reduce risk and establish a candidate software architecture. Again, the more mechanisms in use, the higher the associated technical risk, so by focusing the early iterations on the most architecturally relevant use-case scenarios, you can accomplish both these goals. As an additional benefit to this approach, most, if not all, key technical mechanisms are discovered early in the project, allowing sufficient time for the architect and project manager to fully consider the consequences of design choices.


Summary

Using architectural mechanisms to evaluate and rank system functionality is a powerful way to organize a project, but it is only one part of determining the order of functional delivery. The priority of a particular functional aspect may trump the architectural significance, especially if early delivery of that feature is needed to ensure continued project funding -- the retirement of an entirely different sort of risk. When changes are made to legacy systems, an architect is often asked to perform an "impact analysis" to determine if the changes are reasonable given the scope and likelihood for breakage of existing functionality. Using this approach, you can rapidly focus attention on the changes that affect architecturally relevant use cases, and consequently, the core architectural mechanisms that are realized in the system code.

For teams accustomed to a waterfall delivery schedule and having challenges adopting to an iterative, architecturally driven approach, the architectural mechanism ranking technique provides a path to discover the truly critical system functionality. Directing early effort toward these high-risk, high-reward use cases will benefit the overall project success and the long-term maintainability of the software system.


Resources

Learn

Discuss

About the author

Ben Lieberman

Benjamin A. Lieberman serves as principal architect for BioLogic Software Consulting, providing expertise consulting and training on a wide variety of software development topics, including requirements analysis, software analysis and design, configuration management, and development process improvement. Dr. Lieberman specializes in object-oriented architectures and distributed computing. You can reach him at blieberman@BioLogicSoftwareConsulting.com.

Report abuse help

Report abuse

Thank you. This entry has been flagged for moderator attention.


Report abuse help

Report abuse

Report abuse submission failed. Please try again later.


developerWorks: Sign in

If you don't have an IBM ID and password, register here.


Forgot your IBM ID?


Forgot your password?
Change your password


By clicking Submit, you agree to the developerWorks terms of use.

 


The first time you sign into developerWorks, a profile is created for you. This profile includes the first name, last name, and display name you identified when you registered with developerWorks. Select information in your developerWorks profile is displayed to the public, but you may edit the information at any time. Your first name, last name (unless you choose to hide them), and display name will accompany the content that you post.

Choose your display name

The first time you sign in to developerWorks, a profile is created for you, so you need to choose a display name. Your display name accompanies the content you post on developerWorks.

Please choose a display name between 3-31 characters. Your display name must be unique in the developerWorks community and should not be your email address for privacy reasons.

(Must be between 3 – 31 characters.)


By clicking Submit, you agree to the developerWorks terms of use.

 


Rate this article

Comments

Help: Update or add to My dW interests

What's this?

This little timesaver lets you update your My developerWorks profile with just one click! The general subject of this content (AIX and UNIX, Information Management, Lotus, Rational, Tivoli, WebSphere, Java, Linux, Open source, SOA and Web services, Web development, or XML) will be added to the interests section of your profile, if it's not there already. You only need to be logged in to My developerWorks.

And what's the point of adding your interests to your profile? That's how you find other users with the same interests as yours, and see what they're reading and contributing to the community. Your interests also help us recommend relevant developerWorks content to you.

View your My developerWorks profile

Return from help

Help: Remove from My dW interests

What's this?

Removing this interest does not alter your profile, but rather removes this piece of content from a list of all content for which you've indicated interest. In a future enhancement to My developerWorks, you'll be able to see a record of that content.

View your My developerWorks profile

Return from help

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=1
Zone=Rational
ArticleID=191414
ArticleTitle=Analyze use cases by architectural relevance
publish-date=01232007
author1-email= blieberman@BioLogicSoftwareConsulting.com
author1-email-cc=

Tags

Help
Use the search field to find all types of content in My developerWorks with that tag.

Use the slider bar to see more or fewer tags.

For articles in technology zones (such as Java technology, Linux, Open source, XML), Popular tags shows the top tags for all technology zones. For articles in product zones (such as Info Mgmt, Rational, WebSphere), Popular tags shows the top tags for just that product zone.

For articles in technology zones (such as Java technology, Linux, Open source, XML), My tags shows your tags for all technology zones. For articles in product zones (such as Info Mgmt, Rational, WebSphere), My tags shows your tags for just that product zone.

Use the search field to find all types of content in My developerWorks with that tag. Popular tags shows the top tags for this particular content zone (for example, Java technology, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere).