FEATURE

Generating Test Cases from Use Cases
n many organizations, software testing accounts for 30 to 50 percent of software development costs. Yet often that same software is delivered with significant defects. This contradiction is rooted in two clear facts: First, testing software is a very difficult proposition; and second, testing is typically done without a clear methodology. A widely-accepted tenet in the industry is that it is better to start testing as early in the software development process as possible. Delaying the start of testing activities until all development is done is a high-risk way to proceed. If significant bugs are found at that stage (and they usually are), then schedules often slip. Haphazard methods of designing, organizing, and implementing testing activities and artifacts also frequently lead to less-than-adequate test coverage. Having a straightforward plan for how testing is done can help increase coverage, efficiency, and ultimately software quality. In a software development project, use cases define system software requirements. Use case development begins early on, so real use cases for key product functionality are available in early iterations. By definition, a use case “… fully describes a sequence of actions September 2002

In this article, we will discuss how using use cases to generate test cases can help launch the testing process early in the development life cycle and also help with testing methodology.

by Jim Heumann

performed by a system to provide an observable result of value to a person or another system using the product under development.” Use cases tell the customer what to expect, the developer what to code, the technical writer what to document, and the tester what to test. For software testing — which consists of many interrelated tasks, each with its own artifacts and deliverables — creation of test cases is one of the first fundamental steps. Then test procedures are designed for these test cases, and finally, test scripts are created to implement the procedures. Test cases are key to the process because they identify and communicate the conditions that will be implemented in test and are necessary to verify successful and acceptable implementation of the product requirements. They are all about making sure that the product fulfills the requirements of the system. • Test Case - A set of test inputs, execution conditions, and expected results (outputs) developed to verify compliance with a specific requirement • Test Procedure - The procedural aspect of a given test, usually a set of detailed instructions for the setup and execution of one or more given test cases. The test procedure is an abstract idea realized by one or more

specific test scripts. • Test Script - The step-by-step instructions that realize a test, enabling its execution. Test Scripts may take the form of either documented textual instructions that are executed manually or computer readable instructions that enable automated test execution. Although few actually do it, testers can begin creating test cases as soon as use cases are available, well before any code is written. We will discuss how to do this, and the advantages you can reap from it, below.

An Introduction to Use Cases
Use cases are part of the Unified Modeling Language (UML) and can be visually represented in use-case diagrams. Figure 1 (on page 2) shows a use-case diagram depicting requirements for a university course registration system. The ovals represent use cases, and the stick figures represent “actors,” which can be either humans or other systems. The lines represent communication between an actor and a use case. As you can see, this use-case diagram provides the big picture: Each use case represents a big chunk of functionality that 1

http://www.testinginstitute.com

Journal of Software Testing Professionals

can be either humans or other systems. The lines represent communication between an actor and a use case. As you can see, this use-case diagram provides the big picture: Each use case represents a big chunk of functionality that will be implemented, and each actor represents someone or something outside our system that interacts with it. It is a significant step to identify use cases and actors, but now there is more to be done. Each use case also requires a significant amount of text to describe it. This text is usually formatted in sections, as shown in Table 1. Use Case Section Description Name An appropriate name for the use case Brief Description A brief description of the use case’s role and purpose. Flow of Events A textual description of what the actor does and what the system does in response. There will always be one main flow and there will usually be multiple alternate flows. The description should be understandable to the customer. Special Requirements A textual description of non-functional

Feasibility Study

Test Strategy
Project Definition

User Acc. Test Plan

Ops. Accept. Test Plan

System Test Plan

Integration Test Plan

Unit Test Plan

Requirements Definition

Operational Requirements

System Design Document

Detailed Design Document

KEY
Development Deliverable

Testing Deliverable

User Acc. Test Spec.

Ops. Accept. Test Spec.

System Test Spec.

Integration Test Spec.

Unit Test Spec.

requirements specific to the use case. Preconditions A textual description that defines any constraints on the system at the time the use case may start. Post

Table 1: Format for a Use-Case Textual Description Use Case Section Name Brief Description Description An appropriate name for the use case A brief description of the use case’s role and purpose A textual description of what the actor does andwhat the system does in response. There will always be one main flow and there will usually be multiple alternative flows. The description should be understandable to the customer.

Flow of Events

conditions A textual description that defines any constraints on the system at the time the use case will terminate. The most important part of a use case for generating test cases is the flow of events. The two main parts of the flow of events are the basic flow of events and the alternative flows of events. The basic flow of events should cover what “normally” happens when the use case is performed. The alternative flows of events covers behavior of an optional or exceptional character relative to normal behavior, and also variations of the normal behavior. You can think of the alternative flows of events as “detours” from the basic flow of events. Figure 2 represents the typical structure of these flows of events. The straight arrow represents the basic flow of events, and the curves represent alternate flows. Note that some alternate flows return to the basic flow of events, while others end the use case. Both the basic flow of events and the alternative flows should be further structured into steps or subflows. September 2002

