Cenários e Casos de Uso Álvaro Palitot Everton Guerra Guilherme Carvalho João Kuae Universidade Federal de Pernambuco – Centro de Informática Cx. Postal 7851, CEP 50732-970, Recife-PE, Brasil (+55 81) 2126-8430, Fax: (+55 81) 3271-8438 {aabp,egm2,ggc,jmkc}@cin.ufpe.br Abstract 1. Introdução 2. Casos de Uso In software engineering, a use case is a technique for capturing the potential requirements of a new system or software change. Each use case provides one or more scenarios that convey how the system should interact with the end user or another system to achieve a specific business goal. Use cases typically avoid technical jargon, preferring instead the language of the end user or domain expert. A collection of possible scenarios between the system under discussion and external actors, characterized by the goal the primary actor has toward the system's declared responsibilities, showing how the primary actor's goal might be delivered or might fail. Use cases are goals (use cases and goals are used interchangeably) that are made up of scenarios. Scenarios consist of a sequence of steps to achieve the goal, each step in a scenario is a sub (or mini) goal of the use case. As such each sub goal represents either another use case (subordinate use case) or an autonomous action that is at the lowest level desired by our use case decomposition. This hierarchical relationship is needed to properly model the requirements of a system being developed. A complete use case analysis requires several levels. In addition the level at which the use case is operating at it is important to understand the scope it is addressing. The level and scope are important to assure that the language and granularity of scenario steps remain consistent within the use case. 2.1. Atores e sua relação com os Casos de Uso Actors are basically users of the system. They are actually user types or categories. Actors are external entities (people or other systems) who interact with the system to achieve a desired goal. Use Cases are what happens when actors interact with the system. An actor uses the system to achieve a desired goal. By recording all the ways our system is used ("cases of use" or Use Cases) we accumulate all the goals or requirements of our system. A use case is a collection of possible sequences of interactions between the system under discussion and its Users (or Actors), relating to a particular goal. The collection of Use Cases should define all system behavior relevant to the actors to assure them that their goals will be carried out properly. Any system behavior that is irrelevant to the actors should not be included in the use cases. 2.2. Definindo casos de uso There are many methods of defining how to pick or create a use case. The use cases in this report are generated using a goal oriented Structuring Methodology presented by Alistair Cockburn of Humans and Technology. Examining all the Actor's goals that the system satisfies yields the functional requirements. Goals summarize system function in understandable verifiable terms of use that users, executives and developers can appreciate and leave little open to interpretation. Use Cases: Hold Functional Requirements in a easy to read, easy to track text format. Represents the goal of an interaction between an actor and the system. The goal represents a meaningful and measurable objective for the actor. Records a set of paths (scenarios) that traverse an actor from a trigger event (start of the use case) to the goal (success scenarios). Records a set of scenarios that traverse an actor from a trigger event toward a goal but fall short of the goal (failure scenarios). Are multi-level, one use case can use/extent the functionality of another. Use Cases Do Not... Specify user interface design. They specify the intent, not the action Detail Specify implementation detail (unless it is of particular importance to the actor to be assured that the goal is properly met) Use Cases are used during many stages of software development. To Capture the Requirements of the systems. To act as a spring board for the software design. To validate the software design against. For Software Test and Quality Assurance. (Tests are performed to validate proper and complete implementation of the use cases) Potentially as an initial framework for the on line help and user manual. 2.3. 3. Cenários Scenarios are used to represent paths of possible behavior through a use case, and these are investigated to elaborate requirements. Scenarios have been advocated as an effective means of communicating between users and stakeholders and anchoring requirements analysis in real world experience. Scenarios often describe information at the instance or example level. Scenarios may be used to validate requirements, as ‘test data’ collected from the observable practice, against which the operation of a new system can be checked. Alternatively, scenarios may be seen as pathways through a specification of system usage, and represented as animations and simulations of the new system. 3.1. Engenharia de Requisitos baseada em Cenários Estágios da Engenharia de Requisitos baseada em Cenários Elicit and document use case. In this stage use cases are elicited directly from users as histories of real world system usage or are created as visions of future system usage. The use case model is validated for correctness with respect to its syntax and semantics. The paper does not report this stage is in detail. Analyze generic problems and requirements. A library of reusable, generic requirements attached to models of application classes is provided. A browsing tool matches the use case and input facts acquired from the designer to the appropriate generic application classes and then suggests high level generic requirements attached to the classes as design rationale “trade-offs.” Generic requirements are proposed at two levels: first, general routines for handling different event patterns, and secondly, requirements associated with application classes held in the repository. The former provide requirements that develop filters and validation processes as specified in event based software engineering methods (e.g., Jackson System Development [27]); while the latter provide more targeted design advice; for instance, transaction handling requirements for loans/hiring applications. Generate scenarios. This step generates scenarios by walking through each possible event sequence in the use case, applying heuristics which suggest possible exceptions and errors that may occur at each step. This analysis helps the analyst to elaborate pathways through the use case in two passes; first for normal behavior and secondly for abnormal behavior. Each pathway becomes a scenario. Scenario generation is supported by a tool which automatically identifies all possible pathways through the use case and requests the user to select the more probable error pathways. Validate system requirements using scenarios. Generation is followed by toolassisted validation which detects event patterns in scenarios and presents checklists of generic requirements that are appropriate for particular normal and abnormal event patterns. In this manner requirements are refined by an interactive dialogue between the software engineer and the tool. The outcome is a set of formatted use cases, scenarios, and requirements specifications which have been elaborated with reusable requirements. Although the method appears to follows a linear sequence, in practice the stages are interleaved and iterative. 4. UML A UML permite ao analista representar o sistema seguindo diferentes visões. Cada visão possui uma grande dependência das outras visões, garantindo assim a coerência e completeza do modelo, e conseqüentemente do sistema de software. A relação entre os diagramas deve ser garantida pelo projetista mas não é assegurada pela UML. Este trabalho estuda a relação entre os diagramas de modo a garantir que o sistema projetado pelo conjunto de diagramas seja coerente. 5. Casos de uso ágeis A metodologia ágil propõe uma mudança de atitude. Os valores propostos por ela podem dificultar bastante a adaptação de uma equipe de desenvolvimento. Pessoas e interações são mais valorizadas que processos e ferramentas. É importante a equipe de desenvolvimento estar sempre em contato com os usuários daquele determinado software. A comunicação entre estas partes é essencial para o sucesso do projeto e deve ser suficiente para que todos os stakeholders sempre saibam o estágio do produto. Documentações extensivas que demoram muito tempo para serem elaboradas atrasam o projeto e pouco agregam ao contratante. A metodologia ágil determina que muito mais valor é agregado para o cliente quando é mostrado partes do software funcionando ao invés da mais compreensiva documentação possível. Isto é, pequenas partes são desenvolvidas e apresentadas ao cliente que avalia se está realmente como acordado. Outro ponto de destaque é a valorização da colaboração do cliente sobre negociações contratuais com o mesmo. Isto é percebido ao abandonar o documento que descreve todo o software detalhadamente a ponto de permitir que seja assinado um contrato formal. Existe muito mais valor quando o cliente participa da equipe de desenvolvimento influenciando diretamente nas decisões e no rumo do desenvolvimento. Com esta metodologia o cliente tem total capacidade de perceber se o software está exatamente como desejado. É possível acontecer e, até normal que aconteça, mudanças nas pequenas partes apresentadas. O interessante é perceber que estas mudanças serão simples de resolver uma vez que o restante do software já foi devidamente apresentado e aprovado pelo cliente. Outra característica essencial é que fica fácil para o cliente identificar o que precisa ser modificado e explicar claramente como gostaria que ficasse já que o software está na sua frente, mesmo que em uma versão um pouco diferente da almejada. Com a metodologia ágil, portanto, o foco do desenvolvimento torna-se oferecer frequentemente pequenas partes usáveis de software ao cliente utilizando a técnica just-in-time, pois é feito de acordo com as necessidades do mesmo. Ao final da interação recebe-se feedback para nova etapa. A utilização de casos de parece contradizer este tipo de metodologia, mas os casos de uso também podem ser ágeis. A utilização de casos de uso na documentação contribui muito para o entendimento de todos, mas as documentações extensas tornam o processo muito custoso. Uma documentação deve possuir conteúdo exatamente suficiente para que os programadores entendam as decisões do sistema e que os usuários e clientes entendam quais funcionalidades e casos de uso o sistema irá prover para que possam dar feedback. Os casos de uso ágeis propõem a construção de uma documentação simples somente com nomes e breves descrições de todos os casos de uso. Deve-se apenas detalhar os casos de uso quando pretende implementá-los a curto prazo não sendo necessário entender completamente os casos de uso que serão trabalhos a longo prazo. Deve-se sempre questionar a importância de cada documento ou detalhamento. É essencial para documentar algo saber quanto será gasto para tal, quando será necessário (curto/longo prazo), qual a forma mais rápida de fazê-lo e quem se beneficiará com tal documentação? A reflexão sobre estas perguntas permite a equipe identificar necessidade de documentos. A idéia é escrever pouco de forma mais clara, sempre, sendo mais curto, econômico e fácil de ler. Escrever casos de uso ágeis implica em não detalhar todos os casos de uso com diagramas UML, não descrever interface, utilizar sempre menos de 10 passos para descrever o cenário principal e focar nos objetivos do usuário. A depender das prioridades e características do projeto, casos de uso podem ser descritos completamente detalhados, somente parágrafos descritivos ou pequenas descrições de 1 ou 2 frases. Mas é sempre importante entender que os casos de uso não serão lidos por compiladores, mas por seres humanos. Logo, devem ser adaptados as necessidades da equipe. Outra proposta é detalhar depois e adiantar o processo de desenvolvimento. Incrementos acontecem de acordo com a necessidade percebida. Normalmente a cada interação com o cliente onde é apresentada parte do software detalham-se os novos casos de uso com seus fluxos alternativos. A metodologia just-in-time permite que partes usáveis do software sejam criadas e entregues ao cliente rapidamente e freqüentemente. 6. Conclusão