This action might not be possible to undo. Are you sure you want to continue?
The foundation of a good application begins with a good design and the foundation of a good design begins with good use cases. Of all the artifacts produced from a software design, use cases are the most important. Use cases capture the business process and, collectively, describe the software application’s functionality from the user’s perspective. This article overviews use cases and the challenges associated with them, offers tips in their creation and suggests a structured approach to produce them.
What are Use cases?
Use cases are a necessary artifact of object-oriented application system design and development. Actually, more than that, they provide the foundation for the design of the entire application since application classes and their relationships emerge from the use cases. At its simplest, a use case is simply a structured narrative of a domain process that describes the requirements of a software system. Dr. Alistair Cockburn, one of the industry's use case Gurus describes use cases as “sequences of interactions between the system and its external actors, related to a particular goal.” The idea is that users (and systems) have domain goals that need the help of computer systems to achieve them. Examples of goals are registering students, recording sales, and determining baselines. The point is to express the requirement in a way that is simple and understandable to anyone within the problem domain. The vocabulary of the use case must be expressed in the terminology of the business domain. Strictly speaking, use cases are not object-oriented artifacts and can be used with any software development paradigm. However, they are typically associated with UML Use Case Diagrams that depict associations (or relationships) between the actors of a system, their responsibilities (or goals) and their boundaries. The use case diagrams provide a visual table of contents, an overview, of the system's actors and use cases. While UML Use Case diagrams graphically depict use cases, they do not define them. The real value of a use case lies in its textual description, or its scenario. A scenario is a sequence of action steps the use case takes in order to achieve its goal including any pre and post conditions. A goal can either be successful or it can fail. The use case contains scenarios that describe the goal’s successes and failures. A success scenario is one in which the goal is achieved, a failure scenario is one in which the goal fails but still protects the interests of the stakeholders. The main success scenario is the typical or normal success path. Think of the scenario as the execution model (the object instance) of the use case. Use case scenarios, then, provide the foundation for test cases. Additionally, scenarios provide the basis for system documentation and User Manuals. Use cases, are strategic goals that consist of scenarios that provide value to a business domain.
A stakeholder is someone of some "thing" with a vested interest in the behavior of the system. Not all of the stakeholders are present while the system is executing but the system must protect and satisfy the stakeholders interests at all times. Examples of the stakeholders include company shareholders, customers, vendors, and government regulatory and reporting agencies. A use case describes the behavior that protects and satisfies the stakeholder’s interests.
An actor is anyone or any "thing" that interacts with the system to achieve the system’s goals: individuals, organizations, and other computer systems. Actors are stakeholders who interact with the system. Typically, Actors have behavior and are represented by the roles they play in the use cases; ex: Student, Instructor, Software Developer, etc.. However, Actors are not job descriptions - ex: Programmer I, Manager II - unless the business domain requires it. Actors have goals that are achieved by use cases. An Actor stimulates the system by providing input or receiving something from it. The primary actor is the stakeholder that initiates or triggers an interaction with the system to achieve a goal. The primary actor will be the user sitting at a computer or another computer system. The primary actor is the one that initiates the use case's main success scenario. Supporting actors are actors that assist the primary actor to achieve the goal. They interact with the use case but do not trigger it. They are often external systems or third party components. An actor can be the primary actor for one use case and the secondary actor for another.
Use case identification
Identifying use cases is not as simple as it might initially seem. Several issues need to be considered that can be tricky and crucial to the successful modeling of the business domain. In no particular order, some of them are: • Finding the boundaries of the system. • Searching for actors and their responsibilities, or goals. • Establishing the scope and level of the use case. • Searching for exceptional and failure situations • Linking use cases (one use case's post-condition is another's pre-condition). Moreover, different types of use cases exist and are described by different people in different ways. However, most begin with high level use cases - call them System or Essential use cases - and proceed from there to define more detailed types of use cases. Use cases can be identified using several methods: • Identify all the actors in the system and define their roles and responsibilities. • Identify and partition the system into major areas of functionality. • Identify and relate all the events in which the system needs to respond. Regardless of the method used (or combination), the process usually starts with a brainstorming session, at the high level, and, iteratively, drills down to the details - in other words, breadth-first. Iterations encourage focus. Each iteration focuses on one aspect of the use case. Working too quickly and attempting to capture too much can quickly lead to unrealistic use cases with too much complexity that don't reflect the actual needs of the domain users.
Using the breadth-first approach insures the entire system is covered, if only at a high level. At a minimum, the breadth-first approach identifies all the features of the system from the requirements. Some of the benefits are: • • • • • Complexity is gradually developed and better understood. Initial use cases are developed quickly. Tight schedules can produce as much as needed. Works well with all development methodologies; eXtreme Programming, Agile, etc.. Design is reusable and extensible; later releases will increase depth; each level is a new iteration (or series of iterations).
So, for example, a typical iteration might look like the following: • • • • Iteration 1: Identify the stakeholders, the primary actors and their goals. Iteration 2: For each goal identified in iteration 1, define the main success scenario. Iteration 3: For each success scenario identified in iteration 2, define the alternate scenarios. Iteration 4: For each scenario identified in iteration 3, define the exception conditions.
In Figure 1, the iterations proceed from the right and move down. As they do, problems will surface that provide the motivation to forming new use cases, linking existing use cases, and discarding and combining use cases. In this sense, use cases are refactored during each iteration. Problems in the early iterations are good and to be expected, but, as the iterations continue, beware of the becoming too focused on the implementation. Use case names that begin with, "Perform..." or "Process..." indicate the use case was written from an implementation perspective rather than from a domain user Perspective. Use cases are not function calls.
As the use cases are identified, related use cases will emerge. In the Model Driven Architecture approach, related use cases are grouped together into application domains from which a Domain Chart is developed. Domains are autonomous entities logically grouped by their function. Domain charts depict the system as distinct, independent domains that work together to provide the application’s functionality.
In Figure 2, related use cases for a Book store have been grouped together that shows, at a glance, the major domains in the application. Each domain contains subsystems that implement the domains functionality. Domain Charts encourage parallel design and development.
Validation determines the credibility of the use cases and it critical to capture the business process. As the use cases are refactored, ask the following questions: • • • • • • Does the use case capture the business process? Are there any details that need to be added? Will the actor's goal be met? Can the use case be simplified? Are there any additional goals that are not addressed? Are there any additional actors that are not represented (directly or indirectly)?
Use Case formats
Many use case formats exist and some provide more content than others. There is no single use case format that exists for all projects. Some projects follow a lightweight development methodology that requires less documentation, perhaps because of a tight schedule, other projects are heavyweight and require more documentation, perhaps for mission critical projects. In Writing Effective Use Cases, Dr. Cockburn describes the following formats: Fully Dressed: The most elaborate. This template describes the actors, stakeholders, protection of stakeholder’s interests, performance issues, pre- and post conditions, exceptions, notes and annotations. Used when formal and complete documentation is required. • Casual: Written in paragraph style, a few paragraphs at most. Less formal and contains less content than the fully dressed format. • Brief: One paragraph that summarizes the business process. It mentions only the significant steps in the main success and failure scenarios. Additionally, two other formats can be considered: Normal: This would be the normal methodology that specifies and defines the design model in more detail than the casual format, but still less than the fully dressed format. Design reviews would be tighter and less forgiving than the Agile approach (below) and more precision and rigor would be applied. • Agile: Projects using this format would practice an Agile Modeling and Development methodology to produce the software very quickly but still contain an acceptable design. The UML artifacts, while complete, would contain less detail than for the normal development methodology and would be oriented more towards the higher level perspective. Smaller projects or projects with tight deadlines might fall within this scenario. Choose the format that best fits the project. • •
Modeling Create, Read, Update, Delete (CRUD)
Ideally, CRUD functionality is expressed in terms of a business process - the action the user performs. The semantics in use cases are extremely important and should be expressed in the language of the user – not in the language of the developer, the functionality of the system or in database modeling terms. Good design perceives the system from the user perspective. The problem with CRUD use cases is that they describe the technical implementation without explaining how this is valuable to the user. At best, it is a low level goal that is fulfilled within the context of the use case scenario. Consider the use cases for a Word Processor. Which states the business case best: Create Style, Update Style, Import Style, Delete Style, or Insure Consistent Formatting within a Document? The latter
expresses the goal of the user best. While Create Style, Update Style, Import Style, and Delete Style reflect the functions that occur within the business domain, they don’t express the user’s goal to format her document. Instead the goal has been decomposed into discrete functionality. Resist the tendency to decompose use cases into functions. Or, consider another example. For security purposes, its typical for users to login to an application. However, logging in is not a business goal of the user. In other words, the user of say, an inventory system, doesn’t say to herself, “Today, my goal is to login and logout of the inventory system in the most efficient manner possible.” Moreover, the user isn’t evaluated by how well she logs into the system. She won’t get a raise for logging in 45 times in a single day. Rather than including CRUD and ancillary functionality (like Login) with the business use cases, separate them into system use cases that separately exist at a level of detail lower than the business use cases. State the system process in technical terms. Its natural for developers to think in terms of implementation. Yet, this tendency needs to be resisted and continually guarded against for the business use cases. Moreover, developers should not force users to adopt implementation language. Its the developers who need to adopt the user’s language, not the other way around. State the business process in terms of the user.
Producing Use Cases
The following steps suggest a structured outline to produce use cases. They are meant to be followed in a group session and attended by the members of the development team - and customer representatives, if possible. The design session atmosphere is open and relaxed and discussion, even vigorous, is encouraged. Ideally, the session facilitator is experienced in summarizing and clarifying the ideas presented by the group into coherent statements. Materials needed: Markers, whiteboard (for brainstorming), flipcharts Note: The steps assume the requirements have already been collected. 1. Produce an initial Actor-Goal list from the requirements. The Actor-Goal list describes the behavior of the application at the highest level. Still, each primary actor has been identified and associated with its goals. The goals will eventually result in use cases. o o o o o o Identify the stakeholders and their interests. From the stakeholders, identify and list primary actors. If necessary, begin with brief narrative to identity initial actors and goals. For each actor, identify goals, refactoring as necessary. In group discussion, slowly step through a narrative, capturing the essential steps in written form on a whiteboard. Referring to the narrative, insure that the Actor-Goal list captures the narrative’s. All of the actors and their goals should be evident in the narrative. If not, refactor the Actor-Goal list as necessary. When finished, each team member should understand and be able to repeat the narrative
2. Verify Actor-Goal list and produce project narrative.
This step will produce two artifacts: o o A verified Actor-Goal list that captures the behavior of the system and protects the interests of the stakeholders. A detailed project narrative that identifies all the project stakeholders and their interests. The narrative serves as great project documentation and helps to insure the use cases
will protect the interests of the stakeholders. It also insures that all developers share a common understanding of the project since all developers participated in the narrative. Note: If the narrative has already been produced prior to step 2, revisit it with the entire group. Undoubtedly, it will change and improve as questions and critiques arise. 3. Iteratively, produce the initial Use case briefs. Focus on the primary actors and their main success scenarios in the first iteration. In later iterations, add the detail necessary for the desired use case format. Select the Actor-Goal from the verified Actor-Goal list that significantly influences the core architecture. o Express the goal in terms of the business process; address the user's need, not the implementation of it. o Avoid CRUD terminology. The use case must be expressed in the business vocabulary it should make sense to the business user. For example, instead of "Create Student", perhaps, "Register Student to a Class" is more appropriate. CRUD Use case are more appropriate as "system" Use Cases...not "user" use cases. o Avoid determining Use cases by functionality. 4. Produce Domain chart o Partition Use cases into related, autonomous domains. o Consider that each domain can be designed and even implemented independently. o
Use cases are the first step towards designing and ultimately delivering quality software that works the way the user desires. Since use cases capture the business requirements from the user perspective, no other design activity has a larger return on investment. Similar to the specifications for a house, use cases provide the specifications for software applications. From these specifications, design artifacts are produced that are used in the construction of the system. Ultimately, application design, construction and user acceptance of the software rests on solid use cases. Don’t neglect this essential step in the lifecycle of the software application.
Project Estimation with Use Case Points
Object-oriented applications frequently rely on Use Cases to describe the business processes of a software application. Since use cases consist of the strategic goals and scenarios that provide value to a business domain, they can also provide insight into an application’s complexity. Deriving a reliable estimate of the size and effort an application needs, is possible by examining the actors and scenarios of a use case. Use Case Points is a project estimation method that employs a project’s use cases to produce an accurate estimate of a project’s size and effort.
Use Case Points
Use case modeling is an accepted and widespread technique to capture the business processes and requirements of a software application. Since they provide the functional scope of the application, analyzing their contents provides valuable insight into the effort and size needed to design and implement the application. In general, applications with large, complicated use cases take more effort to design and implement than small applications with less complicated use cases. Moreover, the time to complete the application is affected by: • The number of steps to complete the use case.
• The number and complexity of the actors. • The technical requirements of the use case such as concurrency, security and performance. • Various environmental factors such as the development teams’ experience and knowledge. Use Case Points (UCP) is an estimation method that provides the ability to estimate an application’s size and effort from its use cases. Based on work by Gustav Karner in 1993, UCP analyzes the use case actors, scenarios and various technical and environmental factors and abstracts them into an equation. The equation is composed of four variables: 1. 2. 3. 4. Technical Complexity Factor (TCF). Environment Complexity Factor (ECF). Unadjusted Use Case Points (UUCP). Productivity Factor (PF).
Each variable is defined and computed separately, using perceived values and various constants. The complete equation is: UCP = TCP * ECF * UUCP * PF The necessary steps to generate the estimate based on the UCP method are: 1. 2. 3. 4. 5. Determine and compute the Technical Factors. Determine and compute the Environmental Factors. Compute the Unadjusted Use Case Points. Determine the Productivity Factor. Compute the product of the variables.
Technical Complexity Factors
Thirteen standard technical factors exist to estimate the impact on productivity that various technical issues have on an application. Each factor is weighted according to its relative impact. A weight of 0 indicates the factor is irrelevant and the value 5 means that the factor has the most impact. Technical Factor T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 Description Distributed system Performance End User Efficiency Complex Processing Reusability Easy to install Easy to use Portable Easy to change Concurrent Weight 2 1 1 internal 1 1 0.5 0.5 2 1 1
Special security features 1 Provides direct access for 1 third parties Special user training 1 facilities are required
Figure 1: Technical Factors.
For each project, the technical factors are evaluated by the development team and assigned a value from 0 to 5 according to their perceived complexity – multithreaded apps. require more skill and time than single threaded applications, for example, as do reusable apps. A perceived complexity of 0 means the technical factor is irrelevant for this project; 3 is average; 5 means it has strong influence. Each factor’s weight is multiplied by its perceived complexity to produce its calculated factor. The calculated factors are summed to produce the Total Factor. So, using sample perceived complexity values, the Technical Total Factor might be computed as follows: Technical Factor T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 Description Weight Perceived Complexity 5 4 2 4 2 5 3 3 3 2 2 5 3 Total Factor Figure 2: Calculating the Technical Total Factor. In Figure 2, the Total Factor is 47 derived by summing all the calculated factors. To produce the final TCF, two constants are computed with the Total Factor. The complete formula to compute the TCF is as follows: TCF = 0.6 + (.01*Total Factor). For Figure 1, the TCF = 1.07 Calculated (weight*perceived complexity)> 10 4 2 4 2 2 2 6 3 2 2 5 3 47 Factor
Distributed System Performance End User Efficiency Complex internal Processing Reusability Easy to install Easy to use Portable Easy to change Concurrent Special security features
2 1 1 1 1 0.5 0.5 2 1 1 1
Provides direct access for third 1 parties Special user training facilities 1 are required
Environmental Complexity Factors
Environmental Complexity estimates the impact on productivity that various environmental factors have on an application. Each environmental factor is evaluated and weighted according to its perceived impact and assigned a value between 0 and 5. A rating of 0 means the environmental factor is irrelevant for this project; 3 is average; 5 means it has strong influence. Environmental Factor E1 E2 E3 E4 E5 Description Familiarity with UML Application Experience Object Oriented Experience Lead analyst capability Motivation Weight 1.5 0.5 1 0.5 1
Stable Requirements Part-time workers
2 -1 2
E8 Difficult Programming language Figure 3: Example Environmental Factors.
Each factor’s weight is multiplied by its perceived complexity to produce its calculated factor. The calculated factors are summed to produce the Total Factor. Using sample values for perceived impact, the Environmental Total Factor might be computed as: Environmental Factor Description Weight Perceived Impact Calculated Factor (weight*perceived complexity) E1 E2 E3 E4 E5 E6 E7 E8 Familiarity with UML Application Experience Object Oriented Experience Lead analyst capability Motivation Stable Requirements Part-time workers 1.5 0.5 1 0.5 1 2 -1 4 2 5 2 1 5 0 1 6 1 5 1 1 10 0 2
Difficult Programming language 2
Total Factor 26 Figure 4: Calculating the Environmental Total Factor. In Figure 4, the Total Factor is 26 derived by summing all the calculated factors. To produce the final ECF, two constants are computed with the Total Factor. The complete formula to compute the ECF is as follows: ECF = 1.4 + (-0.03*Total Factor). For Figure 4, the ECF = 0.62
Unadjusted Use Case Points (UUCP)
Unadjusted Use Case Points are computed based on two computations:
1. The Unadjusted Use Case Weight (UUCW) based on the total number of activities (or steps) 2.
contained in all the use case Scenarios. The Unadjusted Actor Weight (UAW) based on the combined complexity of all the use cases Actors.
UUCW Individual use cases are categorized as Simple, Average or Complex, and weighted depending on the number of steps they contain - including alternative flows. Use Case Type Simple Description Weight
A simple user interface and touches only a single 5 database entity; its success scenario has 3 steps or less; its implementation involves less than 5 classes. More interface design and touches 2 or more 10 database entities; between 4 to 7 steps; its implementation involves between 5 to 10 classes.
Involves a complex user interface or processing 15 and touches 3 or more database entities; over seven steps; its implementation involves more than 10 classes. Figure 5: Use Case Categories. The UUCW is computed by counting the number of use cases in each category, multiplying each category of use case with its weight and adding the products.
Use Case Type Simple
Weight Number Cases 8
Use Result 40
A simple user interface and touches only 5 a single database entity; its success scenario has 3 steps or less; its implementation involves less than 5 classes. More interface design and touches 2 or 10 more database entities; between 4 to 7 steps; its implementation involves between 5 to 10 classes. Involves a complex user interface or 15 processing and touches 3 or more database entities; over seven steps; its implementation involves more than 10 classes.
Total UUCW Figure 6: Computing UUCW.
UAW In a similar manner, the Actors are classified as Simple, Average or Complex based on their interactions. Actor Type Simple Average Description Weight
The Actor represents another 1 system with a defined API. The Actor represents another 2 system interacting through a protocol, like TCP/IP.
The Actor is a person interacting via 3 an interface. Figure 7: Actor Classifications. The UAW is calculated by counting the number of actors in each category, multiplying each total by its specified weighting factor, and then adding the products.
Actor Type Simple Average
Number of Actors 8 12
Result 8 24
The Actor represents another 1 system with a defined API The Actor represents another 2 system interacting through a protocol, like TCP/IP The Actor is a person 3 interacting via an interface.
Total UAW Figure 8: Computing UAW.
Finally, the UUCP is computed by adding the UUCW and the UAW. For the sample data used in the figures, the UUCP = 220 + 44 = 264.
The Productivity Factor (PF) is a ratio of the number of man hours per use case point based on past projects. If no historical data has been collected, a figure between 15 and 30 is suggested by industry experts. A typical value is 20.
The Use Case Points is determined by multiplying all the variables: UCP = TCP * ECF * UUCP * PF For the sample values used in this article: UCP = 1.07 * 0.62 * 264 * 20 = 3502.752 or 3503 hours. Dividing the UCP by 40 hours (for one man work week) = 88 man-weeks. Therefore, for the sample values in this article, it would take one developer 88 weeks (or about 22 months) to complete the application.
The Use Case Points estimate tends to be high when compared to human experts. This might be a good thing since many software projects are late, but, the estimate may still be too high. In order to produce accurate results, the variables in the equation need to be adjusted and tweaked – especially in the beginning. • The number of steps in a scenario affects the estimate. A large number of steps in a use case scenario will bias the result towards complexity and increase the Use Case Points. A small number of steps will bias it towards simplicity. Sometimes, groups of steps can be reduced to a fewer number without sacrificing the business process. Strive for a uniform level of detail but don’t force a use case to conform to the estimation method. Including and extending use cases increases the complexity. Count these as a single use case. The number of actors in a use case also affects the estimate. If possible, generalize the actors into a single superactor. This reduces the complexity without affecting the use case. On the other hand, don’t force a generalization where none exists. The values for the Technical and Environmental Factors need to be adjusted over time as actual data is obtained. The more projects that employ Use Case Points for their estimations will yield more accurate values for the perceived values. Compare the Use Case Point estimate with a human expert’s estimate. Where there is disagreement, err on the side of the human expert and adjust the Use Case Point factors accordingly. The Productivity Factor can only be obtained over time. Track the time spent designing and implementing the use cases and adjust the Productivity Factor accordingly.
• • • • •
Use Case Points have the potential to produce reliable results because its estimates are produced from the actual business processes – the use cases - of a software application. Additionally, in many traditional estimation methods, influential technical and environmental factors are often not adequately given enough consideration. Use Case Points includes and abstracts these subjective factors into an equation. When tweaked, over time, Use Case Points can provide estimates that are very reliable.
How to Prepare Quotation Using Use Case Points
"You can not plan if you can not measure, and if you fail to plan, you have planned to fail." Quotation: It's a financial document send from supplier to customer regarding service to be provided. It's also called as temporary financial document for negotiations. "A statement of price, terms of sale, and description of goods or services offered by a supplier to a prospective purchaser, a bid. When given in response to an inquiry, a quotation often is considered an offer to sell." Definition reference from here. Quotation is one of the important aspects of software cycle. Any prediction less or more will affect the project a lot. Let's look at how basically day to day businesses manage their ways of handling quotations. “Mr. Harry gets a contract of delivering 10 tons of steel from place “X” to place “Y”. He has 2 trucks, each can carry 5 tons each. Place “X” and place “Y” are 1 KM (Kilometer) apart.” So, here’s Harry’s calculations on experience basis. One truck if delivering 5 tons for 1 KM is 500$. So for two trucks, it is 1000$. So the quotation is 1000$. Just wondering, can we do that with software industry. There are 100 modules, and the company has 5 programmers. Every programmer can complete 20 modules in 3 months. A programmer's salary is 1000$. So, 5 X 1000 X 3 = 15000$. The truck quotation calculation is more confident than software quotation, why? In trucks' quotation, Harry had followed the following process: • Harry had measurement of his work: 10 tons to be delivered. 1 KM to be traveled. • Harry knew what effort will be required: 5 tons/per truck/per KM. • So the quotation: 1000$. So basically, Harry had measurement of his work. He knew the volume of what he has to deliver. That’s a problem with software industry. As software industry output is more in to logical output, it's difficult to measure linearly the effort required to complete a project and hence the quotation. Software industry has been struggling for the past 40 years to come to a standard of measurement, and that’s where all the mess is. Many ideas and measurement methodologies have been proposed by researchers. Each have there own advantages and disadvantages. Here are some of the measurement methodologies used: • McCabe’s Measurement of complexity. • Henry and Kafura’s Information Flow. • Halstead measurement of complexity. • Lines of Code (LOC). • Function Points. (My old tutorial on function points.) • Use Case Points. Do not be tensed by some unheard technology described above, it's only provided for knowledge base. Links are provided for McCabe's complexity, Henry and Kafura's information flow, Halstead measurement complexity and LOC. I have just mentioned them as they are old measurement technologies. If any one wants to explore them, see my References section. This tutorial will look into Use Case Points methodology, its advantages and disadvantages. So in this article, we will basically go through Use Case Point theory, and then take up a practical example of a Use Case, and prepare a quotation according to it.
Acronyms and Abbreviation:
Note: have these acronyms in hand always as they are used throughout the tutorial. Do not be tensed by the acronyms below. They are for reference sake, and as you proceed ahead with the tutorial, you will have a more clear picture of what exactly they are. Table 1.0 Acronym UCP Full form Use Case Point Definition Use Case Points method is a software sizing and estimation based on Use Case document.
A numeric sum of value of actors after giving the classification Actor and before multiplying the technical complexity factor of the system. (When you go through steps of how to calculate UAW, this will be more clear.) A numeric sum of value of Use Cases after classifying and Use before multiplying the technical complexity factor of the system. (When you go through steps of how to calculate UUCW, this will be more clear.) Use Sum of UAW and UUCW Application programs used for accessing services provided by some lower-level module (such as operating system). User A computer terminal interface, such as Windows, that is based on graphics instead of text. It's an atomic set of activities that are either performed entirely or not at all.
Unadjusted case Weight Unadjusted Case Points Application Programming Interface Graphical Interface
UUCP API GUI Use Case Transactions Tfactor TCF EF AUCP LOC OOP
Total of all technical factors. See for more details in Steps in estimation. See table 4.0 for more details.
Factor which defines the complexity of the project. For more Technical details, see steps for UCP estimation. TCF is calculated from Complexity Factor Tfactor. Environment Factor This is multiplying factor. Adjusted Use Case This is the value obtained after multiplying with Efactor and Points Tfactor. Lines of Code Lines of code is a counting metrics to measure the volume of a software product.
A programming technology in which program components are Object Oriented put together from reusable building blocks known as objects. Programming [Glossary] Stands for Unified Modeling Language. UML is a standard notation and modeling technique for analyzing real-world objects, developing systems, and designing software modules in Unified Modeling an object-oriented approach. UML has been fostered and now is Language accepted as a standard by the group for creating standard architecture for object technology, OMG (Object Management Group). [Definition taken from here] Unadjusted Use Details are provided in this article. Case Flow Points Function Points A sizing methodology for software projects based on functions of the software.
1. Readers have basic knowledge of how to write Use Cases. This tutorial does not cover Use Cases and is only limited to estimation by "Use Cases". So if you are reading this article with out a clear concept of Actor, Role, Scenarios, it's better not to read. 2. Use Case structure varies from organization to organization which can seriously impact the estimation. This tutorial has used Alistair Cockburn's template from Writing Effective Use Cases (**PRE-PUB. DRAFT#3**): Alistair Cockburn Humans and technology.
This tutorial is only till understanding Use Case points and does not get in to details of how to write Use Cases. This article will not concentrate on how to write Use Cases. There are lots of tutorials on the Internet. And also in the References section of this article, a list is provided.
History and Definition of Use Case Points
Working in Ericsson in the late 1960s, Ivar Jacobson devised Use-Case Documents. Thanks to Ivar Jacobson to come out with such a wonderful way of communication by using Use Case Documents. Later, Use Case Documents became a subset of UML. In 1994, Alistair Cockburn constructed the 'Actors and Goals conceptual model' while writing Use Case guides for the IBM Consulting Group. It provided guidance as to how to structure and write Use Cases. It’s the document which can stand not only for programmer or architect, but also for the stake holders. It's a document which stands between the Customer and Programmers/Architects/Business analysts/etc. It also serves as handover when any new programmer comes in the project. Use Case Document also serves as a valuable input to the design of software. In short, it serves in the whole life cycle of software development. Karner identified that this document can also be used to measure and estimate effort. This tutorial will make a walk through of Karner's work and give one simple example. So, let’s start with the definition. Use Case Point is software sizing and measurement based on Use Case Document. "Use Case Point" is based on work by Gustav Karner in 1993. It was written as a diploma thesis at the University of Linkoping. This work is a modification of work by Allen Albrecht on function points.
Steps for UCP (Use Case Points) Estimation
1. Determine the UAW (Unadjusted Actor weight): The first step is to classify all the actors in to the following classification. Table 2.0 will give you a clear idea of how to classify the actors. Second column is the litmus test for making a decision of which type of actor falls in which category. The last column provides the factor of complexity: Table 2.0 Classification Litmus test to recognize classifications Value/Factor Simple actors Simple actors are those which communicate to 1 system through API. Average actors Average actors are recognized if they have the 2 following properties: o Actors who are interacting with the system through some protocol (HTTP, FTP, or probably some user defined protocol). Actors which are data RDBMS). stores (Files,
Complex Complex actor is interacting normally through GUI. 3 2. Determine number of UUCW (Unadjusted Use case Weight): The second step is to count Use Cases and assign weights depending on number of scenarios and number of transactions. Table 3.0 Use Type Simple Average Case Litmus test to decide the Classification Greater than or equal to 3 transactions Between 4 to 7 transactions Value/Factor 5 10
Complex Greater than 7 transactions 15 3. Determine Total UUCP (Unadjusted Use Case Point): Total UUCP = Total UAW + Total UUCW. 4. Computing technical and environmental factor: Final step is to take into account the technical complexity. All technical factors will be assigned a value from 0 to 5 depending on complexity. Table 4.0 Technical factor Weight Description t1 t2 t3 t4 t5 Distributed System Response time End efficiency user 2 1 1 Is the system having distributed architecture or centralized architecture? Does the client need the system to fast? Is time response one of the important criteria? How's the end user's efficiency? Is the business process very complex? Like complicated accounts closing, inventory tracking, heavy tax calculation etc. Do we intend to keep the reusability high? So will increase the design complexity. Is client looking for installation ease? By default, we get many installers which create packages. But the client might be looking for some custom installation, probably depending on modules. One of our client has a requirement that when the client wants to install, he can choose which modules he can install. Is the requirement such that when there is a new version there should be auto installation? These factors will count when assigning value to this factor. Is user friendliness a top priority? Is the customer also looking for cross platform implementation? Is the customer looking for high customization in the future? That also increases the architecture design complexity and hence this factor. Is the customer looking at large number of users working with locking support? This will increase the architecture complexity and hence this value. Is the customer looking at having heavy security like SSL? Or do we have to write custom code logic for encryption? Does the project depend in using third party controls? For understanding the third-party controls and studying its pros and cons, considerable effort will be required. So, this factor should be rated accordingly.
Complex internal 1 processing Reusable code 1
t7 t8 t9
Easy use Portable Easy to change
0.5 2 1
t11 Security objectives 1
Direct access to 1 third parties
Will the software from user perspective be so complex that separate training has to be provided? So this factor will vary accordingly. 5. Equation for Tfactor = sum(T1....T13) 6. TCF (Technical Complexity Factor): TCF = 0.6 + (0.01 * Tfactor). 7. EF (Environmental Factor): There are other factors like trained staff, motivation of programmers etc. which have quiet a decent impact on the cost estimate. t13 User facilities training 1
Table 5.0 Environmental Factor e1 Familiarity project Weight Description 1.5 Are all the people working in the project familiar with domain and technical details of the project? Probably you will spend most of your time in explaining them all know-how's. e2 Application experience e3 Object-oriented programming experience e4 Lead capability e5 Motivation 0.5 1 How much is the application experience? As use-case documents are inputs to object oriented design, it's important that people on the project should have basic knowledge of OOP concepts. How is the analyst who is leading the project? Does he have enough knowledge of the domain?. Are the programmers motivated for working on the project? Instability in the project will always lead to people leaving half way through their source code. And the hand over becomes really tough. This factor you can put according to how software industry is going on? Example, if the software market is very good, put this at maximum value. More good the market, more the jobs and more the programmers will jump. Is the client clear of what he wants? I have seen clients' expectations are the most important factor in the stability of requirements. If the client is of highly changing nature, put this value to maximum. Are there part-time staff in projects, like consultants etc.? How much is the language complexity, Assembly, VB 6.0, C++, C etc.
analyst 0.5 1
e6 Stable requirements
e7 Part-time Staff e8 Difficult programming language
8. Efactor = SUM(e1...e8). 9. Calculating Environmental Factor = EF = 1.4 + (-0.03 * Efactor). 10. AUCP (Adjusted Use Case Points). Finally, calculating the Adjusted Use case points: AUCP = UUCP * TCF * EF 11. Multiplying by Man/Hours Factor: AUCP * Person/Hours/AUCP. Karner proposed a factor of 20 staff hours per Use Case point for a project estimate. While Sharks states that field experience has shown that effort can range from 15 to 30 hours per Use Case point. Schneider and Winters proposed number of staff hours per Use Case point depends on the environmental factors. The number of factors in E1 through E6 that are below 3 are counted and added to the number of factors in E7 through E8 that are above 3. If the total is 2 or less, the general idea is to use twenty staff hours per UCP; if the total is 3 or 4, use twenty-eight staff hours per UCP. If the number exceeds 5, it is usually recommended that changes should be made to
the project so the number can be adjusted, because in this case, the risk is unacceptably high. Another possibility is to increase the number of staff hours to thirty-six per Use Case points.
Sample project scope (Sample Data Entry Project):
Let's start with a sample fiction project. Here's the scope of the project. TNC company till now was using manual way of maintaining its customer database and there credit card information. Data entry operator manually validates credit card information from external payment gateway. They maintain customer code, customer name, customer address, customer phone and validated customer credit card information in Customer registry. Customer code is unique for a customer. So, TNC manually checks for the validations and enters in the customer registry. TNC wants the data entry project to be automated. TNC is looking for the following automation: • • • • • • • Customer code assigned should be checked for uniqueness automatically. Customer code should not exceed 8 length. Credit card validation should be automatic for the current system. TNC has already given the API documentation of how to interact with the third party payment system. Credit card length should not exceed more than 10 length. Data entry operator should be able to add/update/delete customer information. The database will be in the TNC head office and only data entry operators will be allowed to use the data entry software. Software should work on Windows platform. At this moment, TNC has Windows 2000 client installed in all computers.
Writing Use Case for Sample Data Entry Project:
I have used Alistair Cockburn's template for the "Use Case point" example. Use Case template varies from person to person, project to project, and organization to organization. I found Alistair's template to be complete, so just took it. But there's no hard and fast rule that you have to follow this template. What will matter is what steps you write in the Use Case. Use Case Transactions: It’s an atomic set of activities that are either performed entirely or not all. What is a Use Case transaction and what’s not: just see if the transaction is adding any business value or else do not include it as a transaction. Example: the user switches on the computer, user clicks on add button or any GUI, are not valid business transaction steps. But the customer code validated for credit card information is a valid business transaction. Use Case points are heavily affected by the way the Actors and their transactions are identified. So a Use Case Document should be written by predefined guidelines, uniformly in a project. Just take a meeting with the whole project team before starting writing Use Cases. The depth of the Use Case Document will affect estimation by 40%. Table 6.0 Use Case # Use Case name Description Scope and level DATAENTRYPROJECTCUST-1009 Maintain Customer This Use Case depicts full maintenance of customer from project "Data Entry". • • Level Data Entry System (Internal) Credit Card System (External)
User Goal Level (If this property is not understood, look at the reference for the book Writing Effective Use Cases (**PRE-PUB. DRAFT#3**): Alistair Cockburn Humans and technology) Data Entry operator.
Primary and secondary actors Stakeholders and interests
Data entry operator clicks on menu: "Add New Customer" • • Data entry operator should be logged in. Data entry operator should have access to Internet.
Assumptions Failed End condition
Customer information received is entered manually. No automated import routine is in the scope. • • • • • Customer is not added to database and appropriate error message is displayed. Customer code already existing in the customer database. Customer code length limit is exceeded. Customer credit card limit is exceeded. Customer credit card validation failed with the payment gateway.
Action Main success basic Flow): scenario (or
Add new customer 1. Data entry operator receives customer information. 2. Data entry operator enters following information: o Customer code o Customer name o Customer address o Customer phone 3. Customer code is checked if it exists in Customer table. o If the customer code is existing then "Duplicate Customer Code" error is raised. o If the customer code is more than 8 length, then "Customer code length limit crossed" error is raised. 4. After step 3 is passed OK. Data entry operator enters credit card information. If the credit card length is more than 10 length, then "Credit card length limit crossed" error is raised. 5. Credit card information is send to the external payment gateway. Appropriate APIs of the external payment gateway will be used for validity. 6. External payment gateway returns "OK" if credit card is validated or else will return "NOT VALID" flag. 7. Data entry operator then adds the customer in database.
scenario Update Existing Customer 1. Data entry operator enters customer code to retrieve the customer who has to be updated. 2. Data entry operator makes appropriate changes to the customer information. All steps and business validation from 1 to 6 of Add new Customer is repeated. 3. Data Entry operator updates the customer information.
scenario Delete Existing Customer 1. Data entry operator enters customer code to retrieve the customer who has to be deleted. 2. Data entry operator deletes the customer. Data entry operator is alerted "Are you sure you want to delete the Customer?”
If the data entry operator clicks "Yes", then the customer is deleted from the database. If the data entry operator clicks "NO", no action is taken.
o Success Guarantee conditions): (Post • • • Special Requirements (including business rules):
Customer is added to Customer database. Customer is updated to Customer database. Customer is deleted from Customer database.
Technology and Data Variations If credit card payment gateway API changes, the interaction of the data List: entry customer module will have to be changed accordingly. Frequency of occurrence: Notes and Open Issues:
Applying Use Case Points:
Let's start applying Use Case Points to the above given document. • • • • Determining Unadjusted Use Actor Weights (UAW): In this project, we have identified only one actor “Data Entry Operator”. The upper Actor (data entry operator) is complex as data entry operator will be interacting through GUI. So UAW=3 as per Table:2.0. Determine number of UUCW (Unadjusted Use case Weight): There are 12 transactions [Adding also the alternative flows] in Table 6.0 Use Case. So the above Use Case is complex according to Table:3.0. So referring Table:3.0, UUCW=15. Now calculating the total UUCP = 15 + 3 = 18. Determining the technical factor Table 7.0 Technical factor t1 t2 Distributed System Response time Weight Value 2 1 1 4 Weighted Value 2 4 Explanation Simple two decided. tier architecture is
Speed is of importance as the data entry operator has to enter data quiet fast. Data entry operator has high user efficiency. Its simple entry screen and no business process has been scoped by the client. Only credit card check and duplicate customer code is the business check. No reusability as project is small and customer is not looking for any further changes for at least two years. TNC has good in house development team, and installation problems will be handled by them. Technology thought is C#, and .NET
End user efficiency Complex Processing
setup wizard will be enough to make the installation process easy. t7 Easy use 0.5 4 2 Yes, data entry operator has to have user friendly menus and shortcut keys for fast entry of data. TNC has Windows 2000 client as specified in the scope document. None specified by client. Client has not clarified about this issue as such in the scope document. So assumed least concurrent. None specified by client. Even credit card information will be passed with out encryption. Using the credit card check API. The screen is simple, and data entry operator can operate without any training.
Portable Easy to change
2 1 1
1 0 0
2 0 0
t11 Security objectives
t12 Direct access to third 1 parties t13 User training facilities 1
Total • •
Depending on the table, calculating the Technical Factor: TCF = 0.6 + (0.01 * Tfactor) = 0.6 + (0.01 * 19) = 0.79 Calculating environmental factor Table 8.0 Environmental Weighted Value Weight Explanation for the value assigned Factor Columns e1 Familiarity with 5 project e2 Application experience 5 1.5 0.5 1 7.5 2.5 5 It’s a simple project, so familiarity with project is not so much needed. It's a simple application. Every one has good OOP knowledge.
e3 Object-oriented 5 programming experience e4 Lead analyst 5 capability e5 Motivation 1
It's a simple project; no lead analyst needed till now. Motivation is little down as programmers are reluctant to work on the project because of its simplicity. Client is very clear with what he wants? No part time staff. C# will be used. And most of the programming guys are new to C# and .NET technology.
e6 Stable requirements e7 Part-time Staff e8 Difficult programming language. •
4 0 3
2 -1 -1
8 0 -3
According to [Kirsten Ribu Master of Science Thesis], Environmental factor plays a very important role in the estimation. A slight variation will increase the Use Case point by a very, very drastic amount. Even small adjustments of an environmental factor, for instance by half a point, can
• • • • •
make a great difference to the estimate. Difference of 3 to 2.5 increased the estimate by 4580 hours, from 10831 to 15411 hours, or 42.3 percent. This means that if the values for the environmental factors are not set correctly, there may be disastrous results -- Sources [Kirsten Ribu Master of Science Thesis]. Do see links below. Using formulae for calculating EF = 1.4 + (-0.03 * Efactor) = 1.4 + (-0.03 * 23.5) = 0.695. Calculating AUCP = UUCP * TCF * EF = 18 X 0.79 X 0.695 = 9.88 approx = 10 Use Case Points. I have done the approximation as its only creates 3 to 4 hours of difference. Calculating according to Karner, i.e., 20 staff hours per Use Case points = 10 X 20 = 200 hours for the total project. If programmer works for 8 hours for a day, then 340/8 = 25 days. Calculating according to Schneider and Winters, from e1 to e6 there are only 3 properties that are below 3. And from e7 to e8, there are none whose value is above 3. So the total is 3. We use 28 staff hours. 10 X 28 = 280 hours. If programmer works for 8 hours, then 35 days. If this step is not understood, look at the steps defined in theory of Use Case points. If we apply sixth sense, we will find Karner approach is coming to round about figure. It really depends what you want to follow: Karner or Schneider approach. Best is that after two or three projects, whatever is coming accurate from history, take that approach. Best approach is to use Excel and incorporate formulas properly.
So here is the final quotation to the scope defined and the Use Case document. Table 9.0 XYZ SOFTWARE COMPANY To: TNC Limited, Quotation Date: Customer ID: - 20090DATAENTRY Quantity 1 Description Data Entry Module Western number: road 17, California. 90 1/1/2004 Total $840
Quotation valid for 100 days Goods delivery date within 25 days of half payment Quotation prepared by: XYZ estimation department Approved by : SPEG department XYZ In this quotation, I have taken Karner's value, that’s 25 days. One programmer will sit on the project with around $1000 salary. So his 25 days' salary comes to 840 dollars approx. The upper quotation format is in its simplest format. Every company has its quotation format accordingly. So no hard and fast rule for quotation templates. But still if interested, Microsoft has a good collection of decent templates.
Use-Case Structure Matters:
The structure of Use-Case matters a lot. According to (Bente Anda, Hege Dreiem, Dag I.K Sjoberg and Magne Jorgensen), the following aspects of structure have an impact: • • The use of generalization between actors: If two actors have 80 percent in common, put them in generalization relationship and count them only once. This will increase the accuracy of the estimate. The use of included and extending Use Case: Karner recommends that included and extending Use Case should not be counted. But Bente Anda, Hege Dreiem, Dag I.K Sjoberg and Magne Jorgensen have a different opinion in their practical experience. In some Use Cases, they found include and extended Use Cases as essential functionalities, and reducing them will reduce steps and hence the estimation.
The level of detail in the Use Case description (this is dependent on the guy who writes the Use Case): The level of detail and transaction in Use Case impact the Use-Case estimation a lot. If you see the Use-Case above, I have written steps like user switches on the PC etc. The transaction would have increased and hence estimation. So if that transaction step is not adding business value, do not add it as transaction step. This will also increase the estimation to a good level. Including the above recommendation by Karner and (Bente Anda, Hege Dreiem, Dag I.K Sjoberg and Magne Jorgensen), here are also my inputs which can be followed to make an estimate better:
Use-Case Splitting and Merging: Simple Use-Case masters matter a lot. Writing Use-Cases, for example “Adding Country Master". User can write three different Use Cases for Add, Update, Delete; or he can write one Use-Case and put the Update and Delete in alternate scenarios. If the Update and Delete do not have different business validations, put them in one Use-Case. During my counting, I had seen that accuracy increases if for simple master we put them in one UseCase. Automation: Use Case document if structured properly for a company (uniformly), we can use automation tools. In case of FP, this is difficult. Cannot be used during initial phase: Estimations are normally done at earlier stage of projects. When we say earlier, it means during the first and second meetings with the client. Use Case documents are mostly prepared after the project sign off. So during earlier stage, this document will not be available. Preparing Use Case document during first and second meeting with the client means wasting your resources in case you do not get the project. For initial phase of project, you can use “Function points”. For function points, no formal document is needed. My old tutorial on function points. No Standard Use Case Document: The document structure of use is not standard still. It varies not only from company to company but also from project to project. So the estimation has significant variance according to the structure of Use Case documents. Even the writing matters to a large extent. And also, how one identifies Use-Case and the transaction associated with it. Free textual descriptions may lead to ambiguous specifications [AP98]. Maintenance estimation problems: Function point [article] failed for maintenance projects. It will be difficult from Use Case Points to do maintenance estimation. Actor identification need technical details: In order that the actor be classified, we need to know technical details like which protocol the actor will use. So estimation can be done by technical guys. FP is not technical dependent [article].
Advantages of Using Use-Case Points
Disadvantages of Using Use-Case Points
Other General Practical Factors
The below points are not related to Use Case as such, but general while making estimation: • Change of psychology: Estimator should not be biased. If you are an employee of the company, do not add extra charge or subtract extra charges. These things will be handled at the negotiation table between the software company director and the customer. An estimator's job is to show the real cost of the software to the company. In short, an estimator should not be bothered about negotiation phase and whether the company gets this project or not? Leave that work to the company's director. And if you are the director of the company, think about that thing after the estimation is over. Sixth Sense Approach: Any of the software measurement ways (Use Case, Function points, LOC etc.) are evolving and under practice. After looking at the figure, try to give sixth sense based on your past experience. Some times, estimation will be fair if going the ad hoc way.
• • • •
Modular Estimation: In huge projects with 100s of modules, it's better to estimate module wise. Example, if a client is asking for a customer module, supplier module and accounts module, estimate them differently so that on negotiation table with client, you can show him the complete break up. Second, this approach is very useful for phase wise estimation. Client can decide either to not take the module (due to financial concerns) or move it to phases. Information Creep and Grey Areas: Estimation is normally done at the initial phase itself. Probably with one or two meetings with the client, we have to give the estimation. But naturally, in many of the areas there can be creep. The best way for such situations is to think about the maximum possibility and estimate. Example, if a customer says that he needs a chat module and no clarification is made about what the depth of it is, estimate to maximum possibility of how can a chat application be made. Later in the negotiation table, show the client the estimation basis. So according to the client's financial budget, changes will be made. Other Costing: None of the software estimation methodologies give cost for non-software factors. o If the software is using any third-party component, example Crystal Reports etc., estimate them in a ad hoc way. o Example, if in the project, company is also providing web hosting, domain name, hardware etc., put them separately. o If any training is involved, estimate them separately. Assumptions: As estimation is done at the initial stage, there can be lot of creep and gray areas. Gray areas estimation has to be supported by proper assumptions. Review from Third Party: Before sending the costing to the client, review it internally from a third person who is not involved in the project. Iterations: Iterate it as many as times possible and at various phases. Example, use function points to iterate during scoping phase, that's initial phase, and Use Case Point during the system requirement phase. This gives a good idea before implementing that the costing is proper. Two teams estimation: During estimation, have two teams which will do the estimation. So that cross verification can be done on the error percent of the estimation.
It would be selfish on my part to say that the whole article is my own wisdom. So I have provided all the links I have referred to prepare this article. If any of the link is copyright and not to be produced, please email me at firstname.lastname@example.org. I will see to my best that I preserve the copyright. • • • • • • • • • • • • • • I work presently in Ag-technologies. Thanks to www.ag-technologies.com for providing me a role in the estimation phase. Estimating, Software development effort based on Use Case experiences from industry (Bente Anda, Hege Dreiem, Dag I.K Sjoberg and Magne Jorgensen) Use Case Points. Use Case Points. Writing Effective Use Cases (**PRE-PUB. DRAFT#3**): Alistair Cockburn Humans and technology. For dictionary meaning of quotation. If your are looking at test effort using Use Case Points, have a look at the paper by Cognizant Technology Solutions in the Quality Week 2001, San Francisco, California, USA, June 2001 by Suresh Nageswaran. In this paper, they experimented using UUCFP (Unadjusted Use Case Flow Points) for accuracy. By Gautam Banerjee (Annual IPML Conference 2004) Excellent quotation templates at Microsoft. Templates. Not necessary to follow exactly as it is but just for reference. Estimation using Use Case points http://heim.ifi.uio.no/~kribu/oppgave.pdf Basics of UML. My old function point tutorial.
• • • • • • •
International Function Point user group. An Introduction to Function Point Analysis. A good PDF tutorial. Master thesis by Sofia Nystedt. Good thesis which has details about McCabe's complexity, Henry and Kafura’s Information Flow, and Halstead measurement of complexity. Definition of UML. Definition of Object Oriented Programming.
Software war for the best estimation has been going on for years. I am not pointing in this article that Use Case Point is the best way to do estimation. So you will find I have introduced the advantages and disadvantages section. But definitely, we have to measure. One day, we have to unify on a common measurement principle. If we can say in real life, city "xyz" is 100 kilometers far, why can not we say this project is of 1000 complexity, 200 function points or 650 Use Case points? Different languages, different compliers, different processes companies follow have made it difficult to come to common grounds and common measurement. But the largest hurdle we see is the software companies' attitude to come to common conclusion of how to measure. If software can automate human complexity, then software measurement also can be automated. "We should no longer ask if we should measure, the question today is how?" - Dieter Rombach Eurometrics 1991" "Do not quote too less that programmers work for over night, you lose the project or end doing social service, or loss. Do not quote too high that you lose the project. Be fair to yourself and your customer."
This action might not be possible to undo. Are you sure you want to continue?
We've moved you to where you read on your other device.
Get the full title to continue listening from where you left off, or restart the preview.