Special Requirements A textual descsription of non-functional requirements specific to the use case. Preconditions A textual description that defines any constraints on the system at the time the use case may start. A textual description that defines any constraints on thesystem at the time the use case will terminate.

Post conditions

2

Journal of Software Testing Professionals

http://www.testinginstitute.com

Use-Case Scenarios
There is one more thing to describe before we concentrate on how use cases can be used to generate test cases: a usecase scenario. A use-case scenario is an instance of a use case, or a complete “path” through the use case. End users of the completed system can go down many paths as they execute the functionality specified in the use case. Following the basic flow would be one scenario. Following the basic flow plus alternate flow A1 would be another. The basic flow plus alternate flow A2 would be a third, and so on. Table 2, on the next page, lists all possible scenarios for the diagram shown in Figure 2, beginning with the basic flow and then combining the basic flow with alternate flows. A textual description for the basic flow of events in the Register For Courses Use Case is shown in Figure 3. Figure 3: Textual Description for the University Course Registration UseCase Basic Flow of Events

Generating Test Cases
A test case is a set of test inputs, execution conditions, and expected results developed for a particular objective: to exercise a particular program path or verify compliance with a specific requirement, for example. The purpose of a test case is to identify and communicate conditions that will be implemented in test. Test cases are necessary to verify successful and acceptable implementation of the product requirements (use cases). We will describe a three-step process for generating test cases from a fullydetailed use case: 1. 2. For each use case, identify a full set of use-case scenarios. For each scenario, identify at least one test case and the conditions that will make it “execute.” For each test case, identify the data values with which to test.

Register For Courses Basic Flow
1. Logon This use case starts when a Student accesses the Registration System. The system asks for, and the Student enters, the student ID and password. Select ‘Create a Schedule’ The system displays the functions available to the student. The student selects “Create a Schedule.” Obtain Course Information The system retrieves a list of available course offerings from the Course Catalog System and displays the list to the Student. Select Courses The Student selects 4 primary course offerings and 2 alternate course offerings from the list of available course offerings. Submit Schedule The student indicates that the schedule is complete. For each selected course offering on the schedule, the system verifies that the Student has the necessary prerequisites. Display Completed Schedule The system displays the schedule containing the selected course offerings for the Student and the confirmation number for the schedule.

2.

3.

4.

5.

3.

6.

Step One: Generate Scenarios
3

September 2002

http://www.testinginstitute.com

Journal of Software Testing Professionals

Figure 4: Textual Description for University Course Registration Use-Case Alternate Flows

Step Two: Identify Test Cases
Once the full set of scenarios has been identified, the next step is to identify the test cases. We can do this by analyzing the scenarios and reviewing the use case textual description as well. There should be at least one test case for each scenario, but there will probably be more. For example, if the textual description for an alternate flow is written in a very cursory way, like A3. Unfulfilled Prerequisites, Course Full, or Schedule Conflicts, shown above, then additional test cases may be required to test all the possibilities. In addition we may wish to add test cases to test boundary conditions. The next step in fleshing out the test cases is to reread the use-case textual description and find the conditions or data elements required to execute the various scenarios. For the Register for Course use case, conditions would be student ID, password, courses selected, etch. To clearly document the test cases, once again, a matrix format is useful, like the one in Table 4. Notice the top row. The first column contains the test case ID, the second column has a brief descrip-

Register for Courses Alternate Flows
A1. Unidentified Student In Step 1of the Basic Flow, Logon, if the system determines that the student ID and/or password is not valid, an error message is displayed. A2. Quit The Course Registration System allows the student to quit at any time during the use case. The Student may choose to save a partial schedule before quitting. All courses that are not marked as “enrolled in” are marked as “selected” in the schedule. The schedule is saved in the system. The use case ends. A3. Unfulfilled Prerequisites, Course Full, or Schedule Conflicts In Step 5, Submit Schedule in the Basic Flow, if the system determines that prerequisites for a selected course are not satisfied, that the course is full, or that there are schedule conflicts, the system will not enroll the student in the course. A message is displayed that the student can select a different course. The use case continues at Step 4, Select Courses, in the basic flow. A4. Course Catalog System Unavailable In Step 3, Obtain Course Information in the Basic Flow, if the course catalog system is down a message is displayed and the use case ends. A5. Course Registration Closed If, when the use case starts, it is determined that registration has been closed a message is displayed and the use case ends. As you can see, a significant amount of detail goes into fully specifying a use case. Ideally, the flows should be written as “dialogs” between the system and the actors. Each step should explain what the actor does and what the system does in response; it should also be numbered and have a title. Alternate flows always specify where they start in the basic flow and where they go when they end. Table 2: Some scenarios for the “use case” shown in Figure 2 Scenario ID Scenario 1 Scenario 2 Scenario 3 Scenario 4 Scenario 5 Scenario 6 Scenario 7 Scenario 8 Starting Flow Basic Flow Basic Flow Basic Flow Basic Flow Basic Flow Basic Flow Basic Flow Basic Flow Alternate Flow 1 Alternate Flow 3 Alternate Flow 3 Alternate Flow 3 Alternate Flow 4 Alternative Flow 3 Alternate Flow 4 Alternate Flow 1 Alternate Flow 1 Alternate Flow 2

