A Use Case is a procedural definition of functional requirements written in prose. It defines a way in which a computer might be used by a user. It is made up largely of interactions across the system boundary which define an outside-in black box view of what the system will do from a user's perspective. Use cases were defined by Ivar Jacobson in 1992 and have since become an integral part of UML. Use cases are easy to understand for non-technical users but hard to write properly. They can also be used for modelling business processes.
The functional requirements of a computer system can be shown on a set of use case diagrams which summarise all the system will do. It shows what use cases are used by what external user roles and all systems and users with whom the system will interact. As such it graphically defines the functional boundary of the system.
Use cases are designed to be a user's view of the system and as such are for everyone, including non-technical staff, to understand. They provide hooks for user's to hang ideas on and as such can be used as a technique for eliciting vaguely understood requirements. Use cases provide a mechanism for validating 100% coverage of user's requirements and can be derived from, and traced back to business process descriptions.
Use cases can be integrated with screen prototyping as part of a user requirement's workshop. Between the two of them they provide two orthogonal views of functional requirements that can be cross-verified. Because use cases and screen prototypes are linked, they can be used to provide units of functionality for development. One increment in an overall project is defined by the implementation of a number of use cases and screens.
A use case defines a procedure by which a system can be used and so forms the basis of a system-level test. Testers can produce a series of scenarios in order fully to test that a use case or screen does all that it should and nothing that it shouldn't. This makes traceability of requirements through to test results very easy. The other views that are produced in UML during system analysis also provide comprehensive functional information to test developers and allow the development of more effective test scripts.
Use cases trace naturally through to analysis and design models providing documentation of the implementation of each and every functional requirement in the code. This in turn allows an impact analysis to be performed on any functional requirements change request.
Use cases can be used to schedule an incremental development project and drive the whole development process. Most of the modelling that is performed relates to implementing Use cases and can be scheduled as such. An increment produces a set of tested and working executables that implement a number of Use Cases.