First Alternate Flow Second Alternate Flow Third Alternate Flow

Alternate Flow 2

You can see that a scenario always starts in the basic flow, and besides the basis flow itself, always exercises one ore more alternate flows. These scenarios will be used as the basis for creating test cases. September 2002 http://www.testinginstitute.com Journal of Software Testing Professionals 9

Table 3: Partial Scenario Matrix for the Register for Courses Use Case Scenario ID 1 - Successful registration 2 - Unidentified student 3 - User Quits 4 - Course registration system unavail. 5 - Registration closed 6 - Course full 7 - Prerequisite not fulfilled 8 - Schedule conflict 9 - Schedule conflice & User Quits Starting Flow Basic Flow Basic Flow Basic Flow Basic Flow Basic Flow Basic Flow Basic Flow Basic Flow Basic Flow A1 A2 A4 A3 A3 A3 A3 A2 First Alternate Flow Second Alternate Flow

Table 4: Test Case Matrix for the Register for Courses Use Case
Test Case ID RC 1 Scenario/ Condition Scenario 1 successful registration Scenario 2 unidentified student Scenario 3 valid user quits Scenario 4 course registration system unavailable Scenario 5 registration closed Scenario 6 cannot enroll course full Scenario 7 cannot enroll pre-requisite not fulfilled Student ID V Password V Courses Selected V Pre-Req’s Fulfilled V Course Open V Schedule Open V Expected Result Schedule and confirmation number displayed. Error message back to login screen Login screen appears Error message back to step 2

RC 2

I

N/A

N/A

N/A

N/A

N/A

RC3 RC4

V V

V V

N/A N/A

N/A N/A

N/A N/A

N/A N/A

RC 5

V

V

N/A

N/A

N/A

N/A

Error message back to step 2 Error message back to step 3 Error message back to step 4

RC6

V

V

V

V

I

V

RC 7

V

V

v

I

V

V

RC 8

Scenario 8 V cannot enroll schedule conflict Scenario 9 V schedule conflict and user quits

V

V

V

V

I

Error message back to step 4 Error message use case ends

RC 9

V

V

V

V

I

tion of the test case, including the scenario being tested, and all other columns except the last one contain data elements that will be used in implementing the tests. The last column contains a description of the test case’s expected output. 10

Notice that in this matrix no data values have actually been entered. The cells of the table contain a V, a I or n/a. V indicates valid, I is for invalid and n/a means that it is not necessary to supply a data value in this case. This specific matrix is a good intermediate step; it

clearly shows what conditions are being tested for each test case. It is also very easy to determine by looking at the Vs and Is whether you have identified a sufficient number of test cases. In addition to the “happy day” scenarios in which everything works fine, each row September 2002

Journal of Software Testing Professionals

http://www.testinginstitute.com

Table 5: Test Case Matrix with Data Values
Test Case ID RC 1 Scenario/ Condition Scenario 1 successful registration Scenario 2 unidentified student Student ID jheumann Password abc123 Courses Selected M101 E201 S101 N/A Pre-Req’s Fulfilled Yes Course Open Yes Schedule Open Yes Expected Result Schedule and confirmation number displayed. Error message back to login screen Login screen appears Error message back to step 2

RC 2

Jheuman1

N/A

N/A

N/A

N/A

RC3 RC4

Scenario 3 jheumann valid user quits Scenario 4 jheumann course registration system unavailable Scenario 5 registration closed Scenario 6 cannot enroll course full Scenario 7 cannot enroll pre-requisite not fulfilled jheumann

abc123 abc123

N/A N/A

N/A N/A

N/A N/A

N/A N/A

RC 5

abc123

N/A

N/A

N/A

N/A

Error message back to step 2 Error message back to step 3 Error message back to step 4

RC6

jheumann

abc123

M101 E201 S101 M101 E201 S101 M101 E201 S101 M101 E201 S101

Yes

M101full

Yes

RC 7

jheumann

abc123

No for E201

Yes

Yes

RC 8

Scenario 8 jheumann cannot enroll schedule conflict Scenario 9 jheumann schedule conflict and user quits

abc123

Yes

Yes

E202 and S101 conflict E202 andI S101 conflict

Error message back to step 4 Error message use case ends

RC 9

abc123

Yes

Yes

in the matrix should have at least one I indicating an invalid condition being tested. In the test case matrix in Table 4, some conditions are obviously missing — e.g., Registration Closed — because RC3, RC4 and RC5 each have the same combination of Is and Vs. Additionally, each column should contain an I in at least one cell. Looking at the Password column in table 4 one can see that there is no I, this indicates that a test case is missing, there is no test for a bad password. This “intermediate” test matrix, thus, helps to quickly analyze test coverage for the associated use case.

implemented or executed; they are just descriptions of conditions, scenarios, and paths. Therefore, it is necessary to identify actual values to be used in implementing the final tests. Table 5 shows a test case matrix with values substituted for the Is and Vs in the previous matrix. A number of techniques can be used for identifying data values, including random or creative data entry, but these are beyond the scope of this article.

Using the clearly-defined methodology I’ve outlined above for generating test cases, testers and developers can simplify the testing process, increase efficiency, and help ensure complete test coverage.

About the Author:
As Requirements Management Evangelist at Rational Software, Jim Heumann specializes in the front end of the software development lifecycle. Jim has been with Rational software for over two years, most of which has been spent helping customers understand and implement software processes and tools. Heumann has been in the software business since 1982, having worked on analysis, development, design, training and project management in several organizations of various sizes and industry segments.

Putting It All Together
In current practice, use cases are associated with the front end of the software development lifecycle and test cases are typically associated with the latter part of the lifecycle. By leveraging use cases to generate test cases, however, testing teams can get started much earlier in the lifecycle, allowing them to identify and repair defects that would be very costly to fix later, ship on time, and ensure that the system will work reliably.

Step Three: Identify Data Values to Test
Once all of the test cases have been identified, they should be reviewed and validated to ensure accuracy and to identify redundant or missing test cases. Then, once they are approved, the final step is to substitute actual data values for the Is and Vs. Without test data, test cases (or test procedures) can’t be September 2002

http://www.testinginstitute.com

Journal of Software Testing Professionals

11

Abstract
By reviewing this paper, the reader should gain additional insight into the following areas: • The differences between functional and non-functional requirements • The importance of non-functional requirements during system analysis and testing • The major categories of non-functional requirements • The primary characteristics of each non-functional requirement type • Suggested methods for integrating non-functional requirements into software testing practices Introduction From an early age, we are all taught the basic questions to ask when gathering information. Whether you are a school child researching a report, a journalist investigating a story, or a witness recounting a crime scene, you immediately ask yourself the so-called “Magic Five Questions.” These, of course, include “Who,” “What,” “Where,” “When” and “How.” And as every good journalist knows instinctively, without all of this information the resulting work seems unfinished and/or raises as many questions as it answers. For some reason, however, we IT professionals seem to forget these basic investigative techniques when we attempt to define the requirements for a software application. As we interview customers for their needs, we focus on only one aspect; that is, the “What.” Nearly all of the questions we ask address what the customer wants to be able to do with the application, and we assume that if we deliver everything the customer asked for then our application will be a success. Unfortunately, this assumption is blatantly inaccurate. It is just as important to ask the remaining four questions as it is to thoroughly document the first. By focusing on only the “What” of the 12

application, we miss much of the underlying context and may ignore critical business constraints that will ultimately determine our effort’s success or failure. And just like a journalist who skips one or more of his “Magic Five,” we often end up building software applications that seem unfinished and/or cause as many problems as they solve. Functional vs. Non-Functional Requirements Unfortunately for IT, software is not like Kevin Costner’s baseball diamond in the Hollywood motion picture “Field of Dreams.” In the movie, Costner has a vision which tells him that “If you build it (the baseball diamond), they will come (ghostly players and real-life fans).” In software, on the other hand, just because we build it (the software), it doesn’t mean they will come (the customers). Instead, it is our job to first determine exactly what a customer needs before we begin building the solution. We do this by asking the “What” questions, and the answers to those questions are usually referred to in the IT world as the “functional requirements” for the application. Functional requirements describe what it is that a customer needs to be able to do with our software. They may be documented in the form of rigorously specified process models or use cases, or they may simply be lists of required features and functions. Whatever the form used, functional requirements should always identify the minimum functionality necessary for the software implementation to be considered a success. However, as mentioned earlier, this is not enough. Instead, business analysts

Journal of Software Testing Professionals

http://www.testinginstitute.com

September 2002

Sign up to vote on this title
UsefulNot useful

Master Your Semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master Your Semester with a Special Offer from Scribd & The New York Times

Cancel anytime.