Prévia do material em texto
Fundamentos da engenharia de requisitos APRESENTAÇÃO Você já percebeu como a vida de todos é rodeada de produtos de software, mesmo que poucas pessoas se deem conta disto? Utilizamos smartphones diariamente para ouvir música, assistir filmes, jogar, chamar uma condução, pedir uma pizza, pagar uma conta ou fazer uma reserva de viagem. Isso sem falar do bate-papo virtual com os amigos ou daquela espiadinha nas redes sociais. Nossos hábitos do dia a dia são constantemente alterados pela introdução de novas tecnologias que passam a oferecer serviços que antes não eram possíveis. Qualquer que seja o ramo de atuação de uma empresa, sua existência hoje só é possível pela presença maciça de produtos de software, seja para gerenciar o negócio, seja para viabilizar sua operação. Tente imaginar, por exemplo, como seria o funcionamento de um banco hoje sem a presença de software? E de um supermercado? E de uma indústria de manufatura? Os meios de transporte, como automóveis, aviões e navios, nada mais são do que uma carcaça metálica e um emaranhado de componentes mecânicos e eletrônicos, operados e gerenciados por software, muito software. Você sabia que um carro de luxo possui mais de um milhão de linhas de código? Como garantir que tudo isto funcione adequadamente e que os serviços sejam prestados de acordo com as necessidades? Tudo começa com a compreensão do que precisa ser construído, ou seja, começa com o entendimento dos requisitos! Se os profissionais da área de computação, não conseguirem identificar, analisar, especificar e gerenciar adequadamente os requisitos que devem estar presentes no produto de software, ele pode não atender às suas necessidades e, em última instância, não servir para nada. Pode ainda causar grandes prejuízos financeiros ou até mesmo custar a vida de alguém, como no caso da operação de veículos autônomos, por exemplo, ou de equipamentos médicos. Nesta Unidade de Aprendizagem você aprenderá sobre a importância das atividades de Engenharia de Requisitos no ciclo de desenvolvimento de software e como requisitos mal compreendidos e mal definidos podem afetar a qualidade do produto final. Além disto, aprenderá sobre as atividades da Engenharia de Requisitos e como elas podem contribuir para que os problemas provenientes dos requisitos possam ser eliminados, ou pelo menos minimizados. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Discutir os problemas advindos dos requisitos em projetos de software.• Reconhecer a importância da Engenharia de Requisitos no ciclo de vida de um software.• Identificar as etapas da Engenharia de Requisitos.• DESAFIO A Engenharia de Requisitos, quando mal executada em projetos de software, pode ser a causa de diversos problemas, como, por exemplo, atrasos nas entregas, retrabalho, insatisfação do cliente, desgaste da imagem da empresa e erros que podem gerar prejuízos financeiros ou até mesmo a perda de vidas. Conteúdo interativo disponível na plataforma de ensino! Você, como novo contratado, precisa ajudar Paul na solução das questões levantadas. Para isso: Encontre pelo menos 3 problemas que foram observados e as suas possíveis soluções. INFOGRÁFICO A Engenharia de Requisitos pode ser considerada como um conjunto de práticas necessárias ao tratamento de requisitos ao longo de todo o ciclo de vida de um produto de software, desde a sua concepção até a sua descontinuação. Acompanhe as atividades envolvidas na Engenharia de Requisitos no Infográfico a seguir. Nele, você poderá ver o fluxo das solicitações, desde a captura dos requisitos a partir das fontes de informação, até a validação, passando pelas etapas de gerenciamento de solicitações de mudanças. CONTEÚDO DO LIVRO Requisitos representam um dos pontos mais cruciais da produção de software. Requisitos mal compreendidos, mal especificados e mal gerenciados são uma das maiores causas de fracassos em projetos de Tecnologia da Informação. A Engenharia de Requisitos é a área da Engenharia de Software que oferece ferramentas para que o profissional de computação possa lidar adequadamente com os requisitos nas diversas fases do ciclo de vida de um produto de software. No capítulo Fundamentos da Engenharia de Requisitos, do livro Engenharia de Requisitos, base teórica desta Unidade de Aprendizagem, você vai ler sobre os problemas causados em decorrência das deficiências no tratamento dos requisitos, bem como compreender a importância da Engenharia de Requisitos no ciclo de vida de um produto de software. Ao final, vai tratar das atividades que compõem a Engenharia de Requisitos. Boa leitura. ENGENHARIA DE REQUISITOS Sheila Reinehr Fundamentos da engenharia de requisitos Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Discutir os problemas advindos dos requisitos em projetos de software. � Reconhecer a importância da engenharia de requisitos no ciclo de vida de um software. � Identificar as etapas da engenharia de requisitos. Introdução É inquestionável a presença da tecnologia em nosso dia a dia. Produtos de software fazem parte de praticamente todas as atividades humanas, sejam elas pessoais, sejam profissionais. Quando um software não funciona de forma adequada, sentimos o impacto por meio de transtornos, como a falta de sincronização de semáforos nas grandes cidades, o atraso e o cancelamento de voos, a impossibilidade de fazer uma compra on-line, a indisponibilidade de serviços bancários, e mais uma infinidade de con- tratempos. Falhas em software também podem tirar vidas. Uma das principais fontes de problemas em produtos de software está relacionada aos requisitos. Requisitos mal compreendidos, mal especificados e mal gerenciados podem comprometer o desempenho de produtos de software e representam uma das maiores causas de fracasso em projetos de tecnologia da informação. Neste capítulo, você vai ler sobre a importância do software na socie- dade moderna e os impactos provenientes de problemas relacionados a requisitos de software. Verá também a importância da engenharia de requisitos no ciclo de desenvolvimento de software e sua influência nas atividades de desenvolvimento. Por fim, você vai saber como a enge- nharia de requisitos pode ajudar a eliminar, ou pelo menos minimizar, os problemas relacionados a requisitos. 1 Problemas advindos dos requisitos de software Produtos de software estão presentes em todos os momentos de nossas vidas. Diariamente, mesmo sem nos darmos conta, entramos em contato com dife- rentes tipos de software. Acordamos despertados por uma funcionalidade de nossos smartphones e olhamos a previsão do tempo disponibilizada por outro aplicativo. Saímos para o exercício matinal acompanhados do smartwatch, que registra todo o nosso desempenho, incluindo o tempo, o percurso e até mesmo os batimentos cardíacos. Retornamos e aquecemos o café da manhã no micro-ondas, cuja programação automática é feita por um software embarcado no eletrodoméstico. Em seguida pedimos o transporte, utilizando mais um aplicativo no celular. Ao chegar no trabalho, um mundo de diferentes sistemas de software nos apoia no dia a dia da empresa (email, mensagens instantâneas, programas de gestão, de controle de produção, de marketing, de vendas e por aí vai). Ao final do dia, cansados, voltamos do trabalho ouvindo uma música para relaxar usando o streamer de músicas e aproveitamos para, no caminho, pedir uma refeição no sistema de entrega de comida e acionar o ar condicionado de casa, para que esteja na temperatura ideal quando chegarmos. Ainda dá para marcar aquele encontro com os amigos para o final de semana, usando o aplicativo de troca de mensagens. Checamos nosso saldo no banco e veri- ficamos se o débito automático da conta de luz foi realizado. Após o jantar, que pagamos com a máquina de cartão de crédito por aproximação docelular, encerramos o dia assistindo nossa série preferida no programa de streaming de vídeo e damos uma espiadinha nas redes sociais. O despertador já está programado para o próximo dia. Praticamente nada disso seria possível sem o uso da tecnologia e dos sistemas de software que viabilizam esses serviços. Atualmente, todos os segmentos da atividade humana são permeados por software — e serão cada vez mais. Imagine, por um momento, se todo software do planeta parasse de funcionar. Quais seriam os impactos? Que atividades você realiza hoje que não poderia realizar? Que serviços essenciais deixariam de ser prestados? Algumas dessas facilidades estão tão enraizadas em nossas vidas que parece que elas sempre estiveram lá. Com tantas novas tecnologias a cada dia, construir software se tornou uma atividade cada vez mais complexa. Se, por um lado, não temos mais as restrições de memória e de poder de processamento que tínhamos na década de 1960, a variedade e a complexidade dos elementos envolvidos atualmente Fundamentos da engenharia de requisitos2 trazem novos desafios para o desenvolvimento de software. Além disso, os ambientes de negócios se tornaram mais sofisticados e complexos. O re- sultado é que desenvolver projetos de software não é uma atividade trivial, e os desafios começam na parte inicial do ciclo de vida: os requisitos. Primeiramente, vamos definir requisitos. O Glossário padrão de termi- nologia de engenharia de software do Institute of Electrical and Electronic Engineers (IEEE, 1990) define requisito como: 1. Uma condição ou capacidade necessária para um usuário resolver um problema ou alcançar um objetivo. 2. Uma condição ou capacidade que deve ser atendida ou tida por um sistema ou componente do sistema para satisfazer a um contrato, padrão, especificação ou outro documento formalmente imposto. 3. Uma representação documentada de uma condição ou capacidade con- forme estabelecido em 1 e 2. Independentemente de a empresa ter processos mais burocráticos e formais de desenvolvimento ou utilizar métodos ágeis, requisitos mal compreendidos e mal gerenciados são causa frequente de inúmeros prejuízos e insatisfações. Diversos são os exemplos de falhas de software que podem ser ligadas a problemas relacionados a requisitos e levar a milhões em prejuízos. Vamos dar uma olhadinha em algumas delas? � Na década de 1990, o Aeroporto de Denver, no Colorado, havia sido projetado para ser o maior hub de aviação dos Estados Unidos. Um dos pontos mais críticos estava relacionado aos requisitos que o sistema de gerenciamento de bagagens deveria atender para que o tempo em solo das aeronaves pudesse ser limitado a apenas 30 minutos. A complexidade técnica para implementar esse requisito foi subes- timada, uma vez que o algoritmo de roteamento das bagagens não era trivial. Isso levou a um atraso de 16 meses na inauguração e a um prejuízo de 1,1 milhão de dólares ao dia para a cidade de Denver (CALLEAM CONSULTING, 2008). � Em 1996, o foguete europeu Ariane 5 explodiu em pleno ar apenas 66 segundos após ter sido lançado. A causa principal foi o requisito de reutilizar o software de seu antecessor, o Ariane 4, que tinha alguns campos internos com tamanhos diferentes do Ariane 5. O requisito de compatibilidade entre os modelos não foi corretamente analisado e o prejuízo estimado foi de 370 milhões de dólares (HINKEL, [201-?]). 3Fundamentos da engenharia de requisitos � Em 1999, a sonda espacial climática da NASA que iria para Marte errou o ponto de inserção orbital no planeta, realizando a manobra com um erro de 100 km, o que ocasionou a destruição do equipamento e gerou um prejuízo estimado de 125 milhões de dólares. A causa foi um problema no sistema de conversão de medidas — enquanto uma equipe estava usando o sistema métrico decimal, a outra estava usando o sistema imperial (ISBELL; SAVAGE, 1999). � Em 2019, a Boeing foi obrigada a suspender toda a frota de 387 aviões do modelo Boeing 737 Max, que voavam para 59 companhias aéreas em todo o mundo. O fato ocorreu depois que dois acidentes aéreos tiraram a vida de 346 pessoas em menos de 5 meses. A causa foi atribuída a problemas encontrados no novo software de controle de voo que havia sido implantado (BOEING…, 2019). Esses são apenas alguns dos inúmeros exemplos ocorridos, cuja conse- quência pode ser a perda de vidas ou o prejuízo financeiro, ou ambos. No dia a dia das empresas de software, a consequência mais comum dos problemas em requisitos é o aumento do retrabalho, ou seja, a necessidade de refazer coisas que já estavam prontas, levando a custos não previstos inicialmente. Quanto mais longe do início do projeto ou da sprint se percebe o problema, mais caro é para consertar. Quanto mais atividade já tiver sido realizada sobre o requisito (especificação, implementação, testes, entrega), mais difícil e trabalhoso é consertar e maiores são os impactos negativos para o projeto ou para a sprint. Sprint é o termo que denomina um ciclo de desenvolvimento em uma empresa que utiliza o método ágil Scrum. Uma sprint tem uma duração de duas a quatro semanas e visa à entrega de um item possivelmente liberável e que agrega valor ao cliente (SCHWABER; SUTHERLAND, 2018). Fundamentos da engenharia de requisitos4 Os problemas estão relacionados ao fato de que um requisito pode: � estar incompleto; � estar em um nível de detalhe insuficiente para as etapas seguintes do ciclo de desenvolvimento; � conter ambiguidades ou imprecisões que levem os membros da equipe a interpretá-lo de forma diferente do que o esperado, levando a erros nas fases seguintes do ciclo de desenvolvimento; � ser incompatível com outro requisito; � ser tecnicamente inviável; � ser difícil de testar e validar; � ter priorização conflitante sob a ótica dos diversos stakeholders. E por que esses problemas acontecem com os requisitos? Existem diversos motivos pelos quais esses problemas podem acontecer, e isso varia de acordo com o tipo de projeto, com o contexto de negócio, com as características da equipe e das tecnologias envolvidas. Um projeto simples, cujo contexto de negócios é dominado pela equipe técnica, vai ter menos riscos associados a requisitos do que um projeto que envolva uma equipe menos experiente ou um negócio muito inovador e sem histórico anterior. Existem projetos que têm um cliente bem definido e usuários com perfis conhecidos. Nesse contexto, os requisitos podem ser obtidos pelo contato direto com o cliente ou com os próprios usuários. Os requisitos, nesse caso, podem falhar por problemas de comunicação entre as partes, nos quais cada uma tem uma perspectiva diferente e até mesmo um vocabulário diferente. É comum ouvir que os usuários não sabem o que querem, mas, na verdade, por mais que eles saibam, sua perspectiva pode mudar pelo simples fato de entrarem em contato com a equipe, por experimentar a primeira versão de um protótipo ou mesmo pelo fato de que suas necessidades mudam ao longo do tempo. Os efeitos da mudança vão depender de diversos fatores, mas o seu tratamento vai depender fortemente do grau de confiança entre as partes. Quanto maior o grau de confiança, mas fácil é de se gerenciar as mudanças nos requisitos e suas consequências para o projeto, para o produto e para o relacionamento entre as partes. Há projetos que são inovadores e visam a criar um produto de software que não existe ainda, como é o caso das startups de tecnologia. Nesse cenário, de onde podem vir os requisitos? Eles podem ser resultantes da própria equipe que está criando o produto, com base no que elas enxergam que o mercado 5Fundamentos da engenharia de requisitos precisa. Por esse motivo, para esses casos, um MVP (minimum viable product ou produto mínimo viável) é criado para analisar se a ideia pode ou não ir adiante. Quanto mais cedo surge falha, mais cedo a ideia é pivotada e um novo ciclo de desenvolvimento é iniciado, com novos requisitos. Quanto maiora capacidade da equipe de perceber os requisitos que o mercado deseja para o produto, maiores são as chances de sucesso da startup. Há casos ainda em que o projeto visa a uma atualização tecnológica de um produto, na qual a própria versão anterior do produto pode ser a fonte de requisitos. Nesses casos, a qualidade dos requisitos obtidos depende fortemente da qualidade do sistema anterior e da habilidade da equipe em extrair esses requisitos. Algumas das causas mais frequentes dos problemas relacionados a requi- sitos, de acordo com Wiegers e Beatty (2013), são: � os objetivos de negócio, a visão e o escopo do projeto nunca foram definidos claramente; � os clientes estavam muito ocupados para dedicar mais tempo trabalhando com os analistas ou os desenvolvedores nos requisitos; � o time não pode interagir diretamente com usuários representativos para entender suas necessidades; � os clientes argumentaram que todos os requisitos eram críticos, por isso eles não estabeleceram prioridades; � os desenvolvedores encontraram ambiguidades e informações faltan- tes quando foram codificar, então, eles precisaram adivinhar certas informações; � as comunicações entre o cliente e os desenvolvedores focaram na apa- rência da interface do usuário e não no que os usuários necessitavam alcançar com o software; � os clientes nunca aprovaram os requisitos; � os usuários aprovaram os requisitos para um release ou iteração e então mudaram eles continuamente; Fundamentos da engenharia de requisitos6 � o escopo do projeto aumentou à medida que as mudanças de requisitos foram aceitas, mas o cronograma se desviou porque nenhum recurso adicional foi fornecido e nenhuma funcionalidade foi removida; � as mudanças solicitadas nos requisitos foram perdidas; ninguém sabia o status de solicitações de mudanças específicas; � os clientes requisitaram certa funcionalidade e os desenvolvedores a desenvolveram, mas ninguém nunca utilizou; � ao final do projeto, a especificação foi satisfeita, mas o usuário e os objetivos de negócio não. Relembrando o que Frederick Brooks já nos alertava em 1987 (BROOKS, 1987, p. 13): A parte mais difícil ao se construir um sistema de software é decidir precisa- mente o que construir. Nenhuma outra parte do trabalho conceitual é tão difícil quanto estabelecer os requisitos técnicos detalhados, incluindo a interface com as pessoas, máquinas e outros sistemas de software. Nenhuma outra parte afeta tanto o sistema resultante se for feita de forma errada. Nenhuma outra parte é tão difícil de consertar depois. 2 Ciclo de vida de software e engenharia de requisitos O ciclo de vida de um produto de software pode ser compreendido como um conjunto de etapas pelas quais o produto passa ao longo de sua existência, conforme ilustra, de forma simplificada, a Figura 1. Figura 1. Ciclo de vida de um produto de software. CONCEPÇÃO DESENVOLVIMENTO MANUTENÇÃO DESCONTINUAÇÃO Identi�cação da ideia inicial e análise da viabilidade de se construir o produto Especi�cação, implementação e implantação do produto de software Manutenção corretiva e adaptativa do produto de software ao longo de sua vida útil em atividade Desativação do produto de software quando ele se torna obsoleto e não é mais necessário 7Fundamentos da engenharia de requisitos Concepção Inicialmente, a necessidade de um novo produto de software é identificada e a viabilidade de sua construção é analisada. Como produtos de software podem ter diversas naturezas, a fonte dessa necessidade pode variar enormemente, especialmente hoje, quando a tecnologia permeia todas as nossas atividades, como vimos no início deste capítulo. Na fase de concepção, os primeiros requisitos aparecem na forma de objetivos de negócio de alto nível, do tipo: “Precisamos de um software para apoiar o gerenciamento do fluxo de solicitações”. Às vezes esse objetivo vem atrelado a uma meta: “(…) de modo a reduzir o tempo de prestação do serviço a 6 horas”. Ainda assim, não sabemos exatamente o que precisa ser construído, até que sejam detalhados os requisitos que representam as funcionalidades do produto, conhecidos como requisitos funcionais de produto. Então evoluímos para algo do tipo: “O sistema deve ter uma função que emita alertas toda vez que uma solicitação estiver parada por mais de 2 horas”. Nesse momento é também comum que surjam os requisitos de projeto e de processo. Os requisitos de projeto podem impor restrições ao projeto em si, e podem ser relacionados com os prazos, os recursos e o orçamento. Já os requisitos de processo podem imprimir restrições relacionadas à forma como o projeto será desenvolvido, como, por exemplo, um método específico de desenvolvimento. De posse dessas informações iniciais, é possível avaliar a viabilidade de se dar início ou não ao Desenvolvimento. Um projeto pode ser cancelado antes mesmo de ter sido iniciado. Isso pode ocorrer por diversos motivos, entre eles o fato de o escopo não estar suficientemente claro para que se possa comprometer recursos para a sua execução. Desenvolvimento A fase de desenvolvimento compreende todas as atividades necessárias para a produção do software. Isso inclui aquelas relacionadas a requisitos, análise e design, implementação, testes, homologação e implantação, além de todas as atividades de suporte ao desenvolvimento e à gestão do desenvolvimento, conforme ilustra a Figura 2. Fundamentos da engenharia de requisitos8 Figura 2. Etapas do desenvolvimento de software. Embora o termo “etapas do desenvolvimento” esteja sendo utilizado, aqui ele não se refere a um modelo de ciclo de vida sequencial ou cascata. Essas etapas são mais parecidas com disciplinas, que podem se intercalar e se repetir à medida que o projeto avança, de forma iterativa e incremental. A Figura 2 ilustra essas etapas. Quando um projeto de desenvolvimento de software tem início, é comum que um escopo esteja estabelecido, mesmo que esse escopo ainda esteja em um nível alto de granularidade. A partir daí, as atividades relacionadas a requisitos, que tiveram início na etapa de concepção, são intensificadas. Os detalhes referentes à engenharia de requisitos serão explorados na próxima seção. Dependendo do tipo e criticidade do projeto, uma vez estabelecidos os requisitos, têm início as atividades de design. Essa etapa consiste em projetar a solução que implementará os requisitos. Esses modelos ajudam a aprofundar a compreensão do contexto e a delinear a solução que será implementada. Mesmo empresas que utilizam métodos ágeis costumam ter uma sprint zero, que se dedica a conceber a arquitetura da aplicação. Nesse momento é estabelecida a arquitetura do sistema, os componentes e como eles se relacionam. 9Fundamentos da engenharia de requisitos Durante a etapa de análise e design podem emergir novos requisitos, derivados ou não daqueles que foram inicialmente elicitados. Isso pode ocorrer porque, ao modelar a solução, o analista de sistemas pode: � identificar requisitos técnicos adicionais, advindos da arquitetura escolhida; � perceber que determinados requisitos não têm viabilidade técnica de execução; � identificar requisitos conflitantes; � identificar requisitos incompletos ou imaturos para a implementação Uma vez definidos os componentes no nível de detalhe compatível com as necessidades do projeto, iniciam as atividades de Implementação. Note que aqui pode haver um paralelismo de atividades, pois os componentes podem ir sendo especificados ao mesmo tempo em que outros já estão sendo implementados. Nessa etapa o desenvolvedor ainda pode detectar problemas nos requisitos, devido à inviabilidade técnica de implementar. Ao concluir a codificação, o desenvolvedor realiza os testes individuais nas unidades pelas quais foi responsável pela implementação. Nesse momento são realizadas as atividades de verificação, usando os casos de teste manuais ou automatizados. Há empresas que utilizam a abordagemDevOps, integrando o ciclo de desenvolvimento ao ciclo de operação em produção. Isso é feito utilizando os conceitos de integração contínua (CI, continuous integration) e entrega contínua (CD, continuous delivery) e implantação contínua (CD, continuous deployment). Entende-se por CI o fato de haver uma integração automática à medida que o desenvolvedor sobe o seu código para o repositório e este se integra a outras partes do código que foram desenvolvidas por outros desenvol- vedores. Já a entrega contínua (CD) se refere a entregar uma solução integrada para o pessoal de implantação poder realizar a passagem para o ambiente de produção, e a implantação contínua (utiliza-se a sigla CD também) se refere à passagem automática para o ambiente de produção. Quer conhecer mais sobre DevOps? Consulte o livro Jornada DevOps: unindo cultura ágil, Lean e tecnologia para entrega de software de qualidade, organizado por Muniz et al. (2019). Fundamentos da engenharia de requisitos10 Manutenção A maior parte do tempo de vida de um produto de software se passa na etapa de Manutenção. A partir do momento que a primeira funcionalidade entra em produção e o produto começa a ser utilizado, já começam as requisições de mudanças, sejam elas por bugs encontrados pelos usuários, sejam por demandas de ordem legal/fiscal ou por melhorias e novas funcionalidades. Na etapa de Manutenção, ocorre a maior parte das atividades de gerencia- mento dos requisitos. Isso significa que a rastreabilidade é a ferramenta mais importante para a análise do impacto das solicitações de mudanças. Descontinuação Quando o produto de software não atende mais aos seus propósitos ele é descontinuado, ou seja, ele é retirado do ambiente de produção. Em alguns casos, basta solicitar a desinstalação do produto, como é o caso dos aplicativos que temos em nosso celular. Mas, na maioria das vezes, a descontinuação não é uma atividade tão simples. Para descontinuar, por exemplo, um software de gestão do tipo ERP (en- terprise resource planning, ou sistema de gestão empresarial), são necessários muitos anos, pois a transição para outro produto/fornecedor não é tão simples. Muitas vezes é necessário construir outro sistema para que se possa fazer a migração de dados e processos para o novo produto. Nesses casos, é importante compreender os requisitos da desativação. O negócio no qual o software está inserido pode ter requisitos específicos relacionados a questões de ordem legal e/ou fiscal, como o arquivamento de dados e documentos por um longo período. Por exemplo, contratos de trabalho precisam ser guardados por tempo indeterminado, enquanto outros documentos requerem prazos de 5, 10, 20 e até 30 anos. Além disso, é preciso planejar a forma como esses dados serão recuperados em caso de necessidade. Esses são requisitos que podem estar presentes no projeto de desativação de um produto de software. 11Fundamentos da engenharia de requisitos 3 Etapas da engenharia de requisitos Agora que já entendemos quais problemas podem vir dos requisitos e com- preendemos a importância da engenharia de requisitos para lidar com essas questões, vamos conhecer quais são as atividades a serem realizadas nessa etapa do desenvolvimento de software. Falar em etapas da engenharia de requisitos pode sugerir que estamos nos referindo a um modelo de desenvolvimento cascata, cheio de burocracias e distante da realidade atual das empresas. Na verdade, no contexto deste capítulo, estamos considerando que as etapas da engenharia de requisitos são atividades que devem ser realizadas no desenvolvimento de produtos de software, independentemente do modelo de ciclo de vida que está sendo utilizado. O momento de realização dessas atividades e os artefatos envolvidos poderão variar, mas a essência é a mesma — o que varia é a forma. O objetivo é um só: construir produtos de software melhores e mais confiáveis! Como você pode observar na Figura 3, a engenharia de requisitos compre- ende duas grandes etapas: o desenvolvimento e o gerenciamento. No desen- volvimento de requisitos estão englobadas as atividades de elicitação, análise, especificação e validação, as quais veremos em mais detalhes a seguir. Figura 3. Etapas da engenharia de requisitos. Fundamentos da engenharia de requisitos12 Elicitação de requisitos A elicitação se refere à etapa de investigação dos requisitos. É o momento em que a equipe técnica precisa compreender o que deve ser feito. Antigamente, o termo utilizado era “levantamento de dados”, no entanto, essa expressão está em desuso e, em seu lugar, usamos a expressão “elicitação de requisitos” para denotar algo mais forte, que remete a uma busca ativa pelos requisitos. Isso significa que o analista de requisitos ou papel similar (analista de negócios, analista de sistemas, product owner ou equivalente) deve adotar uma postura proativa para a descoberta e o entendimento dos requisitos. Isso implica em utilizar diversas formas de elicitação, de acordo com o contexto em que o sistema está sendo desenvolvido. Outros termos associados a esta etapa podem ser: captura de requisitos, descoberta de requisitos ou aquisição de requisitos (BOURQUE; FAIRLEY, 2014). Quando falamos da Elicitação de requisitos não estamos enfatizando que é necessário ter todos os requisitos extensivamente detalhados no início do projeto, ou que esta etapa ocorra uma única vez no início do projeto. Em pro- jetos ágeis, os requisitos podem emergir em diversos momentos, compondo o product backlog. No entanto, é importante ter em mente que alguns requisitos, quando descobertos muito tardiamente no ciclo de vida de um projeto, podem implicar em grande quantidade de retrabalho e custos adicionais. Esse é o caso, por exemplo, dos requisitos que impactam fortemente sobre a arquitetura do produto — esses são mais difíceis de serem alterados posteriormente. Product backlog (ou “backlog do produto”) é o termo utilizado para denominar um conjunto de itens conhecidos que devem ser desenvolvidos para determinado produto. Quando itens do product backlog são priorizados para serem desenvolvidos em uma sprint, então, esse subconjunto é chamado de sprint backlog. O termo é comum em empresas que utilizam o método ágil Scrum (SCHWABER; SUTHERLAND, 2018). 13Fundamentos da engenharia de requisitos O processo de elicitação exige uma intensa comunicação com os stakehol- ders do projeto. É no processo de comunicação que o analista de requisitos identifica o que realmente é imprescindível para o desenvolvimento do produto e não perde tempo detalhando o que não é importante ou que não precisa de detalhamento naquele momento. A comunicação ineficaz pode levar a requisitos incompletos e incorretos. Há casos em que a comunicação com os stakeholders é direta e é possível aplicar técnicas como entrevistas e reuniões, pois existem fontes de infor- mação humanas que compreendem o contexto de negócio e podem prover as informações necessárias para a definição dos requisitos. Delinear histórias do usuário ou mapear a jornada do usuário pode ajudar. Ambos se baseiam na narrativa de uma história de uso do sistema por um usuário. No caso dos produtos inovadores, que estão sendo criados sem uma ex- periência anterior, ou que tenham um propósito disruptivo, é necessário que sejam utilizadas técnicas com o propósito de despertar a criatividade. Isto pode ser feito utilizando sessões de cocriação, como o brainstorming ou o design thinking. Há ainda os momentos em que os requisitos são obtidos a partir de do- cumentações como editais de licitação (no caso de contratação advinda do setor público), de normas e leis (no caso de sistemas que precisam atender a legislações específicas e órgãos regulamentadores), de documentação de outros sistemas anteriores e, até mesmo, no pior caso, do próprio código-fonte anterior. O importante nas atividades de elicitação de requisitos é que o analista de requisitos seja capaz de compreender o contexto emque o projeto está inserido e que possa planejar de que forma irá realizar sua atividade de elicitar os requisitos. Pode ser empregando uma única técnica, pode ser empregando uma combinação de técnicas. O papel do analista de requisitos é mergulhar no ambiente de negócio. O usuário não precisa de um software, ele precisa do serviço que o software presta, precisa de algo que resolva o seu problema de negócio. O mais importante é que o analista de requisitos tenha feito todos os esforços para engajar os stakeholders e fazer emergir os requisitos que farão do projeto um sucesso. Fundamentos da engenharia de requisitos14 Análise de requisitos A análise de requisitos é a etapa na qual nos concentramos em aprofundar o entendimento acerca dos requisitos, buscando possíveis conflitos que podem ser advindos das diferentes visões que os stakeholders possam ter sobre o requisito e sua prioridade no projeto de desenvolvimento. Entretanto, os pro- blemas podem vir também de requisitos conflitantes entre si, especialmente no que se refere a requisitos de qualidade, também chamados de requisitos não funcionais. A complexidade de um requisito funcional, por exemplo, pode ser incompatível com a necessidade de desempenho exigida. Faz parte da análise a decomposição de requisitos de alto nível em níveis apropriados de detalhe. Muitas vezes o requisito está expresso como um objetivo de negócio de alto nível e isso não é suficiente para as próximas etapas do desenvolvimento de software, sendo necessário decompô-lo em níveis mais detalhados. Outro aspecto importante da análise dos requisitos diz respeito à defini- ção dos atributos a ele associados, como o tipo do requisito, a volatilidade, o impacto sobre a arquitetura e o risco. Se um requisito, por exemplo, é volátil, ou seja, está mais sujeito a mudanças do que outros, pode ser que se decida por implementá-lo posteriormente, quando o seu entendimento esteja mais estabilizado. Da mesma forma, requisitos que tenham um grande impacto sobre a arquitetura da aplicação devem ser tratados com um cuidado redobrado, pois podem implicar em consequências para todos os demais requisitos, incluindo os requisitos de qualidade, como o desempenho da aplicação. É importante lembrar que a extensão da análise de requisitos vai variar de acordo com a criticidade do software e qual o seu papel dentro do contexto no qual está inserido. Sistemas complexos, envolvendo, por exemplo hardware e software, como sistemas de software para a direção autônoma de veículos, precisam de uma etapa de análise de requisitos mais aprofundada, que pode até mesmo se confundir com o design e com as especificações arquiteturais do produto (o que envolve o sistema como um todo). Nos exemplos que vimos no início deste capítulo, pudemos observar como alguns requisitos técnicos podem levar sondas espaciais a se desintegrarem em pleno ar e aeronaves a serem retiradas de circulação após desastres aéreos provenientes do software. Em ambos os casos, com extensivos prejuízos materiais, mas, principalmente, com a perda de vidas humanas. 15Fundamentos da engenharia de requisitos Especificação de requisitos A especificação de requisitos é a etapa dedicada a representar os requisitos de uma forma que eles possam perdurar ao longo do tempo e possam ser verifi- cados e validados posteriormente. Isso pode implicar em formatos diferentes de especificação que envolvem textos, diagramas e tabelas. Aqui cabe uma pequena discussão acerca do que é exatamente representar os requisitos e de que forma deveríamos realizar essa atividade. Os métodos tradicionais de desenvolvimento, especialmente o cascata, com ciclos extensivos e exaustivos de especificação antes da codificação, já se mostraram ineficientes no passado e foram, gradualmente, substituídos. Há alguns anos que os métodos ágeis estão sendo mais amplamente adotados pela indústria, e muitos entendem que usar um método ágil significa não realizar qualquer tipo de “documentação”. A palavra aqui vem entre aspas para denotar que o termo é de uso pejorativo no ambiente ágil, estando relacionado a uma ação que agrega pouco ou nenhum valor ao produto final. Agilistas mais radicais defendem que a única documentação fiel de um produto é o seu código. São dois extremos que, em geral, se antagonizam. Vamos refletir por um instante: imagine que você estivesse no hospital e sua vida dependesse da precisão de um equipamento cirúrgico, operado, em grande parte, por um software. Será que você iria preferir que os projetistas tivessem documentado adequadamente os requisitos técnicos, para garantir que os envolvidos nas fases seguintes desenvolvessem o produto de forma precisa? Ou você estaria confortável em ter apenas uma história de usuário de alto nível como documentação desses requisitos? A questão aqui é quanto de especificação é necessário antes de se dar início à implementação? A resposta é depende. Depende da complexidade do produto que está sendo desenvolvido, da criticidade de cada requisito, dos riscos de se ter um erro advindo de uma má compreensão, da experiência da equipe envolvida e até mesmo da fase em que o produto e a empresa se encontram. É comum que empresas disruptivas de tecnologia, como as startups, iniciem suas atividades a partir de versões iniciais e pouco elaboradas do produto, o chamado MVP (em inglês, minimum viable product, isto é, produto mínimo viável). Nessa fase de sua existência, a empresa não se preocupa em especificar detalhadamente, pois seu foco é testar a viabilidade do negócio. Nesse momento a equipe é pequena, composta de duas a três pessoas, e a comunicação é direta e simples. No entanto, à medida que essa startup cresce e se torna uma grande empresa, não é mais possível continuar a desenvolver sem a preocupação com a especificação, pois a equipe também aumenta e a comunicação entre Fundamentos da engenharia de requisitos16 os membros se torna mais complexa. Um erro no ambiente de produção pode afetar milhares de pessoas. É preciso especificar os requisitos na medida certa para a situação. Nunca teremos os requisitos de forma perfeita. Precisamos ter os requisitos na forma necessária e suficiente para os objetivos do projeto e para prosseguir com as demais etapas do desenvolvimento, sejam elas denominadas de fases, sejam de etapas, iterações, estágios ou sprints. Validação de requisitos A especificação dos requisitos precisa ser validada entre os stakeholders e a equipe de desenvolvimento para garantir que existe uma compreensão correta e comum sobre os requisitos e que a equipe de desenvolvimento possui as condições de implementar um produto que irá satisfazer as necessidades do negócio (WIEGERS; BEATTY, 2013). A validação pode ser realizada por meio de uma revisão sobre as espe- cificações, que é feita por revisores designados para tal, com o apoio de um checklist, por exemplo. Há casos em que se conduzem workshops de validação, nos quais os diversos tipos de stakeholders são envolvidos. Podem ainda ser usados protótipos funcionais que visam a confirmar os requisitos e até mesmo a apoiar a elicitação de novos requisitos. Nesse caso, é importante destacar a finalidade dessa validação. Existe o risco do processo de validação de um protótipo se resumir a analisar requisitos da interface com o usuário. Isso não será um problema se a interface com o usuário for um ponto crítico e que precise de muita atenção. Entretanto, não se pode perder de vista a validação das regras de negócio e dos demais tipos de requisitos, como os requisitos de qualidade. Especificar um conjunto de casos de teste que possam ser utilizados para testar o produto também faz parte desta etapa. Esses casos de teste podem ser documentos ou casos automatizados, dependendo do nível de maturidade da organização. Testes podem ser utilizados posteriormente para verificar se o produto final cumpre o que estava na especificação (verificação) ou para validar se oproduto faz aquilo que deveria fazer (validação). 17Fundamentos da engenharia de requisitos Gerenciamento de requisitos Permeando todo o ciclo dos requisitos, encontram-se as atividades relacionadas à fase de gerenciamento dos requisitos, que trata do estabelecimento de formas de rastrear os requisitos e facilitar a análise do impacto de uma solicitação de mudança para a tomada de decisão. Pesquisa do PMI (Project Management Institute) aponta problemas no gerenciamento de requisitos (LARSON, 2014): � Somente 49% das organizações têm recursos alocados adequadamente para o gerenciamento de requisitos. � Somente 33% dos líderes das organizações valorizam o gerenciamento de requisitos como uma competência crítica. � Somente 47% das organizações têm um processo formal de validação de requisitos. � Dos recursos financeiros gastos em projetos e programas, 51% são desperdiçados devido ao gerenciamento de requisitos ineficiente. � Dos objetivos não atendidos de projetos, 47% foram devido ao geren- ciamento de requisitos ineficiente. Para que os impactos de uma solicitação de mudança possam ser analisados de forma precisa, é necessário que se tenha conhecimento da fonte do requisito, de como os requisitos se relacionam entre si e de como eles se relacionam com os artefatos seguintes, como o código, por exemplo. Essa análise permite que tenhamos uma estimativa dos recursos e do tempo necessários para realizar a mudança solicitada, bem como para identificar quais artefatos precisam ser alterados. Isso permite que seja tomada uma decisão embasada sobre a solicitação de mudança. Manter essa rastreabilidade entre os elementos não é uma atividade sim- ples, especialmente em grandes produtos. Esta é uma atividade que permeia todo o ciclo de vida do produto e nasce quando os primeiros requisitos são identificados e especificados. Não é viável construir matrizes que precisem ser mantidas de forma manual, usando planilhas ou outro tipo de tabela; isso só é possível por meio de ferramentas automatizadas. Pior que não ter uma matriz de rastreabilidade é ter uma matriz desatualizada. Fundamentos da engenharia de requisitos18 BOEING 737 Max Lion Air crash caused by series of failures. BBC, Estados Unidos, 1990. Disponível em: https://www.bbc.com/news/business-50177788. Acesso em: 30 dez. 2019. BOURQUE, P.; FAIRLEY, R. (ed.). SWEBOK: guide to the software engineering body of knowledge version 3. Washington: IEEE Computer Society, 2014. BROOKS, F. No silver bullet: essence and accidents of software engineering. Computer, v. 20, n. 4, p. 10–19, 1987. CALLEAM CONSULTING. Denver airport baggage handling system case study. [S. l.], 2008. Disponível em: http://calleam.com/WTPF/wp-content/uploads/articles/DIABaggage. pdf. Acesso em: 30 dez. 2019. HINKEL, J. N. Ariane 5: um erro numérico (overflow) levou à falha no primeiro lançamento. São José dos Campos, [201-?]. Disponível em: https://www.ime.uerj.br/~demoura/ Especializ/Ariane/. Acesso em: 30 dez. 2019. IEEE. IEEE Std 610.12-1990: IEEE Standard Glossary of Software Engineering Terminology. Los Alamitos: IEEE Computer Society Press, 1990. ISBELL, D.; SAVAGE, D. Mars climate orbiter failure board releases report, numerous NASA actions underway in response. In: MARS POLAR LANDDER. Washington, 1999. Disponível em: https://mars.jpl.nasa.gov/msp98/news/mco991110.html. Acesso em: 30 dez. 2019. LARSON, E. I still don”t have time to manage requirements: my project is later than ever. In: PMI® GLOBAL CONGRESS, 2014, Phoenix, AZ. Proceedings… Newtown Square, PA: Project Management Institute, 2014. Disponível em: https://www.pmi.org/learning/ library/poor-requirements-management-source-failed-projects-9341. Acesso em: 30 dez. 2019. MUNIZ, A. et al. Jornada DevOps: unindo cultura ágil, Lean e tecnologia para entrega de software de qualidade. Rio de Janeiro: Brasport, 2019. SCHWABER, K.; SUTHERLAND, J. Guia do SCRUM: um guia definitivo para o SCRUM: as regras do jogo. [S. l.], 2018. Disponível em: https://www.scrumguides.org/index. html. Acesso em: 30 dez. 2019. WIEGERS, K. E.; BEATTY, J. Software requirements. 3. ed. Redmond: Microsoft Press, 2013. Leitura recomendada PRESSMAN, R.; MAXIM, B. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016. 19Fundamentos da engenharia de requisitos DICA DO PROFESSOR O Analista de Requisitos é o profissional responsável pelas atividades relacionadas à elicitação, análise, especificação, validação e gerenciamento de requisitos de projetos que envolvem software. Sua importância é estratégica para o sucesso do projeto, pois ele é o elo que une o contexto do negócio à equipe de tecnologia da informação. Diversas são as habilidades técnicas e pessoais necessárias ao desempenho dessas atividades. Assista à Dica do Professor a seguir e conheça um pouco mais sobre o papel do Analista de Requisitos no ciclo de desenvolvimento de software. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS 1) Um software de contabilidade foi desenvolvido e implantado em diversas empresas da cidade de São Paulo. Como o negócio estava prosperando, o produto estava estabilizado e os clientes estavam satisfeitos, a empresa decidiu abrir a venda para outros estados. No primeiro dia de operação do software na cidade de Blumenau, o cliente ligou furioso avisando que: “este software não funciona! Os impostos estão sendo calculados de forma incorreta!” Esse é um problema que ocorre com frequência e sua causa raiz pode ser atribuída a quê? A) O Desenvolvedor não codificou corretamente a fórmula para calcular os impostos. B) O Projetista de Interface não previu um campo para a alíquota correta do imposto na interface do usuário. O Analista de Testes não testou adequadamente o produto, deixando passar o erro no cálculo do imposto para a cidade de Blumenau. C) D) O Analista de Integração deixou passar a integração de um componente implementado de forma incorreta. E) O Analista de Requisitos não analisou corretamente o impacto da mudança de contexto. 2) Como você sabe, a Engenharia de Requisitos é composta por diversas etapas, entre elas a Especificação de Requisitos. Com relação a essa etapa, é correto afirmar que: A) os requisitos são sempre especificados de forma detalhada, pois serão a base para realizar o planejamento do projeto. B) o foco é apenas nos requisitos funcionais do projeto, de modo que se possa ter o escopo rapidamente definido antes que o programador comece a codificar. C) não deve haver nenhum tipo de documentação, pois isso sempre atrasa o início da programação, que é a etapa onde o produto é realmente produzido. D) devem ser especificados os requisitos em nível de detalhe compatível com as necessidades do projeto, o que pode variar de acordo com o contexto. E) os requisitos de qualidade não são considerados ainda, pois eles só vão ser tratados na etapa de testes de qualidade. 3) Para que o impacto de uma Solicitação de Mudança possa ser analisado adequadamente, é importante que o Analista de Requisitos disponha da matriz de rastreabilidade. Sobre esse artefato, é correto afirmar que: A) a matriz de rastreabilidade documenta os relacionamentos entre os diversos tipos de requisitos e entre os requisitos e outros elementos do produto de software. B) a matriz de rastreabilidade deve ser construída manualmente no formato de uma planilha. C) a matriz de rastreabilidade precisa apenas relacionar os requisitos com as suas fontes de informação, de modo que se possa identificar rapidamente quem pediu o requisito. D) a matriz de rastreabilidade é uma ferramenta criada na etapa de Gerenciamento de Requisitos. E) a matriz de rastreabilidade é uma planilha que deve ser criada quando os desenvolvedores terminaram a codificação, de modo a relacionar os requisitos e os códigos implementados. 4) Jones é um Desenvolvedor que acaba de ser promovido a Analista de Requisitos.Sua primeira atividade na nova função é realizar as atividades de requisitos para o novo sistema de avaliação de desempenho dos funcionários da empresa. A equipe usa métodos ágeis de desenvolvimento. As regras para a avaliação ainda não estão definidas, mas há diversos aspectos legais que devem ser levados em consideração. Você é Analista de Requisitos há mais tempo e Jones pede a sua ajuda para identificar por onde ele deveria começar. O que você recomendaria para Jones. I. Como a empresa utiliza métodos ágeis, você recomenda que Jones converse com a equipe de desenvolvimento e já comece a implementação das primeiras funcionalidades. II. Como o sistema possui aspectos legais a serem considerados, você recomenda que Jones inicie identificando as fontes de informação e as técnicas que ele poderá aplicar para elicitar os requisitos. III. Como a empresa trabalha em um ambiente mais descontraído, utilizando métodos ágeis, você recomenda que ele aplique a técnica de brainstorming. A) As alternativas I, II e III estão corretas. B) Apenas as alternativas I e II estão corretas. C) Apenas as alternativas I e III estão corretas. D) Apenas as alternativas II e III estão corretas. E) A única alternativa correta é a II. 5) Como você sabe, a Engenharia de Requisitos possui diversas etapas. Entre elas, a Validação de Requisitos. Sobre essa etapa, é correto afirmar que: A) ela é realizada pelo cliente apenas ao final do projeto, quando o produto final está entregue. B) ela é realizada pelo próprio Analista de Requisitos, quando termina sua atividade de Especificação de Requisitos. C) ela é realizada pelo cliente ao final da Especificação de Requisitos, para validar que a equipe técnica entendeu o que foi solicitado. D) ela é realizada pelo testador da equipe de desenvolvimento, quando os programadores terminaram a programação. E) ela é realizada pelo gerente do projeto, para validar que o trabalho do Analista de Requisitos foi realizado com sucesso. NA PRÁTICA O Analista de Requisitos é o profissional responsável pelas atividades relacionadas à Engenharia de Requisitos, que vão desde a elicitação dos requisitos até a sua validação. Seu papel é muito importante para os projetos de software, uma vez que erros provenientes dessa etapa podem se propagar para as demais etapas do desenvolvimento com consequências que podem ser desastrosas para o projeto e para o produto final. Judy é uma Analista de Requisitos que tem um novo projeto pela frente. Nesse Na Prática, você irá acompanhar os desafios de Judy e como ela organizou o seu trabalho desde o início para concluí-lo com sucesso. Conteúdo interativo disponível na plataforma de ensino! SAIBA MAIS Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Um dia feito de vidro (em inglês) A Day Made of Glass é um vídeo que mostra a tecnologia presente em todos os momentos do cotidiano, desde o instante em que duas crianças despertam para a ir à escola, até o momento em que retornam para casa, compartilhando suas experiências do dia. Paralelamente, o pai, após deixar as meninas na escola, utiliza a tecnologia como apoio para o seu trabalho como médico. Procure refletir como é o seu dia a dia e como seria se, de uma hora para outra, toda a tecnologia que você utiliza ficasse indisponível. O vídeo está em inglês, mas as imagens falam por si só! Conteúdo interativo disponível na plataforma de ensino! Testando a loja Amazon Go em São Francisco, Califórnia Neste vídeo, o autor mostra como funciona a loja automatizada da Amazon Go, na qual basta pegar os produtos e sair da loja. Eles são automaticamente debitados do seu cartão de crédito. Procure refletir quais requisitos estão envolvidos nessa solução tecnológica. Conteúdo interativo disponível na plataforma de ensino! A natureza do software Este material vai ajudar você a compreender e refletir sobre a natureza do software e suas particularidades. O capítulo inicia com um diálogo entre um dos autores e um desenvolvedor de jogos digitais. Em seguida, explica os diferentes tipos de software e suas implicações. Gerenciamento de Requisitos Neste vídeo, o autor Fabrício Laguna explica, em cerca de 5 minutos, a importância dos requisitos e ressalta o papel fundamental do gerenciamento de requisitos com um exemplo simples do dia a dia. Conteúdo interativo disponível na plataforma de ensino! Requisitos de software APRESENTAÇÃO A maior parte das atividades do dia a dia é apoiada por tecnologias que não existiam há pouco tempo ou que eram muito caras e inacessíveis. O poder de processamento de um celular é maior que o poder dos computadores da NASA na década de 60. Vive-se em um mundo onde o software desempenha um papel fundamental. Para que os softwares sejam úteis, executem as funções da forma como se deve, a primeira etapa é saber qual é o seu objetivo e que atividades o software deverá apoiar, ou seja, quais são os seus requisitos, que funções ele deve ter, com quem e como ele deve interagir e como deve se comportar em cada situação. Requisitos bem definidos são fundamentais para um produto de qualidade. São a base para o planejamento do projeto de software e para todas as demais atividades técnicas do desenvolvimento. Requisitos mal compreendidos e mal definidos levam, no mínimo, ao retrabalho e ao aumento de custos de produção. Mas, geralmente, as consequências são bem maiores, como a frustração dos clientes, o desgaste da imagem da empresa e até mesmo a perda de vidas, como no caso de softwares de missão crítica. Nesta Unidade de Aprendizagem, você aprenderá sobre os diferentes tipos de classificação de requisitos e quais os seus desdobramentos. Aprenderá como aplicar critérios de qualidade para analisar se os seus requisitos estão descritos de forma adequada, de modo a servirem de base para as etapas seguintes do ciclo de desenvolvimento de software. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Classificar os requisitos de um projeto de software.• Priorizar os requisitos em um projeto de software.• Aplicar critérios de qualidade para avaliar a qualidade dos requisitos de software.• DESAFIO Os requisitos são a base para as demais etapas do desenvolvimento de software. Requisitos ambíguos e mal especificados podem ocasionar a compreensão incorreta dos seus objetivos e, portanto, ao retrabalho nas fases posteriores. INFOGRÁFICO Requisitos podem ser compreendidos como declarações que expressam uma necessidade ou uma restrição. No desenvolvimento de software, existem diversos tipos de requisitos com os quais a equipe de desenvolvimento precisa lidar. Esse processo tem início na compreensão do porquê o produto está sendo desenvolvido, ou seja, no entendimento dos requisitos de negócio. Com isso, iniciam os refinamentos, até que se consiga identificar exatamente o que a equipe de desenvolvimento precisa implementar. Acompanhe o relacionamento entre os diversos níveis de requisitos neste Infográfico. Você poderá ver a relação entre os requisitos de mais alto nível, se são funcionais ou não funcionais. CONTEÚDO DO LIVRO Um dos pontos mais cruciais para o desenvolvimento de software com qualidade se refere as atividades relacionadas aos requisitos.Exigências mal compreendidas e mal especificadas são a causa de diversos problemas nos projetos de software, desde o não cumprimento de prazos e orçamentos, até a entrega de produtos que não atingem os objetivos inicialmente pretendidos. Milhares de dólares são desperdiçados no mundo em projetos que falham em entregar um produto que agregue efetivamente valor ao negócio. No capítulo Requisitos de software, do livro Engenharia de requisitos, base teórica desta Unidade de Aprendizagem, você compreenderá de forma mais aprofundada os requisitos e como eles são categorizados. Conhecerá os critériospara um bom requisito e para um bom conjunto de requisitos, contribuindo para produtos de software cada vez melhores. Também aprenderá questões importantes na priorização dos requisitos. Boa leitura. ENGENHARIA DE REQUISITOS Sheila Reinehr Requisitos de software Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Classificar os requisitos de um projeto de software. � Priorizar os requisitos em um projeto de software. � Aplicar critérios de qualidade para avaliar a qualidade dos requisitos de software. Introdução Produtos de software fazem parte do nosso dia a dia em praticamente todas as atividades que realizamos, desde as mais simples até as mais sofisticadas. Empresas de todos os setores também dependem fortemente de produtos de software, que são utilizados tanto para a realização de atividades produtivas quanto para as de controle e gestão. Quando um software falha, seus transtornos são sentidos imediatamente e impactam na forma como as atividades cotidianas de empresas e indivíduos são realizadas. Uma das etapas do ciclo de desenvolvimento de software que tem o maior potencial de causar danos futuros ao projeto e ao produto final em si é a engenharia de requisitos. Quando não compreendemos ade- quadamente o que deve ser construído, falhamos para estimar prazos e recursos, gerando prejuízos financeiros para o projeto. Mais importante do que isso, uma falha na compreensão dos requisitos pode se propagar para o restante das atividades do desenvolvimento, gerando produtos que não satisfazem as necessidades e que podem, inclusive, gerar danos físicos ou levar à perda de vidas. Sabemos, no entanto, que os recursos para o desenvolvimento não são infinitos e a velocidade do mercado exige que novos produtos ou funcionalidades sejam lançados cada vez mais rápido. Então como fazer para equilibrar o tempo disponível para o desenvolvimento com a quali- dade exigida do produto final? O primeiro passo é garantir bons requisitos, de modo que a agilidade possa ser acompanhada de qualidade. Neste capítulo você vai estudar os diferentes tipos de requisito e quais os desdobramentos dessas categorias. Verá também como os requisitos podem ser priorizados em função de suas características e das caracterís- ticas do contexto. Por fim, vai ler sobre como aplicar critérios para analisar a qualidade dos requisitos, para que possam contribuir de forma efetiva para a qualidade das próximas etapas do desenvolvimento de software. 1 Tipos de requisitos de software Inicialmente, precisamos definir o que é requisito. Inúmeras definições podem ser encontradas e optamos, neste livro, por aderir ao Glossário padrão de ter- minologia de engenharia de software do Institute of Electrical and Electronic Engineers (IEEE, 1990) que define requisito como: 1. Uma condição ou capacidade necessária para um usuário resolver um problema ou alcançar um objetivo. 2. Uma condição ou capacidade que deve ser atendida ou tida por um sistema ou componente do sistema para satisfazer a um contrato, padrão, especificação ou outro documento formalmente imposto. 3. Uma representação documentada de uma condição ou capacidade con- forme estabelecido em 1 e 2. Ao olhar mais detidamente os termos envolvidos nessa definição, você percebe que os principais aspectos dos requisitos estão cobertos: foco no problema que a solução deve resolver; foco na satisfação a uma imposição (que pode, por exemplo, ser uma legislação); e, finalmente, foco na represen- tação documentada. Note ainda que essa definição não direciona para um método específico de desenvolvimento, uma vez que não especifica “como”, mas sim “o quê”. Outra forma de entender o que é requisito é se apoiar na definição de Sommerville e Sawyer (1997), que estabelecem que requisitos são a especifi- cação do que precisa ser implementado, são descrições de como o sistema deve se comportar, ou são uma propriedade ou atributo do sistema. Os requisitos podem, por exemplo, ser uma restrição no processo de desenvolvimento do sistema. Aqui temos o conceito de requisito do processo, que será tratado posteriormente neste capítulo. Requisitos de software2 O termo requisito tem diversas interpretações diferentes na engenharia de software. Cada autor apresenta uma forma diferente de classificar os requisitos. Pohl e Rupp (2015) classificam os requisitos de acordo com as definições do Quadro 1. Fonte: Adaptado de Pohl e Rupp (2015). Tipo do requisito Definição Requisito funcional É um requisito que se refere a um resultado de comportamento que deve ser provido por uma funcionalidade do sistema. Requisito de qualidade É um requisito que pertence a uma preocupação com a qualidade que não é coberta pelos requisitos funcionais. Restrição É um requisito que limita o espaço da solução além do que é necessário para atender aos requisitos funcionais e requisitos de qualidade. Quadro 1. Tipos de requisitos de acordo com Pohl e Rupp (2015) Um requisito funcional é, como o próprio nome diz, uma funcionalidade requerida pelos stakeholders para cumprir algum objetivo de negócio. Repre- senta o que os desenvolvedores deverão implementar para que os usuários possam realizar as suas atividades. Geralmente, os requisitos funcionais são expressos em frases do tipo “o sistema deve”. Por exemplo: “O sistema deve permitir que o usuário pague com cartão de débito ou crédito”. Os requisitos de qualidade se referem a como o software vai operar sob determinadas circunstâncias e, geralmente, estão relacionados a questões como desempenho, disponibilidade, usabilidade, portabilidade, escalabilidade etc. Eles também são chamados de requisitos não funcionais. É comum que os requisitos não funcionais sejam negligenciados no início do projeto — e aí reside um grande problema, pois eles, geralmente, têm forte impacto sobre a arquitetura da aplicação, e são os requisitos mais difíceis de se retificar posteriormente. Para conseguirmos atender a um requisito específico de desempenho, por exemplo, é necessário fazer escolhas arquite- turais que darão suporte a esse requisito. Se isso não for planejado em tempo de projeto (design), será muito difícil corrigir depois que a implementação estiver avançada. 3Requisitos de software As restrições são consideradas como os requisitos sobre os quais a equipe de desenvolvimento não tem gestão. Eles não são implementados no produto de software, mas influenciam a forma como o produto será implementado. Geralmente, relacionam-se com as escolhas sobre tecnologias (hardware, ambientes, linguagens de programação etc.) e processos de desenvolvimento (ciclo de vida, métodos, procedimentos de gestão etc.), além de restrições do próprio projeto que gera o produto (prazos, custos, recursos etc.). As restrições são também comumente chamadas de requisitos de processo e requisitos de projeto. Wiegers e Beatty (2013) utilizam uma visão um pouco diferente, incluindo, além dos tipos em si, o nível de abstração dos requisitos, conforme você pode ver no Quadro 2. Termo Definição Requisito de negócio Um objetivo de alto nível de negócio da organização que constrói um produto ou de um cliente que o adquire. Regra de negócio Uma política, um guia, um padrão, uma regulamentação que define ou restringe algum aspecto de negócio. Não é um requisito do software em si, mas a origem de diversos tipos de requisitos de software. Restrição Uma restrição que é imposta sobre as escolhas disponíveis para o desenvolvedor para o projeto (design) e construção de um produto. Requisito de interface externa Uma descrição de uma conexão entre um sistema de software e um usuário, outro sistema de software ou um dispositivo de hardware. Característica (feature) Uma ou mais capacidades do sistema logicamente relacionadas que fornecem valor para um usuário e são descritas por um conjunto de requisitos funcionais. Requisito funcional Uma descrição de um comportamentoque o sistema deve exibir sob condições específicas. Requisito não funcional Uma descrição de uma propriedade ou característica que o sistema deve exibir ou uma restrição que ele deve respeitar. Quadro 2. Tipos de requisitos de acordo com Wiegers e Beatty (2013) (Continua) Requisitos de software4 Fonte: Adaptado de Wiegers e Beatty (2013). Termo Definição Atributo de qualidade Um tipo de requisito não funcional que descreve um serviço ou característica de desempenho de um produto. Requisito de sistema Um requisito de alto nível para um produto que contém múltiplos subsistemas, que pode ser todo de software ou de software e hardware. Requisito de usuário Um objetivo ou tarefa que classes específicas de usuários devem ser capazes de executar com um sistema ou um atributo de produto desejado. Quadro 2. Tipos de requisitos de acordo com Wiegers e Beatty (2013) (Continuação) De acordo com a visão de Wiegers e Beatty (2013), os requisitos de negó- cio estão mais diretamente ligados aos motivos pelos quais um software está sendo desenvolvido, ou seja, quais são os objetivos de negócio que se deseja atingir e qual o valor que esse produto agregará ao negócio. Geralmente, são providos pelo patrocinador, executivos da organização ou pelo pessoal de produto (gerência de marketing, por exemplo). Os requisitos de negócio são como grandes objetivos que todos precisam estar de acordo, pois serão a base da maioria das decisões futuras sobre o projeto e até mesmo a priorização das entregas. Com base nos requisitos de negócio também serão avaliadas as soli- citações de mudanças que certamente surgirão ao longo do desenvolvimento. Embora pareça bastante óbvio que um projeto deva ser iniciado de forma alinhada aos objetivos de negócio, nem sempre isso acontece, pois, muitas vezes, a visão sobre esse relacionamento não é muito clara. Como consequência, a equipe técnica pode ter que lidar com visões conflitantes entre os diversos stakeholders, o que pode ter impacto nas atividades de desenvolvimento e no resultado final. Outro efeito colateral possível é que a equipe tente abranger as visões de todos os possíveis stakeholders, deixando de focar naqueles que são mais relevantes, levando o produto a abranger um escopo muito maior do que o inicialmente previsto. Discutiremos mais esse tópico nas próximas seções. 5Requisitos de software Exemplos de benefícios quantificáveis financeiramente sob a ótica do negócio: � incrementar as vendas em 25% em 6 meses; � aumentar a quantidade de engajamentos na página da marca em 15% nos pró- ximos 3 meses; � reduzir os gastos com vendedores presenciais em 40% até o final do próximo ano. Exemplos de benefícios não financeiros podem incluir: � aumentar o índice de satisfação dos clientes em 10% no próximo trimestre; � receber no máximo 10 chamados por mês no service desk após 3 meses da im- plantação do produto. Como se pode observar nos quadros anteriores, existem formas diferen- tes de classificar os requisitos, mas, basicamente, podemos considerar que existem requisitos que são do produto de software em si, ou seja, que serão construídos pela equipe de desenvolvimento e farão parte do produto entregue; e existem requisitos que não são do produto, ou seja, fazem parte do projeto ou do processo. Os requisitos que são do produto, podem ser funcionais (o que o software deve fazer) ou não funcionais (como o software deve fazer). Os requisitos de projeto e de processo são sempre não funcionais. Outro conceito importante é o de requisito de sistema. Embora, na maio- ria das empresas, o termo sistema seja usado para designar um produto de software, seu conceito é mais amplo do que isso. Entende-se por sistema, a composição de hardware, software e processos. Portanto, requisitos de sis- tema são requisitos de mais alto nível, que devem ser atendidos pelo produto como um todo, e o requisito de software se refere ao requisito do sistema que é alocado ao componente de software. Isso se torna particularmente importante quando falamos de sistemas ciberfísicos (CPS, cyber-phisical systems), cuja composição envolve a parte física (ambiente, sensores, atuadores) e a parte ciber (software). Esse é o caso, por exemplo, das funcionalidades de park assist (estacionamento automático) nos automóveis de luxo. Um requisito de sistema poderia ser: “O sistema deve buscar uma vaga para estacionar o veículo”. Esse requisito do sistema envolve elementos físicos (sensores para detectar espaços vazios) e elementos de software (para identificar se o carro cabe naquele espaço). Requisitos de software6 As normas da ISO oferecem um bom suporte para todos os processos relacionados a requisitos: � Para mais detalhes sobre processos relacionados a requisitos de sistema, uma boa dica é olhar a norma internacional ISO/IEC 15288:2015, Systems and Software Engineering — Systems Lyfe Cycle Processes. Nela é possível identificar o processo de definição de requisitos de sistema, que estabelece as atividades e os resultados esperados quando se executa o processo. � Para mais detalhes sobre processos relacionados aos requisitos de software, você pode usar a norma internacional ISO/IEC/IEEE 12207:2017, Systems and Software Engineering — Software Lyfe Cycle Processes. Procure pelos processos de definição de requisitos de sistema/software. Embora essa norma seja dedicada aos processos de software, ela trata os requisitos de forma mais ampla, incluindo requisitos de sistema. � Para mais detalhes sobre requisitos de forma mais ampla, consulte a norma interna- cional ISO/IEC 29148:2018, Systems and Software Engineering — Lyfe Cycle Processes — Requirements Engineering. Ela inclui mais detalhes sobre como implementar os processos que estão descritos nas duas normas anteriores. É importante compreendermos adequadamente esses diferentes tipos de requisitos, pois cada um deles será desdobrado em um artefato diferente do ciclo de vida. Os requisitos relacionados ao produto farão parte de um docu- mento de especificação de requisitos (ou artefato similar, como cartões com histórias de usuário nos métodos ágeis), enquanto os requisitos de processo e de projeto serão parte do plano de projeto (ou artefato que tenha função similar). Já requisitos de sistema se desdobrarão em requisitos relacionados à parte física (hardware) e requisitos relacionados à parte de software, que podem estar em um mesmo artefato, mas que se desdobrarão em implementações distintas. 2 Priorização de requisitos Uma das maiores causas de fracassos em projetos está relacionada ao seu tamanho. Quanto maior o projeto, maiores são as chances de ele não atingir suas metas de prazo, custo, escopo e qualidade. Uma forma de minimizar esses efeitos é dividi-lo em partes menores e mais facilmente gerenciáveis. Esse é o princípio que foi adotado pelos modelos de ciclo de vida iterativos e incrementais e, mais recentemente, pelas metodologias ágeis, que preveem a divisão de trabalho em sprints ou iterações, com durações curtas, de, 7Requisitos de software no máximo, um mês. Dessa forma, os requisitos podem ser conhecidos logo no início, mas eles serão detalhados à medida que forem sendo priorizados para a alocação em uma entrega. A forma de priorizar os requisitos vai depender do contexto em que o projeto está inserido e das próprias características do produto e da tecnologia envolvida. Alguns dos fatores que podem ser usados na priorização envolvem, mas não estão restritos a: � Potencial de valor a ser agregado ao negócio pelo requisito: requi- sitos que agregam mais valor ao negócio geralmente são alocados às primeiras entregas, enquanto requisitos de menor valor são alocados a versões posteriores. � Dependência do requisito em relação a outros requisitos: muitas vezes um requisito não pode ser implementado isoladamente, requerendo que sejam priorizados outros requisitos que dão suporte a ele, na mesma versão do produto. � Análise de requisitosimplícitos que podem estar invisíveis: no mo- mento da priorização de requisitos, pode ser que requisitos implícitos que estavam invisíveis em um primeiro momento sejam identificados e precisem ser priorizados juntamente com o requisito principal. Isso é muito comum, por exemplo, nos requisitos de segurança de acesso, que podem implicar em uma série de requisitos de apoio (que podem até mesmo virar um subsistema). � Experiência com a tecnologia por parte da equipe do projeto: a falta de experiência da equipe de desenvolvimento com a tecnologia pode levar à priorização de requisitos que não sejam exatamente os que geram mais valor ao cliente, mas sim aqueles que possibilitam o aprendizado mais rápido e com menor risco para o projeto como um todo. � Experiência no domínio de aplicação por parte da equipe: analoga- mente ao anterior, a falta de experiência da equipe com o domínio de aplicação requer cuidados redobrados na priorização, especialmente, quando houver o risco de a equipe subestimar a complexidade de um requisito em função de sua falta de experiência com o domínio de negócio. Nesses casos, a proximidade com o usuário, cliente ou seus representantes é fundamental. � Relacionamentos com outros sistemas (hardware ou software): quando o software implicar em relacionamentos com outros softwares ou com hardware, na forma de um sistema, é necessário que as dependências Requisitos de software8 entre os requisitos sejam claramente explicitadas, de modo que o de- senvolvimento de requisitos dependentes possa ser realizado de forma síncrona e não isolada. � Demandas de implementações para atender a determinações de ordem legal ou regulatória: é comum que demandas de ordem legal ou que sejam demandadas por órgãos regulamentadores tenham datas específicas para entrar em vigor. Requisitos que implementam essas necessidades precisam ser priorizados em versões compatíveis com as datas demandadas. � Requisitos que não possuem alternativas manuais aceitáveis: há casos em que o procedimento manual para a realização da atividade de negócio é oneroso e sujeito a falhas. Nesses casos, requisitos que substituem esses processos são priorizados em detrimento de outros, cujos procedimentos manuais sejam menos onerosos ou representem menos riscos ao negócio. A priorização pode ser feita por um único representante do usuário, como um product owner (PO) do método Scrum, ou por um grupo de stakeholders. Isso pode acontecer virtualmente, usando ferramentas de colaboração, ou em workshops de priorização presenciais. A forma vai depender da quantidade de stakeholders envolvidos e do nível de conflito que possa haver entre os requisitos de produto a serem priorizados e as restrições do projeto/processo. Quanto mais críticos forem esses conflitos, maior a necessidade de se utilizar procedimentos colaborativos de decisão. 3 Critérios de qualidade de um bom requisito Não importa o modelo de ciclo de vida ou o processo de desenvolvimento utilizado, um requisito mal compreendido e mal documentado será sempre um problema para o projeto que envolve software. Por esse motivo, é im- prescindível que os requisitos, independentemente de sua categoria, estejam claramente identificados, de modo que as atividades que dependem deles possam ser realizadas com sucesso. Como podemos estimar adequadamente o esforço para a implementação de um requisito se sua descrição está ambígua e imprecisa? Como evitar o retrabalho no desenvolvimento se o requisito não foi detalhado de forma suficiente? Como prever os testes necessários se não houver detalhes para isso? 9Requisitos de software Primeiramente, é importante não confundir um requisito bem especificado com uma etapa de requisitos infinita, que se perde nos mínimos detalhes e que não avança na entrega de valor para o cliente. Aqui é ressaltada a importância de termos o requisito especificado de forma clara e em nível de detalhe compatível com o contexto. Por contexto entendemos as variáveis que podem afetar essa decisão, como experiência da equipe de desenvolvimento com a tecnologia e com a área de negócio, criticidade do produto em desenvolvimento, impacto dos possíveis erros que possam ser derivados (software de missão crítica, por exemplo) e nível de envolvimento dos stakeholders. É comum achar que, ao utilizar métodos ágeis, não é necessário gastar muito tempo com os requisitos, pois eles vão, invariavelmente, mudar. Na verdade, temos sim que dispender todo o esforço necessário para termos certeza de que compreendemos adequadamente cada demanda que vai para desenvolvimento, do contrário con- tribuiremos, entre outras coisas, para o aumento da insatisfação do cliente com o produto entregue. O que acontece em métodos ágeis como o Scrum é que o product backlog tem itens em níveis diferentes de maturidade. Os itens que já estão sendo priorizados para serem produzidos na próxima sprint devem estar maduros o suficiente para serem estimados, alocados à sprint e implementados. Haverá, por outro lado, itens menos maduros no product backlog, que serão detalhados no momento oportuno, conforme a sua prioridade. De acordo com Schwaber e Sutherland (2018), itens de alta prioridade no product backlog costumam ser mais claros e detalhados do que itens de prioridade mais baixa. Estimativas mais precisas são feitas com base na maior clareza e no maior nível de detalhe; quanto menos prioritário, menos detalhado. Note que os criadores do Scrum ressaltam que os itens menos prioritários estarão menos detalhados, mas no momento em que se tornarem prioritários, terão que estar claros e detalhados. De acordo com a Norma Internacional ISO/IEC/IEEE 29148 (ISO/IEC/ IEEE, 2018), um requisito bem especificado contém um ou mais destes itens: � deve ser atendido ou tido por um sistema para resolver um problema, atingir um objetivo ou tratar de uma preocupação de um stakeholder; � é qualificado por condições mensuráveis; Requisitos de software10 � é limitado por restrições; � define o desempenho do sistema quando usado por um stakeholder específico ou é a capacidade correspondente de um sistema, mas não a capacidade de um usuário, operador ou outro stakeholder; � pode ser verificado (isto é, a realização de um requisito no sistema pode ser demonstrada). Como documentar um requisito Diversas são as formas de documentar um requisito, incluindo linguagem natural, tabelas, planilhas, diagramas, vídeos, áudios, fotos etc. Neste capí- tulo, vamos nos concentrar na forma escrita, usando a linguagem natural. Ela pode ser utilizada tanto para os requisitos funcionais quanto para os não funcionais, sejam eles de produto, sejam de projeto ou processo. Serve também para especificar os requisitos ou objetivos de negócio, que vão nortear todo o desenvolvimento. As demais formas podem funcionar como um apoio ou complemento ao que está descrito em linguagem natural. A primeira preocupação é que a linguagem natural apresenta ambiguidades que podem comprometer a precisão dos requisitos e a sua compreensão pelo público-alvo. Escrever requisitos não é como escrever qualquer outro tipo de texto, de ficção ou não. Não há uma forma de ensinar a escrever um bom requisito, pois isso vem com a experiência, mas, algumas dicas podem ajudar a começar: � Ótica da escrita: lembre-se que um requisito tem que ser visto sob a ótica de quem lê o documento, e não sob a ótica de quem escreve. Muitas vezes o requisito está completamente claro para quem escreveu, mas gera dúvidas para quem lê. Nesse caso, ele precisa ser revisado. � Tamanho das frases: frases longas dificultam a leitura e podem levar a interpretações incorretas. Dê preferência a frases curtas e diretas. Releia algumas vezes e elimine qualquer palavra que não agregue compreensão ao conteúdo. � Correção na escrita: os requisitos constituem um documento técnico e devem, portanto, seguir as normas da língua portuguesa escrita. Isso quer dizer que devem estarcorretos gramaticalmente e sem erros de digitação. Inclua aí uma preocupação extra com a pontuação (que pode modificar completamente o sentido da frase). 11Requisitos de software � Uso da voz ativa: dê preferência para frases usando a voz ativa (por exemplo, “o sistema deve prover uma função de cálculo do imposto”) em vez da voz passiva (por exemplo “uma função de cálculo do imposto deve ser provida”). Misturar voz passiva e ativa também torna o texto difícil de ler. � Uso da forma positiva: também é preferível usar a forma positiva e evitar a negativa do tipo “não deve”. Alguns chamam essa forma de requisito inverso, mas ela deve ser evitada. Frases com muitas negativas também geram complexidade no entendimento. Tudo o que precisamos ler duas vezes para entender não está bem escrito. � Termos ambíguos: há termos que, naturalmente, levam a ambiguidades e indeterminações, e devem ser removidos de qualquer especificação de requisitos, como alguns, muitos, poucos, melhor, pior, robusto, adequado, rápido, amigável. Também há expressões que dificultam a precisão, como quando apropriado, quando possível, quando aplicável, se possível, se necessário. � Tempo verbal: o tempo verbal empregado pode trazer um signifi- cado adicional implícito ao requisito, e isso nem sempre é desejável. Por exemplo: “o sistema deve” sugere que é um requisito obrigatório, mas o “sistema deveria” sugere uma interpretação de que o sistema poderia não fazer, implicando em um requisito menos prioritário. Ques- tões de prioridade não devem ser tratadas pelo tempo verbal, mas sim por atributos de prioridade específicos, uma vez que podem mudar ao longo do tempo. � Acrônimos e jargões: acrônimos (siglas) e jargões também consti- tuem um ponto frágil na especificação de requisitos. O recomendado é manter um glossário compartilhado entre todos os membros do projeto (internos e externos), de modo que não sejam usados termos de forma inconsistente. � O que e não como: lembre-se de que, idealmente, os requisitos devem definir o que deve ser feito, e não como deve ser implementado. Requisitos de software12 As normas internacionais da ISO (International Organization for Standardization), no Brasil editadas pela ABNT (Associação Brasileira de Normas Técnicas), fazem uma clara distinção entre os itens que são escritos com o tempo verbal deve (shall) e com o tempo verbal deveria (should). As cláusulas de uma norma que possuem o verbo deve são obrigatórias e, no caso de normas certificadoras, serão requeridas pelo auditor como parte do processo de auditoria para concessão do certificado. Já as cláusulas que estão descritas com o verbo deveria não são exigidas, e a empresa pode opcionalmente não implementá-las (ISO/IEC/IEEE, 2018). Uma forma para a escrita dos requisitos é fazê-la em três etapas: 1. Escrever a primeira versão. 2. Realizar a leitura crítica dessa versão se colocando no lugar do leitor. 3. Solicitar a revisão de um colega, a chamada revisão por pares. Com o tempo, a escrita vai se tornando mais natural e os primeiros erros não serão mais cometidos, especialmente se eles, anteriormente, levaram a alguma consequência indesejada, como o retrabalho de implementação por ambiguidade nos requisitos. Leve a sério os feedbacks recebidos dos seus pares e elabore seu próprio checklist para autorrevisão dos requisitos — isso vai ajudá-lo a aprimorar essa habilidade ao longo do tempo. Características de um bom requisito Alguns critérios de qualidade que podem ser utilizados para nortear a escrita e a verificação dos requisitos estão listados a seguir, baseados nas recomen- dações de Wiegers e Beatty (2013) e da Norma Internacional ISO/IEC/IEEE 29148 (ISO/IEC/IEEE, 2018). Eles podem ser organizados no formato de um checklist, a ser aplicado para analisar cada requisito antes de sua liberação para a equipe de implementação, ou mesmo antes de liberá-los para a revisão por pares. O Quadro 3 apresenta as características de um bom requisito. 13Requisitos de software Fonte: Adaptado de Wiegers e Beatty (2013) e ISO/IEC/IEEE (2018). Atributo Definição Completo O requisito está especificado de forma completa e possibilita que o desenvolvedor o implemente. Correto O requisito reflete o que o usuário, cliente ou seus representantes desejam. Único O requisito descreve uma única capacidade, característica, restrição ou atributo de qualidade. Viável O requisito é viável técnica e financeiramente para ser implementado, de acordo com as restrições do projeto. Necessário O requisito tem um motivo de existir, que é representado pelo seu relacionamento com uma fonte de informação e com um objetivo de negócio. Priorizado O requisito tem uma prioridade atribuída para que possa ser alocado a uma versão do software. Não ambíguo O requisito não contém ambiguidades que levem os stakeholders a interpretá-lo de forma diferente. Verificável O requisito pode ser verificado posteriormente à sua implementação. Conforme O requisito está em conformidade com os padrões de especificação estabelecidos, se houver. Quadro 3. Características de um bom requisito Características de um bom conjunto de requisitos Como você pode observar no quadro anterior, cada requisito, individual- mente, deveria atender às características listadas para ser considerado um bom requisito, apto a servir de base para as atividades seguintes do ciclo de desenvolvimento. Adicionalmente, existem características que precisam ser consideradas para o conjunto de requisitos de modo que a solução possa entregar o valor esperado pelos stakeholders, respeitando as suas restrições. Entende-se por solução não necessariamente o produto completo, mas uma versão entregue do produto. Requisitos de software14 No Quadro 4, compilado a partir das definições de Wiegers e Beatty (2013) e da Norma Internacional ISO/IEC/IEEE 29148 (ISO/IEC/IEEE, 2018), podemos observar as características de um bom conjunto de requisitos. Diferentemente do quadro anterior, vemos que aqui aparecem atributos que são analisados para um ou mais requisitos. Por exemplo, analisar se o conjunto de requisitos está completo se refere a buscar pelos requisitos implícitos ou invisíveis, por exemplo. Pode ser que determinado requisito só possa ser implementado com a preparação de algum tipo de infraestrutura, como a existência de cadastros prévios, por exemplo. Muitas vezes, esses cadastros não são explicitamente identificados pelos stakeholders, por acharem que já estavam subentendidos. Outro aspecto importante é a viabilidade de um requisito, quando anali- sado em conjunto com os demais. Podemos ter, por exemplo, um requisito de desempenho (tempo de resposta) que seja incompatível com um requisito de processo (utilizar os equipamentos disponíveis atualmente). Fonte: Adaptado de Wiegers e Beatty (2013) e ISO/IEC/IEEE (2018). Atributo Definição Completo O conjunto de requisitos está completo. Consistente Os requisitos são consistentes entre si e com os requisitos de mais alto nível dos quais são originários, não apresentando conflitos. Modificável Cada requisito tem uma identificação única que permite que ele seja modificado quando necessário. Compre- ensível O conjunto de requisitos está escrito de forma que é possível identificar claramente o que é esperado do software no ambiente do qual ele faz parte. Viável O conjunto de requisitos pode ser executado dentro das restri- ções estabelecidas (técnicas, de custo e prazo), dentro de riscos aceitáveis. Capaz de ser validado O conjunto de requisitos pode ser validado quanto às necessi- dades dos stakeholders dentro das restrições (como custo, prazo, técnica, conformidade com regulamentações e legislações). Rastreável O conjunto de requisitos pode ser rastreado às suas origens (backward) e também aos demais elementos, como requisitos derivados, elementos de design, código e casos de teste (forward). Quadro 4. Características de um bom conjunto de requisitos 15Requisitosde software Nível de detalhamento dos requisitos Uma pergunta difícil de responder é sobre quão detalhados devem ser os requisitos. Isso vai depender de alguns fatores relacionados ao produto de software em si e ao contexto em que ele está sendo desenvolvido, conforme você pode acompanhar a seguir (WIEGERS; BEATLY, 2013). � Mais detalhes: ■ o trabalho está sendo executado para um cliente externo; ■ o desenvolvimento e/ou o teste serão terceirizados; ■ os membros do projeto estão geograficamente dispersos; ■ os testes de sistema serão realizados com base nos requisitos; ■ estimativas precisas são necessárias; ■ a rastreabilidade entre os requisitos é necessária. � Menos detalhes: ■ o trabalho está sendo realizado internamente para a sua empresa; ■ os clientes estão bastante envolvidos; ■ os desenvolvedores possuem uma grande experiência no domínio; ■ existem precedentes, como no caso em que uma aplicação está sendo substituída; ■ um pacote de solução será utilizado. Em resumo, se a equipe é experiente no domínio do negócio e os clientes estão próximos e acessíveis, o nível de detalhamento dos requisitos pode ser menor, pois os riscos envolvidos também serão menores. No entanto, quando a equipe não é tão experiente no domínio do negócio, os riscos são maiores e, portanto, um nível maior de detalhamento dos requisitos é necessário. IEEE. IEEE Std 610.12-1990: IEEE Standard Glossary of Software Engineering Terminology. Los Alamitos: IEEE Computer Society Press, 1990. ISO/IEC/IEEE. ISO/IEC/IEEE 12207:2017: systems and software engineering: software life cycle processes. Switzerland: ISO, 2017. ISO/IEC/IEEE. ISO/IEC/IEEE 15288:2015: systems and software engineering: systems life cycle processes. Switzerland: ISO, 2015. Requisitos de software16 ISO/IEC/IEEE. ISO/IEC/IEEE 29148:2018: systems and software engineering: life cycle processes: requirements engineering. Switzerland: ISO, 2018. POHL, K.; RUPP, C. Requirements engineering fundamentals: a study guide for the certified professional for requirements engineering exam, foundation level, IREB Compliant. 2. ed. Santa Barbara: Rock Nook, 2015. SCHWABER, K.; SUTHERLAND, J. Guia do SCRUM: um guia definitivo para o SCRUM: as regras do jogo. [S. l.], 2018. Disponível em: https://www.scrumguides.org/index. html. Acesso em: 30 dez. 2019. SOMMERVILLE, I.; SAWYER, P. Requirements engineering: a good practice guide. Chichester: John Wiley & Sons, 1997. WIEGERS, K. E.; BEATTY, J. Software requirements. 3. ed. Redmond: Microsoft Press, 2013. Leituras recomendadas BOURQUE, P.; FAIRLEY, R. (ed.). SWEBOK: guide to the software engineering body of knowledge version 3. Washington: IEEE Computer Society, 2014. PRESSMAN, R.; MAXIM, B. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016. WIEGERS, K. More about software requirements: thorny issues and practical advices. Redmond: Microsoft Press, 2006. 17Requisitos de software DICA DO PROFESSOR Os requisitos constituem uma parte crucial do desenvolvimento de um produto de software, pois é partir deles que todas as demais atividades são desdobradas. Requisitos incompletos, ambíguos, inconsistentes ou ausentes são a principal causa do retrabalho em projetos de software. A declaração do requisito, escrita em linguagem natural, pode trazer ambiguidades, que levam à interpretação incorreta do requisito, o que pode gerar falhas na classificação e, principalmente, nas etapas posteriores do desenvolvimento, como a implementação e os testes. Veja, nesta Dica do Professor, o que é a ambiguidade nos requisitos de software e como evitá-la. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS Frank é um analista de requisitos que acabou de coletar as definições com os stakeholders do projeto e está com dúvidas sobre a classificação correta: 1) Selecione a alternativa que representa as categorias dos requisitos: A) Processo, processo, projeto, produto, produto, processo. B) Projeto, processo, projeto, produto, produto, processo. C) Processo, projeto, produto, produto, produto, processo. D) Projeto, processo, processo, produto, produto, projeto. E) Processo, projeto, processo, produto, produto, projeto. Manuela é analista de requisitos de um projeto para desenvolvimento de um sistema de apoio para a venda de enfeites de Natal pela Internet. O seu cliente mandou a seguinte mensagem: 2) Com base no texto, ela extraiu os seguintes requisitos: Sobre esses requisitos, é correto afirmar que: A) O conjunto de requisitos listado está completo e correto, portanto, os requisitos podem seguir para a próxima fase do processo de desenvolvimento. B) O conjunto de requisitos listado está completo, mas há alguns requisitos ambíguos, e por isso os requisitos não podem seguir para a próxima fase do processo de desenvolvimento. C) o conjunto de requisitos listado não está completo e por isso não pode seguir para a próxima fase do processo de desenvolvimento D) O conjunto de requisitos não está completo e os requisitos estão todos ambíguos, por isso não podem seguir para a próxima fase do processo de desenvolvimento. E) O conjunto de requisitos listado não está completo, mas os requisitos corretos podem seguir para a próxima fase do processo de desenvolvimento. 3) Uma das principais medidas do sucesso de um software é o grau no qual ele atende aos objetivos e requisitos para os quais foi construído. De forma geral, a engenharia de requisitos de software é o processo de identificar todos os envolvidos, descobrir seus objetivos e necessidades e documentá-los de forma apropriada para análise, comunicação e posterior implementação. Com relação à engenharia de requisitos de software, analise as seguintes afirmativas: I) As descrições das funções que um sistema deve incorporar e das restrições que devem ser satisfeitas constituem os requisitos para o sistema. II) Requisitos funcionais descrevem restrições sobre as funções oferecidas, tais como restrições de tempo e de uso de recursos. III) Os requisitos não funcionais apontam as funções que o sistema deve fornecer e como o sistema deve se comportar em determinadas situações. A) As alternativas I, II e III estão corretas. B) As alternativas I e III estão corretas. C) As alternativas II e III estão corretas. D) Apenas a alternativa I está correta. E) Apenas a alternativa II está correta. 4) Analise os requisitos apresentados a seguir: I) Todas as opções do sistema de vendas pela Web devem ser acessadas com no máximo 3 cliques do mouse. II) O sistema de log de transações deverá listar todos os usuários logados simultaneamente nas aplicações SWIT e DERT. III) O orçamento máximo a ser gasto para o desenvolvimento do sistema de controle estatístico de qualidade deverá ser de R$ 20.000,00. IV) O relatório de bons clientes deverá apresentar todos os clientes com compras mensais superiores a R$ 5.000,00. V) A atualização de 100 mil registros de vendas não deverá consumir mais do que 5 segundos de CPU. A) Os requisitos I e V são não funcionais; os requisitos II e IV são funcionais; o requisito III é de projeto. B) Os requisitos I e V são funcionais; os requisitos II e IV são não funcionais; o requisito III é de projeto. C) Os requisitos I e V são funcionais; os requisitos II e IV são nãofuncionais; o requisito III é de processo. D) Os requisitos I e II são não funcionais; os requisitos III e IV são de projeto; o requisito V é funcional. E) Os requisitos I, II, III, IV e V são funcionais. 5) Sobre as categorias de requisitos, avalie as três afirmações abaixo e selecione a alternativa correta: I) A forma de gerenciamento que deve ser utilizada ao desenvolver um software faz referência a um requisito de processo. II) Todos os requisitos de software da categoria produto são do tipo funcional, pois são funcionalidades implementadas. III) Todos os requisitos de software da categoria projeto sãodo tipo funcional, pois são funcionalidades implementadas. A) As alternativas I, II e III estão corretas. B) Apenas a afirmativa I está correta. C) Apenas a afirmativa III está correta. D) Apenas as afirmativas II e III estão corretas. E) Apenas as afirmativas I e III estão corretas. NA PRÁTICA A qualidade dos requisitos é um fator determinante para a qualidade do software que será produzido. Quanto mais tarde se descobrem problemas nos requisitos, mais caro é para consertar. Uma das formas de melhorar a qualidade dos requisitos é conduzir revisões por pares ou reuniões de inspeção formal. Em ambos os casos, os requisitos produzidos por um analista de requisitos ou por uma equipe, são analisados por um ou mais pares, que são também analistas de requisitos, mas que não participaram da especificação. No caso da reunião de inspeção, podem ser envolvidos usuários, clientes ou representantes. Neste Na Prática, você verá como se dá uma inspeção de requisitos em uma equipe. SAIBA MAIS Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Inside a warehouse where thousands of robots pack groceries (dentro de um armazém onde milhares de robôs empacotam mercadorias) Este vídeo apresenta um armazém britânico totalmente automatizado, onde milhares de robôs processam mais de 65.000 pedidos de clientes por semana. Os robôs circulam por um grid automatizado, no qual alguns robôs pegam as mercadorias de dentro de compartimentos para montar o pedido do cliente, enquanto outros abastecem os produtos que vão acabando nos compartimentos. Conteúdo interativo disponível na plataforma de ensino! Diferenças entre requisitos e regras de negócio Neste vídeo, o autor Fabrício Laguna explica, em cerca de 3 minutos, a diferença entre requisitos e regras de negócio. Conteúdo interativo disponível na plataforma de ensino! Entendendo os requisitos Este material vai ajudar você a compreender os principais conceitos envolvidos em requisitos de software. Foque sua atenção nas páginas 131-148, do livro de Roger Pressman e Bruce Maxim, intitulado Engenharia de software – uma abordagem profissional. Verificação de requisitos de software APRESENTAÇÃO Produtos de software fazem parte do cotidiano de todas as pessoas, seja em seu ambiente profissional, seja na sua vida particular. Todos estão tão acostumados com a tecnologia que, na maioria das vezes, nem se dão mais conta da sua presença. Só que essa presença maciça e cada vez mais integrada ao dia a dia impõe diversos desafios para a equipe de desenvolvimento, e um desses desafios diz respeito aos requisitos, que se tornam cada vez mais complexos, à medida que os sistemas também se tornam mais complexos. Para assegurar que o produto entregue atenderá às expectativas dos usuários, as boas práticas da engenharia de requisitos precisam ser utilizadas. Não basta apenas usar a melhor técnica de elicitação de requisitos ou a melhor ferramenta de especificação; é necessário também aplicar as boas práticas de verificação e validação de requisitos. Nesta Unidade de Aprendizagem, você aprenderá a reconhecer a importância da verificação de requisitos de software para o ciclo de desenvolvimento, utilizará checklists de verificação de requisitos funcionais e não funcionais e verá também como criar casos de teste para a verificação de requisitos funcionais e não funcionais. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Reconhecer a importância da verificação de requisitos de software.• Aplicar checklists de verificação de requisitos funcionais e não funcionais de software.• Criar casos de teste para a verificação de requisitos funcionais e não funcionais de software. • DESAFIO Elicitar e representar os requisitos de um produto de software são atividades críticas no processo de desenvolvimento. Se falhas forem cometidas nessa etapa, irão se propagar para o restante das fases e podem ser percebidas apenas quando já for tarde demais e o produto estiver entregue. Erros sempre serão cometidos, pois as atividades de desenvolvimento de software são de natureza cognitiva e, portanto, dependem de pessoas, e pessoas cometem erros. Já que é possível minimizar, mas não eliminar, a introdução de erros, pode-se investir em atividades que evitem a sua propagação. Estas são as atividades de verificação. Você está se tornando um analista de requisitos experiente, e seu gerente pediu sua ajuda para apoiar um colega que está iniciando. O colega definiu a lista de requisitos funcionais e não funcionais para um software que apoiará reuniões remotas, uma demanda que cresceu no mercado devido ao trabalho remoto originado em decorrência da COVID-19. Foram repassados os seguintes requisitos funcionais e não funcionais: Seu gerente lhe pediu que conduza uma revisão por pares usando um checklist que contém três perguntas e que decida se os requisitos podem ser encaminhados para a próxima fase: - Todos os requisitos estão livres de ambiguidade? - Todos os requisitos são verificáveis? - Todos os requisitos são determinísticos? INFOGRÁFICO Uma das formas de garantir a qualidade de um produto de software é inserir procedimentos de verificação em pontos críticos do processo de desenvolvimento. Isso pode ser feito por meio de filtros que são colocados em determinados pontos do ciclo e que ajudam a identificar erros, falhas e omissões antes que eles se propaguem para o restante das fases. Diversas técnicas podem ser utilizadas para isso, como a revisão realizada pelo próprio produtor do artefato, a revisão por pares, as inspeções formais e os testes. Acompanhe, no Infográfico, as etapas para a realização das atividades de verificação que são estabelecidas pela Norma Internacional ISO/IEC 12207:2017(E), que trata dos processos do ciclo de vida de software. CONTEÚDO DO LIVRO Requisitos bem definidos e especificados são a chave para o sucesso de projetos de software. É a partir deles que os desenvolvedores farão o código e os testadores farão os testes. Para garantir que os requisitos estejam adequados para essas fases seguintes, é preciso inserir atividades de verificação, que funcionam como filtros para que os possíveis erros cometidos na etapa de requisitos sejam detectados antes que cheguem ao usuário final. A verificação pode ser compreendida como a atividade que é realizada com o intuito de descobrir defeitos. Elas podem ser realizadas no formato de revisões por pares, que podem ser mais ou menos formais. Revisões mais formais são chamadas de inspeções e têm um formato próprio para acontecer. No capítulo Verificação de requisitos de software, da obra Engenharia de requisitos, você vai aprender a identificar a importância da verificação de requisitos como um instrumento da qualidade de software. Ainda, você vai ver como utilizar um checklist para realizar as atividades de verificação e, por fim, vai aprender a criar um caso de uso a partir dos requisitos. Boa leitura. ENGENHARIA DE REQUISITOS Sheila Reinehr Verificação de requisitos de software Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Reconhecer a importância da verificação de requisitos de software. � Aplicar checklists de verificação de requisitos funcionais e não fun- cionais de software. � Criar casos de teste para a verificação de requisitos funcionais e não funcionais de software. Introdução Todos sabemos que o mercado tem se tornado cada vez mais exigente com relação à qualidade dos produtos de software. Isso se dá em parte porque existe uma grande quantidade de softwares disponíveis para resolver diferentes tipos de problemas do cotidiano. As lojas virtuais oferecem uma infinidade de aplicativos para celular, tanto para iOS quanto para Android, que estão disponíveis a apenas um toque de distância. Assim como é fácil baixare começar a usar, também é fácil desinstalar e escolher outro aplicativo para substituí-lo. Essa intensa exposição à tecnologia na vida pessoal torna os usuários mais exigentes inclusive com os softwares que ele utiliza no trabalho. Nesse ambiente, entretanto, não é tão simples substituir um produto por outro. Não se instala e desinstala um software corporativo, como, por exemplo, um sistema de gestão integrada, com a mesma facilidade com que se substitui um aplicativo para acompanhar exercícios físicos pelo smartwatch. E como garantir que os produtos de software tenham a qualidade esperada e proporcionem uma experiência extraordinária ao usuário? A resposta não é trivial e envolve todas as etapas do ciclo de desenvol- vimento de software, desde as primeiras conversas sobre o escopo do projeto até a entrega de uma versão ou do produto final ao usuário. Não importa que tipo de método estejamos utilizando para desenvolver, o objetivo é o mesmo: fazer uma entrega de qualidade. Diferentemente da manufatura, que emprega muitas etapas automa- tizadas, o desenvolvimento de software é uma atividade essencialmente cognitiva, que apresenta desafios muito mais complexos, pois erros hu- manos podem ser cometidos durante todas as fases. E o que podemos fazer para reduzir os efeitos nocivos desses erros? Utilizar técnicas de verificação e validação ao longo das atividades de todo o ciclo de vida. E isto começa pela etapa de requisitos. Neste capítulo você vai estudar a verificação de requisitos de software e sua importância para o ciclo de desenvolvimento. Vai ver como utilizar checklists de verificação de requisitos funcionais e não funcionais e tam- bém como criar casos de teste para a verificação de requisitos funcionais e não funcionais. 1 Importância da verificação de requisitos de software A engenharia de requisitos é a especialidade da engenharia de software que trata de todos os temas relacionados aos requisitos. Podemos compreender, de acordo com o SWEBOK (Software Engineering Body of Knowledge), que a engenharia de requisitos é “uma forma sistemática de tratar os requisitos” (BOURQUE; FAIRLEY, 2014, documento on-line). Etapas da engenharia de requisitos Ainda de acordo com o SWEBOK (BOURQUE; FAIRLEY, 2014, documento on-line): “A área de conhecimento de Requisitos de Software (KA) preocupa-se com a obtenção, análise, especificação, e validação de requisitos de software bem como o gerenciamento de requisitos durante todo o ciclo de vida do produto de software”. Verificação de requisitos de software2 Vamos relembrar essas etapas referentes à engenharia de requisitos por meio da Figura 1. Considere o semicírculo mais externo como as atividades da engenharia de requisitos e o semicírculo interno como o desenvolvimento em si, ou seja, a implementação. Permeando todo o processo está o gerencia- mento de requisitos. Figura 1. Etapas da engenharia de requisitos. Conforme você pode observar na Figura 1, a primeira etapa se refere à eli- citação de requisitos. A elicitação de requisitos é “[…] o primeiro estágio para construir uma compreensão sobre o problema que o software deve resolver” (BOURQUE; FAIRLEY, 2014, documento on-line). Nela são identificadas as fontes de informação e são selecionadas as técnicas de elicitação mais adequadas, de acordo com o contexto do projeto. Após a seleção, é possível aplicar essas técnicas para obter os requisitos, sejam eles funcionais ou não funcionais. Embora estejamos utilizando a expressão “etapa de elicitação”, é bom lembrar que isso não significa que é necessário que elicitar o conjunto com- pleto de requisitos em um mesmo momento e nem que seja preciso chegar a níveis similares de detalhamento para cada requisito. Pode-se trabalhar de forma iterativa e incremental, como nas sprints dos métodos ágeis, nas quais os requisitos do product backlog vão sendo detalhados à medida que são necessários para alocação à sprint. 3Verificação de requisitos de software A segunda etapa se refere à análise de requisitos, que é o momento em que nos aprofundamos nos requisitos e buscamos identificar inconsistências e conflitos entre os requisitos. Identificamos também as fronteiras do sistema e com quem ele deve interagir. Segundo Vazquez e Simões (2016), o objetivo da elicitação é encontrar as peças do quebra-cabeças e o objetivo da análise é montá-lo. A terceira etapa é a especificação de requisitos. Como o próprio nome sugere é o momento em que nos dedicamos a documentar os requisitos de modo que possam ser utilizados pelas etapas seguintes do desenvolvimento, evitando ambiguidades e retrabalho. O nível necessário de especificação varia de acordo com a criticidade do software para o ambiente onde ele será utilizado, da experiência da equipe desenvolvedora, dos riscos envolvidos etc. Níveis diferentes de especificação podem ser necessários para cada requisito do produto. Em sistemas nos quais o software é apenas um componente da solução, é comum que as especificações sejam mais robustas e complexas, envolvendo diversos tipos de documentos: definição do sistema, especificação de requisitos do sistema e especificação de requisitos do software. Finalmente, a quarta etapa é chamada genericamente de validação de requisitos, embora, na verdade, ela englobe tanto a validação quanto a veri- ficação de requisitos. Verificação e validação são termos diferentes! De acordo com a norma internacional ISO/IEC/IEEE 12207 (ISO/IEC/IEEE, 2017, p. 10–11): � Validação é “a confirmação, por meio do fornecimento de evidência objetiva, que o requisito foi atendido para um uso ou aplicação pretendidos específicos”. � Verificação é a “confirmação, por meio do fornecimento de evidência objetiva, que os requisitos especificados foram atendidos”. Ainda, de acordo com o CMMI-DEV 2.0 (CMMI INSTITUTE, 2018, p. 525), a diferença entre os termos é a seguinte: � Validação “demonstra que a solução vai atender seu uso pretendido no ambiente alvo, isto é, ‘você está construindo a coisa certa’”. � Verificação “endereça que o produto de trabalho ou a solução refletem adequa- damente os requisitos especificados, isto é, ‘você está construindo certo’”. Verificação de requisitos de software4 De acordo com Bourque e Fairley (2014, p. 1-11), [...] os requisitos podem ser validados para assegurar que o engenheiro de software compreendeu os requisitos; é também importante verificar que o documento de requisitos está em conformidade com os padrões da empresa e que ele é compreensível, consistente e completo. É comum dizermos que a verificação analisa se o produto foi construído certo, ou seja, de forma correta; e que a validação analisa se foi construído o produto certo, ou seja, aquele que os stakeholders desejavam (CMMI INS- TITUTE, 2018). De acordo com o modelo CMMI-DEV 2.0 (CMMI INSTITUTE, 2018), a verificação e a validação na engenharia de software envolvem simulação, estudos de rastreabilidade, revisões ou auditorias funcionais, revisões ou auditorias físicas, revisões por pares, demonstrações, protótipos, revisões formais, testes de módulo, regressão e integração de sistema. Finalmente, a próxima etapa se refere ao gerenciamento de requisitos. Nesta etapa vamos nos preocupar com como tratar os requisitos ao longo do seu ciclo de vida e como analisar e gerenciar as solicitações de mudanças que, inevitavelmente, ocorrerão. Neste capítulo vamos nos concentrar na etapa de validação de requisitos, mais especificamente nas atividades de verificação de requisitos. Atividades de validação propriamente ditas não serão tratadas neste capítulo. Importância da verificação de requisitos À medida que os softwares foram se tornando mais complexos, mais inte- grados e mais críticos para todas as atividades cotidianas, mais importante ficou a garantia do seu correto funcionamento. Essa maior proximidade com a tecnologia vem tornando os usuários cada vez mais exigentes. 5Verificação de requisitos de software A grandequestão é que há muitos pontos no ciclo de desenvolvimento nos quais erros que podem levar a falhas gigantescas de software. Isso ocorre porque as atividades envolvidas são de ordem cognitiva. A cada troca de mãos do requisito, ou seja, a cada troca de responsabilidade, um novo defeito pode estar sendo introduzido, como naquela brincadeira infantil do telefone sem fio. Se no início do projeto o analista de requisitos não envolver todos os stakeholders relevantes para atuar como fonte de informação de requisitos, pode ser que um requisito muito importante não seja descoberto e permaneça invisível até as fases mais avançadas, levando ao retrabalho e a custos adicio- nais de desenvolvimento. Esta é a primeira passagem de bastão do requisito, ou seja, é a primeira transição. Ele sai do ambiente dos stakeholders e passa para o ambiente do projeto, via processo de elicitação de requisitos conduzido pelo analista de requisitos. Caso os requisitos, uma vez elicitados, não estejam descritos de forma clara e não ambígua, eles podem ser implementados de forma incorreta. Esta é a segunda passagem de bastão do requisito. Ele sai das mãos do analista de requisitos e passa para as mãos da equipe técnica, que pode ser composta por arquitetos, projetistas e desenvolvedores, que irão projetar a arquitetura da aplicação, as interfaces e desenvolver o código. Por fim, uma terceira passagem de bastão, ou seja, troca de responsabi- lidade, acontece quando a equipe de testes define os casos de teste que irão avaliar se o produto foi construído de acordo com o que estava especificado. Nesse caso o requisito sai das mãos do analista de requisitos e da equipe técnica e vai para as mãos dos testadores. Aqui podem acontecer problemas de interpretação que levam à construção de casos de teste ineficazes para o teste do produto. Não podemos nos esquecer da última troca de bastão, que irá ocorrer quando o produto for implantado no ambiente-alvo e utilizado pelos seus usuários para cumprir as funções para as quais ele foi especificado. Todas essas diversas trocas de responsabilidade podem levar a erros que se refletirão no ambiente de operação e podem trazer consequências diversas, como o retrabalho e seus custos associados ou falhas na operação, que podem gerar riscos de ferimentos ou de prejuízos financeiros. Ao longo da história da computação, diversos foram os casos de problemas não detectados em fases iniciais do desenvolvimento e que foram propagados até gerar grandes desastres. Vários deles você certamente já ouviu falar. Verificação de requisitos de software6 Diversos são os exemplos de falhas de grande impacto ocasionadas por problemas em software, muitos deles oriundos da etapa de requisitos. Vamos relembrar alguns exemplos famosos: � O projeto de construção do aeroporto de Denver, nos Estados Unidos, subestimou a complexidade do algoritmo de controle das esteiras de bagagem, gerando dificul- dade de integração entre o hardware e o software, e levando a prejuízos na ordem de U$ 1,1 milhão ao dia para a cidade de Denver (CALLEAM CONSULTING, 2008). � Em 2019, a Boeing teve que recolher toda a sua frota de 387 aviões do modelo Boeing 737 MAX, que estava em 59 companhias áreas, devido a um problema no novo software (BOEING..., 2019). � O foguete Ariane 5 explodiu em pleno ar devido a uma diferença de tamanho de campos de dados entre ele e o seu antecessor, cujo software foi reaproveitado. O prejuízo foi de US$ 370 milhões (HINKEL, [201-?]). Muitas dessas falhas poderiam ter sido evitadas se procedimentos adequa- dos de qualidade tivessem sido adotados ao longo do ciclo de vida, conforme ilustra a Figura 2, por meio das atividades de Verificação 1 a 5, representadas pelos triângulos. Note que está representado apenas um ciclo de vida genérico e bastante simplificado, que pode ser uma sprint, por exemplo. Figura 2. Defeitos inseridos e removidos ao longo do ciclo de desenvolvimento. Defeitos Atividades de veri�cação REQUISITOS 1 2 3 4 5 ANÁLISE CODIFICAÇÃO TESTES HOMOLOGAÇÃO 7Verificação de requisitos de software Como você pode observar, os defeitos estão presentes desde o início. Se não tivéssemos introduzido as atividades de verificação intermediárias, teríamos chegado à fase de testes com a quantidade inicial de defeitos (início do cone na figura). Possivelmente, esses defeitos ainda teriam sido amplificados, considerando que um defeito em um requisito pode implicar em defeitos em outros requisitos também. Quando introduzimos a atividade de Verificação 1, os defeitos provenientes da etapa de requisitos são reduzidos. Note que não estamos aqui falando que todos os requisitos do produto deveriam estar definidos, ou seja, não estamos nos referindo a um ciclo cascata. Estamos nos referindo ao conjunto de requi- sitos que deveriam estar esclarecidos para uma versão ou sprint. Ao encerrarmos a fase de análise, é inserida a atividade de Verificação 2 e, novamente, os defeitos são reduzidos, de modo a passar para a codificação um requisito que já esteja adequado para implementar. Se as atividades de Verificação 1 e Verificação 2 não tivessem sido realizadas, a codificação receberia todos os defeitos provenientes das fases anteriores. Ao encerrarmos a codificação, esperamos que o desenvolvedor tenha rea- lizado os testes de unidade ou testes unitários, que também são uma atividade de verificação. Ao final dessa fase, a atividade de Verificação 4 pode ser instituída tanto por meio de revisões de código quanto por meio de atividades de teste integrado. Ao chegarmos na homologação, que é realizada pelo usuário, é esperado que esses defeitos tenham sido significantemente reduzidos. Note que, neste modelo fictício, se as atividades intermediárias não tivessem sido inseridas, a homologação receberia a quantidade inicial de defeitos, possivelmente ainda ampliada por outros inseridos como decorrência destes. Diversas técnicas podem ser aplicadas para evitar que os erros se propaguem ao longo das fases, funcionando como uma espécie de filtro, como vimos na Figura 2. Quanto maior a quantidade de filtros e quanto mais finos eles forem, menos erros de propagarão. O problema é que esses filtros têm um custo, o chamado custo da qualidade, que deve ser cuidadosamente analisado para determinar o ponto de equilíbrio ideal. Verificação de requisitos de software8 Cada ponto de verificação precisa prover insumos para que o processo de desen- volvimento como um todo possa ser melhorado e a causa raiz dos erros possa ser identificada, de modo que no futuro os defeitos possam ser prevenidos. Quando um defeito é detectado, ele precisa retornar para ser consertado, e isso é um retrabalho. Por isso é tão importante analisar os resultados provenientes das atividades de verificação. Portanto, insights sobre como melhorar o processo para evitar os erros constituem uma das saídas mais valiosas da análise de um processo de verificação. A definição dos pontos onde essas intervenções são necessárias dependerá, primeiramente, da criticidade que uma falha representa para determinado sistema. Se a consequência for a perda de vidas, certamente os investimentos em qualidade serão todos compensados. Se a consequência for apenas uma pequena parada de um sistema que não tenha consequências críticas, então é possível que não se invista tanto nessas atividades de qualidade, priorizando esforços em outros pontos mais críticos. Como realizar a verificação de requisitos Os requisitos podem ser verificados de diversas formas. A primeira delas, naturalmente, é a leitura crítica dos artefatos, que é realizada pelo próprio autor, ou seja, o analista de requisitos, analisando pontos de ambiguidade, de inconsistência e de falta de completude nas definições. Para isso, ele pode ou não se apoiar em um checklist, que é um instrumento que funciona como uma espécie de lembrete, para que nenhum ponto seja esquecido. Outras formas envolvem a revisão por pares, ou seja,a revisão que é rea- lizada, como o próprio nome diz, pelos pares do analista de requisitos. Esses pares podem ser outros analistas de requisitos ou pessoas técnicas da equipe. São consideradas revisões por pares as listadas a seguir (CMMI PRODUCT TEAM, 2010): � inspeções; � walkthroughs estruturados; � refatoração deliberada; � programação em pares (pair programming). 9Verificação de requisitos de software Da mesma forma que a autoavaliação, a avaliação por pares pode ou não ser apoiada por um checklist. Na próxima seção veremos como elaborar e utilizar um checklist. Outra forma, e a mais utilizada, são os testes de software. Testes são realiza- dos para identificar erros que já estão materializados no código. Abordaremos esse assunto mais adiante neste capítulo. 2 Checklists de verificação de requisitos de software Conforme apresentado anteriormente, a norma internacional ISO/IEC/IEEE 12207:2017(E) (ISO/IEC/IEEE, 2017, p. 82) define a finalidade do processo de verificação como “[…] prover evidência objetiva que o sistema ou elemento do sistema atende completamente seus requisitos e características especificados”. A mesma norma define que: […] o processo de verificação identifica anomalias (erros, defeitos e falhas) em qualquer item de informação (requisitos de sistema/software ou descrição de arquitetura), elementos implementados, ou processos de ciclo de vida usando métodos, técnicas, padrões e regras apropriados (ISO/IEC/IEEE, 2017, p. 76). Existem diversas formas de fazer a verificação dos requisitos. Uma delas é a revisão por pares, que nada mais é do que um par realizando a revisão sobre o trabalho do colega, com o objetivo de identificar inconsistências ou anomalias. Um par é um profissional de expertise equivalente ou superior a do(s) autor(es) do artefato, que pode contribuir tecnicamente, fazendo uma avaliação objetiva do artefato. Artefato é o resultado da realização de uma atividade, podendo ser um documento, um diagrama ou o próprio código. Revisões por pares podem ser aplicadas a qualquer artefato do projeto. Vamos aqui discutir a sua aplicação para a verificação dos artefatos relacionados às etapas de requisitos, mas o raciocínio utilizado se aplica a qualquer outro tipo de artefato do ciclo de vida de desenvolvimento, incluindo o código. As revisões por pares podem acontecer no formato de inspeções, walk- throughs estruturados, auditorias ou outras formas de revisão. Sua aplicação vai depender do grau de formalismo desejado para a revisão. Inspeções são consideradas revisões mais formais e têm um formato próprio para acontecer. Verificação de requisitos de software10 As revisões também podem ser feitas seguindo diferentes abordagens. Podem ser baseadas em checklists, em cenários de execução, com foco na perspectiva de algum usuário, com foco em uma funcionalidade específica ou ser feita até mesmo de forma ad hoc. Um dos requisitos não funcionais importantes referentes à qualidade interna de um produto de software é a verificabilidade. Verificabilidade se refere a “[...] quão bem os componentes de software ou o produto integrado podem ser avaliados para demonstrar se as funções do sistema funcionam conforme o esperado” (WIEGERS; BEATTY, 2013, p. 286). Para identificar esses requisitos, você pode utilizar como dica as seguintes perguntas: � Como nós poderemos confirmar que cálculos específicos estão fornecendo os resultados esperados? � Existe alguma parte do sistema que não leva a resultados determinísticos, de forma que poderia ser difícil de determinar se está funcionando corretamente? � É possível ter conjuntos de dados de teste que tenham uma alta probabilidade de revelar quaisquer erros nos requisitos e sua implementação? � Que relatórios de referência ou outras saídas podem ser utilizadas para verificar se o sistema está produzindo os resultados corretamente? Artefatos de requisitos Se estamos focando em revisões dos requisitos, a pergunta é: que artefatos devem ser revisados? Os requisitos, uma vez elicitados, podem ser represen- tados de diversas formas, dependendo do contexto do projeto, da organização desenvolvedora, das exigências do contratante, da experiência da equipe desenvolvedora e outros. Vamos considerar neste capítulo duas formas de especificar requisitos: a abordagem orientada a casos de uso e a abordagem orientada e histórias de usuário. Além disso, vamos considerar também a lista de requisitos, que pode ser utilizada nas duas abordagens. Dessa forma, os seguintes artefatos serão considerados neste capítulo: 11Verificação de requisitos de software � Lista de requisitos funcionais e não funcionais. � Casos de uso: ■ Diagrama de casos de uso. ■ Especificação de casos de uso. � Histórias de usuário: ■ Cartão da história de usuário. ■ Critérios de aceitação das histórias de usuário. Checklist para revisão de artefatos de requisitos Um checklist pode ser considerado como uma lista contendo pontos de atenção para apoiar os revisores. Geralmente, ela é constituída dos itens que ante- riormente já foram considerados problemáticos e que a equipe deseja evitar. O ideal é que cada artefato tenha seu checklist com itens próprios. Vamos começar com alguns critérios que podem ser usados para analisar a lista de requisitos, que pode conter tanto os requisitos funcionais quanto os requisitos não funcionais. O Quadro 1 apresenta uma sugestão para este checklist. Itens identificados como “não” representam pontos de atenção que deverão ser priorizados e tratados pelo analista de requisitos. É sugerido que o revisor complemente as informações dos itens assinalados como “não”, de modo a facilitar as correções. Atributo Definição Sim Não Não se aplica Completo O requisito está especificado de forma completa e que possibilita que o desenvolve- dor o implemente? Correto O requisito reflete o que o usuário, cliente ou seus representantes desejam? Único O requisito descreve uma única capacidade, característica, restrição ou atributo de qualidade? Quadro 1. Checklist para a lista de requisitos (Continua) Verificação de requisitos de software12 Fonte: Adaptado de Wiegers e Beatty (2013) e ISO/IEC/IEEE (2018). Atributo Definição Sim Não Não se aplica Viável O requisito é viável técnica e financeiramente de ser implementado, de acordo com as restrições do projeto? Necessário O requisito tem um motivo de existir, que é representado pelo seu relacionamento a uma fonte de informação e a um objetivo de negócio? Priorizado O requisito tem uma prioridade atribuída para que possa ser alocado a uma versão do software? Não ambíguo O requisito não contém ambiguidades que levem os stakeholders a interpretá-lo de forma diferente? Verificável O requisito é possível de ser verificado posteriormente quanto à sua implementação? Conforme O requisito está em conformidade com os padrões de especificação estabelecidos, se houver? Quadro 1. Checklistt para a lista de requisitos (Continuação) O diagrama de casos de uso é um diagrama que ajuda o analista de requi- sitos a se comunicar com os usuários. Embora seja composto por elementos simples, o diagrama tem um grande poder de comunicação. O Quadro 2 apresenta uma sugestão de checklist para verificação do diagrama de casos de uso. Itens identificados como “não” representam pontos de atenção que deverão ser priorizados e tratados pelo analista de requisitos. 13Verificação de requisitos de software Atributo Definição Sim Não Não se aplica Atores (escopo) Todos os atores estão representados no diagrama? Atores (formato) Todos os atores estão representados por um boneco palito e um texto com a identificação do ator? Relacionamentos de generalização entre atores (representação) O relacionamento de generalização entre os atores é representado por uma seta vazada que aponta do ator filho para o ator pai? Relacionamentos de generalização entre atores (significado) O relacionamento degeneralização expressa corretamente a intenção de herança entre os atores envolvidos? Casos de uso (representação) Todos os casos de uso são representados por elipses e identificados por meio de um verbo no infinitivo seguido de um complemento? Casos de uso (escopo) Todos os casos de uso que representam as funcionalidades que os stakeholders desejam estão representados? Relacionamentos dos casos de uso com atores Todos os casos de uso estão ligados a pelo menos um ator? Quadro 2. Checklist para o diagrama de casos de uso (Continua) Verificação de requisitos de software14 Atributo Definição Sim Não Não se aplica Relacionamentos de <include> entre casos de uso Os relacionamentos de <include> estão representados por setas pontilhadas que partem do caso de uso principal para o caso de uso incluído? Relacionamentos de <extend> entre casos de uso Os relacionamentos de <extend> estão representados por setas pontilhadas que partem do caso de uso que estende para o caso de uso principal? Relacionamentos de generalização entre casos de uso (representação) O relacionamento de generalização entre os casos de uso é representado por uma seta vazada que aponta do caso de uso filho para o caso de uso pai? Relacionamentos de generalização entre casos de uso (significado) O relacionamento de generalização expressa corretamente a intenção de herança entre os ca- sos de uso envolvidos? Quadro 2. Checklist para o diagrama de casos de uso (Continuação) O diagrama de casos de uso sozinho não é suficiente como especificação de requisitos funcionais, portanto é necessário complementar com um documento de especificação de casos de uso (que pode também ser feito dentro de uma ferramenta de modelagem). 15Verificação de requisitos de software O Quadro 3 apresenta uma sugestão de checklist para verificação das especificações de casos de uso. Alguns itens se referem à especificação e outros se referem à consistência entre o diagrama de casos de uso e as suas especificações correspondentes. Itens identificados como “não” representam pontos de atenção que deverão ser priorizados e tratados pelo analista de requisitos. Atributo Definição Sim Não Não se aplica Identificação do caso de uso O caso de uso tem um identificador único e um texto contendo um verbo no infinitivo e um complemento? Ator principal O ator principal está identificado corretamente? Ator secundário O ator secundário (se houver) está identificado corretamente e participa do caso de uso jun- tamente com o ator principal? Pré-condição As pré-condições (se houver) estão descritas corretamente? Fluxo principal Todos os passos do fluxo principal estão numerados sequencialmente e descrevem claramente o diálogo entre o ator e o sistema? Fluxos alternativos (descrição) Todos os fluxos alternativos (se houver) estão numerados sequencialmente e descrevem claramente o diálogo entre o ator e o sistema? Fluxos alternativos (retorno) Todos os fluxos alternativos (se houver) definem qual é o próximo passo a ser executado ao seu término? Quadro 3. Checklist para a especificação de casos de uso (Continua) Verificação de requisitos de software16 Atributo Definição Sim Não Não se aplica Fluxos alternativos (chamadas) Para todos os fluxos alternativos (se houver) estão identificados os pontos de chamada no fluxo básico? Fluxos de exceção (descrição) Todos os fluxos de exceção (se houver) estão numerados sequencialmente e descrevem claramente o diálogo entre o ator e o sistema em uma condição de exceção? Fluxos de exceção (retorno) Todos os fluxos de exceção definem qual é o próximo passo a ser executado ao seu término? Fluxos de exceção (chamadas) Para todos os fluxos de exceção estão identificados os pontos de chamada, seja no fluxo básico, seja nos fluxos alternativos? Pós- -condições As pós-condições (se houver) estão descritas corretamente? Quadro 3. Checklist para a especificação de casos de uso (Continuação) Quando a equipe de desenvolvimento utiliza métodos ágeis, é comum que os requisitos funcionais sejam expressos como histórias de usuário. As histórias de usuário são compostas por cartões, com uma declaração da necessidade do usuário e por critérios de aceitação que normalmente detalham a história ou especificam os requisitos não funcionais. O responsável pelos itens que compõem o product backlog, e que irão gerar as histórias, é o product owner (PO). Cabe a ele representar os interesses do cliente ou do usuário junto à equipe de desenvolvimento. As histórias de usuário geralmente são escritas de forma conjunta, entre o PO e a equipe de desenvolvimento. 17Verificação de requisitos de software A principal característica dos times ágeis é a comunicação. Os integrantes são estimulados a se reunir em workshops de esclarecimento de histórias e seguem a máxima dos 3 Cs: cartão + conversa + confirmação (critérios de aceitação). Portanto, é comum que as revisões já aconteçam ao longo do desen- volvimento das próprias histórias, durante esses workshops (PATTON, 2014). No entanto, nem todos os ambientes ágeis funcionam tão bem. É bastante comum que as histórias de usuário sejam, na verdade, chamados que chegaram pelo Help Desk, foram sendo armazenados em um backlog de solicitações de mudança e foram alocados à sprint sem antes terem passado por uma conversa para aprofundar o seu entendimento. Nesses casos, a aplicação de um checklist pode apoiar a equipe na melhoria da qualidade da compreensão dessas histórias. O Quadro 4 apresenta uma sugestão para o checklist de histórias de usuário. Note que esses critérios são muito similares aos critérios da lista de requisitos. É sugerido que o revisor complemente as informações dos itens assinalados como “não”, de modo a facilitar as correções a serem realizadas pelo autor do artefato. Atributo Definição Sim Não Não se aplica Formato A história de usuário está escrita no padrão: “Como (nome do papel), eu quero (…) de modo que (…)”? Completa A história de usuário está especificada de forma completa e que possibilita que o desenvolvedor o implemente? Correta A história de usuário reflete o que o usuário, cliente ou seus representantes desejam? Única A história de usuário descreve uma única capacidade, característica, restrição ou atributo de qualidade? Quadro 4. Checklist para histórias de usuário (Continua) Verificação de requisitos de software18 Atributo Definição Sim Não Não se aplica Viável A história de usuário é viável técnica e financeiramente de ser implementada, de acordo com as restrições do projeto ou da sprint? Neces- sária A história de usuário tem um motivo de existir, que é repre- sentado pelo seu relaciona- mento a uma fonte de informa- ção e a um objetivo de negócio? Priorizada A história de usuário tem uma prioridade atribuída para que possa ser alocada a uma sprint? Não ambígua A história de usuário não contém ambiguidades que levem os stakeholders a interpretá-la de forma diferente? Verificável A história de usuário é possível de ser verificada posteriormente quanto à sua implementação? Quadro 4. Checklist para histórias de usuário (Continuação) Melhoria da qualidade das revisões As revisões por pares são momentos preciosos para promover a melhoria na qualidade das especificações de requisitos. Para que as revisões sejam provei- tosas e se ganhe em produtividade, Wiegers (2006) apresenta as dicas a seguir. � Eduque os revisores: explique para os revisores o que é esperado deles e qual será o processo usado na revisão. Aprender a dar feedback faz parte desse aprendizado. O foco da revisão deve estar sobre o artefato, e não sobre a pessoa. � Não sobrecarregue os revisores: não espere que o documento esteja 100% completo. Ele pode ir sendo revisado aos poucos. É mais fácil conseguir 30 minutos de uma pessoa do que uma tarde toda. 19Verificação de requisitos de software � Construaparcerias colaborativas com os representantes dos usuá- rios e com outros membros da equipe do projeto: a voz do cliente é muito importante na revisão dos requisitos, embora esta seja uma atividade de validação e não de verificação. Envolva o usuário ou representantes do usuário. � Convide os revisores certos: envolva desenvolvedores e testadores também no processo de revisão, pois eles podem ter insights que os analistas de requisitos não têm. São visões diferentes que contribuem para a revisão. Eles podem usar a técnica de perspective based reading, ou leitura baseada em perspectiva (é uma leitura orientada sob a ótica específica daquele papel). � Faça os revisores analisarem os entregáveis apropriados: nem todos os revisores terão que avaliar todos os artefatos de requisitos. Encaminhe o artefato para o revisor que mais pode contribuir com aquele artefato especificamente. � Projete para facilitar a revisão: represente os requisitos de forma a facilitar a revisão. � Inspecione todos os entregáveis de requisitos: embora as revisões informais sejam úteis, as inspeções formais são mais profundas e descobrem mais detalhes, uma vez que fazem com que os inspetores realmente analisem os artefatos. � Enfatize encontrar os maiores erros: os requisitos faltantes são os mais difíceis de serem detectados. Invista tempo para este tipo de requisito. 3 Casos de teste de requisitos de software A técnica mais utilizada para realizar a verificação de artefatos de desenvol- vimento de software é o teste. Testes de software são utilizados para avaliar o código implementado, seja ele no formato de um componente isolado, seja no formato de um produto integrado. Não é nosso objetivo neste capítulo o aprofundamento nas diversas técnicas de teste de software, mas apresentar os casos de teste como forma de refi- namento e verificação de requisitos, tanto em ambientes tradicionais quanto em ambientes ágeis. Verificação de requisitos de software20 Testes em ambientes tradicionais Geralmente, os casos de teste são escritos como apoio para que a equipe de testes possa realizar o seu trabalho. Existe uma variedade de formatos de escrita de casos de teste, que vão desde templates no formato de planilhas eletrônicas até ferramentas automatizadas, com robôs programados para executar os testes. Independentemente da forma como o teste seja implementado, é importante compreender o que está envolvido no planejamento dos testes. Se voltarmos à Figura 2, veremos que existe uma etapa de testes representada logo após a codificação. Esse é um exemplo apenas didático e simplificado. Na realidade, os testes são realizados desde a fase de codificação, como forma do próprio desenvolvedor avaliar o seu trabalho. Em seguida, o produto segue para a equipe de testes, quando a empresa tem uma. E, finalmente, passa para o ambiente de homologação, onde iniciam os testes que envolvem o usuário ou um representante do usuário. Nesse caso, passamos a chamar de validação, e não mais de verificação, conforme as definições que já foram apresentadas anteriormente neste capítulo. O grande benefício do desenvolvimento dos testes concomitantemente aos requisitos, ou logo após esses, é que os testes ajudam a esclarecer pontos obscuros dos requisitos. Refinamentos são possíveis sobre os requisitos, uma vez que se busca as formas para testá-lo. Visão similar foi incorporada pelos métodos ágeis, como se verá adiante. Para a especificação dos casos de teste, o template apresentado no Quadro 5 pode ajudar. Inicialmente, deve ser identificada a origem do requisito. Neste caso, temos um exemplo usando casos de uso. Em seguida deve vir o identi- ficador único do caso de teste, depois temos uma coluna onde são registrados os passos que o testador deve executar e qual é o resultado esperado. Se tudo der certo e o sistema prover a resposta esperada, ele indica isto marcando um X na coluna ✔. Caso a execução não tenha ocorrido com su- cesso, então ele marcará um X na coluna que aparece como ✗ na planilha. Nesse segundo caso, ou seja, o sistema não apresentou o resultado esperado, o testador deve reportar os detalhes para que o desenvolvedor possa corrigir. 21Verificação de requisitos de software ID do caso de uso ID do caso de teste Passos Resultado esperado ✔ ✗ N/A <inserir o id do caso de uso> <inserir o id do caso de teste> <inserir os passos detalhados para a realização do caso de teste> <inserir o resultado esperado ao final da execução do passo> EXEMPLO UC-CAD-001 CT- CAD-001 1 – Selecionar função Cadastrar Cliente Tela de Cadastro de Cliente aberta × 2 – Preencher CPF incorreto Msg de erro exibida: “CPF inválido” × (…) Quadro 5. Template para casos de teste Casos de teste são considerados ativos do processo de desenvolvimento e fazem parte do produto. A cada nova alteração em uma funcionalidade, os casos de teste precisam ser revisados para que continuem coerentes com as implementações. No caso de testes automatizados, é necessário que o código do teste seja refeito. Testes em ambientes ágeis Em ambientes ágeis de desenvolvimento de software, de acordo com Leffin- gwell (2011), é comum pensar de forma mais holística e sistemática, em que histórias (requisitos), implementação (código) e validação (testes de aceitação, testes unitários e outros) estejam juntos. Leffingwell (2011) apresenta uma matriz que descreve os tipos de teste em ambientes ágeis, ilustrada na Figura 3. Verificação de requisitos de software22 No quadrante Q1 estão os testes realizados pelo desenvolvedor, geralmente automatizados e em grande volume. São os testes unitários e de componentes. No quadrante Q2 estão os testes funcionais, que testam o funcionamento das histórias de usuário. Esses testes podem ser automatizados ou manuais. No quadrante Q3 se encontram os testes de aceitação ou testes de sistema; geralmente são testes manuais, que envolvem usuários e testadores em am- bientes que simulam o ambiente real. No quadrante Q4 estão os testes de qualidade do sistema; geralmente envolvem o uso de ferramentas para os testes de desempenho e de carga. Figura 3. A matriz de testes ágeis. Fonte: Adaptada de Leffingwell (2011). Os testes de aceitação de histórias, representados no quadrante Q2 da Figura 3, são testes realizados pelos desenvolvedores. Trata-se de testes fun- cionais para garantir que as histórias de usuário entregam o que era pretendido. Geralmente, o time ágil passa grande parte do tempo definindo esses testes, pois esta é uma forma de refinar o comportamento esperado da história. 23Verificação de requisitos de software É comum, nestes ambientes, que a história seja uma afirmação curta, escrita no formato padronizado que expressa quem + o que + porquê. Para que ela possa ser adequadamente compreendida, os testes de aceitação da história são escritos e devem conter todos os detalhes para que o desenvolvedor possa implementá-la. Considere a seguinte história de usuário (LEFFINGWEL, 2011): Como cliente, eu sempre vejo o preço atual da energia refletido no meu portal e nos meus dispositivos de modo que eu sei que os meus custos de uso da energia são precisos e refletem qualquer mudança de preço. Os seguintes testes de aceitação da história serão derivados: 1. Verificar que o preço atual é sempre usado e que os números calculados são exibidos corretamente no portal e em cada dispositivo (ver anexos). 2. Verificar que o preço e os números calculados são atualizados corretamente quando o preço muda. 3. Verificar que o campo “preço atual“ em si é atualizado de acordo com a agenda. 4. Verificar as mensagens de informação/erro quando houver erro na precificação (ver mensagens de erro aprovadas no anexo) Para se aprofundar nos temas relacionados a teste de software, o capítulo 22 do livro Engenharia de Software: uma abordagem profissional, de Pressman e Maxim (2016), que apresenta estratégias e teste de software, é uma leitura que valea pena. Verificação de requisitos de software24 BOEING 737 Max Lion Air crash caused by series of failures. BBC, 2019. Disponível em: https://www.bbc.com/news/business-50177788. Acesso em: 29 abr. 2020. BOURQUE, P.; FAIRLEY, R. SWEBOK: guide to the software engineering body of knowledge: version 3. USA: IEEE Computer Society, 2014. Disponível em: https://www.computer. org/education/bodies-of-knowledge/software-engineering. Acesso em: 29 abr. 2020. CALLEAM CONSULTING. Denver Airport baggage handling system case study. [S. l.], 2008. Disponível em: http://calleam.com/WTPF/wp-content/uploads/articles/DIABaggage. pdf. Acesso em: 29 abr. 2020. CMMI INSTITUTE. CMMI model V2.0. Pittsburgh: CMMI Institute, 2018. CMMI PRDUCT TEAM. CMMI® for Development, Version 1.3. Hascom AFB: Software En- gineering Institute, 2010. Disponível em: https://resources.sei.cmu.edu/asset_files/ TechnicalReport/2010_005_001_15287.pdf. Acesso em: 29 abr. 2020. HINKEL, J. N. Ariane 5: um erro numérico (overflow) levou à falha no primeiro lançamento. São José dos Campos, [201-?]. Disponível em: https://www.ime.uerj.br/~demoura/ Especializ/Ariane/. Acesso em: 29 abr. 2020. ISO/IEC/IEEE. ISO/IEC/IEEE 12207:2017(E): systems and software engineering: software life cycle processes. Switzerland: ISO, 2017. ISO/IEC/IEEE. ISO/IEC/IEEE 29148:2018: systems and software engineering: life cycle processes: requirements engineering. Switzerland: ISO, 2018. LEFFINGWELL, D. Agile software requirements: lean requirements practices for teams, programs, and enterprises. Upper Saddle River: Adisson-Wesley, 2011. PATTON, J. User story mapping: discover the whole story, build the right product. Se- bastopol: O´Reilly, 2014. VAZQUEZ, C. E.; SIMÕES, G. S. Engenharia de requisitos: software orientado ao negócio. Rio de Janeiro: Brasport, 2016. WIEGERS, K. E. More about software requirements: thorny issues and practical advice. 3. ed. Redmond: Microsoft Press, 2006. WIEGERS, K. E.; BEATTY, J. Software requirements. 3. ed. Redmond: Microsoft Press, 2013. Leitura recomendada PRESSMANN, R.; MAXIM, B. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016. 25Verificação de requisitos de software Os links para sites da web fornecidos neste capítulo foram todos testados, e seu fun- cionamento foi comprovado no momento da publicação do material. No entanto, a rede é extremamente dinâmica; suas páginas estão constantemente mudando de local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade sobre qualidade, precisão ou integralidade das informações referidas em tais links. Verificação de requisitos de software26 DICA DO PROFESSOR Quando um defeito referente a requisitos é encontrado em uma fase muito adiantada do desenvolvimento, as consequências para o projeto podem ser desastrosas, a começar pelo retrabalho gerado para consertar o problema. Se esse defeito só aparecer no ambiente do cliente, então, é pior ainda! Uma forma de minimizar defeitos dessa natureza é executando atividades de qualidade desde o início do ciclo de vida. Isso pode ser feito pela introdução de revisões nos artefatos gerados na fase de requisitos. Essas revisões podem ser pessoais, dos pares, mais formais ou menos formais. O importante é que sejam realizadas. Acompanhe, nesta Dica do Professor, diretrizes para a condução de revisões formais de software ou inspeções. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS Checklists são instrumentos que apoiam o processo de revisão de artefatos de software. Eduardo realizou uma revisão dos requisitos usando um checklist de critérios de qualidade para apoiar sua colega Maria Luiza. Com o aumento da demanda por suprimentos médicos devido à COVID-19, Maria Luiza, que é analista de requisitos, foi chamada para o desenvolvimento de um software de vendas pela Internet e recebeu a seguinte mensagem de seu cliente: “Quero um sistema bem fácil de usar, em que qualquer pessoa possa pedir suprimentos básicos de proteção. Os clientes podem escolher os produtos a partir de um catálogo que deverá ser exibido por categoria: máscaras, álcool em gel ou equipamentos de proteção. Os produtos podem ser pagos com cartão de crédito ou boleto bancário. A entrega será via correio, liberada quando o pagamento for confirmado. Todos os visitantes podem pesquisar os produtos, mas apenas os clientes logados podem fazer uma compra.” Com base nesse texto, ela extraiu os seguintes requisitos: 1) Com base nas informações fornecidas, qual foi a decisão de Eduardo? A) O conjunto de requisitos listado está completo e correto; portanto, os requisitos podem seguir para a próxima fase do processo de desenvolvimento. B) O conjunto de requisitos listado está completo, mas há alguns requisitos ambíguos, e, por isso, os requisitos não podem seguir para a próxima fase do processo de desenvolvimento. C) O conjunto de requisitos listado não está completo e, por isso, não pode seguir para a próxima fase do processo de desenvolvimento. D) O conjunto de requisitos não está completo, e os requisitos estão todos ambíguos; por isso, não podem seguir para a próxima fase do processo de desenvolvimento. E) O conjunto de requisitos listado não está completo, mas os requisitos corretos podem seguir para a próxima fase do processo de desenvolvimento. 2) A inspeção é uma técnica de revisão por pares mais formal, que tem o objetivo de identificar defeitos antes que se propaguem no ciclo de vida. Marcela é analista de requisitos e foi chamada para participar de uma inspeção de requisitos de um projeto de software para apoiar a venda de produtos artesanais de moradores da Serra do Mar. Ela recebeu a lista de requisitos e um checklist para apoiar a revisão: Considerando o checklist, identifique a situação do requisito R1 e assinale a alternativa correta: A) São atendidos os itens 1, 2 e 3 do checklist. B) São atendidos os itens 1 e 2 do checklist. C) São atendidos os itens 2 e 3 do checklist. D) Apenas o item 1 do checklist é atendido. E) Apenas o item 2 do checklist é atendido. 3) A revisão por pares é uma técnica que auxilia na identificação de defeitos em artefatos de software antes que eles se propaguem para outras etapas do desenvolvimento. Giovanna elaborou o diagrama de casos de uso a seguir, e Fernanda foi chamada para realizar a revisão por pares. Descrição dos stakeholders: “O sistema deverá permitir que o professor insira, revise e consulte as notas. O aluno poderá consultar as notas. Todos os usuários deverão estar logados para executar as operações. O sistema deverá suportar até 30.000 usuários simultâneos sem degradar o desempenho.” Fernanda analisou o diagrama e a descrição fornecida pelos stakeholders e concluiu que: A) O diagrama pode ser aprovado porque contém todos os elementos descritos na fala dos stakeholders. B) O diagrama está incorreto porque diz que o aluno também pode revisar notas por causa do relacionamento de generalização. C) O diagrama está incorreto porque faltou representar os atores secundários que também participam do sistema. D) O diagrama está incorreto porque não contempla o requisito de desempenho referente à quantidade de usuários. E) O diagrama está incorreto porque está representando que apenas o ator usuário pode consultar notas. 4) No desenvolvimento ágil de software, critérios de aceitação são especificados como base para o teste das histórias do usuário. Marco Antonio é o product owner de um projeto que visa a implementar um software para realizar reserva de mesas em bares e restaurantes. Ele escreveu uma história de usuário e os critérios de aceitação. Com base nas informações apresentadas, assinale a alternativa correta: A) A história do usuário está correta e completa, e todos os critérios de aceitação estão adequados. B) A história do usuário está correta e completa, mas apenas os critérios de aceitação 1 e 2estão adequados. C) A história do usuário não está correta e completa, mas todos os critérios de aceitação estão adequados. D) A história do usuário não está correta e completa, e apenas os critérios de aceitação 1 e 2 estão corretos. E) A história do usuário não está correta e completa, e apenas os critérios 2 e 3 estão corretos. 5) Não é possível verificar posteriormente um requisito não funcional se ele não estiver especificado por meio de um atributo mensurável. Você foi chamado para inspecionar a lista de requisitos não funcionais de um software para gerenciar a escala de plantão de médicos e enfermeiros em um hospital de campanha montado para emergências relacionadas ao Corona Vírus. Considere os atributos definidos a seguir: Assinale a alternativa que representa adequadamente a sua decisão como inspetor desses requisitos: A) Os requisitos não funcionais RNF1, RNF2 e RNF3 estão corretos e completos e podem ser encaminhados para a implementação. B) Os requisitos não funcionais RNF1 e RNF2 estão corretos e completos e podem ser encaminhados para a implementação. O RNF3 precisa de ajustes. C) Os requisitos não funcionais RNF2 e RNF3 estão corretos e completos e podem ser encaminhados para a implementação. O RNF 1 precisa de ajustes. D) Os requisitos não funcionais RNF1 e RNF3 estão corretos e completos e podem ser encaminhados para a implementação. O RNF2 precisa de ajustes. E) Os requisitos RNF1, RNF2 e RNF3 precisam voltar ao analista de requisitos para ajustes. NA PRÁTICA Os processos de verificação de requisitos contribuem para que os requisitos estejam em grau de detalhe e qualidade suficiente para prosseguirem para as próximas etapas do projeto. Existem diversas formas pelas quais se pode realizar essa atividade. Uma delas é o emprego de revisões por pares, ou seja, receber a contribuição dos pares para identificar falhas, ambiguidades e falta de completude. As revisões por pares podem ser informais, realizadas por algum colega que faz uma leitura crítica do material, ou mais formais, no formato de inspeções. Judy é uma analista de requisitos que recebeu a atividade de organizar e conduzir uma inspeção nas histórias de usuário de uma sprint crítica de um projeto que seu colega Mark está desenvolvendo. Acompanhe, neste Na Prática, os desafios de Judy e como ela tratou essa questão. SAIBA MAIS Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Inspeção de documentos de requisitos de software Neste vídeo, você vai ver o que é a inspeção na área de software e como essa técnica pode ser utilizada para a inspeção de qualquer artefato de software, incluindo os artefatos de requisitos. São discutidos também os custos das inspeções e seus benefícios. Conteúdo interativo disponível na plataforma de ensino! Uso de revisões Leia o capítulo 20 do livro de Roger Pressman e Bruce Maxim, que trata das revisões na produção de software, sua importância, como medir a sua eficácia e como se preparar para as revisões. Verificação e validação em software aeronáutico Neste vídeo, o palestrante, que trabalha no software de comando de voo, explica um pouco a respeito na Norma DO-178C, aplicada para sistemas embutidos no segmento da aviação. Vale a pena conferir essa perspectiva do desenvolvimento de um software em um segmento crítico. Conteúdo interativo disponível na plataforma de ensino! Conhecer requisitos APRESENTAÇÃO Você sabia que o levantamento de requisitos pode ajudar a evitar a frustração de clientes ao final de um projeto de software? Muitas vezes, o cliente não sabe muito bem do que precisa, tornando mais difícil criar um projeto que satisfaça às suas necessidades. A identificação de requisitos no início do projeto é muito importante para o bom desenvolvimento do sistema. Um requisito pode ser uma condição, capacidade, função, objetivo, propriedade ou restrição que caracterize um sistema e satisfaça uma regra de negócio ou contrato. Nesta Unidade de Aprendizagem, você irá conhecer os conceitos básicos de requisitos e as diferenças entre requisitos funcionais e não funcionais. Também irá estudar o que são regras de negócio e quais os principais problemas enfrentados pelos engenheiros de software ao coletar os requisitos. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Listar as técnicas de coleta de dados.• Diferenciar requisitos funcionais e não funcionais.• Identificar as regras de negócio.• DESAFIO A companhia aérea YXZ está com aumento de vendas de bilhetes aéreos e precisa que você projete e implemente um sistema de controle de reservas e vendas de bilhetes. Você deve listar e descrever, de forma clara, quais são os requisitos funcionais e não funcionais que este sistema pode ter (informe no mínimo 2 de cada tipo). INFOGRÁFICO Veja, no infográfico a seguir, o conceito de requisitos de software e entenda a diferença entre os requisitos funcionais e não funcionais. CONTEÚDO DO LIVRO A coleta e identificação de requisitos de software pode ser considerada uma das tarefas mais importantes no processo de criação de um sistema. Um levantamento de requisitos mal feito gera um risco muito alto para qualquer projeto, podendo levá-lo ao fracasso. Por isso, é muito importante entender como é feito o levantamento de requisitos, seus tipos e características. Acompanhe a leitura do capítulo Conhecer requisitos, da obra Engenharia de Software e conheça os conceitos básicos de requisitos e as diferenças entre requisitos funcionais e não funcionais, além de saber o que são regras de negócio e os problemas enfrentados pelos Engenheiros de software ao coletar os requisitos. Boa leitura! Conteúdo: ENGENHARIA DE SOFTWARE Aline Zanin Izabelly Soares de Morais Revisão técnica: Jeferson Faleiro Leon Desenvolvimento de Sistemas Especialista em Formação Pedagógica de Professores Catalogação na publicação: Karin Lorien Menoncin CRB-10/2147 M827e Morais, Izabelly Soares de. Engenharia de software [recurso eletrônico] / Izabelly Soares de Morais, Aline Zanin ; revisão técnica : Jeferson Faleiro Leon. – Porto Alegre : SAGAH, 2017. ISBN 978-85-9502-253-9 Engenharia. 2. Engenharia de software auxiliada por computador. I. Zanin, Aline. II. Título. CDU 004.41 Conhecer requisitos Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Listar as técnicas de coleta de dados. � Diferenciar requisitos funcionais e não funcionais. � Identificar as regras de negócio. Introdução Você sabia que o levantamento de requisitos pode ajudar a evitar a frus- tração de clientes ao final de um projeto de software? Muitas vezes, o cliente não sabe muito bem do que precisa, tornando mais difícil criar um projeto que satisfaça às suas necessidades. A identificação de requisitos no início do projeto é muito importante para o bom desenvolvimento do sistema. Um requisito pode ser uma condição, uma capacidade, uma função, um objetivo, uma propriedade ou uma restrição que caracterize um sistema e satisfaça uma regra de negócio ou contrato. Neste capítulo, você vai conhecer os conceitos básicos de requisitos e as diferenças entre requisitos funcionais e não funcionais. Também vai estudar o que são regras de negócio e quais os principais problemas enfrentados pelos Engenheiros de software ao coletar os requisitos. Técnicas para coleta de dados A complexidade de um software está associada a todas as suas particularidades, que vão desde as suas funcionalidades até os recursos que este necessita para desempenhar sua função com eficácia. O desenvolvimento de um sistema exige que algumas etapas sejam seguidas e executadas com lógica. Dessa forma, um planejamento de um software tem como uma desuas principais atividades a obtenção dos requisitos, ou seja, todas as funcionalidades do software. Porém, apesar de aparentemente ser fácil definir o que um sistema irá fazer, não é, pois dependemos diretamente do cliente, ou seja, daquele que está contratando nosso serviço para desenvolver um software que irá suprir suas necessidades. Este primeiro momento é crucial para todas as demais etapas, pois ima- gine se a equipe desenvolve todo o software e, no final, ele não atende às necessidades do cliente? É por isso que essa etapa tem também cunho inves- tigativo, no qual a equipe, além de ter que desenvolver o software, deve saber extrair do cliente tudo que ele precisa, ou seja, os requisitos do software. Um fato importante, e que merece ser citado, é o de que nem sempre o cliente compreende o que é desenvolver um software, dessa forma, provavelmente ele não terá noção de como deve expor suas ideias, de forma organizada e coerente, e muito menos saberá relacionar o trabalho que será empenhado em seu projeto com os custos e os prazos finais. Para ele, é tudo muito simples, como inserir uma janela, mudar uma funcionalidade de um botão, ou até mesmo acrescentar uma lista de produtos, por exemplo. Mal sabe ele que, na verdade, tudo requer investimento de tempo e trabalho de uma equipe com diversas expertises diferentes. Algumas técnicas acabaram sendo desenvolvidas para auxiliar a equipe de desenvolvimento neste processo. Conforme Pressman e Maxim (2016, p. 143), muitas abordagens para a coleta colaborativa de requisitos foram propostas. Cada uma faz uso de um cenário ligeiramente diferente, porém todas aplicam alguma variação das seguintes diretrizes básicas: � As reuniões (reais ou virtuais) são conduzidas com a participação tanto dos Engenheiros de software quanto de outros envolvidos. � São estabelecidas regras para a preparação e a participação. � É sugerida uma agenda suficientemente formal para cobrir todos os pontos importantes; porém, suficientemente informal para estimular o fluxo livre de ideias. � Um “facilitador” (pode ser um cliente, um desenvolvedor ou uma pessoa de fora) dirige a reunião. � É utilizado um “mecanismo de definições” (planilhas, flip charts, adesivos de parede ou um boletim eletrônico, salas de bate-papo ou fóruns virtuais). O momento em que os requisitos estão sendo coletados é nomeado como descoberta de requisitos, que, segundo Sommerville (2011, p. 72-76), é o pro- cesso de reunir informações sobre o sistema requerido e os sistemas existentes e separar dessas informações os requisitos de usuário e de sistema. Para isso, o autor lista algumas formas de executar tal ação: Conhecer requisitos2 1. Entrevistas. Podem ser de dois tipos: ■ Entrevistas fechadas, em que um conjunto predefinido de perguntas é respondido pelo cliente. ■ Entrevistas abertas, em que não existe uma agenda predefinida, e a equipe desenvolve uma série de questões com o intuito de compre- ender melhor as necessidades do cliente. 2. Cenários. Podem ser úteis para a obtenção de mais detalhes na visão geral dos requisitos, em que cada cenário cobre determinados números de interações. Um cenário começa por meio de um esboço da interação. Durante o processo de elicitação, são adicionados detalhes ao esboço, para criar uma descrição completa dessa interação. Um cenário pode incluir: ■ Uma descrição do que o sistema e os usuários esperam quando o cenário se iniciar. ■ Uma descrição do fluxo normal de eventos no cenário. ■ Uma descrição do que pode dar errado e como isso é tratado. ■ Informações sobre outras atividades que podem acontecer ao mesmo tempo. ■ Uma descrição do estado do sistema quando o cenário acaba. 3. Casos de uso. Trazem definições estabelecidas pela linguagem de modelagem unificada (UML, do inglês Unified Modeling Language). São documentados por um diagrama de casos de uso de alto nível. Identificam as interações individuais entre o sistema e seus usuários ou outros sistemas. 4. Etnografia. É uma técnica de observação que pode ser usada para compreender os processos operacionais e ajudar a extrair os requisitos de apoio para esses processos, em que um analista faz uma imersão no ambiente de trabalho em que o sistema será usado. O trabalho diário passa por diversas observações, nas quais contêm anotações sobre as tarefas em que os participantes estão envolvidos são realizadas. As técnicas são definidas conforme o contexto em que o projeto será inserido, até mesmo porque não podemos definir qual método de coleta de dados é o mais adequado, tendo em vista que as possibilidades são infinitas. 3Conhecer requisitos Ao utilizarmos o termo stakeholder, estamos nos referindo a qualquer pessoa que possa estar diretamente ou indiretamente envolvida no projeto, podendo ser desde o cliente até o gerente de projeto. É importante compreendermos que cada um trará um ponto de vista diferente ao projeto, tendo em vista que cada um trará, também, toda a sua bagagem de conhecimentos e experiências. Pode, muitas vezes, ser uma boa contribuição para a excelência do produto final, que será o software. Requisitos funcionais e não funcionais Um software necessita de recursos computacionais para que possa desempenhar suas funções, ou seja, ele precisa de dispositivos físicos para operar. Para isso, precisamos definir quais restrições e qual poderá ser o limite de alcance que o software que está sendo desenvolvido poderá vir a ter. Um requisito não lista apenas uma funcionalidade, ele traz especificações também, de como deve agir para que o objetivo de sua função seja atingido. Dessa forma, separamos as necessidades do cliente, ou seja, de seu software, em duas modalidades, que chamamos de requisitos funcionais e não funcionais: 1. Requisitos funcionais (RF ou, em inglês, FR, de functional requirement): “São declarações de serviços que o sistema deve fornecer, de como o sistema deve reagir a entradas específicas e de como o sistema deve se comportar em determinadas situações. Em alguns casos, também podem explicitar o que o sistema não deve fazer” (SOMMERVILLE, 2011, p. 59). 2. Outros aspectos que norteiam os requisitos funcionais estão ligados à completude, ou seja, se todos as funcionalidades estão definidas, ao realismo quanto à definição das funcionalidades e à consistência, na qual os requisitos não devem trazer ambiguidade ao projeto. 3. Requisitos não funcionais (RNF ou, em inglês, NFR, de non functional requirement): “Pode ser descrito como um atributo de qualidade, de desempenho, de segurança ou como uma restrição geral em um sistema” (PRESSMAN; MAXIM, 2016, p. 141). Esses requisitos abrangem muito mais atributos, que podem estar associados a outras áreas do software. Conhecer requisitos4 4. Para Sommerville (2011, p. 60), esses requisitos podem “estar relaciona- dos às propriedades emergentes do sistema, como confiabilidade, tempo de resposta, e ocupação de área. [...] Os requisitos não funcionais, como desempenho, proteção ou disponibilidade, normalmente especificam ou restringem as características do sistema como um todo. [...] Esses requisitos podem afetar a arquitetura geral de um sistema em vez de apenas componentes individuais”. A Figura 1 a seguir traz um diagrama com alguns dos requisitos não funcionais. Figura 1. Tipos de requisitos não funcionais. Fonte: Sommerville (2011, p. 61) Requisitos não funcionais Requisitos de produto Requisitos organizacionais Requisitos externos Requisitos de e�ciência Requisitos de con�abilidade Requisitos de portabilidade Requisitos de interoperabilidade Requisitos éticos Requisitos de facilidade de uso Requisitos de entrega Requisitos de implementação Requisitos de padrões Requisitos legais Requisitos de desempenho Requisitos de espaço Requisitos de privacidade Requisitos de segurança O diagrama desenvolvido por Sommerville (2011, p. 61) expõe requisitos não funcionais que podem ser provenientes das característicasrequeridas para o software (requisitos do produto), da organização que desenvolve o software (requisitos organizacionais) ou de fontes externas: � Requisitos do produto: “Requisitos que especificam ou restringem o comportamento do software. Exemplos incluem os requisitos de de- sempenho quanto à rapidez com que o sistema deve executar e quanta memória ele requer, os requisitos de confiabilidade que estabelecem 5Conhecer requisitos a taxa aceitável de falhas, os requisitos de proteção e os requisitos de usabilidade”. � Requisitos organizacionais: “São os requisitos gerais de sistemas de- rivados das políticas e procedimentos da organização do cliente e do desenvolvedor. Exemplos incluem requisitos do processo operacional, que definem como o sistema será utilizado, dentre outros”. � Requisitos externos: “Abrangem todos os requisitos que derivam de fa- tores externos ao sistema e seu processo de desenvolvimento. Exemplos incluem requisitos reguladores, que definem o que deve ser feito para que o sistema seja aprovado para uso, dentre outros”. O detalhamento e as demais especificações acerca de cada vertente de um requisito, seja ele funcional ou não funcional, são descritos em uma docu- mentação, que deve ser bastante detalhada e concisa. É nessa documentação que todas as práticas de levantamento de requisitos que foram utilizadas irão mostrar presteza para todo o processo. Outro fator importante é o de conhe- cermos também as regras de negócio que devem ser inseridas no sistema. Este link traz um vídeo desenvolvido por Fabrício Laguna (2016), que apresenta um breve resumo sobre os requisitos, assunto em destaque neste capítulo. https://goo.gl/mh8orc Identificação das regras de negócio A identificação das regras de negócio que fazem parte do contexto do projeto compartilham das mesmas técnicas da coleta de dados, até mesmo porque é o momento em que os dados estão sendo coletados e as restrições do sistema estão sendo impostas, automaticamente, em que é necessário se ter conheci- mento, também, das regras de negócio do cliente. Conhecer requisitos6 O entendimento dessas regras deve ser exposto em um modelo de negócio, pois “é ele que gera um entendimento do negócio do cliente como um todo. Com esse conhecimento, os desenvolvedores poderão aconselhá-lo sobre quais partes de seu negócio eles deveriam informatizar. De modo alternativo, se a tarefa for estender um produto de software existente, os desenvolvedores terão de entender o negócio existente como um todo para determinar como incorporar a extensão e aprender quais partes, se realmente alguma, do pro- duto existente precisam ser modificadas para acrescentar o novo trecho” (SCHACH, 2010, p. 288). Ainda sob o ponto de vista de Schach (2010, p. 288), “para construir um modelo de negócio, o desenvolvedor precisa ter um entendimento detalhado dos diversos processos de negócio. Tais processos serão refinados, isto é, analisados de forma mais detalhada. Podem ser usadas várias técnicas dife- rentes para obter as informações necessárias para criar o modelo de negócio, principalmente entrevistas”. Além das possibilidades citadas no início deste capítulo, podemos acres- centar o uso de formulários e questionários no processo de levantamento de requisitos e, consequentemente, das regras de negócio. De acordo com Morgan (2001 apud ALVARENGA, 2007), a definição de uma regra de negócio requer a especificação de alguns detalhes operacionais, dentre os quais podemos destacar: � Quem invoca uma regra: esta informação geralmente é descrita em um caso de uso ou em uma descrição de processo do negócio. � Quando a regra é executada: normalmente isto é descrito por um evento, caso de uso ou descrição de processo do negócio. � Onde a regra é executada: esta decisão é pertinente ao design do sistema e, mais especificamente, ao empacotamento do software. � Como a regra é implementada: também é uma decisão da fase de projeto. Conforme Alvarenga (2007, p.21), uma característica comum às regras de negócio é que elas fazem uso dos chamados “parâmetros do negócio”. Tais parâmetros podem ser definidos e gerenciados da mesma forma que as regras de negócio (MORGAN, 2001, apud ALVARENGA, 2007). O Quadro 1 traz características das Regras de Negócios encontradas na prática em muitas organizações, de acordo com Morgan (2001). 7Conhecer requisitos Fonte: Alvarenga (2007, p. 21) Característica: Uma RN deve ser ... Justificativa Atômica Caso uma regra seja definida em termos de subunidades, estas subunidades não serão a mesma RN original. Isto quer dizer que a tentativa de dividir um RN em outras regras mais simples resultará em perda de informação e também em perda semântica. Declaração do negócio RN deveriam descrever a lógica do negócio e não a tecnologia que irá implementar a regra. Declarativa RN devem contribuir para um objetivo do negócio, ao invés de descrever como o objetivo do negócio será alcançado. Restritiva RN limitam as ações que podem ser aplicadas no contexto do negócio. Representada em linguagem natural RN devem ser expressas através de idioma natural, pois isto dispensa qualquer tipo de treinamento específico ou uso de ferramentas. Em contrapartida, podem ocorrer expressões ambíguas. Em consequência disso, torna-se necessário mapear as regras escritas em linguagem natural para uma expressão matemática for mal, como uma linguagem de programação, por exemplo. Rastreável É precisa saber com as RN se encaixa dentro de um SI, e rastreá-las desde a origem até as suas realizações para manter o acompanhamento de todo o ciclo de vida do SI. Estruturada As regras devem ser escritas de tal maneira que facilitem a leitura e o entendimento. Porém, é necessário restringir o número de opções para se escrever a regra, isto é, determinar padrões estruturais para representação de regras. Esta prática pode apoiar o processo de automatização da regra, ou seja, o mapeamento da regra para implementação desejada. Quadro 1. Características das Regras de Negócio. Conhecer requisitos8 Podemos notar que cada detalhe é descrito juntamente com suas par- ticularidades e pode ser inserida a documentação do projeto por um meio específico, seja por um diagrama, ou por uma descrição textual. As regras de negócio, assim como as demais informações de um software, visam a trazer o desenvolvimento correto de um sistema de informação. ALVARENGA, G. G. Uma abordagem para tratamento de regras de negócio em sistemas de informação. 149 f., 2007,. Dissertação (Mestrado em Informática) - Universidade Federal de Goiás, Goiânia, 2007. Disponível em: <http://www.inf.ufg.br/sites/portal. inf.ufg.br.mestrado/files/ds_Geoflavia.pdf>. Acesso em: 27 ago. 2017. LAGUNA, F. Gerenciamento de requisitos sem mistério. YouTube, 2016. Disponível em: <https://www.youtube.com/watch?v=jajQyzOpLaE>. Acesso em: 27 ago. 2017. MORGAN, T. Business Rules and Information Systems: aligning IT with Business Goals. Boston: Addison Wesley, 2001. PRESSMAN, R. S.; MAXIM, B. R. Engenharia de Software: uma abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016. SCHACH, S. R. Engenharia de software: os paradigmas clássicos e orientado a objetos. 7. ed. Porto Alegre: AMGH, 2010. SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson, 2011. 9Conhecer requisitos Encerra aqui o trecho do livro disponibilizado para esta Unidade de Aprendizagem. Na Biblioteca Virtual da Instituição, você encontra a obra na íntegra. Conteúdo: DICA DO PROFESSOR Neste vídeo você irá conhecer o conceito de requisitos de software, seus tipos e características. Você também irá conhecer os principais problemas enfrentados durante a coleta de requisitos. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS 1) O que é um requisito de software? A) Um requisito pode ser definido como uma condição ou uma capacidade com a qual o sistema deve estar de acordo. B) É uma declaração sobre políticas oucondições que devem ser satisfeitas. C) É uma técnica para a medição de projetos de desenvolvimento de software, visando estabelecer uma medida de tamanho, em Pontos de Função (PF), considerando a funcionalidade implementada, sob o ponto de vista do usuário. D) É uma técnica de desenvolvimento de software em que se utiliza camadas. E) É um conjunto de elementos que um software entrega, podendo ser dados ou valores. 2) Qual é a característica de um requisito funcional? A) Definem propriedades e restrições do sistema. B) Descrevem explicitamente as funcionalidades e serviços do sistema. C) É mais voltado para características que podem ser mensuradas e testadas facilmente. D) Expressam informações relacionadas com a segurança do sistema. E) Expressam informações relacionadas com a arquitetura do sistema. 3) Qual é a característica de um requisito não funcional? A) É um tipo de requisito que o usuário geralmente conhece bem. B) É um tipo de requisito fácil de estimar. C) É um tipo de requisito que define propriedades e restrições do sistema. É mais voltado para características que podem ser mensuradas e testadas facilmente. D) É um tipo de requisito que geralmente descreve explicitamente as funcionalidades e serviços do sistema. E) É um tipo de requisito que é flexível e não impacta no desenvolvimento. 4) O que é uma regra de negócio? A) Regras de negócio são premissas e restrições aplicadas a uma operação comercial de uma empresa, que precisam ser atendidas para que o negócio funcione da maneira esperada. B) Definem propriedades e restrições do sistema. C) É um tipo de requisito que geralmente descreve explicitamente as funcionalidades e serviços do sistema. D) É um requisito que o usuário não conhece muito bem durante a criação de um sistema. E) É um tipo de requisito difícil de estimar. 5) Na engenharia de software, existe um processo genérico de levantamento e análise que contém as seguintes atividades: compreensão do domínio, coleta de requisitos, classificação, resolução de conflitos, definição das prioridades e verificação de requisitos. Uma das atividades mais importantes deste processo é a coleta de requisitos. Informe quais das descrições a seguir melhor descrevem esta atividade: A) Essa atividade considera o conjunto não estruturado dos requisitos e os organiza em grupos coerentes. B) Quando múltiplos stakeholders estão envolvidos, os requisitos apresentarão conflitos. Essa atividade tem por objetivo solucionar esses conflitos. C) Nesta atividade, os requisitos são verificados para descobrir se estão completos e consistentes e se estão em concordância com o que os stakeholders desejam do sistema. D) Em qualquer definição de requisitos, alguns serão mais importantes do que outros. Esse estágio envolve interação com os stakeholders para a definição dos requisitos mais importantes. E) É o processo de interagir com os stakeholders do sistema para descobrir seus requisitos. NA PRÁTICA Ao reconhecer um requisito de software, devemos ter atenção para descrevê-lo de maneira clara. Lembre-se que um bom requisito especifica claramente algo que é necessário, verificável ou atingível no sistema. Observe a seguinte descrição de um sistema: Conteúdo interativo disponível na plataforma de ensino! Este é um exemplo de descrição do negócio de uma farmácia e seu escopo, e também os requisitos funcionais e não funcionais coletados para criar este sistema. Com esta lista de requisitos, o engenheiro de software pode documentá-los e detalhar melhor o que cada um significa e como será trabalhado durante o desenvolvimento do sistema. SAIBA MAIS Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Os requisitos de software podem ser divididos em requisitos funcionais, não funcionais e regra de negócio. Para saber mais sobre requisitos de software, acesse a próxima dica de leitura. Conteúdo interativo disponível na plataforma de ensino! Seleção de técnicas de elicitação de requisitos de software APRESENTAÇÃO Muitos projetos da área de Tecnologia da Informação falham devido a requisitos mal identificados ou mal compreendidos. Mas quais são as consequências destas falhas? É possível comparar os requisitos de software aos alicerces de uma casa. Quando a estrutura de uma casa é malfeita, todo o resto da construção fica comprometida, podendo, inclusive, levar à queda da edificação. No desenvolvimento de software isso não é diferente. Os requisitos são a base para todas as demais etapas do desenvolvimento. Se forem mal compreendidos e mal definidos, estes problemas se propagarão para todas as atividades, levando, no mínimo, ao retrabalho. Além do retrabalho, o não cumprimento dos requisitos pode acarretar prejuízos ainda mais significativos, como a perda da credibilidade da empresa no mercado, prejuízos financeiros e, em alguns casos, até mesmo a perda de vidas humanas. Por este motivo, é importante focar grande parte dos esforços de desenvolvimento em elicitar adequadamente os requisitos para que estes possam constituir uma base sólida para o desenvolvimento de software. Nesta Unidade de Aprendizagem, você aprenderá a identificar a fonte dos requisitos, ou seja, de onde o Analista de Requisitos obtém as informações para que possa gerar os requisitos de software. Aprenderá, ainda, as características das principais técnicas que podem ser utilizadas para elicitar os requisitos. Por fim, irá compreender como selecionar a técnica de acordo com as características do contexto. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Identificar as fontes de informação de requisitos dos projetos de software.• Reconhecer as características das técnicas de elicitação de requisitos dos projetos de software. • Selecionar a técnica de elicitação de requisitos de acordo com as características do projeto.• DESAFIO Elicitar requisitos é uma atividade essencial para o sucesso de qualquer projeto que envolve software. De acordo com as características do contexto, uma técnica pode ser mais adequada do que outra. Saber selecionar e combinar as melhores técnicas de elicitação de requisitos pode reduzir significativamente a quantidade de problemas relacionados a eles, como requisitos incompletos, inconsistentes e invisíveis. Imagine que você é Analista de Requisitos na área de Tecnologia da Informação de uma empresa que comercializa planos de saúde. Conteúdo interativo disponível na plataforma de ensino! Com base nas informações fornecidas pela empresa, decida quais técnicas de elicitação de requisitos você irá adotar, levando em consideração as características do contexto e os problemas apontados. INFOGRÁFICO A etapa de elicitação dos requisitos é uma das mais críticas no processo de desenvolvimento de software, independentemente se a equipe está utilizando métodos tradicionais ou inovadores. Compreender os serviços e funções que o software deve disponibilizar é a base para todas as demais atividades, inclusive para a etapa de implementação. A elicitação tem início a partir da compreensão do cenário de negócio no qual o software está inserido e da identificação das fontes que servirão de base para a coleta de informações. Dessa forma, a seleção e correta aplicação da técnica minimizarão os riscos de surgimento tardio de requisitos invisíveis ou esquecidos. Confira neste Infográfico as etapas para a realização da elicitação de requisitos em projetos de software. CONTEÚDO DO LIVRO As consequências da condução inadequada da etapa de elicitação de requisitos em projetos de software são inquestionáveis e bem conhecidas. Muitas pessoas que trabalham com desenvolvimento de software já passaram pela frustração de verem seus projetos atrasarem, serem replanejados e até mesmo cancelados por conta de requisitos que não foram adequadamente identificados, compreendidose documentados. Muitas vezes isto ocorre porque a pessoa responsável pela etapa de elicitação de requisitos esqueceu algum stakeholder importante, não sabia que existia alguma regulamentação à qual o software deveria ser aderente ou mesmo porque desconhecia a melhor técnica de elicitação a ser aplicada naquela situação. No capítulo Seleção de Técnicas de Elicitação de Requisitos, do livro Engenharia de Requisitos, base teórica desta Unidade de Aprendizagem, você irá aprender a identificar as fontes de informação a partir das quais pode-se obter os requisitos de um projeto de software. Você também vai conhecer as técnicas de elicitação de requisitos e suas principais características e , por fim, aprenderá a selecionar a técnica mais adequada para elicitar requisitos, de acordo com as características da técnica e do contexto. Boa leitura. ENGENHARIA DE REQUISITOS Sheila Reinehr Seleção de técnicas de elicitação de requisitos de software Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Identificar fontes de informação de requisitos de projetos de software. � Reconhecer as características das técnicas de elicitação de requisitos de projetos de software. � Selecionar a técnica de elicitação de requisitos de acordo com as características do projeto. Introdução À medida que a tecnologia faz cada vez mais parte de nossas atividades cotidianas, cresce nossa dependência do correto funcionamento de dispositivos e softwares neles contidos. Utilizamos nossos smartphones para apoiar a maioria das nossas atividades pessoais e profissionais, desde consultar como está o trânsito no caminho para a faculdade ou o trabalho até checar a temperatura para escolher a roupa adequada ou consultar a conta para ver se o pagamento entrou. Não admitimos mais que os bancos não tenham todos os serviços on-line ou que tenhamos que nos deslocar até a pizzaria para buscar o lanche. Temos tudo na ponta dos dedos! Para que essas facilidades nos alcancem na forma de funcionalidades nos aplicativos do celular ou nos sites na internet, muita coisa precisa acontecer antes. São necessários profissionais com diversas habilidades e competências, esforço conjunto e horas de desenvolvimento e testes. Em algum momento, pessoas criaram esses serviços. De onde saem as ideias para essas funcionalidades? Quem define o que um sistema deve executar e como deve executar? Como se faz para obter essas definições? A resposta é: depende! Depende do tipo de software, do contexto em que o projeto está sendo desenvolvido, da tecnologia e dos recursos disponíveis. Há casos em que é possível conversar com alguém responsável por essas definições e há casos em que é a lei que determina o que o software deve fazer. Para cada produto existem também diversos olhares e perspectivas vindos das partes en- volvidas. Para cada caso existe uma forma mais adequada de descobrir os requisitos de um produto de software. Neste capítulo você vai estudar a identificação das fontes de infor- mação dos requisitos de um projeto de software em função do tipo de projeto e seu contexto. Vai também conhecer as diversas técnicas para a elicitação de requisitos e quando elas melhor se aplicam, de modo a escolher a melhor técnica para cada contexto de desenvolvimento de software. 1 Quais são as fontes de informação dos requisitos? Existem diferentes tipos de produtos de software; cada um implica dife- rentes tipos de requisitos e, portanto, diferentes fontes de informação para a obtenção desses requisitos. Sistemas de informação que apoiam as áreas administrativas de uma empresa são diferentes de jogos de celular, que, por sua vez, são diferentes de um sistema de controle de tráfego aéreo, que são diferentes de um sistema de troca de mensagens. As particularidades de cada tipo de produto e de cada contexto de projeto influenciarão na identificação das fontes de informação. Quando falhamos em identificar adequadamente as fontes de informação, podemos ter, como consequência, usuários esquecidos e, portanto, não ouvidos, ou requisitos que surgem quando a entrega do produto está sendo realizada. Portanto, quanto melhor for a nossa capacidade de envolver todas as fontes, maior será a chance de sucesso do projeto. No início de um projeto, diversos stakeholders têm um papel importante para determinar variáveis que influenciarão o seu desenvolvimento. Alguns poderão definir requisitos de projeto, como orçamento, prazos, premissas, Seleção de técnicas de elicitação de requisitos de software2 restrições e escopo. Geralmente, esses são os clientes, investidores, gestores ou o próprio gerente do projeto. Outros, serão responsáveis por determinar requisitos de processo, que influenciarão a forma como a equipe de desenvol- vimento irá trabalhar. Esses podem ser externos à organização desenvolvedora, como o próprio cliente ou investidor, ou podem ser internos à organização, como a área de processos ou de compliance. E haverá um conjunto deles que definirá efetivamente os requisitos do produto de software, sejam os funcionais (“o que” o sistema deve fazer), sejam os não funcionais (“como” o sistema deve fazer). Esses stakeholders são provenientes das mais variadas áreas, como veremos a seguir. Tipos de fonte de informação Existem diversas classificações para os tipos de fonte de informação, como veremos a seguir. Pohl e Rupp (2015) definem basicamente os três tipos lis- tados a seguir. � Stakeholders: são pessoas ou organizações que influenciam direta ou indiretamente nos requisitos do sistema, como usuários, operadores do sistema, desenvolvedores, arquitetos, clientes e testadores. � Documentos: contêm informações importantes que podem se tornar requisitos, como documentos de ordem legal ou regulatória, normas e padrões, documentos específicos do domínio de negócio ou da própria empresa, como documentos de requisitos de mais alto nível ou docu- mentos de erros em sistemas legados, por exemplo. � Sistemas em operação: sistemas legados, predecessores ou mesmo concorrentes. Os sistemas podem ser a fonte de informações sobre novas funcionalidades desejadas pelos clientes. Outra forma de compreender as fontes de informação é a proposta por Wiegers e Beatty (2013), que utilizam o conceito de classes de usuários para designar um subconjunto de usuários que utilizam as mesmas funções ou serviços do sistema. Essas classes representam também um indicativo da prioridade que será dada aos requisitos. Eles apresentam uma hierarquia para favorecer o entendimento dos conceitos, conforme ilustra a Figura 1. 3Seleção de técnicas de elicitação de requisitos de software Figura 1. Hierarquia de stakeholders, clientes, usuários e classes de usuários. Fonte: Adaptada de Wiegers e Beatty (2013). Stakeholders Clientes Usuários diretos e indiretos Classes de usuários favorecidos Classes de usuários não favorecidos Classes de usuários ignorados Outras classes de usuários Outros clientes Outros stakeholders Como se pode observar nessa proposta, os autores utilizam as seguintes definições: � Classes de usuários favorecidos: são aqueles usuários que estão mais diretamente relacionados com a satisfação dos objetivos de negócio do sistema e, portanto, seus requisitos terão maior prioridade do que outros requisitos. � Classes de usuários não favorecidos: são usuários que não devem utilizar o produto, por razões legais, de segurança ou proteção, e que, portanto, devem ser impedidos de fazê-lo por meio de funcionalidades implementadas com essa finalidade (como hackers, por exemplo). � Classes de usuários ignorados: são usuários que podem utilizar o produto, porém não são a razão de existir do produto e os seus requisitos terão menor prioridade. � Outras classes de usuários: outros usuários que não sejam os ante- riormente mencionados e que terão igual prioridade na definição de requisitos. Seleção de técnicas de elicitação derequisitos de software4 É importante lembrar que, no momento da identificação das fontes de in- formação, todos os potenciais stakeholders precisam ser considerados, mesmo aqueles que não utilizarão diretamente as funcionalidades do produto. Por exemplo, há usos indiretos, como aqueles representados por outros softwares, que podem receber informações a partir do software que está sendo desenvol- vido, ou mesmo aqueles softwares que realizam funções de forma automática, representando humanos, como os bots. A equipe de desenvolvimento também pode ter requisitos não funcionais relacionados, especialmente, à parte interna do sistema, como portabilidade, manutenibilidade, reusabilidade etc. O usuário que utiliza uma funcionalidade do sistema provavelmente não se preocupa com a sua arquitetura interna, mas, para a equipe que será responsável pela manutenção do produto, esses requisitos são relevantes e influenciarão na forma como o produto será concebido e desenvolvido. Em métodos ágeis como o SCRUM, adota-se o papel do product owner (dono do produto), que é responsável por gerenciar o product backlog (backlog do produto). Suas principais atribuições relacionam-se à responsabilidade pelo gerenciamento das prioridades do backlog, bem como garantir que a equipe de desenvolvimento tenha compreendido adequadamente o significado de cada item do backlog (SCHWA- BER; SUTHERLAND, 2013). Nesses casos, é função do product owner convergir para uma visão consolidada dos requisitos entre os interesses dos múltiplos stakeholders (LEFFINGWELL, 2011). O grau de envolvimento dos stakeholders pode variar de acordo com as diferentes necessidades em relação ao projeto e aos requisitos. Leffingwell (2011) classifica esse envolvimento da seguinte forma: � Stakeholders que devem ser mantidos informados: são aqueles que precisam saber do status do projeto e precisam ser mantidos informados acerca das decisões, embora nem sempre tomem parte dessas decisões. � Stakeholders que devem ser consultados: são aqueles que precisam ser envolvidos devido às suas áreas de expertise, como arquitetos, projetistas de interface, marketing e especialistas do domínio. Eles devem ser incluídos nas decisões que envolvem a sua área de expertise. 5Seleção de técnicas de elicitação de requisitos de software � Stakeholders que serão parceiros no desenvolvimento: são aqueles que precisam ser envolvidos por serem parceiros no processo, como os product owners de outros projetos, outras equipes de desenvolvimento, analistas de negócios ou requisitos e provedores de soluções com as quais o sistema deve interagir. � Stakeholders que controlam os resultados: são aqueles que tomam as decisões sobre a solução, como executivos, gerentes de liberação, usuários-chave que vão utilizar a solução e business owners. Independentemente de como os stakeholders são classificados, é importante que a origem dos requisitos esteja clara e que os potenciais stakeholders sejam envolvidos logo no início do processo de elicitação de requisitos. Segundo Wiegers e Beatty (2013), a voz do cliente precisa chegar aos ouvidos dos de- senvolvedores. Para que isso seja possível, é necessário que seja identificado corretamente quem precisa ter voz no projeto. Todas as classes de usuários precisam ter alguém que fale por elas. Pohl e Rupp (2015) sugerem que seja mantida uma lista sempre atualizada com esses envolvidos. Eles argumentam que, caso a lista esteja incompleta ou exista algum stakeholder que seja identificado tardiamente, as consequências negativas para o projeto são certas: aspectos importantes podem permanecer não detectados, o objetivo do projeto pode se perder ou custos adicionais podem surgir para a correção dos problemas (retrabalho). Como descobrir as fontes de informação Para descobrir quais são as fontes de informação dos requisitos, um bom começo é conversar com o patrocinador do projeto para que ele identifique as áreas de negócios que terão alguma interface com o negócio que está sendo tratado pelo software, bem como identifique possíveis leis ou regulamentações que precisam ser atendidas. A partir daí podem surgir inúmeras potenciais fontes de informação que, posteriormente, serão agrupadas dentro de uma mesma classe, uma vez que tenham os mesmos interesses ou que utilizem as mesmas funcionalidades. Seleção de técnicas de elicitação de requisitos de software6 Para apoiar a identificação dos stakeholders externos e internos, Leffin- gwell (2011) recomenda que sejam feitas perguntas como as apresentadas no Quadro 1. Fonte: Adaptado de Leffingwell (2011). Stakeholders externos Stakeholders internos � Quem utilizará diretamente o sistema? � Quem utilizará os resultados daqueles que usam o sistema? � Quem será responsável por dar suporte ao sistema? � Com quais outros sistemas o nosso sistema irá interagir? � Que interfaces devem ser fornecidas? � Quem pode fornecer orientações sobre as funcionalidades e os itens de qualidade do sistema (usabilidade, confiabilidade, desempenho e manutenibilidade)? � Quem precisa ser consultado sobre o escopo do projeto? � Quem contribuiu para o orçamento e o cronograma? � Quem gerencia o relacionamento de negócios entre as equipes e o cliente? � Quem irá determinar como e quando o sistema deve ser entregue para os clientes? � Quem pode afetar ou apoiar politicamente o projeto? � Que parceiros dependem do sistema? � Quem se preocupa com o processo que será usado no desenvolvimento do sistema? Quadro 1. Questões de apoio para identificar fontes de informação Leffingwell (2011) sugere que, para determinados casos, seja utilizado o mapeamento de personas. Uma persona primária pode ser entendida como alguém que interage com o software e que necessita de uma interface projetada especificamente para ela. Uma persona secundária é um usuário que utiliza o software com uma interface projetada para outro tipo de usuário. Mapear uma persona significa caracterizar um representante hipotético, genérico, de uma classe de usuários. Personas devem ser caracterizadas considerando caracte- rísticas e comportamentos sociais e demográficos, preferências, preocupações e informações similares (WIEGERS; BEATTY, 2013). 7Seleção de técnicas de elicitação de requisitos de software 2 Técnicas de elicitação de requisitos O ponto mais crítico da engenharia de requisitos é a elicitação. Podemos dizer que ela é o coração do desenvolvimento de requisitos (WIEGERS; BEATTY, 2013). Não se trata apenas de perguntar o que um grupo de usuários deseja, mas, sim, de investigar, instigar, questionar, descobrir, explorar — em resumo, extrair. Não se trata de apenas transcrever o que o usuário relata em uma conversa, mas sim de explorar, de forma colaborativa, todos os aspectos necessários para o entendimento correto do requisito. É um constante exercício de: “e se…”, traduzido como: “e se acontecer tal coisa, como o sistema deve reagir?”; “e se não acontecer tal coisa, como o sistema deve tratar?”. Lembre-se, no entanto, de que a tarefa de elicitação de requisitos não é trivial. Os usuários nem sempre sabem explicar as suas tarefas, podem es- quecer ou deixar informações importantes de lado ou podem simplesmente não estar disponíveis ou não quererem prestar informações (BOURQUE; FAIRLEY, 2014). É função do analista de requisitos obter o engajamento necessário para que essa atividade ocorra adequadamente, gerando a base para as demais atividades do ciclo de desenvolvimento de software. Para que isso seja possível, é necessário selecionar a técnica de elicitação mais apropriada para cada situação específica. Uma técnica de elicitação de requisitos pode ser compreendida como uma ferramenta para auxiliar o analista de requisitos na condução da etapa de elicitação e compreensão dos requisitos do software. Existem diversas técnicas disponíveis; algumas implicam a interação direta com um stakeholder humano, enquanto outras se aplicama outros tipos de fontes de informação. Independentemente da técnica selecionada, as seguintes etapas de prepa- ração são necessárias: � Identificação das fontes de informação: identificação das pessoas com competência para prestar a informação, bem como das demais fontes de informação, como documentos, elementos multimídia, softwares etc., conforme detalhado na seção anterior. � Familiarização com o assunto: buscar conhecer, antecipadamente, as terminologias e os jargões da área de negócio que está sendo tratada, bem como os conceitos-chave do negócio. Pesquisas em documentos do domínio ou uma busca rápida na web podem ajudar. Seleção de técnicas de elicitação de requisitos de software8 � Identificação dos objetivos: identificar claramente os objetivos da elicitação, o nível de informação, os tópicos principais, a relevância, a precedência e as prioridades. � Elaboração do cronograma: elaborar com antecedência o cronograma de atividades necessárias, visando à divulgação dos objetivos e infor- mações logísticas (local, data, horário, materiais necessários). � Identificação dos riscos na elicitação: identificar e documentar os possíveis riscos envolvidos na elicitação de requisitos e as ações que serão adotadas para preveni-los ou mitigá-los. Neste capítulo, iremos abordar as seguintes técnicas, que envolvem a interação direta ou indireta com fontes de informação humanas: � entrevista; � reunião; � brainstorming; � observação; � questionário. Ao final da seção, também abordaremos outras técnicas de elicitação que não envolvem stakeholders humanos. Entrevista Uma das formas mais usuais de se realizar a elicitação de requisitos a partir de fontes humanas é a entrevista. Trata-se de uma conversa entre duas pessoas, provocada por uma delas, com um objetivo definido. A entrevista proporciona o contato pessoal, que faz com que o entrevistado se sinta parte do processo de construção da solução. A entrevista facilita a obtenção de informações que, muitas vezes, estão apenas na memória das pessoas, além de informações a respeito dos integrantes da unidade, como suas qualificações, atribuições, utilização de processos, bem como opiniões sobre a unidade e o trabalho. Se uma boa relação é estabelecida com o entrevistado ou com um pequeno grupo de entrevistados, eles podem se sentir mais seguros para falar sobre questões mais delicadas do que em um grupo maior (WIEGERS; BEATTY, 2013). 9Seleção de técnicas de elicitação de requisitos de software Como qualquer outra técnica, a entrevista exige uma preparação por parte do entrevistador. É recomendado que ele prepare uma lista de questões mais abrangentes no início e que, progressivamente, ficam mais detalhadas. As questões devem seguir uma ordem lógica e abordar um assunto de cada vez. O roteiro com as questões deve servir apenas para guiar e orientar o processo de entrevista, ele não deve ser usado de forma restritiva, pois a riqueza do processo de entrevista está justamente no oposto. O entrevistador tem que dar espaço para que o entrevistado possa se manifestar livremente sobre seus anseios em relação à solução que está sendo desenvolvida. A entrevista pode não obter os resultados desejados, caso ocorra uma das seguintes situações: � falta de preparo do condutor da entrevista; � falta de preparo do entrevistado; � tendência do entrevistado em dar respostas agradáveis; � tendência do entrevistado em focar em palpites ou em respostas falsas; � resistência do entrevistado com declarações do tipo “não sei”, “não conheço”. Veja aqui algumas dicas adicionais para a condução de entrevistas para a elicitação de requisitos: � conquiste a confiança do entrevistado se apresentando e explicando claramente a finalidade do encontro; � tome notas durante a entrevista ou grave-a (se o entrevistado permitir); � se possível, utilize o papel do redator (liberando você para focar na conversa com o entrevistado); � deixe para analisar criticamente depois (não corrija falhas, faça críticas ou discuta); � inicie com questões mais abertas, tipo “como é o trabalho que você realiza?”; � evite termos muito técnicos e tente se aproximar do jargão da área; � evite perguntas com respostas apenas do tipo “sim” ou “não”, que podem limitar a participação do entrevistado; � se a entrevista se desviar, reconduza, com habilidade, para o fim programado; � se o entrevistado se recusar a fornecer dados, obtenha a cooperação de outros colegas em papel similar ou, em último caso, do superior hierárquico do entrevistado; � esclareça as possíveis preocupações por parte do entrevistado; � dê abertura para novos contatos, da sua parte e da parte do entrevistado; � valide as informações obtidas com relação ao objetivo previamente estipulado. Seleção de técnicas de elicitação de requisitos de software10 Embora a entrevista geralmente seja conduzida de forma presencial, hoje já é muito comum que ela também seja realizada on-line, usando ferramentas de comunicação. O único cuidado é garantir que a tecnologia de suporte (ferramenta, rede, internet) funcione adequadamente, evitando as interrupções, que prejudicam o andamento da conversa. Interrupções por falha na tecnologia fazem com que se perca o ritmo da conversa e se gaste tempo para retomar ao ponto anterior. Wiegers e Beatty (2013) ressaltam a importância de praticar a escuta ativa em todas as interações com os usuários. Isso significa manter uma postura corporal receptiva, ter paciência, dar feedback verbal e questionar pontos que não ficaram claros. Além disso, outra forma de demonstrar a escuta ativa é pa- rafrasear o que o entrevistado disse, demonstrando que entendeu a mensagem. Reunião Outra forma bastante comum de elicitação de requisitos é a reunião. Uma reunião é o intercâmbio de ideias, sugestões e opiniões entre determinados indivíduos, visando à aceitação de um ponto de vista (esclarecimento, con- clusão, decisão, linha de ação etc.) por parte dos participantes. A reunião é uma comunicação direta entre os participantes e permite a integração do grupo em torno do mesmo assunto, formando uma equipe de trabalho. Ela é usada para a coleta de sugestões e críticas dos participantes (discussões, acertos, acordos e busca de consenso e alternativas); aglutinação e intercâmbio de experiências; e definição de problemas que devem ser tratados pela solução, explorando as suas causas e efeitos. Ela permite o envolvimento das pessoas para a tomada de decisão em grupo. Assim como a entrevista, a reunião exige uma preparação por parte de quem vai conduzi-la. É preciso organizar a agenda dos tópicos que serão tratados, bem como o tempo estimado para discutir cada item. O ambiente no qual a reunião ocorrerá deve ser amplo, ventilado e iluminado. O espaço deve ser suficiente para acomodar todos os participantes. Material de apoio deve ser providenciado, como quadro branco e canetas para anotações, computador, projetor, tela de projeção e demais materiais de escritório. 11Seleção de técnicas de elicitação de requisitos de software A reunião tem estes três momentos: � Abertura: apresentação dos participantes, dos objetivos da reunião, das regras de condução e da duração prevista, bem como definição do redator da ata de reunião. Caso seja uma reunião de continuidade, a ata da reunião anterior deve ser lida e os pontos pendentes, tratados. � Abordagem dos tópicos: exposição dos problemas e/ou questões que se deseja resolver no decorrer da reunião; abertura da discussão e ponderação até a seleção da alternativa mais adequada; busca pela decisão consensual, evitando os conflitos. � Conclusão: definição de quem é responsável pelas ações decorrentes da reunião e como será retornado o feedback para os participantes. Para que uma reunião com o objetivo de elicitação de requisitos seja bem- -sucedida, é importante que o analista de requisitos que vai conduzi-la seja cuidadoso ao se preparar. Existem algumas recomendações quepodem ajudar: � encaminhe a agenda para os participantes com antecedência, para que possam se planejar (assunto, participantes, horário, local); � o término deve ocorrer exatamente na hora marcada, pois as pessoas têm outros compromissos profissionais e, principalmente, pessoais; � se necessário, faça a reunião em outro local, afastado do ambiente de trabalho, para evitar interrupções; � não defenda ao extremo os seus dados, prefira levar o grupo a deduzir que eles estão corretos a partir das informações objetivas; � não mostre contrariedade quando o grupo rejeitar suas ideias; � evite impasses, pois, em uma discussão, não devem existir vencedores nem derrotados — isso é péssimo para a continuidade do projeto; � não mude de opinião apenas para impedir o conflito, siga os seus ob- jetivos com coerência; � encaminhe as decisões por meio de consenso, nunca por votação ou barganha; � ao concluir a reunião, agende data, horário e local da próxima, se necessário; � se possível, procure registrar os acontecimentos diretamente em uma ata ou memória da reunião e obtenha as assinaturas ao final da reunião, evitando assim questionamentos posteriores quanto ao seu conteúdo. Seleção de técnicas de elicitação de requisitos de software12 Embora tudo tenha sido preparado com antecedência, alguns imprevistos podem acontecer e a reunião pode não ser bem-sucedida caso ocorra uma das seguintes situações: � se houver uma possível dominação da reunião por um só indivíduo, cujo talento, personalidade ou conhecimento inibem os demais participantes; � se houver conformidade de alguns participantes, aceitando a opinião da maioria para se sentirem parte do grupo ou para evitar o conflito (isso pode inibir soluções novas, arrojadas e diferentes); � se houver faltas, atrasos e saídas antecipadas; � se o ambiente físico for inadequado, levando ao desconforto ou distra- ções (ambiente com muito barulho, por exemplo); � se houver participação de pessoas não relacionadas ao assunto, que não contribuem e ainda podem atrapalhar os resultados. Veja aqui algumas dicas de perguntas para a condução de reuniões para a elicitação de requisitos: � Pergunta dirigida: pergunta dirigida especificamente a um participante. Ideal para lidar com pessoas tímidas. Por exemplo: “Gostaríamos de ouvir a opinião de Fulano sobre o assunto”; “Por favor, Sr. Fulano, poderia nos dizer alguma coisa?”. � Pergunta geral: pergunta dirigida a todos os participantes, com a finalidade de estimular a discussão. É um meio de reanimar discussões que, repentinamente, esfriaram. Por exemplo: “Que mais poderíamos considerar a respeito do que foi exposto?”; “Que outras medidas poderiam ser tomadas nesse caso?”; “Que alter- nativas vocês sugerem?”. � Pergunta redistribuída: pergunta que é retornada por quem a recebeu para um dos demais participantes ou a todo o grupo. Por exemplo: “É uma boa pergunta, como os senhores responderiam?”; “Ninguém melhor do que Fulano, que entende desse assunto, para responder a essa pergunta”. � Reversa: pergunta endereçada ao condutor, que a devolve a quem a formulou. Esse processo exige certo tato, porque pode gerar antagonismo ou embaraço no participante, que pode, receando que isso se repita, optar por não mais se manifestar. 13Seleção de técnicas de elicitação de requisitos de software Brainstorming O brainstorming consiste em uma “tempestade de ideias”, sem julgamentos ou análises, que ocorre em um ambiente descontraído e informal. Sentar-se sozinho ou com um amigo para pensar em uma nova ideia não é exatamente um brainstorming. A aplicação da técnica requer preparação e envolvimento de mais pessoas. Inicialmente, deve ser selecionada uma dinâmica para o entrosamento dos participantes, que permita que o ambiente fique descontraído e propício à criatividade. É comum que seja alguma brincadeira simples, com cunho divertido, realizada em pé ou se movimentando. Esse aquecimento não deve tomar muito tempo do evento. O material necessário para o brainstorming também deve ser providenciado com antecedência e pode ser constituído de notinhas adesivas coloridas (tipo Post-it) e canetas coloridas. A quantidade vai depender da quantidade de pessoas e dos objetivos do brainstorming. Lembre-se de que a base é a geração de muitas ideias, e cada uma deve ser escrita em uma notinha. A seção de brainstorming é composta por três fases: aquecimento (com a dinâmica selecionada), ideação (com a geração das ideias) e encerramento (com o agrupamento das ideias). Opcionalmente, pode ser realizada, na última etapa, uma breve análise ou votação das melhores ideias. Algumas questões devem ser observadas para que o brainstorming seja realizado com sucesso: � o brainstorming não se aplica a grupos muito fechados e formais; � o clima precisa ser descontraído e não pode haver críticas, julgamentos e gozações, pois isso inibe o fluxo de ideias; � quando o grupo for muito grande, o ideal é dividi-lo em subgrupos com não mais do que 8 pessoas cada (o número depende do contexto e dos perfis). Seleção de técnicas de elicitação de requisitos de software14 Observação Como o próprio nome sugere, esta é uma técnica na qual o analista de requi- sitos vai a campo para poder observar como o trabalho ocorre. Esta técnica utiliza os sentidos na obtenção de determinados aspectos da realidade. Não consiste apenas em ver e ouvir, mas em examinar fatos ou fenômenos que se deseja estudar. A observação pode ser usada para confirmar informações obtidas das entrevistas, questionários ou documentos, comparando-as com a realidade. Pode-se levantar volumes, acessar outras fontes de informações (manuais de procedimentos etc.) e levantar o fluxo de documentos ao longo das tarefas. Ela é capaz ainda de ajudar a ter ideias sobre pontos nos quais o novo software pode reduzir gargalos e minimizar trabalhos realizados de forma manual. A principal limitação da observação é a interferência, mesmo que não intencional, no ambiente de trabalho. A presença de um observador sempre provoca perturbações nas pessoas, o que pode alterar as condições reais em que o trabalho é realizado, por mais discreto que seja o observador. Outra questão importante é que o observador tem seu próprio ponto de vista, ou seja, a sua ótica pessoal, e pode tender a criar impressões favoráveis ou desfavoráveis. Pode haver eventos que ocorrem ocasionalmente e sua ocorrência espontânea não pode ser prevista, o que impede, muitas vezes, o observador de presenciar o fato. E, uma última limitação, é que a observação consome tempo e certa- mente não será viável para ser utilizada em cada tarefa que o usuário realiza. O tempo de duração de uma observação pode variar, de acordo com o que se pretende observar. É importante certificar-se que o fenômeno que se deseja observar irá ocorrer durante o período da observação. Se a necessidade for de observar algo que ocorre apenas em momentos de pico, por exemplo, é necessário que sejam identificados os períodos em que esses picos tendem a acontecer, para que o observador possa estar presente. O observador deve tomar notas de forma discreta, buscando não despertar nas pessoas a sensação de estarem sendo vigiadas. Gravações de áudio e vídeo só podem ser realizadas com autorização. Há casos em que é possível realizar uma observação menos passiva e mais ativa, na qual uma interação com o executor da tarefa é possível. Isso pode ser útil para compreender por que ele tomou aquela decisão naquele momento e com base em que informações a decisão foi tomada. 15Seleção de técnicas de elicitação de requisitos de software A observação requer um olhar atento e muita discrição. Eis o que você deve observar no ambiente: � Como ocorre o fluxo de atividades entre os participantes do processo? � Existem momentos de pico de atividades? � Existem problemas causados pela tecnologia ou pela ausência dela? � O que acontece quando a tecnologia falha (cai a rede, porexemplo)? � Quais são os fluxos alternativos e casos que requerem um tratamento especial? Questionário A técnica de questionário, também conhecida como survey ou pesquisa de opinião, nada mais é do que a aplicação de um instrumento na forma de ques- tionário, que tem por objetivo coletar informações de fontes, que podem ser em grande volume e estar distantes fisicamente. O questionário pode ser a porta de entrada para outras técnicas, por exemplo, levantando as principais dores dos usuários com o processo ou o sistema atual (WIEGERS; BEATTY, 2013). O questionário é composto por um conjunto de perguntas com respostas objetivas ou abertas, dispostas em sequência lógica e progressiva. O objetivo do questionário é obter informações que servirão de base para tratamentos estatísticos. Lembre-se de que, se forem poucas pessoas, talvez seja melhor realizar uma entrevista. Tenha em mente também que os questionários são frios e impessoais e não permitem a mesma riqueza de outras técnicas. Embora, à primeira vista, possa parecer que utilizar um questionário seja uma atividade simples, na realidade, não é. Elaborar questões é uma tarefa que exige conhecimento e experiência. Primeiro, porque as pessoas não gostam de responder questionários e, portanto, ele deve ser curto e fácil de responder. Segundo, porque exige habilidade para não introduzir viés e nem direcionar as respostas. E, por fim, as perguntas devem permitir que sejam obtidas as informações que o analista de requisitos necessita efetivamente. A preparação do questionário envolve elaborar as questões, estimar o tempo de resposta, simular previamente as análises e realizar um teste piloto. Esse teste piloto deve permitir identificar se as pessoas conseguem compreender adequadamente o que está sendo perguntado e se o tempo de preenchimento está compatível com o estimado. Ajustes podem ser feitos após o teste piloto. Seleção de técnicas de elicitação de requisitos de software16 Depois da etapa de preparação é que o questionário pode ser distribuído para o público-alvo, estipulando-se a data esperada para retorno. Lembretes para resposta podem ser enviados no período. Para aumentar as chances de sucesso do seu questionário, fique atento a estas dicas: � adicione uma breve introdução, que esclareça os pontos principais; � utilize uma linguagem clara e simples para elaborar as perguntas; � utilize frases concisas, sem prejudicar o entendimento da questão; � utilize termos que evitem a dupla interpretação; � dê preferência para as questões objetivas e que possam ser facilmente tabuladas, fornecendo conclusões objetivas sobre o trabalho em andamento; � revise se as alternativas cobrem todas as possibilidades que deseja investigar; � não deixe um espaço muito grande para as respostas das questões abertas, de modo a evitar longos discursos do respondente; � utilize perguntas encadeadas (para testar a coerência das respostas) e perguntas complementares (fará esgotar o assunto). Outras técnicas As técnicas descritas até aqui se aplicam à elicitação de requisitos realizada quando existem classes de stakeholders que podem ser representadas por uma pessoa, com a qual se pode fazer contato direto (como entrevistas e reuniões) ou indireto (como no caso do questionário). Existem ainda outras técnicas derivadas do design thinking que podem ser utilizadas quando as fontes são humanas, mas elas não serão objeto deste capítulo. Existem alguns tipos de requisitos que são provenientes de outras fontes não humanas, como, por exemplo, leis ou normativas de órgãos regulamentado- res. No segmento bancário, por exemplo, temos as normativas provenientes do Banco Central, do Conselho Monetário Nacional, da Comissão de Valores Mobiliários (CVM) etc. Temos ainda órgãos que regulamentam outros setores como a Agência Nacional de Saúde (ANS), a Agência Nacional de Teleco- municações (ANATEL), a Agência Nacional de Energia Elétrica (ANEEL) e diversos outros. Essas leis ou normativas precisam ser lidas e interpretadas pelo 17Seleção de técnicas de elicitação de requisitos de software analista de requisitos junto com os especialistas do negócio. As regras impostas tornam-se requisitos que devem ser atendidos pelo produto de software. Algumas vezes, o produto está sendo desenvolvido para substituir um software anterior, que pode não ter documentação associada e, portanto, a única fonte dos requisitos é o próprio software que está sendo substituído. Nesses casos, os requisitos podem ter que ser extraídos por meio da execução simulada de tarefas (funcionalidades) ou da leitura do código-fonte. Além disto, pode ainda haver um backlog de sugestões de melhoria pendentes do sistema anterior, que pode servir de base para as funcionalidades do novo produto. Abordagem similar é utilizada quando se quer obter requisitos a partir do produto dos concorrentes, com a diferença de que, normalmente, não se tem acesso ao código-fonte. 3 Seleção da técnica de elicitação de requisitos Na fase de elicitação de requisitos nunca se utiliza apenas uma técnica e nem somente aquela que se conhece, mas todas as que forem necessárias ou apro- priadas para cada caso. Algumas dicas para aplicar a técnica mais adequada e obter os melhores resultados de seu uso são descritas no Quadro 2. Técnica Quando usar Entrevista � Quando existem pessoas que têm o conhecimento necessário sobre o negócio e que estão disponíveis para serem entrevistadas. � Para captar as informações subjetivas (desabafos, sentimentos, pontos de vista) que podem ser úteis para a definição de requisitos do sistema. � Para identificar o fluxo de trabalho e de documentos. Quadro 2. Seleção das técnicas de elicitação de requisitos (Continua) Seleção de técnicas de elicitação de requisitos de software18 Técnica Quando usar Reunião � Para obter uma resposta rápida de várias pessoas sobre determinado assunto. � Quando existem problemas ou questões a serem esclarecidos, compartilhados e expostos com os demais participantes. � Para envolver o grupo da tomada de decisão. � Para resolver situações de conflito (busca de consenso). � Para fazer levantamento de alternativas e soluções para determinado problema. � Para analisar, avaliar e resolver problemas que envolvam pessoas de áreas ou empresas distintas. � Por exigência legal da empresa ou do governo. Brainstorming � Quando o ambiente da empresa é informal e propício para o desenvolvimento de atividades criativas. � Quando se deseja encontrar soluções inovadoras e criativas. � Quando se deseja lançar novos produtos no mercado. Observação � Quando o fluxo de papéis e de trabalho é relevante. � Quando problemas de desempenho estão relacionados à forma de executar o trabalho. � Quando a influência do ambiente real é importante. Questionário � Se não houver tempo suficiente para entrevistar todas as pessoas relevantes. � Se as informações puderem ser adequadamente trabalhadas para fins estatísticos. � Se as pessoas estão situadas em pontos geográficos muito distantes. � Se, para prestar informações, houver necessidade de consultar arquivos físicos. Quadro 2. Seleção das técnicas de elicitação de requisitos (Continuação) Wiegers e Beatty (2013) compilaram diversas informações e recomendações para a seleção da melhor técnica de elicitação de requisitos de acordo com as características dos projetos. Elas estão representadas no Quadro 3. 19Seleção de técnicas de elicitação de requisitos de software Fonte: Adaptado de Wiegers e Beatty (2013). E nt re vi st a W or ks ho p G ru po F oc al O bs er va çã o Q ue st io ná ri o A ná lis e de in te rf ac e de s is te m as A ná lis e de in te rf ac e de u su ár io A ná lis e de d oc um en to s Software para o mercado × × × Software interno para a organização × × × × × × Software para substituir outro × × × × × × Melhorias em sistemas existentes × × × × × Novo software × ×× Implementação de pacote de software × × × × × Sistemas embarcados × × × × Stakeholders distribuídos geograficamente × × × Quadro 3. Seleção das técnicas de elicitação de requisitos de acordo com Wiegers e Beatty (2013) Como se pode observar no Quadro 3, os autores consideram duas formas de elicitação que não foram abordadas neste capítulo: grupo focal e workshop. Mais informações sobre essas formas de elicitar requisitos podem ser obtidas em Wiegers e Beatty (2013). Não considere esta lista como definitiva e exaus- tiva. As técnicas podem ser combinadas de acordo com suas necessidades em cada projeto. Seleção de técnicas de elicitação de requisitos de software20 BOURQUE, P.; FAIRLEY, R. SWEBOK: guide to the software engineering body of knowledge version 3. [S. l.]: IEEE Computer Society, 2014. LEFFINGWELL, D. Agile software requirements: lean requirements practices for teams, programs, and the enterprise. Upper Saddle River: Pearson Education, 2011. POHL, K.; RUPP, C. Requirements engineering fundamentals: a study guide for the certified professional for requirements engineering exam, foundation level, IREB Compliant. 2. ed. Santa Barbara: Rock Nook, 2015. SCHWABER, K.; SUTHERLAND, J. Guia do SCRUM: um guia definitivo para o SCRUM: as regras do jogo. [S. l.], 2013. Disponível em: https://www.scrumguides.org/docs/ scrumguide/v1/Scrum-Guide-Portuguese-BR.pdf. Acesso em: 31 jan. 2020. WIEGERS, K. E.; BEATTY, J. Software requirements. 3. ed. Redmond: Microsoft Press, 2013. Leitura recomendada PRESSMAN, R.; MAXIM, B. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016. 21Seleção de técnicas de elicitação de requisitos de software DICA DO PROFESSOR Uma das maiores causas de fracasso em projetos de software é a condução indevida das atividades relacionadas à Engenharia de Requisitos. A mais crítica destas etapas é, certamente, a elicitação de requisitos. Diversas são as técnicas que podem ser utilizadas para descobrir os requisitos de um produto de software. O JAD (Joint Application Design ou Joint Application Development) é uma destas técnicas. Ela visa reunir os stakeholders relevantes do projeto em torno de um mesmo objetivo: elicitar os requisitos do projeto, reduzindo as possíveis falhas de comunicação e interpretação. Nesta Dica do Professor, você irá conhecer um pouco mais sobre o JAD e compreenderá sua importância em projetos de software. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS 1) Pedro foi alocado para realizar a elicitação de requisitos de um sistema no qual o cliente é uma grande empresa de seguros. O objetivo é desenvolver uma nova versão para um sistema já existente. Diversos usuários teriam que ser envolvidos e um possível conflito de prioridades poderia ocorrer. O gerente de Pedro aconselhou que ele utilizasse terno e gravata, de acordo com as características da empresa. Que técnica de elicitação de requisitos Pedro deveria aplicar? A) Brainstorming. B) Entrevista. C) Reunião tradicional. D) Observação. E) JAD. 2) Raquel deve preparar a elicitação de requisitos para um novo sistema de apoio a uma agência de publicidade. O gerente de Raquel a orientou a se vestir de maneira mais informal, pois os clientes são pessoas jovens e o ambiente da empresa é descontraído e criativo. Que técnica de elicitação de requisitos Raquel deveria aplicar? A) Brainstorming. B) Entrevista. C) Observação. D) Reunião tradicional. E) JAD. 3) Eduardo foi contratado como Analista de Requisitos de um sistema de bonificação de pesquisadores por resultado. A principal característica deste sistema é a variedade de perfis que o utilizarão. Todos os usuários possuem necessidades que devem ser levantadas, mas eles se encontram dispersos em universidades nos 5 continentes. Serão considerados os requisitos que a maioria das Universidades apontarem como críticos ou imprescindíveis. Qual técnica de elicitação de requisitos Eduardo deve utilizar? A) Brainstorming. B) JAD. C) Questionário. D) Reunião tradicional. E) Entrevista. 4) Um produto de software não existe de forma isolada, ele está inserido em um contexto social e organizacional. A técnica que ajuda um analista de requisitos a identificar este contexto, suas interações e possíveis requisitos que possam estar implícitos ou invisíveis é: A) Brainstorming. B) JAD. C) Reunião tradicional. D) Observação. E) Entrevista. Um novo modelo de carro está sendo lançado no mercado e você vai ser o responsável pelos requisitos da central multimídia que vai fazer parte do projeto. O diretor executivo anunciou que quer um produto inovador que conquiste o público jovem e que você tem autonomia para as decisões. Decida quais técnicas de elicitação de requisitos serão utilizadas de acordo com as características do projeto. I – Você irá realizar um brainstorming, uma vez que se trata de um produto inovador. 5) II – Você irá realizar entrevistas com os engenheiros do projeto para entender as interfaces necessárias ao novo carro. III – Você irá realizar uma observação para analisar como os motoristas dirigem os carros atuais. IV – Você irá realizar um JAD para projetar o software e gerenciar os conflitos. Assinale a alternativa abaixo que contém apenas as assertivas corretas. A) As assertivas I, II, III e IV estão corretas. B) As assertivas I, II e IV estão corretas. C) As assertivas I, III e IV estão corretas. D) As assertivas I e II estão corretas. E) Apenas a assertiva I está correta. NA PRÁTICA Um dos cuidados que um Analista de Requisitos deve ter para elicitar os requisitos de um projeto de software é selecionar adequadamente a técnica que será utilizada. Isso depende das características do projeto e do contexto no qual ele será desenvolvido. Quando o projeto é inovador e se busca por soluções criativas, uma boa ideia é utilizar o brainstorming. A técnica é adequada a ambientes mais informais e descontraídos. Geralmente, se evita o brainstorming em ambientes muito formais ou muito hierarquizados. Também não se recomenda misturar níveis hierárquicos quando se deseja explorar as ideias sem críticas e inibições. Confira, Na Prática, alguns dos desafios que envolvem a atividade de conduzir uma sessão de brainstorming. Conteúdo interativo disponível na plataforma de ensino! SAIBA MAIS Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: O que é uma persona? Neste vídeo, Daniel Furtado apresenta os conceitos sobre o que é uma persona e ressalta a importância de colocar o usuário como o protagonista do processo. Conteúdo interativo disponível na plataforma de ensino! Como criar personas? Neste vídeo, Daniel Furtado apresenta formas de criar uma persona e inicia sua fala com uma metáfora utilizando Lego. O foco é a análise inicial para verificar se o mercado tem necessidade do produto que você está desenvolvendo. Conteúdo interativo disponível na plataforma de ensino! 5 passos para um brainstorming perfeito Neste vídeo da DreamU, são explicadas as regras para a condução de um brainstorming, uma das técnicas mais usadas para a criação de novos produtos ou soluções inovadoras. O autor explica os conceitos de pensamento divergente e pensamento convergente. Conteúdo interativo disponível na plataforma de ensino! Engenharia de software: uma abordagem profissional Este material vai ajudar você a compreender os principais conceitos envolvidos na elicitação de requisitos de software. Foque sua atenção nas páginas 138-149 do livro de Roger Pressman e Bruce Maxim. Especificação de requisitos funcionais utilizando casos de uso APRESENTAÇÃO Satisfazer às necessidades dos usuários de um produto de software não é uma tarefa simples. Em primeiro lugar, o software é um produto intangível, diferente de outros bens de consumo produzidos pela indústria. Segundo, o que o cliente necessita não é exatamenteo software em si, mas o valor que esse software vai agregar, seja para as suas atividades profissionais, seja na sua vida pessoal. Terceiro, a mudança é uma constante, e o que faz sentido hoje pode não ser mais necessário daqui a três meses. Para que um produto de software possa cumprir o seu propósito, ou seja, entregar o valor esperado pelo cliente, é imprescindível que o analista de requisitos (ou papel equivalente) execute bem o seu papel. Isso quer dizer que é função dele realizar as articulação do diversos stakeholders para que possam ser extraídos os requisitos do produto e que, uma vez identificados, possam ser especificados no nível de detalhe necessário para que a equipe de desenvolvimento possa produzir o produto desejado. Esse nível de detalhe pode variar de acordo com as características do contexto, ou seja, não existe uma fórmula única para todas as situações. Haverá situações em que um nível muito grande de detalhe será necessário e outras em que apenas um desenho será suficiente. Nesta Unidade de Aprendizagem, você aprenderá a identificar os elementos que compõem uma especificação de casos de uso. Irá aprender também como elaborar o fluxo principal de um cenário de caso de uso, além dos fluxos alternativos e de exceção. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Identificar os elementos que compõem uma especificação de caso de uso.• Criar o fluxo principal de um cenário de caso de uso.• Projetar fluxos alternativos e de exceção em cenários de caso de uso.• DESAFIO Uma das formas de realizar a especificação de requisitos funcionais é utilizar a abordagem de casos de uso. Essa abordagem é composta por um diagrama e uma especificação. Ambos têm uma função importante na comunicação entre a equipe de desenvolvimento e os usuários. Para que possam ser utilizados de forma efetiva, ambos os instrumentos precisam estar alinhados e coerentes entre si. Caso ocorra um desalinhamento, ele pode gerar inconsistências na implementação. A empresa onde você trabalha foi contratada por uma universidade para desenvolver diversos aplicativos para apoio às suas novas demandas. Você foi alocado para ser o analista de requisitos do primeiro aplicativo: um software de apoio para os estudantes intercambistas estrangeiros que chegam para estudar na universidade. INFOGRÁFICO Ao se adotar a abordagem de casos de uso para especificar os requisitos funcionais de um projeto de software, dois artefatos devem ser desenvolvidos: o diagrama de casos de uso e as especificações de caso de uso. É comum que se comece desenhando o diagrama e utilizando-o como instrumento de comunicação com os usuários para a elicitação mais aprofundada desses requisitos. Esses detalhes de como o caso de uso vai se comportar compõem as especificações de caso de uso. Acompanhe, no Infográfico a seguir, os passos para criar a especificação de casos de uso. CONTEÚDO DO LIVRO Identificar e especificar adequadamente os requisitos de um projeto de software são importantes passos rumo à qualidade da entrega. Requisitos mal compreendidos e mal especificados são as causas mais frequentes de problemas em projetos. Existem diversas formas de realizar essa especificação, mas o mais importante é utilizar uma abordagem centrada no usuário, ou seja, aquela que valoriza e coloca o usuário no centro do processo. Afinal, quem vai utilizar o produto é ele. A abordagem de casos de uso se baseia no desenho de um diagrama, com formas simples e de fácil compreensão, e uma especificação, que detalha o funcionamento de um caso de uso. No capítulo Especificação de requisitos funcionais usando casos de uso, da obra Engenharia de requisitos, você vai aprender a identificar os elementos que compõem uma especificação de casos de uso e como elaborar o fluxo principal e os fluxos alternativos e de exceção. Boa leitura. ENGENHARIA DE REQUISITOS Sheila Reinehr Especificação de requisitos funcionais utilizando casos de uso Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Identificar os elementos que compõem uma especificação de caso de uso. � Criar o fluxo principal de um cenário de caso de uso. � Projetar fluxos alternativos e de exceção em cenários de caso de uso. Introdução Há várias formas de expressar os requisitos funcionais de um projeto. Podemos fazer isso por meio de desenhos, diagramas, textos escritos em linguagem natural, cartões, Post-it® ou qualquer outro meio que a equipe considere eficiente. O mais importante é a essência, ou seja, que tenha sido estabelecida a conexão, o alinhamento, entre a equipe de desenvolvimento e o cliente. A forma como isso será registrado vai depender de diversas variáveis de contexto. Independentemente de o ambiente no qual o projeto está sendo desenvolvido ser gerenciado de forma mais tradicional ou de forma ágil, requisitos sempre serão o ponto fundamental do sucesso do projeto. Compreender a real necessidade do negócio e projetar a forma como o software pode agregar valor nesse contexto já é meio caminho andado. Casos de uso têm sido uma forma pela qual as organizações desen- volvedoras de software têm especificado requisitos funcionais. Isso é feito utilizando-se tanto o diagrama de casos de uso, proveniente da UML (em inglês, Unified Modeling Language), quanto a especificação de casos de uso, que tem origens e formatos diversos. Neste capítulo você vai estudar os elementos que compõem a es- pecificação de casos de uso, uma importante ferramenta de apoio ao diagrama de casos de uso. Vai ver também como identificar os passos que compõem o fluxo principal de um caso de uso, os fluxos alternativos e de exceção. 1 Elementos da especificação de casos de uso Especificar requisitos funcionais utilizando a abordagem de casos de uso requer duas etapas, uma se refere à construção do diagrama de casos de uso e outra, à especificação que acompanha o diagrama. Pensar em casos de uso significa colocar o usuário no centro do processo e definir funcionalidades que agreguem valor para esse usuário. Diagrama de casos de uso O diagrama de casos de uso é uma ferramenta visual que representa o com- portamento do sistema sob a ótica do usuário (SEIDL et al., 2012). Ele oferece uma visão geral das funcionalidades de um sistema que envolve software. Qualquer stakeholder, mesmo leigo, consegue fazer a leitura de um diagrama de casos de uso e compreender o seu significado, bastando conhecer a sua simbologia, que é bastante simples. O diagrama de casos de uso não oferece uma visão interna da implementação. Para isso existem outros diagramas da UML que podem ajudar. Vamos relembrar o diagrama de casos de uso, tomando como base o contexto mapeado na Figura 1. Suponha que você acaba de entrar em uma empresa e que o seu novo gerente lhe passa este diagrama e pede que você vá se familiarizando com ele para que vocês possam conversar no final da manhã. Mesmo sem conhecer os detalhes deste software, você já consegue rapidamente identificar quem são os atores que fazem parte do contexto, bem como quais são as principais funcionalidades envolvidas. A partir desta representação, já é possível inferir também algumas regras de funcionamento do sistema. Se você tiver alguma experiência, vai até conseguir descobrir que há coisas faltando no diagrama e identificar questões que você poderá esclarecer com o seu gerente quando vocês se reunirem. Ao observar este diagrama, é possível identificar que se trata de um Sistema de Compras On-line, uma vez que existe um retângulo que define a fronteira da aplicação e um título no canto superior esquerdo que indica o nome do sistema. Especificação de requisitos funcionais utilizando casos de uso2 Figura 1. Diagrama de casos de uso. É possível ainda identificar que qualquer pessoa pode acessar o sistema como visitante e pesquisar produtos, mas, para comprar umproduto, é preciso estar logado. Um Comprador Logado poderá realizar todas as funções que um Visitante executa, mas o contrário não é verdadeiro. Você sabe disso porque viu que há um relacionamento de Generalização, que denota a herança entre esses dois atores (a seta sai do Comprador e aponta para o Visitante). Neste momento você percebe que existe uma diferença entre os com- pradores, pois há a figura do Comprador Ouro, e se pergunta: “Mas o que este Comprador Ouro tem de especial? Ele tem algum benefício adicional? Não consigo ver isto no diagrama. Vou perguntar para o gerente”. É possível identificar a mesma situação com o papel do vendedor, ou seja, existe um Vendedor Ouro, mas ainda não sabemos qual é a diferença dele em relação ao ator Vendedor. 3Especificação de requisitos funcionais utilizando casos de uso Você percebe que ao realizar uma compra existem dois tipos de pagamento diferentes, o que é demostrado pelos relacionamentos de extend existentes entre o caso de uso UC4 – Realizar Pagamento e os casos de uso UC5 – Pagar com Boleto e UC6 – Pagar com Cartão de Crédito. Note ainda que, quando for feito o pagamento com cartão de crédito, outro ator terá que ser envolvido, a Operadora de Cartão, uma vez que há uma associação entre eles. Aqui você também já anota que esta situação poderia também ter sido representada por uma relação de Generalização entre UC4 – Realizar Pagamento e os seus possíveis herdeiros UC5 e UC6. Você percebe que a liberação da entrega depende da confirmação do pagamento. No caso do pagamento com cartão de crédito, a confirmação é on-line com a Operadora de Cartão. No caso do pagamento com boleto, isso vai acontecer quando o ator Banco confirmar o pagamento. Isso é representado pelo relacionamento de include, que indica que, quando o caso de uso UC11 – Confirmar Pagamento de Boleto for executado, ele chamará o caso de uso UC10 – Liberar Compra para ser executado também. Você continua sua análise e descobre que existe o caso de uso UC7 – Fazer Denúncias, mas nota que não existe um caso de uso para tratar a denúncia e responder ao denunciante. Faz então mais uma anotação para perguntar ao seu gerente: “Será que a denúncia será tratada manualmente? Teremos que nos relacionar com algum outro sistema? Isso não está claro!”. Lá no final do diagrama você nota que tem um ator chamado Agendador de Tarefas e se lembra que esse tipo de ator é usado quando existem casos de uso que são disparados automaticamente pelo próprio sistema, em resposta a eventos temporais ou de controle. Neste caso, o sistema vai disparar o caso de uso UC9 – Emitir Relatório Gerencial. Aí você pensa: “Qual será a perio- dicidade que isto ocorre? Poderia ter sido adicionada uma nota ao diagrama, descrevendo em que condições este relatório será emitido”. Então acrescenta mais uma pergunta à sua lista de questões a serem discutidas com o seu gerente. Para finalizar sua análise você observa que existe um caso de uso UC1 – Realizar Login, mas não existe nada para tratar situações de exceção, como o esquecimento de senha ou o usuário não estar cadastrado. Você decide questionar seu gerente como será tratada essa questão: se for com um sistema externo, está faltando representá-lo no diagrama; se for pelo próprio sistema, então faltam novos casos de uso, como Realizar Cadastro e Recuperar Senha. Mesmo você não tendo participado da elicitação de requisitos desse software, apenas com essa rápida análise, já foi possível perceber as principais funcionalidades, além de levantar algumas dúvidas que ainda precisam ser esclarecidas. Especificação de requisitos funcionais utilizando casos de uso4 O diagrama de casos de uso realmente é simples e tem um grande poder de comunicação. No entanto, apenas o diagrama não é suficiente para dar continuidade às demais etapas do ciclo de vida de desenvolvimento, uma vez que faltam detalhes para que as funcionalidades possam ser implementadas com sucesso pelos desenvolvedores e testadas pelos testadores. Esses detalhes fazem parte do que é chamado de especificação de casos de uso. Como você já percebeu, cada elemento do diagrama tem um significado específico, e ele precisa estar coerente com os elementos que compõem a especificação do caso de uso. Eles formam um conjunto coerente, no qual o diagrama de casos de uso representa a visão geral das funcionalidades de forma gráfica e a especificação de casos de uso apresenta os detalhes da execução dessas funcionalidades. Esses dois elementos precisam estar alinhados. Se um for alterado, é necessário analisar se o outro também não sofrerá modificações. Especificações de casos de uso Uma especificação de casos de uso consiste em um detalhamento dos cenários de execução dos casos de uso. São acrescentadas informações àquelas que foram representadas graficamente no diagrama, de modo que a equipe de de- senvolvimento tenha mais subsídios para validar e seguir para a implementação. A primeira dúvida que surge quando se inicia a especificação de casos de uso é: até que nível devemos detalhar? E a resposta é: depende. Depende do grau de proximidade dos usuários com a equipe de desenvolvimento, depende do grau de maturidade da própria equipe de desenvolvimento, depende do grau de intimidade que a equipe de desenvolvimento tem com o negócio e suas regras. Portanto, para cada caso, esse grau de detalhamento pode variar — pode inclusive variar dentro do mesmo sistema. Há partes que, por algum motivo, precisam de mais detalhes, enquanto outras não. 5Especificação de requisitos funcionais utilizando casos de uso Wiegers e Beatty (2013) sugerem que os requisitos sejam especificados com mais detalhes nas seguintes situações: � o trabalho está sendo desenvolvido para um cliente externo; � o desenvolvimento ou o teste serão terceirizados; � os membros da equipe do projeto estão geograficamente distribuídos; � os testes de sistema serão baseados nos requisitos; � estimativas precisas são necessárias; � a rastreabilidade dos requisitos é necessária. Por outro lado, Wiegers e Beatty (2013) sugerem que os detalhes sejam evitados quando: � o trabalho está sendo desenvolvido internamente para a sua empresa; � os clientes estão extensivamente envolvidos; � os desenvolvedores têm uma grande experiência no domínio; � há experiência anterior, como quando uma aplicação está sendo desen- volvida para substituir outra; � uma solução do tipo pacote será usada. Existem softwares de modelagem de diagramas UML que permitem não apenas o desenho do diagrama, mas também a inclusão da sua especificação, facilitando, posteriormente, a rastreabilidade. Caso você tenha acesso a uma dessas ferramentas, excelente, mas, se não tiver, sem problemas. Utilize uma ferramenta gratuita para fazer o diagrama e um editor de texto para realizar a especificação. Cada um desses artefatos cumprirá a sua finalidade: o desenho apoiará o diálogo com os diversos stakeholders, especialmente os usuários; e a especificação servirá para apoiar a equipe técnica do projeto. Só não esqueça de manter esses dois elementos sempre alinhados! Quando um deles for alterado, é importante checar se o outro não precisará também ser ajustado. Existem diversos modelos para a especificação dos casos de uso, como os encontrados em Cockburn (2005), Dennis, Wixon e Roth (2012), Seidl et al., (2012) e Guedes (2018). Cockburn (2005) tem preferência por um texto, sem formatação de tabela, mas com os títulos em destaque. Especificação de requisitos funcionais utilizando casos de uso6 Aqui vamos utilizar uma versão derivada desses que é representada no Quadro 1. Cada empresa, no entanto, pode optar por um modelo customizado para as suas necessidades, incluindo mais ou menos detalhes. É importante apenas ressaltar que todos os elementos precisam ser úteis para alguém. Espe- cificações desnecessariamente complicadas podem acabar entrando em desuso. Identificador único do caso de uso Descrição Atorprincipal Atores secundários Pré-condições Gatilho Fluxo principal Ações do ator Ações do sistema Fluxo alternativo Ações do ator Ações do sistema Fluxo de exceção Ações do ator Ações do sistema Pós-condição Quadro 1. Modelo de especificação de casos de uso Vamos conferir a seguir os elementos envolvidos neste template de espe- cificação de casos de uso. 7Especificação de requisitos funcionais utilizando casos de uso O identificador único se refere ao nome do caso de uso. Geralmente se utiliza um verbo no infinitivo, que caracteriza a ação que será realizada. Se você voltar na Figura 1, vai ver que naquele diagrama colocamos também uma sigla UC (advinda de use case), acompanhada de um número sequencial (UC1, UC2 etc.). Esse identificador reduzido não é obrigatório, mas pode ser útil para fazermos a rastreabilidade posteriormente. A descrição visa a apresentar uma visão resumida do objetivo do caso de uso. Pode ser escrita em uma frase simples. Não é um lugar para especificar itens técnicos ou regras de negócio, serve apenas para descrever o objetivo geral do caso de uso. Em seguida temos o ator principal, que é aquele que inicia o caso de uso, e os atores secundários, que são aqueles que participam na execução do caso de uso ou que fornecem informações para que o caso de uso possa ser realizado. Nem todo caso de uso terá atores secundários. Vamos relembrar aqui o conceito de ator. De acordo com a UML (OBJECT MANAGEMENT GROUP, 2017, documento on-line), “Um ator especifica um papel que é desempenhado por um usuário ou qualquer outro sistema que interage com o sujeito”. Entende-se por sujeito o sistema que está sendo especificado. Alguns autores se referem ao sistema como SUD (system under definition ou system under discussion). Um ator é um elemento externo ao sistema. Ele pode representar uma pessoa, um hardware especial ou um outro sistema. Chamamos de hardware especial aquele que é importante de ser destacado, como, por exemplo, algum sensor ou atuador que desempenhe função relevante para o sistema que está sendo modelado. Não precisamos representar a interação com hardwares triviais, como impressoras ou o próprio equipamento onde roda o software. Quando uma funcionalidade é disparada pelo próprio sistema isso é representado usando um ator chamado Agendador de Tarefas (scheduler). Há quem represente o próprio sistema como sendo o ator que dispara esses casos de uso, mas isso vai contra a definição de ator (que é um elemento externo ao sistema). Especificação de requisitos funcionais utilizando casos de uso8 Uma pré-condição é uma condição que tem que ser verdadeira para que o caso de uso tenha início. Ela normalmente é utilizada para estabelecer a sequência de casos de uso que realizam uma grande função de negócio (DENNIS; WIXON; ROTH, 2012). A pré-condição não é testada quando o caso de uso inicia, o caso de uso só inicia se ela for verdadeira. Por exemplo, se, para realizar uma compra, o usuário tem que estar logado, então o caso de uso que realiza o login já tem que ter sido executado com sucesso antes que o caso de uso de compra seja iniciado. Este é um dos casos mais comuns de pré-condição. Uma pós-condição é o status em que o sistema deve ser deixado quando for concluído o caso de uso, ou seja, quando encerrar a execução do caso de uso o sistema garantirá que a pós-condição seja verdadeira. Quando a pós-condição for trivial, não é necessário documentá-la. Por exemplo, para o caso de uso Cadastrar Cliente, não é necessário colocar uma pós-condição “cliente deverá ter sido cadastrado com sucesso”, pois é uma saída trivial de um caso de uso de cadastro. Um gatilho é um evento que dá início ao caso de uso. Quando o caso de uso é chamado por um ator humano, então o gatilho é justamente a chamada feita por esse ator. Na prática, isso significa que será disponibilizado, por exemplo, um item de menu, um botão, um link, por meio do qual o usuário dá início à realização daquele caso de uso. Quando o disparo é automático, de acordo com determinadas circunstâncias, então o gatilho pode ser um determinado momento do tempo (por exemplo, 22:00h), ou pode ser um evento de controle (mudança do estado de algum objeto). O fluxo principal, também chamado de fluxo básico, refere-se ao cenário mais comum de utilização do caso de uso, considerando que tudo deu certo. Ele também é conhecido como o “caminho feliz”. O fluxo principal é geralmente mapeado como uma conversa entre o que o ator faz e o que o sistema responde, por isso as duas colunas no template apresentado no Quadro 1. Pode também ser usada uma única coluna, e cada parte do diálogo ser representada em uma linha. No fluxo principal se considera que todas as interações entre o ator e o sistema foram bem-sucedidas. 9Especificação de requisitos funcionais utilizando casos de uso É necessário tomar cuidado para que o mapeamento do fluxo principal não caia no nível de detalhe de preenchimento de campos da interface. É preciso ter em mente que o caso de uso não é um pseudocódigo da implementação. Nunca esqueça de se perguntar se você não está especificando detalhes desnecessários. Os fluxos alternativos, como o próprio nome sugere, são as possibilidades de cenários alternativos ao fluxo principal, conforme escolhas do usuário ou situações específicas do sistema. Não inclui fluxos para o tratamento de erro, mas sim escolhas que podem ser feitas pelo usuário. Os fluxos de exceção demonstram como o sistema reagirá na presença de situações inesperadas. Os fluxos de exceção podem ocorrer dentro do fluxo principal ou dentro de um fluxo alternativo. Não perca tempo especificando todos os detalhes de um caso de uso ou todos os casos de uso de um sistema, especialmente se eles não forem ser implementados em breve. Especificar casos de uso que só serão implementados em versões muito distantes é perda de tempo. Quando chegar o momento da implementação eles podem ter mudado ou simplesmente podem não ser mais necessários. 2 Especificação do fluxo principal Conforme apresentado na seção anterior, o fluxo principal, também chamado de fluxo básico, refere-se ao cenário mais comum de utilização do caso de uso, considerando que tudo vai dar certo. A finalidade desse mapeamento é Especificação de requisitos funcionais utilizando casos de uso10 identificar as interações que precisam ser previstas por parte do usuário e como o sistema vai tratar essas entradas. Entretanto, é importante manter certo distanciamento dos detalhes da interface, sob pena de ficarmos presos somente a cores, campos e botões. Especificar o fluxo básico é mais do que especificar interfaces; é expressar um caso de sucesso que entrega valor ao usuário! Agora vamos ver um exemplo de uma especificação relacionada ao dia- grama apresentado na Figura 1. Vamos considerar o caso de uso UC3 – Realizar Compra. O primeiro passo é compreender o que está desenhado no diagrama. Imediatamente identificamos o símbolo do ator principal, neste caso, um Comprador Logado. Ele indica que existe uma pré-condição, que é o login já ter sido realizado. Não foram identificados atores secundários no diagrama, e este é o momento de se perguntar se existe algum que foi esquecido. A resposta neste exemplo é “não”, mas, se houver, o digrama de casos de uso deve ser atualizado, para refletir essa nova descoberta. Neste exemplo, não existe pós-condição. O gatilho para que este caso de uso tenha início é a ação do usuário, solicitando a sua execução. Isso é identificado no diagrama de caso de uso pela associação, por meio de uma linha contínua, que liga o ator Comprador Logado ao caso de uso. Se fosse uma tarefa disparada automaticamente pelo sistema, o ator seria um agendador de tarefas e o gatilho seria a condição de guarda desse agendador (por exemplo, a chegada de um momento específico no tempo). O próximo passo é verificar se existe algum tipo de relacionamento com outros casos de uso. No diagrama existeum relacionamento de include com o caso de uso UC2 – Pesquisar Produtos e outro relacionamento de include com o caso de uso UC4 – Realizar Pagamento. Isso significa que esses dois casos de uso deverão ser iniciados dentro do caso de uso que está sendo descrito. A partir dessas informações que foram provenientes do diagrama de casos de uso, é preciso determinar como ocorrerá o diálogo entre o ator e o sistema, para realizar o objetivo do caso de uso. Essa conversa é descrita nos passos do fluxo principal, que são numerados sequencialmente e ordenados na coluna Ações do Ator e na coluna Ações do Sistema. Acompanhe no Quadro 2 como ficou a especificação deste fluxo principal. 11Especificação de requisitos funcionais utilizando casos de uso Identificador único do caso de uso UC3 – Realizar Compra Descrição Permite ao comprador realizar a compra de um produto Ator principal Comprador Logado Atores secundários × Pré-condições O caso de uso UC1 – Realizar Login ter sido executado com sucesso e o comprador estar logado Gatilho Comprador Logado seleciona Realizar Compra Fluxo principal Ações do ator Ações do sistema 2 – Comprador Logado seleciona categoria de produto 4 – Comprador Logado seleciona produto 6 – Comprador Logado informa a quantidade 8 – Comprador Logado seleciona opção de entrega 1 – Sistema exibe categorias de produtos 3 – Sistema executa UC2 – Pesquisar Produtos 5 – Sistema solicita quantidade 7 – Sistema exibe opções de entrega 9 – Sistema executa UC4 – Realizar Pagamento Pós-condição Não se aplica Quadro 2. Especificação do caso de uso UC3 – Realizar Compra – Fluxo Principal Especificação de requisitos funcionais utilizando casos de uso12 3 Especificação dos fluxos alternativos e de exceção Conforme definido na primeira seção deste capítulo, os fluxos alternativos são as possibilidades de cenários alternativos ao fluxo principal, conforme escolhas do usuário ou situações específicas do sistema. Não consiste em fluxos para o tratamento de erro, mas sim em escolhas que podem ser feitas pelo usuário, para executar um cenário alternativo de sucesso. Uma vez mapeado o fluxo principal, vem a pergunta: existe alguma coisa que possa mudar o fluxo principal? O usuário tem alternativas para algum dos passos? Essas alternativas são cenários diferentes e resultam em fluxos alternativos. Suponha que o Comprador Logado possa adicionar um novo endereço de entrega quando estiver selecionando a opção de entrega. Observe no Quadro 3 que é incluído um fluxo alternativo A8 que permitirá realizar essa tarefa. Este fluxo é nomeado com a letra A (alternativo), seguido do número 8, indicando que é a partir do passo 8 do fluxo básico que este fluxo é acionado. No fluxo principal, este fluxo alternativo A8 também é registrado no passo 8. A forma de numerar pode ser diferente desta, à escolha da empresa, desde que forneça interpretação similar e que seja utilizada de forma consistente em todas as especificações. Caso a alteração de endereço fosse realizada por um outro caso de uso, então o diagrama teria que ser alterado para inserir esse caso de uso novo e também o seu relacionamento de extend com o caso de uso em questão. Na especificação seria chamado este novo caso de uso. Os fluxos de exceção demonstram como o sistema reagirá na presença de situações inesperadas, ou seja, ele mapeia caminhos de insucesso. Os fluxos de exceção podem ocorrer tanto dentro do fluxo principal quanto dentro de um fluxo alternativo. Para cada passo do fluxo principal deve-se fazer a pergunta: o que pode dar errado? Cada resposta a essa pergunta vai determinar um fluxo de exceção. Neste exemplo, foram identificadas duas situações: uma em que o produto não está disponível (isso ocorre no passo 4 do fluxo básico) e outra em que a quantidade não está disponível (isso ocorre no passo 6 do fluxo básico). O tratamento para cada uma das exceções será planejado na seção de fluxo de exceção correspondente a cada possibilidade. Assim como fizemos no fluxo principal, precisamos nos questionar o que pode dar errado no fluxo alternativo. Neste exemplo foi identificado que o Com- prador Logado pode ter digitado um CEP inválido (passo A7.2). Isso também é mapeado como um fluxo de exceção, que sai de dentro do fluxo alternativo. 13Especificação de requisitos funcionais utilizando casos de uso Identificador único do caso de uso UC3 – Realizar Compra Descrição Permite ao comprador realizar a compra de um produto Ator principal Comprador Logado Atores secundários × Pré-condições O caso de uso UC1 – Realizar Login ter sido executado com sucesso e o comprador estar logado Fluxo principal Ações do ator Ações do sistema 2 – Comprador Logado seleciona categoria de produto 4 – Comprador Logado seleciona produto 6 – Comprador Logado informa a quantidade 8 – Comprador Logado seleciona opção de entrega (A8) 1 – Sistema exibe categorias de produtos 3 – Sistema executa UC2 – Pesquisar Produtos 5 – Sistema solicita quantidade 7 – Sistema exibe opções de entrega 9 – Sistema executa UC4 – Realizar Pagamento Fluxo Alternativo A8 – Alterar endereço de entrega A8.1 – Comprador Logado seleciona Alterar Endereço A8.3- Comprador Logado preenche novo endereço A8.2 – Sistema solicita novo endereço A8.4 – Sistema salva novo endereço Pós-condição Não se aplica Quadro 3. Especificação do caso de uso UC3 – Realizar Compra – Fluxo Alternativo Especificação de requisitos funcionais utilizando casos de uso14 Identificador único do caso de uso UC3 – Realizar Compra Descrição Permite ao comprador realizar a compra de um produto Ator principal Comprador Logado Atores secundários × Pré-condições O caso de uso UC1 – Realizar Login ter sido executado com sucesso e o comprador estar logado Fluxo principal Ações do ator Ações do sistema 2 – Comprador Logado seleciona categoria de produto 4 – Comprador Logado seleciona produto (E4) 6 – Comprador Logado informa a quantidade (E6) 8 – Comprador Logado seleciona opção de entrega (A8) 1 – Sistema exibe categorias de produtos 3 – Sistema executa UC2 – Pesquisar Produtos 5 – Sistema solicita quantidade 7 – Sistema exibe opções de entrega 9 – Sistema executa UC4 – Realizar Pagamento Quadro 4. Especificação do caso de uso UC3 – Realizar Compra – Fluxos de Exceção (Continua) O Quadro 4 ilustra como a especificação do caso de uso ficará a partir dessas novas descobertas. 15Especificação de requisitos funcionais utilizando casos de uso Fluxo Alternativo A8 – Alterar endereço de entrega A8.1 – Comprador Logado seleciona Alterar Endereço A8.3- Comprador Logado preenche novo endereço (E.A8.3) A8.2 – Sistema solicita novo endereço A8.4 – Sistema salva novo endereço Fluxo de Exceção E4 – Produto indisponível E4.2 - Comprador Logado confirma que quer voltar para seleção de produtos E4.1 - Sistema exibe mensagem “Produto indisponível no momento. Deseja voltar para seleção de produtos?” E4.3 - Sistema retorna para a seleção de produtos Fluxo de Exceção E6 – Quantidade indisponível E6.2 - Comprador Logado confirma que quer reduzir a quantidade E6.1 - Sistema exibe mensagem “Quantidade indisponível. Quer reduzir a quantidade?” E5.3 - Sistema retorna para a seleção da quantidade Fluxo de Exceção E.A8.3 – CEP inválido E.A8.3.1 - Sistema exibe mensagem “CEP inválido. Corrigir CEP.” E.A8.3.2 - Sistema retorna para a entrada do CEP Pós-condição Não se aplica Quadro 4. Especificação do caso de uso UC3 – Realizar Compra – Fluxos de Exceção (Continuação) Especificação de requisitos funcionais utilizando casos de uso16 Tratamento de casos de uso CRUD Uma pergunta que sempre surge quando falamos na abordagem orientada a casos de uso é como tratar as questões relacionadas aos casos de uso que manipulam cadastros, ou seja, as operações CRUD (create, retrieve, update e delete). A resposta é: não existe uma forma padrão! Há os que defendem que essas operações estejam agrupadasem um caso de uso mais genérico, denominado Manter ou Gerenciar, em vez de existir um caso de uso para cada uma das operações. O principal argumento a favor dessa abordagem é que tanto o diagrama quanto as especificações ficam mais simples. Essa é a forma normalmente adotada na prática. Neste caso, a especificação tratará como fluxo principal o fluxo mais frequente, e como fluxos alternativos, os demais fluxos. O diagrama de casos de uso a seguir ilustra a representação das operações CRUD como um único caso de uso, Manter Produto. Há, por outro lado, os que defendem que as operações devem ser tratadas de forma distinta, uma vez que podem, inclusive, ter níveis de permissão de acesso diferentes e serem realizadas por pessoas diferentes (COCKBURN, 2005). Quando isso ocorrer, é importante ter em mente que deverá existir uma boa justificativa, ou será gasto um esforço adicional desnecessário em especificações separadas. 17Especificação de requisitos funcionais utilizando casos de uso O diagrama de casos de uso a seguir ilustra a representação das operações CRUD como casos de uso separados: UC1 – Cadastrar Produto, UC2 – Alterar Produto, UC3 – Deletar Produto e UC4 – Consultar Produto. Imagine que este sistema tenha dezenas de cadastros e todos eles com as quatro operações. O diagrama de casos de uso ficaria extremamente poluído, dificultando a identificação dos casos de uso mais relevantes. Os diagramas e as especificações de caso de uso são ferramentas comple- mentares que podem ser utilizadas em uma variedade grande de situações. Eles se aplicam a pequenos projetos e a projetos de grande porte. Eles são especialmente úteis em projetos nos quais existe uma interação expressiva entre os usuários e o sistema. Especificação de requisitos funcionais utilizando casos de uso18 Se você ainda tiver dúvidas sobre a relevância das especificações de caso de uso, veja o que diz Alistair Cokburn (2005, p. 32), um dos precursores dos métodos ágeis: “Os casos de uso são amplamente populares porque eles contam histórias coerentes de como o sistema irá se comportar em uso. Os usuários do sistema conseguem ver o que o sistema será.”. O caso de uso agrega valor em dois momentos (COCKBURN, 2005): � o primeiro, quando os casos de uso são nomeados como objetivos do usuário e compõem uma lista que revela o escopo do sistema e o seu propósito, apoiando atividades de estimativa e priorização; � o segundo, quando os autores dos casos de uso precisam questionar o que pode dar errado no fluxo básico, identificando como o sistema deve reagir. Neste caso, podem ser descobertas coisas surpreendentes que nem a equipe e nem o cliente tinham pensado anteriormente. COCKBURN, A. Escrevendo casos de uso eficazes: um guia prático para desenvolvedores de software. Porto Alegre: Bookman, 2005. DENNIS, A.; WIXON, B.; ROTH, R. System analysis and design. 5. ed. Hoboken: John Wiley and Sons, 2012. GUEDES, G. UML 2: uma abordagem prática. 3. ed. São Paulo: Novatec, 2018. OBJECT MANAGEMENT GROUP. Unified Modeling Language®: OMG UML® v2.5.1. [S. l.], 2017. Disponível em: https://www.omg.org/spec/UML/About-UML/. Acesso em: 13 mar. 2020. SEIDL, M. et al. UML@Classroom: an introduction to object-oriented modeling. Cham: Springer, 2012. WIEGERS, K. E.; BEATTY, J. Software requirements. 3. ed. Redmond: Microsoft Press, 2013. Os links para sites da web fornecidos neste capítulo foram todos testados, e seu fun- cionamento foi comprovado no momento da publicação do material. No entanto, a rede é extremamente dinâmica; suas páginas estão constantemente mudando de local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade sobre qualidade, precisão ou integralidade das informações referidas em tais links. 19Especificação de requisitos funcionais utilizando casos de uso DICA DO PROFESSOR Utilizar casos de uso para a descrever requisitos funcionais é uma abordagem muito útil, pois coloca o usuário no centro do processo. Os casos de uso nada mais são do que cenários de execução de uma atividade que agrega valor para o usuário. Veja, nesta Dica do Professor, algumas dicas para escrever as especificações de caso de uso que nos dão Dennis, Wixom e Roth (2012). Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS O diagrama de casos de uso representa funcionalidades do sistema com foco nas interações dos atores com os casos de uso. Considere o diagrama a seguir e analise as assertivas: I. Na especificação do Caso de Uso 2, tanto o Ator A quanto o Ator B são considerados atores principais. 1) II. Na especificação do Caso de Uso 4, tanto o Ator A quanto o Ator B são considerados atores principais. III. Na especificação do Caso de Uso 2, o Ator B é considerado um ator principal, e o Ator C é considerado um ator secundário. IV. Na especificação do Caso de Uso 3, vai haver um ponto de inclusão do Caso de Uso 4. Com base no diagrama de casos de uso e nas afirmativas apresentadas, é correto afirmar: A) As assertivas I, II, III e IV estão corretas. B) As assertivas I, III e IV estão corretas. C) As assertivas II e III estão corretas. D) Apenas a assertiva II está correta. E) Apenas a assertiva IV está correta. A especificação de casos de uso apoia o detalhamento do que está desenhado no diagrama de casos de uso. Leia as seguintes assertivas sobre a especificação de casos de uso: I. Quando uma pré-condição existir, ela deve aparecer na especificação de caso de uso no item chamado “pré-condição”, e o caso de uso deve testar se ela é verdadeira no primeiro passo do fluxo principal. II. O fluxo alternativo apresenta todas situações imprevistas e os erros que podem ocorrer em um caso de uso e como o sistema irá tratá-los. III. Quando um caso de uso pode ser executado por mais do que um ator, ambos devem ser listados como atores principais do caso de uso. IV. Quando um relacionamento de extend existir no diagrama de casos de uso, 2) significa que a especificação do caso de uso base deverá conter um ponto de extensão que chamará o caso de uso estendido. Com base nas assertivas, assinale a alternativa correta: A) As assertivas I, II, III e IV estão corretas. B) As assertivas I, II e IV estão corretas. C) As assertivas I e II estão corretas. D) As assertivas III e IV estão corretas. E) As assertivas II e III estão corretas. Em um diagrama de casos de uso, os relacionamentos são representados por linhas que apresentam formatos e significados específicos, servindo de base para a interpretação semântica da relação. Analise o diagrama a seguir: 3) Escolha a alternativa correta no que se refere às especificações de casos de uso derivadas desse diagrama: A) Na especificação de caso de uso de Consultar Notas, o ator principal será o Usuário, e os atores secundários serão o Aluno e o Professor. B) No caso de uso Consultar Notas, haverá uma pré-condição, que é o Usuário estar logado. C) Quando o caso de uso Realizar Login for realizado, ele obrigatoriamente executará o caso de uso Consultar Notas. D) O ator Aluno é um ator secundário porque não inicia nenhum caso de uso; portanto, não é um ator principal. E) Tanto o ator Aluno quanto o ator Professor podem iniciar o caso de uso Consultar Notas. 4) A especificação de casos de uso visa a apoiar o entendimento da equipe de desenvolvimento em relação ao que deverá ser construído, e ela é composta por diversos elementos que se complementam. Com relação a essa forma de especificação, analise as assertivas a seguir. I. Quando o ator principal de um caso de uso for o agendador de tarefas (scheduler), então o gatilho será esse agendador de tarefas dando início à tarefa. II. Quando o ator principal de um caso de uso for o agendador de tarefas (scheduler), então o gatilho será a condição de guarda desse caso de uso. III. Quando o ator principal de um caso de uso for o agendador de tarefas (scheduler), então não poderá haver fluxos alternativos.IV. Quando o ator principal de um caso de uso for o agendador de tarefas (scheduler), então os fluxos de exceção deverão ser também agendados. V. Quando o ator principal de um caso de uso for um humano, sempre deverá ser especificado o gatilho que esse ator aciona. A) As assertivas I, III e IV estão corretas. B) As assertivas II, III, IV e V estão corretas. C) Apenas a assertiva I está correta. D) Apenas a assertiva II está correta. E) Apenas a assertiva IV está correta. 5) Um diagrama de casos de uso é complementado por uma especificação de caso de uso. Sobre as especificações de caso de uso, assinale a alternativa correta: A) Um caso de uso pode conter pontos de inclusão para cada uma das pré-condições que estejam especificadas. B) Casos de uso do tipo CRUD (create-retrieve-update-delete) devem ter um caso de uso para cada uma das operações. C) Os fluxos de exceção representam situações imprevistas que o sistema pode enfrentar e são associados unicamente aos passos do fluxo principal. D) Quando o usuário preencher um campo incorretamente, isso será tratado pelo caso de uso como um fluxo alternativo. E) Um fluxo principal é um conjunto de passos que compõem a realização do cenário mais frequente de utilização de um caso de uso. NA PRÁTICA Existem diversas formas pelas quais os requisitos podem ser elicitados e descritos. Uma dessas formas é a abordagem orientada a casos de uso. Se usada corretamente, esta é uma forma de tornar a comunicação entre os usuários e a equipe de desenvolvimento mais eficiente. A abordagem de casos de uso é composta pelo desenho do diagrama de casos de uso, acompanhado das especificações de caso de uso. Embora o diagrama traga a visão geral dos requisitos funcionais, ele sozinho não é suficiente, pois não representa todos os detalhes que são necessários para que a equipe de desenvolvimento possa realizar o seu trabalho. Judy é analista de requisitos e recebeu a atividade de conduzir a especificação de casos de uso do sistema de compra de material escolar. Acompanhe, Na Prática, os desafios de Judy e como ela organizou o seu trabalho desde o início para concluí-lo com sucesso. SAIBA MAIS Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Erros comuns das especificações de casos de uso Leia o capítulo 19 (p. 181-192) do livro Escrevendo casos de uso eficazes: um guia prático para desenvolvedores de software, de Alistair Cockburn, sobre os erros mais comuns na escrita de casos de uso e como evitá-los. Isso pode ajudar você a melhorar a escrita dos casos de uso, evitando esquecer algum elemento importante. Lembretes para cada caso de uso Leia o capítulo 20 (p. 195-203) do livro Escrevendo casos de uso eficazes: um guia prático para desenvolvedores de software, de Alistair Cockburn, sobre lembretes importantes para escrever um caso de uso. São dicas que podem ajudar você a melhorar a sua proficiência com os casos de uso. Lembretes para conjunto de casos de uso Leia o capítulo 21 (p. 204-208) do livro Escrevendo casos de uso eficazes: um guia prático para desenvolvedores de software, de Alistair Cockburn, sobre dicas para o conjunto dos casos de uso de um sistema. Essas dicas podem ajudar você a avaliar se o conjunto de casos de uso que você definiu está adequado. Especificação dos requisitos não funcionais de software APRESENTAÇÃO Um dos principais focos do desenvolvimento de software atualmente é garantir uma boa experiência ao usuário. Experiência do usuário é mais do que entregar todas as funcionalidades desejadas. É preciso que o produto entregue funcionalidades de forma atrativa, fácil de usar, com desempenho excelente, segurança e mais um sem número de outros elementos cognitivos e emocionais. Nas décadas passadas, era fácil agradar ao usuário de um sistema de software. Bastava entregar algo que funcionasse. No entanto, hoje isso não é mais realidade. A tecnologia evoluiu, assim como o grau de exposição das pessoas às tecnologias. Isso fez com que o usuário passasse a ser mais exigente. Requisitos funcionais não são, portanto, a única fonte de preocupação da equipe de desenvolvimento. É preciso voltar a sua atenção também para os requisitos não funcionais, pois são eles que agregam valor à experiência do usuário. Nesta Unidade de Aprendizagem, você verá como identificar e especificar os requisitos não funcionais de um projeto de software. Além disso, você compreenderá como selecionar indicadores para avaliar os requisitos não funcionais após a sua implementação. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Identificar os requisitos não funcionais de um projeto de software.• Especificar os requisitos não funcionais de software.• Selecionar indicadores para avaliar os requisitos não funcionais de software.• DESAFIO Os requisitos não funcionais são muitas vezes difíceis de serem elicitados, pois é comum que os stakeholders que servem de fonte de informação se foquem mais nos aspectos funcionais, ou seja, no que o software deve fazer, e não se atentem muito para o como o software deve fazer. Para que os requisitos não funcionais possam ser tratados adequadamente, independentemente do processo de desenvolvimento utilizado, é importante que critérios objetivos de avaliação sejam definidos, de modo que possam ser posteriormente validados. Suponha que, com o aumento da demanda por trabalho remoto, devido à pandemia de COVID- 19, você tenha sido escalado para desenvolver um software para apoiar reuniões remotas. Existe muita reclamação no mercado sobre os softwares proprietários, que são caros, e sobre os softwares gratuitos, com vulnerabilidades de segurança. Você precisa desenvolver um software para ser utilizado em reuniões de trabalho da sua empresa via Internet. Acompanhe, a seguir, o que deve ser considerado: quais são os requisitos não funcionais que deveriam estar presentes, bem como os atributos para validá-los. INFOGRÁFICO Os requisitos não funcionais de um sistema que envolve software influenciam fortemente a aceitação do produto por parte do usuário. Questões como usabilidade, tempo de resposta e consumo de recursos são alguns desses atributos que podem fazer com que um usuário deixe de utilizar um produto. Essas características são o que se chama de qualidade em uso. No entanto, existe um conjunto de atributos que não é perceptível diretamente pelos usuários: os atributos de qualidade interna. Estes são requisitos que vão tornar a manutenção do produto mais fácil ou mais difícil e que vão influenciar diretamente nos custos de manutenção. Neste Infográfico, você irá acompanhar os atributos de qualidade interna de produtos de software. CONTEÚDO DO LIVRO Para o analista de requisitos, é mais fácil obter os requisitos funcionais do que os requisitos não funcionais de um produto de software. Isso ocorre primeiramente porque o usuário geralmente foca em falar sobre as funcionalidades. Segundo, porque muitas vezes ninguém vai falar sobre os requisitos não funcionais, mas vai esperar que eles estejam lá. São os requisitos invisíveis ou requisitos implícitos. Para facilitar a identificação de requisitos não funcionais, podem-se utilizar diversas abordagens, mas, independentemente da técnica escolhida, um checklist com os principais requisitos não funcionais poderá ajudar. No capítulo Especificação dos requisitos não funcionais de software, do livro Engenharia de requisitos, base teórica desta Unidade de Aprendizagem, você vai aprender a identificar os requisitos não funcionais de software. Em seguida, vai ver como especificar requisitos não funcionais em ambientes tradicionais e ambientes ágeis. Por fim, vai ver como identificar indicadores para avaliar requisitos não funcionais. Boa leitura. ENGENHARIA DE REQUISITOS Sheila Reinehr Especificação dos requisitos nãofuncionais de software Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Identificar os requisitos não funcionais de um projeto de software. � Especificar os requisitos não funcionais de software. � Selecionar indicadores para avaliar os requisitos não funcionais de software. Introdução Com a intensa proliferação de produtos tecnológicos no dia a dia das pessoas, as exigências do mercado ficaram mais altas. Todos somos rotineiramente expostos a diversos softwares, especialmente na forma de aplicativos nos smartphones. Com a mesma facilidade com que são baixados novos apps, eles também são deletados. Essa grande exposi- ção a vários tipos de produto torna o usuário cada vez mais exigente, seja com a qualidade da interface, seja com a praticidade do uso, seja com a satisfação que as funcionalidades lhe proporcionam. Negligenciar esses requisitos de qualidade é deixar de lado um dos maiores fatores de conquista do usuário. Requisitos não funcionais esquecidos ou não implementados ade- quadamente são uma das maiores causas de abandono de produtos de software. Há mais do que um conjunto de funcionalidades em um software de sucesso. Quando um software falha em entregar requisitos como bom desempenho, facilidade de uso, segurança e mais uma série de outros atributos de qualidade, é muito provável que ele tenha vida curta no mercado. Quando determinados requisitos não funcionais são descobertos tardiamente no ciclo de desenvolvimento de software, pode não ser mais possível resolver o problema, ou pode ser muito caro resolvê-lo. Se decisões arquiteturais forem tomadas sem levar em consideração os requisitos não funcionais (de escalabilidade, por exemplo), pode ser que não seja possível implementar esse requisito sem que uma grande mudança seja feita. Isso pode inviabilizar a continuidade de um projeto ou de um produto de software, devido aos altos custos. Em casos extremos, pode causar até mesmo perda de vidas. Neste capítulo você vai ver como identificar requisitos não funcionais de produtos de software. Vai também ler sobre como descrever esses requisitos e, por fim, sobre como definir indicadores que permitam sua verificação e validação. 1 Identificação de requisitos não funcionais de software Certamente você já ouviu falar que requisitos não funcionais, também cha- mados de requisitos de qualidade, são mais difíceis de serem elicitados e especificados do que requisitos funcionais. Será que isso é verdade? Na maioria das vezes, sim. É comum que os stakeholders responsáveis por fornecer os requisitos não enxerguem, pelo menos à primeira vista, os requisitos não funcionais, e eles podem permanecer invisíveis por muito tempo. Além disto, diferentes tipos de software terão diferentes tipos de requisitos não funcionais. Softwares com intensa interação com os usuários certamente terão requisitos distintos daqueles de softwares que estão embarcados em equipamentos. Softwares que desempenham funções críticas também terão demandas distintas de softwares que podem falhar. Dessa forma, o contexto de negócio e o tipo de aplicação irão influenciar sobremaneira os requisitos de qualidade aplicáveis. Em sistemas interativos, ou seja, que são baseados no diálogo com o usuário, alguns requisitos não funcionais são fundamentais, como, por exemplo, requi- sitos relacionados à usabilidade. Usabilidade depende fortemente do contexto e do público-alvo. Se os usuários forem pessoas que têm intimidade com a tecnologia, é uma coisa; se os usuários forem pessoas leigas em tecnologia, é outra coisa bem diferente. Especificação dos requisitos não funcionais de software2 Se o software for disponibilizado sem treinamento, os requisitos de usa- bilidade aumentam. Por exemplo, sites que vendem produtos pela web. Não é esperado que as pessoas tenham que fazer um curso para aprender a usá-los, é esperado que elas acessem o site e consigam concluir sua compra com sucesso. O projeto da interface tem que ajudar o vendedor a não perder uma venda por problemas, por exemplo, de navegação no site. Wiegers e Beatty (2013) citam o exemplo de um novo software com interface gráfica que foi instalado em uma equipe de call center em substituição ao sistema anterior, que era baseado em caracteres e teclas de atalho. Os usuários tinham uma grande produtividade no sistema anterior porque eram experientes e navegavam rapidamente com as teclas de atalho. Ao mudar para o novo sistema, o uso do mouse, intercalado com o uso do teclado, tirou-lhes a produtividade. Resumindo: o novo sistema teve que ser remodelado para contemplar a possibilidade da navegação com teclas de atalho. Se estivermos falando de um sistema para o segmento bancário, teremos uma infinidade de requisitos não funcionais, mas certamente a segurança estará entre os de maior prioridade. Oferecer uma interface fácil de operar é importante também neste segmento, mas desde que os aspectos de segurança tenham sido adequadamente tratados. Em sistemas de missão crítica relacionados a aspectos que envolvem vidas, por exemplo, haverá certamente requisitos não funcionais de os sistemas estarem livres de riscos. Este é o caso, por exemplo, de veículos autônomos. Uma operação incorreta pode custar a vida de pedestres ou de passageiros do próprio veículo. O mesmo ocorre para sistemas que podem oferecer riscos financeiros ou ambientais. Existem os requisitos que não são diretamente visualizados pelos clientes e usuários, mas que são uma preocupação da equipe desenvolvedora — são os requisitos relacionados à qualidade interna do produto, como manutenibi- lidade, ou seja, facilidade de dar manutenção. Quantas vezes a equipe recebe um chamado relatando um bug que demora dias para ser localizado. Por que isto ocorre? Porque a arquitetura da aplicação não favorece a manutenção, dificultando a agilidade na solução de problemas ou na implementação de melhorias e evoluções. 3Especificação dos requisitos não funcionais de software Outro contexto específico é o das startups de tecnologia. É comum que elas comecem seu negócio baseadas em uma ideia inovadora dos sócios que se esforçam para colocar de pé um MVP (minimum viable product ou produto mínimo viável). Depois de um tempo, esse protótipo se transforma no pro- duto que vai para o mercado. Como o tempo exigido pelo mercado é curto, a startup evolui o produto sem muito planejamento, afinal ela precisa escalar! Se os cuidados com a arquitetura e os requisitos de escalabilidade tiverem sido tomados, tudo certo; mas esse não é o cenário mais comum, e o produto evoluído tem dificuldade para escalar e para sofrer manutenções (BERG et al., 2018). É comum o código estar no formato de monolito e a manutenção ser dificultada. O que era fácil, quando a empresa e a equipe eram pequenas, se torna insustentável com o crescimento. Neste momento, os requisitos não funcionais se tornam críticos e passam a ameaçar a existência da própria empresa. Nem todos os requisitos de qualidade serão viáveis para implementação em um produto de software (WIEGERS; BEATTY, 2013). Depois de elicitados, certamente haverá uma análise de prioridade, e aqueles que forem identificados como mais prioritários irão direcionar as escolhas da equipe, seja em termos de alocação de pessoas, seja em termos de escolhas tecnológicas e arquiteturais. Nem todos os produtos de software são sistemas de informação; vários deles, espe- cialmente hoje, são sistemas ditos embarcados, ou seja, aqueles em que o software está dentro de produtos de hardware, como sistemas mais complexos. Sistemas dessa natureza envolvem dispositivos mecânicos, elétricos e eletrônicos, como sensores, atuadores, controladores, motores, baterias etc. Nesses casos, requisitos relacionados ao desempenho podem se tornar críticos. Nos sistemas baseados em IoT (Internet of Things, ou Internet das Coisas), por exemplo, um ponto crucial é o consumo de energia. Algoritmos paraesses casos devem ser otimizados e devem consumir pouca energia para processar. Especificação dos requisitos não funcionais de software4 Como identificar os requisitos não funcionais Assim como os requisitos funcionais, os requisitos não funcionais podem ser obtidos pelo contato direto com os stakeholders em reuniões, entrevistas, brainstormings, ou por meio de questionários. Podem ainda ser descobertos quando se conduz uma observação no ambiente de execução. Nesses momentos, é possível, para o observador, identificar requisitos não funcionais relacionados ao uso do sistema. Muitas vezes, os requisitos precisam ser obtidos a partir da análise de documentos, leis, regulamentações, guias etc. Nesses casos, os requisitos não funcionais podem aparecer de forma explícita ou implícita na documentação. Com a Lei Geral de Proteção de Dados Pessoais (LGPD), por exemplo, muito requisitos não funcionais foram explicitados. A consequência é que funcio- nalidades adicionais precisam ser implementadas em todos os sistemas do mundo. Uma delas, a mais óbvia, é alertar ao usuário, logo na instalação do produto, quais são as políticas de segurança e compartilhamento de dados que são aplicadas pelo fornecedor, exigindo que ele concorde com elas. Para saber mais sobre a Lei nº 13.709, de 14 de agosto de 2018, mais conhecida como Lei Geral de Proteção de Dados Pessoais (LGPD), consulte o site da Casa Civil do Governo Federal ou o Diário Oficial da União (DOU). Para obter informações sobre a lei internacional equivalente, pesquise por General Data Protection Regulation (GDPR). Não existe uma fórmula mágica para fazer com que os requisitos não funcionais surjam, mas as atividades sugeridas por Wiegers e Beatty (2013, p. 265), apresentadas na Figura 1, podem ajudar. Elas foram baseadas em um documento disponibilizado on-line pela empresa Clarrus (2010). 5Especificação dos requisitos não funcionais de software Figura 1. Elicitação de requisitos não funcionais. Fonte: Adaptada de Wiegers e Beatty (2013). Comece com uma taxonomia ampla Reduza a lista junto aos stakeholders Traduza em critérios quanti�cáveis Priorize os atributos Especi�que requisitos de qualidade estruturados Como se pode observar na Figura 1, os autores sugerem que a descoberta dos requisitos não funcionais comece partindo de uma lista abrangente de atributos de qualidade. Naturalmente, nem todos os tipos de software necessitarão de todos os atributos. Além disso, nem sempre se tem todos os recursos disponíveis para implementá-los, mas é melhor começar com uma lista maior do que correr o risco de deixar algum atributo importante de lado. Como sugestão para a elaboração dessa lista, você pode utilizar as carac- terísticas e subcaracterísticas de qualidade que estão presentes na família de normas internacionais ISO/IEC 25000, mais especificamente o modelo de qualidade em uso e o modelo de qualidade de produto, que podem ser encon- trados na norma internacional ISO/IEC 25010 (ISO/IEC, 2011). É possível também usar a relação compilada por Wiegers e Beatty (2013), apresentada no Quadro 1. Em seguida, deve-se engajar todos os stakeholders relevantes do produto para que possam selecionar os atributos de qualidade que são importantes para o projeto. Em um primeiro momento, pode ser que eles selecionem todos, ou quase todos os atributos da lista. Isso pode gerar uma lista inviável de ser implementada, seja pelas restrições de contexto, seja por conflitos entre os próprios atributos. Cabe ao analista de requisitos conduzir os stakeholders durante essas decisões. Especificação dos requisitos não funcionais de software6 Fonte: Adaptado de Wiegers e Beatty (2013). Qualidade externa Breve descrição Disponibilidade Extensão na qual os serviços do sistema estão disponíveis quando e onde são necessários Instalabilidade Quão fácil é instalar, desinstalar e reinstalar corretamente a aplicação Integridade A extensão na qual o sistema protege contra imprecisão e perda de dados Interopera- bilidade Quão fácil o sistema pode interconectar e trocar dados com outros sistemas e componentes Desempenho Quão rápido e previsivelmente o sistema responde às entra- das do usuário e outros eventos Confiabilidade Por quanto tempo o sistema roda antes de apresentar uma falha Robustez Quão bem o sistema responde a uma condição inesperada de operação Proteção Quão bem o sistema protege contra ferimentos e danos Segurança Quão bem o sistema protege contra acesso não autorizado à aplicação e seus dados Usabilidade Quão fácil é para as pessoas aprenderem, lembrarem e utilizarem o sistema Qualidade interna Breve descrição Eficiência Quão eficientemente o sistema usa os recursos do computador Modificabilidade Quão fácil é manter, modificar, melhorar e reestruturar o sistema Portabilidade Quão facilmente o sistema pode ser colocado em operação em outros ambientes operacionais Reusabilidade Em que extensão os componentes podem ser usados em outros sistemas Escalabilidade Quão facilmente o sistema pode crescer para tratar mais usuários, transações, servidores e outras extensões Verificabilidade Quão prontamente desenvolvedores e testadores podem confirmar que o software foi implementado corretamente Quadro 1. Alguns atributos de qualidade 7Especificação dos requisitos não funcionais de software O próximo passo é realizar a priorização desses atributos. Uma forma de realizar essa atividade é usando uma tabela que combina os diversos atributos e faz análise sobre eles, dois a dois. Isso é importante para ajudar o analista de requisitos a focar as atividades de elicitação sobre os atributos relevantes, não gastando grande esforço em atributos que possam ser descartados. O Quadro 2 apresenta um exemplo adaptado de Wiegers e Beatty (2013) que reflete o que foi proposto por Clarrus (2010). Fonte: Adaptado de Wiegers e Beatty (2013). Qualidade externa Sc or e D is po ni bi lid ad e In te gr id ad e D es em pe nh o Co nf ia bi lid ad e Ro bu st ez Se gu ra nç a U sa bi lid ad e Ve ri fi ca bi lid ad e Disponibilidade 1 ^ < ^ ^ ^ ^ ^ Integridade 7 < < < < < < Desempenho 1 ^ ^ ^ < ^ Confiabilidade 3 ^ ^ < ^ Robustez 4 ^ ^ < Segurança 5 ^ < Usabilidade 3 ^ Verificabilidade 4 Quadro 2. Exemplo de quadro para priorização de atributos de qualidade A tabela funciona de forma muito simples. Para cada par de atributos você faz a seguinte pergunta: se for para escolher um dos dois, qual é o mais importante? Ao entrar com um sinal de menor (<) indica que o atributo da linha é mais importante. Ao entrar com o sinal circunflexo (̂ ) indica que o atributo da coluna é mais importante. Especificação dos requisitos não funcionais de software8 O exemplo apresentado no Quadro 2 é fictício. A leitura seria a seguinte: entre o atributo “disponibilidade” e “integridade”, o símbolo aponta para cima, ou seja, para a “integridade”. Isso significa que o atributo “integridade”, para este contexto, é mais importante do que “disponibilidade”. A lista de atributos é um recorte da lista abrangente apresentada no passo um e que foi refinada no passo dois. Esta matriz é útil para a tomada de decisão em momentos em que seja necessário priorizar um requisito em detrimento de outro. A coluna do score é obtida pela soma de vezes em que o atributo é sele- cionado como prioridade. No caso do exemplo fictício do Quadro 2, nota-se que o atributo “integridade” foi mais importante do que todos os outros sete atributos, recebendo o score 7. Em seguida, vem o atributo “segurança”, com 5 pontos, e assim por diante. O objetivo do uso dessa tabela é obter uma visão consolidada sobre a prioridade dos requisitos não funcionais. É possível que elas sejam conflitantes entre os diversos stakeholders, e, nesse momento, cabe ao analista de requisitos resolver esses conflitos junto aos stakeholders. A próxima etapa é traduzir os atributos em critérios quantificáveis. Geralmente os stakeholdersusam palavras ambíguas para expressar os re- quisitos não funcionais, como amigável, rápido, confiável, robusto e assim por diante. Entretanto essas expressões geram interpretações imprecisas e, geralmente, são impossíveis de validar. Para chegar a critérios mais objetivos, será necessário que o analista de requisitos faça perguntas que os stakeholders saibam responder e na linguagem que eles entendem. Em vez de perguntar quão robusto o sistema deve ser, o analista deveria perguntar quantos usuários simultâneos estão previstos, por exemplo. A última etapa é estruturar os requisitos de qualidade. Wiegers e Beatty (2013) recomendam que seja utilizado sempre o mnemônico SMART (specific, measurable, attainable, relevant and time-sensitive), ou seja, o requisito deve ser específico, mensurável, atingível, relevante e sensível ao tempo. Se o testador não puder testar um requisito, então o requisito não está bom o suficiente. 9Especificação dos requisitos não funcionais de software Identificação de requisitos não funcionais em ambientes ágeis Em ambientes de desenvolvimento ágil de software, a identificação dos requisi- tos não funcionais geralmente ocorre por meio de um workshop para discussão das histórias de usuário. As histórias de usuário vão focar nos requisitos funcionais, mas o seu complemento, que são os critérios de aceitação, irão incluir critérios referentes aos requisitos funcionais e também aos requisitos não funcionais. E é aí que eles, os requisitos não funcionais, entram em cena. Patton (2014) apresenta algumas dicas para a condução de workshops para a discussão das histórias do usuário e dos critérios de aceitação, acompanhe: � O workshop é, basicamente, uma conversa apoiada por diversas figuras e dados, ao final do qual a equipe deve chegar à conclusão de como será validado o que foi decidido construir. � Antes do workshop é importante comunicar à equipe quais histórias do usuário serão discutidas. � O ideal é um workshop pequeno, entre três a cinco pessoas. Patton (2014) recomenda que seja “do tamanho de conversa de jantar”. � Cerifique-se de ter incluído as pessoas certas: (1) alguém que entenda o usuário, geralmente um analista de negócios, o product owner ou alguém com conhecimento em experiência do usuário (UX); (2) desenvolvedores que entendam de código e que saibam analisar a viabilidade técnica do que está sendo proposto; (3) um analista de teste que fará as perguntas difíceis, quando a maioria será otimista. Outras pessoas podem ser incluídas, mas lembre-se de que muitas pessoas juntas podem tornar o workshop improdutivo. � Mergulhe fundo para compreender: exatamente quem é o usuário; exatamente como ele vai usar o software; exatamente como ele deve se parecer (interface); exatamente como o software deve se comportar por trás da interface (regras de negócio e validação de dados); basicamente como o software será construído — para permitir estimativas. � Entre em acordo sobre o que será construído, respondendo a duas per- guntas: o que vamos checar para verificar o que foi construído; como vamos demonstrar o software quando formos revisar juntos. � Converse e documente tudo o que ficou decidido, pode ser com desenhos, anotações e fotografias. � Fale por meio de exemplos para materializar a história. Seja específico sobre situações e dados. � Divida ou esvazie histórias, se necessário. Especificação dos requisitos não funcionais de software10 Utilizar workshops para definir os requisitos não funcionais, ou seja, os critérios de aceitação, pode ser uma excelente escolha. No entanto, dependendo da característica das pessoas envolvidas, pode não dar muito certo. Saiba como reconhecer quando o workshop não está funcionando verificando estes pontos (PATTON, 2014): � Ninguém participa: alguém descreve o que é requerido e os outros escutam. � Quando o foco fica apenas nos critérios de aceitação e não se discute a história e quem faz o que, e por quê. � Quando se falha em identificar opções, sejam funcionais, sejam técnicas. Identificar os requisitos não funcionais de software não exige uma técnica especial, mas sim uma atitude especial. É preciso que o analista de requisitos, ou papel equivalente, esteja atento para explorar, junto aos diversos stakeholders, quais são os pontos críticos do sistema e para onde a equipe de desenvolvimento deve envidar os seus esforços. Um checklist contendo os principais requisitos de qualidade pode ajudar na identificação desse tipo de requisito. A família de normas internacionais ISO/IEC 25000 pode ajudar. 2 Especificação de requisitos não funcionais de software Quando falamos de requisitos funcionais logo nos vem à mente a especificação utilizando os diagramas de caso de uso e as especificações de caso de uso. Embora essas sejam duas ferramentas muito poderosas para a especificação de requisitos, elas não se aplicam aos requisitos não funcionais. Elas são boas para explicitar as funcionalidades. Para as especificações de requisitos não funcionais, usamos alguma forma de documentação suplementar, que visa a explicitar os detalhes desses requi- sitos, de modo que possam seguir para as demais fases do desenvolvimento. O Quadro 3 apresenta alguns exemplos de especificação de requisitos não funcionais, extraídos de Wiegers e Beatty (2013). Note que todos eles têm em 11Especificação dos requisitos não funcionais de software comum a característica de buscar trazer mais precisão para a declaração do requisito. Fonte: Adaptado de Wiegers e Beatty (2013). Tipo Identificador Descrição Disponibilidade AVL-1 O sistema deve estar pelo menos 95% dis- ponível nos dias de semana das 6:00 h às 24:00 h e pelo menos 99% disponível nos dias de semana entre 15:00 h e 17:00 h. Instalabilidade INS-1 Um usuário sem treinamento deve ser capaz de executar com sucesso a instala- ção inicial da aplicação em 10 minutos. Integridade INT-1 Depois de executar o backup de arquivos, o sistema deve verificar a cópia do backup em relação ao original e relatar qualquer discrepância. Desempenho PER-1 A autorização de um saque no caixa eletrônico não deve demorar mais do que 2 segundos. Segurança SEC-1 O sistema deve bloquear a conta do usuário depois da quarta tentativa de login sem sucesso consecutiva em um período de 5 minutos. Usabilidade USE-1 Todas as funções do menu Arquivo devem ser teclas de atalho definidas que usam a tecla Ctrl pressionada simulta- neamente com outra tecla. Comandos do menu que também aparecerem no MS-Word devem usar as mesmas teclas de atalho default que o MS-Word usa. Quadro 3. Exemplos de especificação de requisitos não funcionais Requisitos não funcionais nos ambientes ágeis Quando uma empresa utiliza métodos ágeis, os requisitos são especificados no formato de histórias de usuário. De acordo com Patton (2014, p.91, tradução nossa), “Histórias foram assim nomeadas devido a como é esperado que elas Especificação dos requisitos não funcionais de software12 sejam usadas, não devido à forma como você está tentando escrevê-las”. Uma história do usuário nada mais é do que um cenário de uso de um produto por um tipo específico de usuário. Segundo Patton (2014), Roy Jeffrey, um dos criadores do XP, estabeleceu os 3 Cs da história de usuário: Cartão, Conversa e Confirmação, representa- dos da Figura 2. O cartão é onde a história do usuário é escrita. A conversa refere-se ao fato de que a história nasce da intensa comunicação entre a equipe de desenvolvimento e o usuário. E, por fim, a confirmação representa os critérios de aceitação da história, que é onde os requisitos não funcionais são especificados. Também pode ser que você encontre lugares em que os requisitos não funcionais sejam registrados no próprio cartão, como se fosse uma história independente. Figura 2. Os 3 Cs da história de usuário. Fonte: Adaptada de Patton (2014). Cartão Conversa Con�rmação Você pode escrever uma série de cartões ou fazer uma mapa dahistória (history map)... Apoie a conversa com palavras e �guras Quando for tempo de construir, use os critérios de aceitação para registrar os seus acordos 3 Indicadores para avaliar requisitos não funcionais de software Uma das formas de analisar se chegamos a um resultado é comparar o valor obtido com o valor planejado. Isso vale para qualquer aspecto da vida pessoal e profissional. Medidas fazem parte de nossa vida desde que nascemos: nasceu 13Especificação dos requisitos não funcionais de software dentro da faixa de peso ideal? Cresceu o suficiente no primeiro mês? Está no tamanho ideal para a idade? Se você quiser saber se foi bem em uma prova, você compara o resultado ideal (o 10,0) com o resultado que você obteve — isso vai lhe mostrar o quanto você está distante do ideal. Se você quiser comparar o seu desempe- nho com o dos colegas, vai analisar o que você tirou em relação à média dos seus colegas. Se você estiver em um treinamento para fazer uma maratona, vai analisar quantos quilômetros consegue correr em determinado tempo. Se quiser emagrecer, vai estabelecer um peso ideal e um caminho para chegar lá. Medições também fazem parte da nossa vida profissional: quanto tempo precisamos para entregar esta funcionalidade? Quantas pessoas são necessá- rias para este projeto? Quanto tempo falta para terminar o projeto? Qual é a produtividade média da equipe? Qual é a gravidade deste risco? Quanto tempo levaríamos para implementar todo o backlog do produto? Só é possível controlar aquilo que se consegue medir. Só é possível avaliar se houver algum padrão para comparar. Só é possível planejar com certa precisão se houver medidas confiáveis nas quais se basear. E como medir a qualidade de um produto de software? Como garantir se o que foi entregue é o que o usuário queria? Se estivermos falando de funciona- lidades, podemos contar quantas funcionalidades foram entregues em relação a quantas funcionalidades foram solicitadas. Mas será que isso é suficiente? E se a funcionalidade não apoiar o usuário adequadamente em suas tarefas, conta como funcionalidade entregue com qualidade? A grande questão é: como garantir que aquilo que vamos entregar atenderá às expectativas dos usuários do produto? Inicialmente, investindo na elici- tação de requisitos, com especial atenção para os requisitos não funcionais. Em seguida, identificando indicadores que podem ser perseguidos pela equipe técnica para garantir que as necessidades dos usuários serão atendidas na medida certa. Conceitos de medição Existem termos que têm um significado específico quando se trata de medição. Vamos adotar aqui os conceitos utilizados na norma internacional ISO/IEC 15939 (ISO/IEC, 2007), que é a norma da ISO/IEC que descreve o processo de medição. Os termos relevantes se encontram no Quadro 4. Especificação dos requisitos não funcionais de software14 Fonte: Adaptado de ISO/IEC (2007). Termo Significado Atributo Propriedade ou característica de uma entidade que possa ser distinguida quantitativa ou qualitativamente por seres humanos ou meios automatizados Dados Coleta de valores atribuídos a medidas base, medidas derivadas e/ou indicadores Entidade Objeto que deve ser caracterizado medindo seus atributos Escala Conjunto ordenado de valores, contínuo ou discreto, ou um conjunto de categorias para as quais o atributo está mapeado Função de medição Algoritmo ou cálculo realizado para combinar duas ou mais medidas básicas Indicador Medida que fornece uma estimativa ou avaliação de atributos especificados derivados de um modelo com relação a necessidades de informação definidas Medição Conjunto de operações com o objetivo de determinar uma medida Medida Variável à qual um valor é atribuído resultante de uma medição Medida básica Medida definida em termos de um atributo e método para quantificá-lo Medida derivada Medida que é definida como uma função de dois ou mais valores de medidas básicas Medir Fazer uma medição Procedimento de medição Conjunto de operações, descrito especificamente, utilizado no desempenho de determinada medição de acordo com determinado método Valor Resultado numérico ou categórico atribuído a uma medida básica, medida derivada ou indicador Quadro 4. Definição de termos para medição 15Especificação dos requisitos não funcionais de software A Figura 3, adaptada da norma ISO/IEC 15939 (ISO/IEC, 2007), apresenta os relacionamentos entre os elementos envolvidos na medição. Para que eles possam ser mais bem compreendidos, vamos utilizar um exemplo prático e fácil. Vamos supor que a necessidade de informação de um stakeholder seja identificar se a produtividade de sua equipe de desenvolvimento está compatível com a produtividade média do mercado. Para atender a essa necessidade de informação vamos começar identifi- cando as entidades envolvidas e quais são os atributos (características) dessas entidades que nós precisamos medir para atender à necessidade de informação. Nesse caso, a entidade pode ser a tarefa realizada e os atributos podem ser o tamanho da tarefa e o tempo necessário para desenvolver a tarefa. Em seguida definimos qual é o método de medição envolvido. Neste caso precisamos saber como obter o valor do atributo de tamanho da tarefa e o valor do atributo do tempo. Se a tarefa for uma história de usuário, podemos utilizar o conceito de story points (pontos de história do usuário). Para o atributo tempo, podemos assumir que seja o tempo decorrido desde o início até o término da história do usuário. Portanto, nossas medidas básicas serão quantidade de pontos de história de usuário e tempo de desenvolvimento da história. Muitas vezes temos que nos valer de métodos de medição mais subjeti- vos (que envolvem o julgamento humano). Devemos evitá-los e dar sempre preferência a métodos mais objetivos, ou seja, que envolvem uma medição (contagem) a ser realizada de forma manual ou automatizada. A função de medição será a forma como vamos combinar as duas me- didas básicas para gerar a medida derivada. Nesse caso vamos considerar que a medida derivada será a produtividade e que a função de medição será a razão entre a quantidade de pontos de história de usuário pelo tempo de desenvolvimento da história. Em seguida estabelecemos o modelo de análise, que é a forma como vamos analisar a medida derivada que acabamos de obter. Neste nosso exemplo, podemos entender que seria a forma como vamos interpretar a produtividade obtida. Aqui estão envolvidos os critérios de decisão, que poderiam envolver o seguinte: qual é o valor médio da produtividade no mercado para este tipo de produto, com esta tecnologia? Essa seria a base para poder interpretar a produtividade que foi obtida usando nossa função de medição. O que se obtém é um indicador, que pode nos dizer se a produtividade está abaixo do mercado, se a produtividade está na média do mercado ou se a produtividade está acima do mercado. Isso nos permite realizar a inter- Especificação dos requisitos não funcionais de software16 pretação da informação, que é a explicação relacionada com a informação quantitativa expressa pelo indicador, em uma linguagem que a pessoa que vai usar a medição compreenda. Figura 3. Modelo de Informação de Medição da ISO/IEC 15939. Fonte: Adaptada de ISO/IEC (2007). Necessidades de informação Entidade Produto da informação Interpretação Indicador Modelo de análise Medidas derivadas Função de medição Medidas básicas Método de medição Atributo Atributo Método de medição Medidas básicas A norma internacional ISO/IEC 15939 ISO/IEC (2007) apresenta mais detalhes sobre o processo de medição. Exemplos são fornecidos no Anexo A da norma, como forma de esclarecer os conceitos em contextos diferentes. 17Especificação dos requisitos não funcionais de software Como definir indicadores de qualidade de produto Na seção anterior vimos os conceitos de medição, vimos como esses conceitos se relacionam e vimos também umexemplo aplicado a uma medição do coti- diano das empresas — a produtividade. Agora vamos ver como aplicar isso à qualidade do produto de software, ou seja, aos atributos que estão envolvidos em determinar se os requisitos não funcionais foram atendidos. A família de normas internacionais da ISO/IEC que trata da qualidade dos produtos de software é a família 25000 (ISO/IEC, 2014). Entre esse conjunto abrangente de normas, podemos destacar as seguintes: � ISO/IEC 25022: Medição da qualidade em uso. � ISO/IEC 25023: Medição da qualidade de produto de sistemas e software. � ISO/IEC 25024: Medição da qualidade de dados. A ISO/IEC 25022 (ISO/IEC, 2016a) trata da medição de aspectos rela- cionados à qualidade em uso, ou seja, aqueles aspectos que são percebidos pelo usuário, quando ele usa o produto no ambiente-alvo. Seria, por exemplo, quando você utiliza um aplicativo no seu celular para pedir comida. Neste caso, haverá dois aspectos envolvidos na sua percepção de qualidade: um está relacionado ao serviço prestado e o outro, ao produto de software em si. E é bem comum confundir os dois! Vamos imaginar que você queira pedir uma pizza individual e o aplicativo só mostre pizzas grandes. Esse certamente será um problema que vai deixar você muito insatis- feito, mas esse não é um problema do app que você está usando, mas sim do serviço que está sendo prestado via app. O problema é da pizzaria, que não oferece a pizza do tamanho que você precisa. Agora, se na hora que você for fechar o pedido, tiver dificuldade para conseguir localizar onde pode trocar o endereço de entrega, mesmo essa funcionalidade existindo no app, então esse é um problema de usabilidade do aplicativo. Ele provavelmente não tem uma interface intuitiva, uma vez que você não consegue localizar uma fun- cionalidade. Esse sim é um requisito não funcional relacionado à usabilidade do produto e não ao serviço. Especificação dos requisitos não funcionais de software18 Mas há limites menos óbvios para o usuário entre o que é um problema do produto e o que é um problema do serviço. Vamos continuar no exemplo da pizza: imagine que só é oferecida a forma de pagamento com cartão de crédito. Este é um problema do serviço ou do produto de software? Na verdade, depende. Pode ser que o aplicativo ofereça diversas formas de pagamento e o estabelecimento comercial optou por configurar apenas a opção de paga- mento em cartão de crédito. Neste caso, é uma limitação do negócio e não do aplicativo. Já se o aplicativo não permitir o cadastramento de outra forma de pagamento, por mais que o estabelecimento permita, então é uma limitação do aplicativo, que causa desconforto ao usuário. Certamente você já deve ter experimentado diversos aplicativos no seu celular. Alguns você achou fáceis e agradáveis de utilizar e outros você aban- donou o uso porque não gostou deles. Às vezes os motivos de não ter gostado são fáceis de identificar, por exemplo: achei a tela muito poluída e ruim de navegar, os controles não estavam fáceis de localizar, o aplicativo vivia tra- vando, não me sentia seguro em informar meus dados bancários etc. Mas, às vezes, você não consegue saber com certeza porque não gosta deste ou daquele aplicativo, e é aí que está o problema: utilizar um software é uma experiência que envolve diversas percepções, muitas delas difíceis de precisar, pois são mais sutis e subjetivas. O que tentamos fazer ao definir medidas para avaliar os requisitos não funcionais é retirar o máximo que conseguimos das subjetividades e tornar a avaliação mais precisa. A ISO/IEC 25022 (ISO/IEC, 2016a) nos ajuda apre- sentando as medidas que podem ser utilizadas para avaliar, de forma objetiva, a qualidade em uso de produtos de software. A Figura 4 apresenta as características relacionadas à qualidade em uso, para as quais a norma apresenta as propostas de medidas. 19Especificação dos requisitos não funcionais de software Figura 4. Características de qualidade em uso tratadas na ISO/IEC 25022. Fonte: Adaptada de ISO/IEC (2016a). E�ciência Efetividade Cobertura de contexto Livre de riscoSatisfação A norma propõe um grupo de medidas referentes à efetividade, que são aquelas que avaliam a precisão e a completude com que o produto apoia as atividades do usuário. A norma sugere que podem ser usadas medidas como as seguintes: � percentual de tarefas que foram completadas sem ajuda, em relação ao total de tarefas que se tentou realizar; � percentual de objetivos que foram atingidos sem ajuda; � quantidade de erros cometidos pelo usuário ao realizar uma tarefa; � percentual de tarefas que tiveram erros cometidos pelo usuário; � proporção de usuários cometendo erros em tarefas. É fácil imaginar que se o usuário comete erros realizando a tarefa no software, significa que o software não está ajudando o usuário a evitar esses erros. Se utilizarmos as medidas definidas acima, podemos identificar o tamanho do impacto que isso pode acarretar à experiência do usuário. E como evitamos erros cometidos pelo usuário? Por exemplo, quando colocamos uma mensagem do tipo “Confirma a operação?”, estamos dando ao usuário a oportunidade de conferir o que ele realizou e de voltar atrás. É uma forma de chamar a atenção do usuário em pontos críticos, onde um erro Especificação dos requisitos não funcionais de software20 pode ter consequências mais graves. Esse é um recurso muito usado quando estamos finalizando uma operação bancária, por exemplo. Medidas de eficiência também são propostas pela norma. Essas são as medidas que avaliam o uso dos recursos para que o usuário atinja os seus objetivos: podemos usar medidas simples, como o tempo que o usuário leva para fazer uma tarefa, ou podemos usar medidas mais complexas, como as listadas a seguir: � Eficiência em relação ao tempo — quantidade de tarefas que ele faz em determinado tempo (por exemplo, quantos novos cadastros ele consegue fazer por hora). � Eficiência em relação ao custo — custo para realizar as tarefas. � Proporção de tempo que o usuário está executando uma tarefa útil — tempo que o usuário realiza a tarefa real, em comparação ao tempo que ele gasta esperando o sistema se recuperar de um erro, por exemplo, ou o tempo que ele gasta pedindo ajuda. � Ações desnecessárias. � Consequências da fadiga — como a produtividade cai com o uso prolongado. Uma medida muito interessante que pode ajudar em dois aspectos diferentes é a quantidade de ações desnecessárias que um usuário realiza para completar uma tarefa. Por exemplo, a quantidade de cliques errados que ele deu antes de conseguir chegar no item correto que ele precisava. Isso pode apontar uma ineficiência (tempo gasto em tarefas não úteis) e também um problema na usabilidade — se ele tem que clicar em diversos itens incorretos antes de achar o item correto, a interface não está intuitiva. Um terceiro aspecto da qualidade em uso para o qual a norma define medidas é a satisfação. Ela visa a medir o grau de satisfação do usuário quando utiliza o software. Na norma, as medidas de satisfação estão dividi- das em subcaracterísticas, que são as seguintes: utilidade, confiança, prazer (experiência do usuário), conforto (ergonomia). Utilidade pode ser medida da seguinte forma: � medida de satisfação geral; � medida de satisfação com uma funcionalidade específica; � percentual de usuários que usa uma função em relação ao total que poderia utilizá-la; 21Especificação dos requisitos não funcionais de software � percentual de usuários reclamando do software; � percentual de reclamações dos usuários em relação a uma funcionalidade específica em relação às reclamações totais. As subcaracterísticas de confiança, prazer (experiência do usuário) e conforto (ergonomia) podem ser medidas por meio de uma pesquisa de satisfação junto aos usuários do produto. A quarta característica que a norma nos ajuda a gerar medidas em relação à qualidade em uso é o fato de o software ser livre deriscos (do original, em inglês freedom from risk). Riscos podem estar relacionados às subcaracterís- ticas de riscos econômicos, riscos de saúde e segurança e riscos ambientais. � Os riscos econômicos estão mais relacionados a aspectos de negócio, como o retorno sobre o investimento (ROI), o momento para iniciar o ROI, a lucratividade com o uso do produto e o nível de serviço dos usuários, quantos visitantes de um website se tornam clientes, vendas para um cliente e prejuízos decorrentes do produto. � Os riscos de saúde e segurança se referem, como o próprio nome sugere, aos relatos de problemas de saúde ou de segurança decorrentes do uso do software. Esses indicadores são especialmente importantes quando estamos desenvolvendo sistemas de missão crítica que podem ocasionar perdas de vidas ou danos à sua segurança e saúde. � Finalmente, os riscos ambientais se referem a possíveis danos ao ambiente que o produto de software possa ocasionar. Dependendo do tipo de sistema, isso pode estar relacionado à poluição, poluição auditiva ou aquecimento global, por exemplo. A quinta e última característica que a norma aborda é referente à cobertura do contexto. Neste caso, são abordados dois aspectos: completude do contexto e flexibilidade. A medida de completude do contexto é mais específica e se refere ao quanto o contexto é coberto pelo software. Já as medidas sugeridas para a flexibilidade incluem o seguinte: � contexto de uso flexível; � flexibilidade do produto; � independência de proficiência. Especificação dos requisitos não funcionais de software22 Apresentamos nesta seção um resumo de algumas das sugestões realizadas pela norma internacional ISO/IEC 25022 (ISO/IEC, 2016a). Para maiores detalhes, a norma deverá ser consultada. BERG, V. et al. Software startup engineering: a systematic mapping study. Journal of Systems and Software, v. 144, p. 255–274, out. 2018. Disponível em: https://www. researchgate.net/profile/Ilias_Pappas/publication/325858070_Software_Startup_ Engineering_A_Systematic_Mapping_Study/links/5c3dbfb3458515a4c726f927/Sof- tware-Startup-Engineering-A-Systematic-Mapping-Study.pdf. Acesso em: 24 abr. 2020. CLARRUS. Software quality attribute: following all the steps. [S. l.], 2010. Disponível em: https://www.clarrus.com/documents/Software%20Quality%20Attributes.pdf. Acesso em: 24 abr. 2020. ISO/IEC. ISO/IEC 25000:2014: systems and software engineering, systems and software quality requirements and evaluation (SQuaRE), guide to SQuaRE. Switezland: ISO, 2014. ISO/IEC. ISO/IEC 25022:2016: systems and software engineering, systems and soft- ware quality requirements and evaluation (SQuaRE), measurement of quality in use. Switezland: ISO, 2016a. ISO/IEC. ISO/IEC 25023:2016: systems and software engineering, systems and software quality requirements and evaluation (SQuaRE), measurement of system and software product quality. Switezland: ISO, 2016b. ISO/IEC. ISO/IEC 25024:2015: systems and software engineering, systems and software quality requirements and evaluation (SQuaRE), measurement of data quality. Swite- zland: ISO, 2015. ISO/IEC. ISO/IEC/IEEE 15939:2017: systems and software engineering, measurement process. Switzerland: ISO, 2007. PATTON, J. User story mapping: discover the whole story, build the right product. Sebastopol: O’Reilly, 2014. WIEGERS, K. E.; BEATTY, J. Software requirements. 3rd ed. Redmond: Microsoft Press, 2013. Leitura recomendada PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016. 23Especificação dos requisitos não funcionais de software DICA DO PROFESSOR Nem sempre é fácil realizar a elicitação de requisitos não funcionais de software. É comum que os stakeholders foquem a sua atenção sobre o que o software deve fazer, ou seja, sobre os requisitos funcionais, mas não em como o software deve fazer, ou seja, os requisitos não funcionais, também chamados de requisitos de qualidade. Frequentemente os requisitos não funcionais são esquecidos ou especificados em nível de detalhe insuficiente para poderem ser implementados e posteriormente validados. Muitas vezes, isso ocorre pela inexperiência do analista de requisitos em aprofundar esse tipo de requisito. Nesta Dica do Professor, acompanhe algumas questões que podem apoiar o analista de requisitos na elicitação de requisitos não funcionais. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS 1) Requisitos não funcionais estabelecem como o sistema deve funcionar e complementam os requisitos funcionais que dizem o que o sistema deve fazer. Um produto de software está sendo desenvolvido para apoiar a distribuição de doações arrecadadas e repassadas por uma ONG. O software será posteriormente usado para apoiar uma pequena empresa que vende produtos de artesãos locais. Para esse segundo negócio, espera-se haver adaptação de no máximo 30% do código. Assinale a alternativa que indica que produto de software é esse. A) Trata-se de um requisito de adaptabilidade. B) Trata-se de um requisito de usabilidade. C) Trata-se de um requisito de compatibilidade. D) Trata-se de um requisito de operacionalidade. E) Trata-se de um requisito de reusabilidade. 2) Requisitos não funcionais podem afetar sobremaneira a forma como os usuários aceitam o produto. Analise as afirmativas a seguir a respeito dos requisitos não funcionais de um software referentes à qualidade externa do produto: I. “Um usuário sem treinamento deve ser capaz de instalar o produto em até 10 minutos” é um requisito de instalabilidade. II. “Apenas usuários com login e senha válidos terão acesso ao sistema” é um requisito de proteção. III. “Um usuário sem treinamento deve ser capaz de localizar qualquer função sem clicar em nenhuma opção incorreta” é um requisito de eficiência. Com base nas afirmações, assinale a alternativa correta: A) I, II e III estão corretas. B) I e II estão corretas. C) I e III estão corretas. D) II e III estão corretas. E) Apenas a alternativa II está correta. 3) Um sistema está sendo desenvolvido para ser utilizado por qualquer cidadão comum para reportar problemas na rede elétrica. Ele será oferecido na forma de aplicativo para celular. Considerando essas informações, identifique a alternativa que descreve o requisito não funcional mais importante sob a ótica do usuário: A) Usabilidade. B) Disponibilidade. C) Segurança. D) Proteção. E) Eficiência. 4) Uma equipe de desenvolvimento foi contratada para desenvolver um software para monitoramento de pacientes transplantados. O produto será constituído de um avatar de um médico, que fará perguntas ao paciente, e, conforme as respostas, serão exibidas orientações para o paciente. Se as informações apontarem para uma emergência, o sistema deverá ser conectar automaticamente à central para que um médico real converse com o paciente. Nesse caso, que requisito seria mais importante? A) Usabilidade. B) Analisabilidade. C) Integridade. D) Autenticidade. E) Interoperabilidade. Não é possível avaliar um requisito não funcional se ele não estiver especificado por meio de um atributo mensurável. Considere os atributos definidos a seguir: 5) I. O software não poderá exceder o tempo de resposta de até 15 milissegundos em todas as suas funções de consulta ao banco de dados. II. Um programador experiente deve localizar qualquer bug em, no máximo, 6 horas. III. Períodos de não operação dentro do horário normal de trabalho (8:00-18:00h) não podem exceder 5 minutos no mês. Assinale a alternativa que representa adequadamente o atributo de qualidade que esses indicadores podem medir: A) Confiabilidade – capacidade –desempenho. B) Desempenho – modificabilidade –disponibilidade. C) Desempenho – desempenho –confiabilidade. D) Confiabilidade – integridade –disponibilidade. E) Robustez – integridade – disponibilidade. NA PRÁTICA É comum que o foco da elicitação de requisitosde produtos de software seja nos seus usuários. É raro que sejam considerados requisitos que afetam a equipe de desenvolvimento e manutenção. No entanto, uma vez implantado o produto, o restante de sua vida útil será dedicado à sustentação, ou seja, à realização de manutenções corretivas e para promover melhorias. Portanto, atributos relacionados à qualidade interna do produto passam a ter relevância. Para garantir que a estrutura interna do sistema seja robusta o suficiente para evoluir, os requisitos não funcionais relacionados à qualidade interna do produto devem ser levados em consideração desde o início. Confira, Na Prática, o caso de Judy, uma analista de requisitos que recebeu a atividade de especificar os requisitos relacionados à qualidade interna de um sistema para revenda de produtos eletrônicos. Acompanhe os desafios de Judy e como ela tratou essa questão. SAIBA MAIS Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Engenharia de software — uma abordagem profissional Na obra de Roger Pressman e Bruce Maxim, leia o trecho sobre requisitos não funcionais usando FURPS+. Trata-se de uma abordagem para identificar requisitos não funcionais em projetos de software. Ela foi desenvolvida pela HP e hoje é usada em diversas empresas. Desenvolvimento de software II [Série Tekne — IFRS] Um dos requisitos não funcionais mais sensíveis ao usuário final de um sistema interativo é a qualidade da interface. Leia sobre esse assunto no Capítulo 3 de Desenvolvimento de software II, de Marcelo Soares Pimenta, Evandro Manara Pimenta e Karen Selbach Borges. Os requisitos não funcionais agregam valor para as histórias de usuário Os requisitos não funcionais agregam valor às histórias de usuário desde que sejam mensuráveis e que possam ser validados posteriormente. Veja como especificar os requisitos não funcionais em um cartão de história de usuário e acompanhe este exemplo divertido do dia a dia sobre a falta de parâmetros nas especificações de requisitos. Ative a legenda e assista! Conteúdo interativo disponível na plataforma de ensino! Como fazer uma interface mais fácil Usabilidade é uma das propriedades que mais impactam na aceitação do sistema pelo usuário. E a questão é: como fazer uma interface fácil? Veja as dicas apresentadas neste vídeo, cheio de exemplos do dia a dia, incluindo interfaces que não são de software. Conteúdo interativo disponível na plataforma de ensino! Aplicação do diagrama de casos de uso APRESENTAÇÃO É inquestionável que a parte mais importante para o cliente de um projeto de software é receber o produto de que ele necessita e que ele tinha em mente quando o projeto começou. Nada importa mais para ele do que poder usufruir dos serviços providos pelo software da forma como ele imaginou, mesmo que ele não tivesse muita certeza sobre o que isso significava no início. O que ele deseja é uma boa experiência de utilização. Cabe ao analista de requisitos providenciar que não haja diferença entre aquilo que o cliente imaginava e aquilo que ele está recebendo. Para isso, ambos têm à disposição as diversas ferramentas da engenharia de software, mais especificamente as ferramentas da engenharia de requisitos. E uma delas é o diagrama de casos de uso. Nesta Unidade de Aprendizagem, você vai aprender a identificar a intenção dos atores que fazem parte de um cenário de negócios e como extrair, a partir daí, os requisitos funcionais. Além disso, vai aprender a projetar o diagrama de casos, uma importante ferramenta de comunicação entre os usuários e a equipe de desenvolvimento. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Identificar a intenção dos atores primários em um cenário de negócio. • Descobrir os requisitos funcionais de um software.• Projetar um diagrama de casos de uso. • DESAFIO Uma das ferramentas que podem ser utilizadas para facilitar a comunicação entre a equipe de desenvolvimento e os usuários é o diagrama de casos de uso. Esse diagrama utiliza elementos gráficos simples, como o boneco palito (representando os atores), a elipse (representando os casos de uso) e setas (representando os relacionamentos). A empresa onde você trabalha foi contratada por uma universidade para desenvolver diversos aplicativos para apoio às suas novas demandas. Você foi alocado para ser o analista de requisitos do primeiro aplicativo: um software de apoio para os estudantes intercambistas estrangeiros que chegam para estudar na universidade. O analista de requisitos anterior elaborou o diagrama de casos de uso apresentado a seguir: Seu gerente lhe pediu para verificar se esse diagrama está correto. Seu desafio é analisá-lo e emi INFOGRÁFICO O diagrama de casos de uso é um dos diagramas mais simples da UML e justamente por isso possui um grande poder de comunicação com o usuário. É fácil compreender os seus elementos e o que eles significam. Se for adotado o diagrama de casos de uso combinado com o mapeamento de personas e com o Canvas da proposta de valor, é possível ter resultados bem mais eficientes para identificar os requisitos funcionais de um produto de software. Confira, no Infográfico a seguir, as dicas para desenvolver um bom diagrama de casos de uso integrando essas ferramentas. CONTEÚDO DO LIVRO É frustrante para o usuário quando ele recebe um produto que não satisfaz as suas necessidades. Reconhecer as necessidades dos usuários não é uma tarefa trivial. Muitas vezes são discutidas funcionalidades que o sistema deve conter, mas não se discute por que elas devem estar lá, ou seja, quais dores do usuário serão tratadas com o software que está sendo desenvolvido. Muitas vezes se explora o espaço da solução e se deixa de lado o espaço do problema. Abordagens centradas no usuário têm sido a forma que as empresas vêm utilizando para aproximar o mundo da tecnologia do mundo do usuário. Não adianta utilizar a tecnologia mais moderna se o que está implementado não atende aos anseios de quem vai utilizar. O diagrama de casos de uso é uma das formas de buscar o entendimento comum entre o mundo do cliente e o mundo da tecnologia, apoiando a elicitação dos requisitos funcionais do projeto. No capítulo Aplicação do diagrama de casos de uso, da obra Engenharia de requisitos, você vai aprender a identificar as intenções dos atores que interagem com o sistema, utilizando para isso o Canvas de proposta de valor. Também vai discutir os requisitos funcionais e aprender a projetar um diagrama de casos de uso. Boa leitura. ENGENHARIA DE REQUISITOS Sheila Reinehr Aplicação do diagrama de casos de uso Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Identificar a intenção dos atores primários em um cenário de negócio. � Descobrir os requisitos funcionais de um software. � Projetar um diagrama de casos de uso. Introdução Quando nos aproximamos de uma roda de desenvolvedores na hora do café, é comum que as conversas girem em torno da última tecnologia lançada, das tendências em frameworks e das ferramentas de desenvol- vimento, se esta ou aquela linguagem de programação vai continuar fazendo sucesso, se é melhor usar este ou aquele padrão e assim por diante. Tecnologia é o que motiva o desenvolvedor! No entanto, embora a tecnologia seja um aspecto muito relevante, se a equipe de desenvolvimento não conseguir capturar adequadamente as necessidades e os desejos do usuário, não importa o quão proficiente e experiente ela seja com a tecnologia, o sucesso do projeto estará com- prometido. Compreender o que deve ser entregue sempre foi, e continua sendo, um grande desafio. Identificar requisitos de software não é uma atividade trivial. Elicitar requisitos exige um conjunto de habilidades téc- nicas e interpessoais que transcendem as habilidades com a tecnologia. Diversos são os motivospelos quais essa tarefa é tão desafiadora. Um deles é que não existe uma receita mágica que funcione em todas as situações. A quantidade de variáveis envolvidas é muito grande, como, por exemplo: tipo do software que está sendo desenvolvido, complexidade do software, experiência da equipe de desenvolvimento com a área de negócio, grau de inovação do produto ou serviço, perenidade da solução e habilidades interpessoais (os chamados soft skills) da equipe. Essa dificuldade pode ser ainda maior quando o usuário já teve uma experiência ruim com um produto anterior ou, pior ainda, com o produto que está sendo desenvolvido ou modificado. Quando as suas expectativas já foram frustradas anteriormente, pode ser um desafio adicional para a equipe reverter a situação e curar as feridas. Abordagens centradas no usuário têm sido a forma pela qual as or- ganizações de tecnologia da informação (TI) têm buscado resolver essa questão. Entende-se por abordagem centrada no usuário aquela que coloca o usuário no centro do processo de desenvolvimento e foca na busca de valor agregado para ele. Este é um dos princípios das metodo- logias ágeis: entrega rápida de valor ao cliente. Uma das primeiras abordagens desse tipo na área de TI, foi a utilização dos diagramas de casos de uso propostos por Ivar Jacobson. Por meio de elementos gráficos simples, o diagrama apoia a comunicação entre a equipe de desenvolvimento e o usuário na descoberta dos requisitos funcionais. Mais recentemente, ferramentas desenvolvidas pela área de design têm sido também incorporadas como forma de apoiar o projeto de pro- dutos e serviços que têm o usuário no centro do processo. Entre elas está o mapeamento da jornada do usuário, que busca identificar, não apenas as atividades que esse usuário realiza no processo, mas a forma como ele pensa e se sente ao realizar essas atividades, facilitando a identificação de elementos imprescindíveis no projeto de uma nova solução. Neste capítulo você vai trabalhar com a aplicação do diagrama de casos de uso. Para isso vai ver como identificar as intenções dos atores ao utilizar o produto de software que está sendo desenvolvido, identificar os requisitos funcionais e por fim, projetar o diagrama de casos de uso. Também vai rever os conceitos envolvidos no diagrama de casos de uso e utilizar o mapeamento de personas e o canvas da proposta de valor para apoiar a sua construção. 1 Identificação da intenção dos atores Vamos iniciar relembrando os conceitos do diagrama de casos de uso. O diagrama de casos de uso é um dos diagramas de comportamento da UML (GUEDES, 2018). Ele é usado para representar as funcionalidades do sistema, no formato de cenários ou casos de uso, conforme ilustrado na Figura 1: Aplicação do diagrama de casos de uso2 � a fronteira do sistema, representada pelo retângulo que separa o meio externo e o meio interno do sistema; � os atores, representados em forma de um boneco palito (stick man); � os casos de uso, representados em forma de elipse; � os relacionamentos entre os diversos elementos, representados pelas linhas. Figura 1. Diagrama de casos de uso. O diagrama de casos de uso é útil para representar os requisitos funcionais sob a ótica dos usuários do produto de software. Compreender quais são as intenções dos usuários com o produto que está sendo construído é o primeiro passo para iniciar uma descoberta efetiva de requisitos. O que o usuário deseja não é o produto em si, mas os efeitos do uso do produto no seu dia a dia. O que ele quer é uma experiência de uso satisfatória e que atenda às suas necessidades, sejam elas no campo dos negócios, sejam para a vida pessoal e o lazer. O que o usuário deseja é a transformação que o software traz à sua realidade (PATTON, 2014). 3Aplicação do diagrama de casos de uso Usar a nova solução proposta deve trazer mais satisfação ao usuário do que a solução que ele tem atualmente. Isso vale para qualquer situação, seja quando estamos desenvolvendo um produto para substituição de um produto existente, seja para uma solução inovadora e que irá prover um serviço ainda inexistente. Naturalmente, nenhuma equipe de desenvolvimento tem o objetivo de criar uma solução que cause desapontamento e frustração ao cliente. Quando isso ocorre, não foi causado por uma ação deliberada ou premeditada pela equipe. Ninguém deseja entregar uma solução que não atenda ao cliente. Isso acontece porque um ou mais processos da equipe de desenvolvimento estão desalinhados. Frequentemente, esse processo é o de elicitação de requisitos. Kalbach (2016) ressalta que os desalinhamentos, em um sentido mais amplo, impactam toda a organização: as equipes não têm um propósito comum; as soluções são construídas desconectadas da realidade; o foco maior está na tecnologia em vez de na experiência; e as estratégias são desenvolvidas com uma visão muito curta. Em contraste, organizações alinhadas têm um modelo mental compartilhado que aponta para onde querem chegar e são obcecadas pela entrega de experiências extraordinárias para os seus clientes. Colocar o usuário no centro do processo é uma das formas de evitar o desgaste de entregas insatisfatórias. Compreender as intenções das classes de usuários e mapeá-las como intenções dos atores que irão interagir com o software é uma das formas de reduzir a distância entre as expectativas e as entregas. Fique atento ao que Jim Kalbach (2016) sugere sobre os pontos imperativos para que o alinhamento possa ocorrer: � foque as suas ofertas de fora para dentro em vez de dentro para fora — todos devem ter empatia com aqueles e quem servem; os indivíduos da organização devem se importar profundamente com os clientes e suas experiências, devem internalizar os desejos e as motivações das pessoas e devem ser defensores dos interesses delas em todas as suas atividades. � alinhe todas as funções internas em todos os níveis — os processos internos da organização estão tão relacionados com a experiência do usuário quanto os pontos visíveis da interação. Organizações alinhadas não focam em partes da experiência, mas sim na experiência como um todo. � crie visualizações como visão compartilhada — artefatos visuais ajudam a criar uma visão compartilhada. Eles não garantem o alinhamento, mas provocam discussões que promovem o alinhamento. Representações visuais são o must have (precisa ter) do alinhamento estratégico. Aplicação do diagrama de casos de uso4 O mapeamento visual ajuda a compreender sistemas complexos de in- teração, especialmente quando conceitos abstratos como experiência estão envolvidos. Mapear as experiências não é uma atividade que está limitada a um único diagrama, existem muitas perspectivas e abordagens (KALBACH, 2016). Neste capítulo optamos por abordar o diagrama de casos de uso (Figura 1) como ferramenta de representação das funcionalidades do sistema e da interação entre os atores e essas funcionalidades e o canvas da proposta de valor como forma de identificar as expectativas e experiências do usuário, de modo a obter as intenções dos atores. Juntas, essas ferramentas visam a apoiar o desenvolvimento centrado no usuário. Definição da proposta de valor De acordo com a UML (OBJECT MANAGEMENT GROUP, 2017, documento on-line), “Um ator especifica um papel que é desempenhado por um usuário ou qualquer outro sistema que interage com o sujeito”. Sujeito, neste caso, é o sistema que está sendo desenvolvido. Ator, portanto, pode ser um agente humano, que interage com o sistema, ou também outro sistema (que pode ser um hardware, outro software ou uma combinação deles). Para projetar um diagrama de casos de uso, inicialmente é preciso descobrir quem são os atores e que intenção eles têm com o sistema. O primeiro passo para a definição da intenção dos atores é começar iden- tificando a proposta de valor. Valor é aquilo que o cliente percebe como importante para ele e pelo qual está disposto a pagar. Valor não é o preço queo produto vai custar, valor é a relevância, a importância que o produto terá na vida do cliente. Uma das formas de se mapear o valor é utilizando o modelo canvas de proposta de valor. A definição da proposta de valor é um dos elementos que fazem parte do canvas do modelo de negócios, proposto originalmente por Osterwalder (2004). Posteriormente, a proposta de valor foi destacada pelo mesmo autor em um diagrama próprio, conforme ilustrado na Figura 2. 5Aplicação do diagrama de casos de uso Figura 2. Canvas de proposta de valor. Do lado direito do diagrama fica a parte relacionada ao perfil do cliente e, do lado esquerdo, a parte relacionada à solução, ou seja, à proposta de valor. Como se pode observar, o objetivo é promover o alinhamento entre as expectativas do cliente, os produtos e serviços providos pela organização. Esse objetivo de alinhamento é representado pelas setas que saem de uma figura em direção à outra. Esse modelo é muito versátil e pode ser utilizado em diversos tipos de situação, desde a modelagem do negócio de uma organização em si até a modelagem para a construção de um produto de software, como é o caso que utilizaremos neste capítulo. Esse diagrama também tem sido muito empregado nas fases iniciais de concepção e criação de startups. Nossa proposta é que ele sirva como um passo inicial antes da construção do diagrama de casos de uso. E como esse diagrama é construído? Essencialmente em parceria com os stakeholders relevantes do projeto, em especial os usuários do produto que está sendo construído. Isto pode acontecer em uma seção de brainstorming ou workshop de requisitos. A forma mais prática é imprimir uma versão grande do diagrama (formato A0, por exemplo), que possa ser colada em uma parede e que permita que todos tenham acesso a ela para escrever suas contribuições em notinhas adesivas tipo Post-it®, que são fáceis de serem removidas, descar- tadas, alteradas ou realocadas entre as seções do mapa. É comum que uma cor de Post-it seja utilizada para cada item do diagrama, facilitando a sua leitura. Aplicação do diagrama de casos de uso6 O objetivo é que os participantes possam gerar o canvas de proposta de valor de forma participativa e colaborativa, de modo a estreitar o seu entendimento sobre as dores dos usuários e como a solução desenhada poderá trazer alívio para essas dores, concretizando os ganhos esperados. O lado direito do diagrama diz respeito ao espaço do problema, ou seja, o perfil do cliente. Esse espaço é subdividido nas três seções, apresentadas a seguir, � Tarefas do cliente ( jobs): quais são as tarefas funcionais, sociais ou emocionais do lado do cliente. � Dores (pains): são aspectos adversos das tarefas do cliente que ele espera poder evitar — resultados indesejados, obstáculos e riscos. � Ganhos (gains): quais são os benefícios que o cliente deseja alcançar, quais são os ganhos financeiros, sociais, emocionais obtidos por meio da realização das tarefas. O lado esquerdo do diagrama diz respeito ao espaço da solução, ou seja, o mapa de valor, que é subdividido em três seções também, listadas a seguir. � Produtos e serviços (products and services): a solução que está sendo construída. � Aliviadores de dores ou analgésicos (pain relievers): como resolver a dor do cliente? O que elimina a dor do cliente, seu estresse ou suas emoções negativas sobre o produto ou serviço? � Criadores de ganho (gain creators): o que o produto ou serviço oferece de ganho para o cliente, seja em termos de redução de custos, seja em emoções positivas ou ganho social? Gerar o canvas da proposta de valor é mais que fazer um diagrama, é favorecer a comunicação entre os stakeholders e a equipe de desenvolvimento por meio de uma ferramenta gráfica simples, em uma interação que visa à cocriação para atingir um entendimento comum sobre o produto. 7Aplicação do diagrama de casos de uso Veja aqui um exemplo do modelo canvas de proposta de valor, considerando o caso da Netflix. O cliente, do lado direito, deseja uma forma de assistir filmes e séries em diversas localidades, com qualidade e baixo custo. O provedor oferece serviço de streaming de vídeo on demand. Infra de TI robusta para não travar Serviços de streaming on demand Pacotes compreços acessíveis Filmes sem propaganda no meio Assistir em qualquer lugar e hora Catálogo sempre atualizado Pacotes com preços acessíveis Conforto para assistir séries e filmes Custo mais baixo do que ir ao cinema Segurança de não precisar sair de casa Maior integração da família Filmes com propaganda na TV a cabo Catálogo desatualizado na TV a cabo Ter horário destinado na TV a cabo Lazer em casa com a família Caro ir no cinema com a família toda Longas esperas em aeroporto Criadores de ganhos Ganhos Tarefas do cliente Dores Produtos e serviços Aliviadores de dor Algumas dicas podem ajudar na construção do canvas da proposta de valor. Veja a seguir. � Comece identificando as personas que utilizarão o seu produto (per- sonagens que representam uma classe real de usuários do sistema). � É possível, na mesma sessão, criar mais que um canvas de proposta de valor, cada um sob a perspectiva de uma persona. Pode-se, inclusive, ter grupos distintos trabalhando simultaneamente, cada um com um tipo de persona. � Prepare a sessão presencial com antecedência para que todas os stakehol- ders essenciais para o seu produto possam estar presentes. � Prepare uma lista de perguntas que possam apoiar as reflexões dos participantes, para o caso de eles não conseguirem evoluir sozinhos. Aplicação do diagrama de casos de uso8 � Incentive fortemente que todos participem e coloquem sua opinião no quadro — especialmente suas dores e sua percepção sobre os ganhos que desejam. � Assim como em uma sessão de brainstorming, desestimule as críticas às colocações dos colegas para que todos possam se expressar livremente, sem o receio de serem criticados ou ridicularizados. � Ao final, faça uma rodada para a leitura e esclarecimento de todos os Post-it e para garantir o entendimento comum do que está registrado. � Se os participantes permitirem, a rodada final de leitura dos Post- -it poderá ser gravada, de forma a facilitar a compilação e análise posteriormente. � Tenha em mente que o objetivo não é a construção do mapa em si, mas chegar a um entendimento comum sobre o que está sendo desenvolvido, por que está sendo desenvolvido e o que se espera como efeitos do uso do produto. Para elaborar o canvas de modelo de negócios, acesse o link a seguir e utilize a cartilha elaborada pelo SEBRAE especialmente para explicar o uso dessa ferramenta. https://qrgo.page.link/pWvX1 Intenção dos atores primários Apresentamos, nas subseções anteriores, uma das ferramentas que vem sendo muito utilizada para ajudar a aprofundar o entendimento das necessidades de quem utilizará o produto que está sendo desenvolvido, ou seja, os atores humanos. Mas não esqueça que existem também os atores não humanos, como hardware e software com os quais o nosso sistema irá interagir. Vivemos em um mundo tecnologicamente integrado e é pouco provável que você venha a desenvolver um produto de software que não precise conversar com outro para realizar as suas funções de forma completa. Em tempos de internet das coisas (IoT, do inglês, internet of things) e equipamentos e serviços distribuídos, é importante identificar e compreender as necessidades dessas interfaces logo no início do projeto. 9Aplicação do diagrama de casos de uso 2 Descoberta dos requisitos funcionais Como você observou na seção anterior, definir a intenção dos atores é um dos primeiros passos para chegar aos requisitos funcionais, ou seja, às fun- cionalidades que devem ser providas pelo produto de software para atender a essas intenções. Existem diversas formas de elicitar os requisitos, e a escolha da técnica mais adequada vai depender do contexto do projeto, ou seja, do tipo de produto,do negócio, da disponibilidade de informações, da disponibilidade de fontes para obter essas informações, da experiência da equipe de desenvolvimento e mais uma dezena de aspectos particulares de cada projeto. Algumas das técnicas mais utilizadas são: � entrevista; � reunião tradicional; � reunião no formato de JAD ( joint application design); � brainstorming; � questionário; � observação; � análise de sistemas anteriores; � análise de leis e regulamentações. Não vamos discutir as técnicas de elicitação de requisitos neste capítulo, mas tenha em mente que você pode combiná-las para chegar ao melhor resul- tado. Wiegers e Beatty (2013) oferecem boas dicas para apoiar essa seleção. Ao elicitar os requisitos, é comum que eles venham em diferentes tipos e níveis de abstração. Alguns estarão relacionados ao produto de software em si, enquanto outros trarão informações em relação a restrições de projeto ou de processo, como data esperada de conclusão do projeto, uso de determi- nada tecnologia, uso de determinado processo e desenvolvimento e assim por diante. Mesmo os requisitos de produto podem vir misturados entre os requisitos funcionais e os não funcionais (como desempenho, usabilidade, manutenibilidade, etc.) O diagrama de casos de uso é excelente para elicitar os requisitos fun- cionais, ou seja, as funções que o usuário necessita e que realizará por meio do produto de software. Histórias do usuário, utilizadas nos métodos ágeis, assemelham-se muito aos casos de uso, exceto que não têm uma forma gráfica de representação. Aplicação do diagrama de casos de uso10 3 Como projetar o diagrama de casos de uso O diagrama de casos de uso utiliza uma linguagem gráfica simples, composta por símbolos fáceis de rabiscar à mão livre, conforme vimos na Figura 1 no início deste capítulo. Apesar desta simplicidade, e talvez até por causa dela, ele possui um alto poder de comunicação. É fácil para um usuário leigo se ver realizando as tarefas representadas pelos casos de uso e apoiar a sua construção. O diagrama de casos de uso se aplica aos requisitos funcionais, mas não foi criado para tratar os requisitos não funcionais. Nível de abstração Uma das primeiras dúvidas que surgem quando se começa a trabalhar com casos de uso é sobre o nível de abstração de um caso de uso. Até que nível se deve chegar no detalhamento de um caso de uso? E a resposta é: depende! À medida que você for usando essa ferramenta, vai sentir se detalhou de menos ou demais, e vai promovendo os ajustes para os próximos projetos ou as próximas sprints. Para começar, você pode se basear na dica de um dos precursores dos métodos ágeis, Alistair Cockburn (2005). Ele considera três níveis de abstração para os objetivos de uma tarefa, utilizando uma metáfora da altitude, conforme ilustrado na Figura 3. Um objetivo está no nível do mar quando se refere a uma tarefa que você vai realizar sem interrupção, ou seja, aquela que você “realiza em uma sentada”. Por exemplo, comprar um produto pela internet. Patton (2014) exemplifica dizendo que é o equivalente a uma tarefa do tipo tomar banho: você não para no meio do banho para tomar um cafezinho e voltar depois. Então essa é uma tarefa que está no nível do mar, ou seja, uma tarefa no nível do usuário. Cockburn (2005) diz que esse é um objetivo azul (blue goal), chama essas tarefas de tarefas em nível funcional e as representa como uma onda do mar. Todo o restante ou está acima ou abaixo do nível do mar. 11Aplicação do diagrama de casos de uso Figura 3. Níveis de abstração dos casos de uso. Fonte: Adaptada de Cockburn (2005). Cockburn (2005) considera que um objetivo está acima do nível do mar quando tem diversos objetivos no nível do mar a ele relacionados. Isso ocorre em três situações: � mostrar o contexto no qual o objetivo opera; � mostrar o ciclo de vida que os objetivos relacionados operam; � servir como uma espécie de índice para os objetivos abaixo dele. Ele ainda divide esse nível em dois tipos: super sumário (nível bem abs- trato) e sumário (nível abstrato). O primeiro é representado por uma nuvem e considerado como super branco (very white goal). O segundo é representado por uma pipa e considerado como branco (white goal). Por fim, Cockburn (2005) considera que os objetivos que estão abaixo no nível do mar são as subfunções (indigo goals). Geralmente não precisamos listá-los, a menos que seja absolutamente necessário em termos de clareza e compreensão do escopo. A esses objetivos ele atribui a cor índigo e os compara com peixes. Ele brinca que existem casos de uso que são tão detalhados que estão no fundo do mar, como mariscos ou ostras, e são da cor preta (black goals). Estes não deveriam nem existir. Aplicação do diagrama de casos de uso12 Diagrama de caso de uso na prática A melhor forma de discutirmos as peculiaridades deste diagrama é por meio de um exemplo. Vamos ver um deles para ajudar a tirar as dúvidas sobre a sua construção. A Figura 4 apresenta o diagrama de casos de uso do aplicativo Livros On-line, que funcionará para a compra e leitura de livros de forma digital, como faz o aplicativo Kindle, por exemplo. Trataremos aqui apenas da parte que oferece as funcionalidades para o leitor e que será usada em dispositivos móveis (celulares e tablets). A parte de backoffice, que administra o negócio, não será tratada neste exemplo. Figura 4. Diagrama de casos de uso do aplicativo Livros On-line. Vamos começar pela fronteira do sistema. Um retângulo separa a parte interna do sistema da parte externa. O nome do sistema é colocado na parte superior desse retângulo. Os atores ficam do lado de fora, uma vez que são agentes externos ao sistema. 13Aplicação do diagrama de casos de uso Inicialmente, identificamos três atores: o Leitor (que é o ator principal desse aplicativo), a Operadora de Cartão de Crédito (por meio da qual serão feitos os pagamentos) e o Dicionário (que é um sistema externo que, como o próprio nome diz, provê as funções de dicionário, incluindo a tradução de termos). Tanto a Operadora de Cartão de Crédito quanto o Dicionário são considerados atores secundários. Geralmente, colocam-se os atores principais do lado esquerdo do diagrama e os atores secundários do lado direito. Note que não chamamos o Leitor de Cliente ou de Usuário, pois esses são nomes genéricos e pouco significativos. É recomendado optar por nomear os atores com um substantivo mais significativo para o contexto. Neste caso, o leitor. Para que os requisitos desse Leitor possam ser adequadamente definidos podemos iniciar mapeando o perfil de leitores que, possivelmente, vão se interessar pelo aplicativo. Isso pode ser feito com o mapeamento das personas. Vamos pensar em dois perfis distintos: � leitores que buscam por leitura técnica (não ficção); � leitores que buscam por leitura não técnica (ficção). No primeiro perfil podemos pensar em professores, universitários, pesqui- sadores e profissionais. Esse perfil pode desejar funcionalidades que facilitem suas pesquisas, como copiar uma citação e carregar junto com ela a referência do livro. Já um perfil de uso doméstico, por exemplo, que utiliza o livro para leituras de lazer (livros de ficção), não necessita de uma função como essa, mas pode desejar compartilhar suas preferências com listas de leitores de um mesmo gênero, por exemplo, ou até mesmo montar um clube de leitura. Pensar nos diferentes perfis nos ajuda a identificar requisitos funcionais ou não funcionais para essas classes específicas de usuários. Se quisermos atingir, por exemplo, um público com alguma deficiência visual, teremos que contemplar elementos na interface que facilitem a leitura para esse público, como aumento das letras ou até mesmo a leitura em áudio. Uma persona com essas características precisa ser então projetada. Em seguida, identificamos três casos de uso principais que o Leitor pode realizar: ele pode Pesquisar Livros, Comprar Livros e Ler Livros. Noteque todos eles estão diretamente ligados ao ator principal, o Leitor. Esses casos de uso podem ser considerados, na visão de Cockburn (2005), como os do nível do mar. Aplicação do diagrama de casos de uso14 Essas funcionalidades podem ser provenientes de diversas fontes, como já discutimos anteriormente neste capítulo. Uma delas pode ser o workshop para o mapeamento do canvas da proposta de valor. Geralmente diversas técnicas combinadas são usadas para essa finalidade. Quando o Leitor estiver pesquisando um livro, ele pode, opcionalmente, solicitar uma amostra grátis. Isso é representado pelo relacionamento extend entre o caso de uso Pesquisar Livro e Solicitar Amostra Grátis. Neste mesmo ponto temos um relacionamento include entre Pesquisar Livro e Exibir Re- comendações. Isso significa que toda vez que uma pesquisa for feita, serão exibidas recomendações similares à pesquisa. Qualquer Leitor pode Pesquisar Livros, mas, para comprar, esse Leitor deverá estar logado. Isso é representado pelo relacionamento include que existe entre Comprar Livro e Realizar Login. Se ele não tiver um cadastro, terá que Realizar Cadastro (relacionamento de extend). Se ele esqueceu a senha, pode acionar o Recuperar Senha (outro relacionamento de extend). A compra do livro é paga com cartão de crédito e dois atores são necessários para concluir essa transação: o Leitor e a Operadora de Cartão de Crédito. Caso houvesse mais que uma forma de pagamento, então seria possível utilizar o relacionamento de generalização para contemplar as demais formas. O terceiro caso de uso principal que o ator Leitor pode executar é Ler Livro. Essa é a funcionalidade principal do aplicativo e a ela precisa ser dedi- cada toda a atenção no momento de elicitação dos requisitos, para que sejam incorporadas funcionalidades que agreguem valor a cada um dos perfis que definimos (personas). Todos os relacionamentos com os casos de uso Ler Livro são do tipo extend, uma vez que não são obrigatórios, ou seja, o usuário pode ou não executar aquelas subfunções. Estão listados, neste caso: Recomendar Livro, Escrever Anotação, Compartilhar Citação, Copiar Trecho, Consultar Destaques Populares, Marcar Trecho e Pesquisar Termo. Note que, para que o caso de uso Pesquisar Termo possa ser realizado, ele precisa do sistema externo Dicionário. Portanto, não se trata de uma funcio- nalidade implementada internamente, mas de uma interface com um sistema externo. Isso é bastante comum no desenvolvimento de software, uma vez que é difícil termos sistemas isolados e que não se integram com outros. Neste exemplo específico não tivemos a necessidade de mapear um ator do tipo hardware porque não temos nenhum hardware especial envolvido. Se tivéssemos, ele seria mapeado como um ator, utilizando a mesma simbologia (boneco palito), ou poderia usar um ícone (SEIDL et al., 2012). Utilizar ícones não é muito comum em diagramas de caso de uso na prática, mas é permitido pela UML (OBJECT MANAGEMENT GROUP, 2017). 15Aplicação do diagrama de casos de uso Caso o nosso exemplo tivesse uma distinção entre um Leitor comum e um Leitor VIP, no qual houvesse algum tipo de privilégio para o Leitor VIP, então, a forma adequada de representar seria por meio do relacionamento de generalização, conforme demonstrado na Figura 5. Figura 5. Diagrama de casos de uso do aplicativo Livros On-line com Cliente VIP. Como se pode observar pela Figura 5, o Cliente VIP pode fazer tudo o que o Cliente faz. Ele herda todos os relacionamentos do Cliente normal e pode realizar um caso de uso adicional, que só ele pode realizar, que é Receber Benefícios. Essa é uma das formas de se representar este tipo de situação. Esta situação aqui foi implementada no diagrama criando um novo tipo de ator, o Cliente VIP e um novo caso de uso, Receber Benefícios. Outra forma de fazer esta representação seria não inserir o ator adicional Cliente VIP, mas adicionar o caso de uso Receber Benefícios como um extend de outro caso de uso, em que o benefício fosse ser associado. Por exemplo, se ele tem direito a baixar alguns livros gratuitamente, esse caso de uso poderia estar relacionado com o caso de uso Pagar Livro. Aplicação do diagrama de casos de uso16 COCKBURN, A. Escrevendo casos de uso eficazes: um guia prático para desenvolvedores de software. Porto Alegre: Bookman, 2005. GUEDES, G. UML2: uma abordagem prática. 3. ed. São Paulo: Novatec, 2018. KALBACH, J. Mapping experiences: a guide to creating value through journeys, blueprints, and diagrams. Beijin: O´Reilly, 2016. OBJECT MANAGEMENT GROUP. Unified Modeling Language®: OMG UML® v2.5.1. [S. l.], 2017. Disponível em: https://www.omg.org/spec/UML/About-UML/. Acesso em: 2 mar. 2020. OSTERWALDER, A. The business model ontology: a proposition in a design science ap- proach. 2004. Tese (Doutorado)- Université de Luasanne, Lausanne, 2004. Disponível em: http://www.hec.unil.ch/aosterwa/PhD/Osterwalder_PhD_BM_Ontology.pdf. Acesso em: 2 mar. 2020. PATTON, J. User story mapping: discover the whole story, build the right product. Se- bastopol: O´Reilly, 2014. SEIDL, M. et al. UML@Classroom: an introduction to object-oriented modeling. Cham: Springer, 2012. WIEGERS, K. E.; BEATTY, J. Software requirements. 3. ed. Redmond: Microsoft Press, 2013. Leitura recomendada SEBRAE. Cartilha O quadro de modelo de negócios: um caminho para criar, recriar e inovar em modelos de negócios. Brasília, DF: SEBRAE, 2013. Disponível em: www.sebrae.com.br/ Sebrae/Portal%20Sebrae/UFs/ES/Anexos/ES_QUADROMODELODENEGOCIOS_16_PDF. pdf. Acesso em: 02 mar. 2020. Os links para sites da web fornecidos neste capítulo foram todos testados, e seu fun- cionamento foi comprovado no momento da publicação do material. No entanto, a rede é extremamente dinâmica; suas páginas estão constantemente mudando de local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade sobre qualidade, precisão ou integralidade das informações referidas em tais links. 17Aplicação do diagrama de casos de uso DICA DO PROFESSOR O diagrama de casos de uso apresenta as funcionalidades que serão desenvolvidas para atender às necessidades dos stakeholders. Ele é um diagrama de comportamento da UML que se baseia em três elementos principais: ator, caso de uso e relacionamentos. Embora seus elementos sejam simples, eles são ricos em semântica, ou seja, em significado. Por isso é importante prestar atenção aos detalhes de sua construção, para que você consiga efetivamente se comunicar de forma precisa. Nesta Dica do Professor, você vai ver o exemplo de um aplicativo para uma seguradora e como os elementos do diagrama de caso de uso foram utilizados. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS O diagrama de casos de uso representa funcionalidades do sistema com foco nas interações dos atores com os casos de uso. Considere o diagrama a seguir e analise as alternativas. 1) I – O ator A herda todos os casos de uso do ator B por meio do relacionamento de generalização, portanto ele pode executar todos os casos de uso do diagrama. II – Toda vez que o caso de uso 5 for executado, o caso de uso 1 também será executado. III – O ator A pode executar o caso de uso 4, que por sua vez chama o caso de uso 1 se uma determinada condição for satisfeita. IV – O caso de uso 2 precisa do ator B e do ator C para ser executado. Com base no diagrama de casos de uso e nas afirmativas acima, é correto afirmar que: A) as alternativas I, II, III e IV estão corretas. B) as alternativas I, II e IV estão corretas. C) as alternativas III e IV estão corretas. D) apenas a alternativa III está correta. E) apenas a alternativa IV está correta. 2) Um analista de requisitos está modelando os requisitos de um sistema de compra de passagens aéreas utilizando o diagrama de casos de uso e levantou as seguintes informações: I – Quando um passageiro comprar uma passagem, ele pode pontuar no programa de fidelidadese ele participar do programa de fidelidade da companhia aérea. II – Quando um passageiro comprar uma passagem, ele pode ou não reservar um assento. III – Quando um passageiro reservar um assento, ele deverá pagar uma tarifa adicional se não for passageiro VIP. IV – Para comprar uma passagem, o passageiro deve estar logado. A) I – Extend, II – Extend, III – Extend, IV – Extend. B) I – Extend, II – Extend, III – Generalização, IV – Extend. C) I – Include, II – Include, III – Generalização, IV – Include. D) I – Extend, II – Extend, III – Extend, IV – Include. E) I – Include, II – Include, III – Generalização, IV – Generalização. 3) Em um diagrama de casos de uso, os relacionamentos são representados por linhas que têm formatos e significados específicos, servindo de base para a interpretação semântica da relação. O cliente pediu que o aluno possa entrar com um pedido de revisão de notas para o professor, via sistema, sempre que ele não concordar com a nota atribuída a uma avaliação. Analise o diagrama a seguir e selecione a melhor forma de modelar essa nova situação: A) Inserir um novo caso de uso Pedir revisão de notas e ligá-lo ao caso de uso Consultar notas usando um relacionamento de <<include>>. B) Inserir um novo caso de uso Pedir revisão de notas e ligá-lo ao caso de uso Consultar notas por meio de um relacionamento de <<extend>>. C) Inserir um relacionamento de <<extend>> entre o caso de uso Consultar notas e caso de uso Revisar notas. D) Inserir um novo caso de uso Pedir revisão de notas e ligá-lo ao ator Aluno usando uma associação. E) Inserir um caso de uso Pedir revisão de notas e ligá-lo ao ator Aluno e ao ator Professor usando associação. 4) Diversas ferramentas podem ser utilizadas para apoiar a modelagem do diagrama de casos de uso. Sobre essas ferramentas, analise as afirmações a seguir: I. Para mapear as intenções dos atores de um sistema, pode-se utilizar o Canvas da proposta de valor. II. Para mapear classes de usuários, pode-se utilizar a definição de personas. III. Ao mapear as personas, todas as classes de usuários de um sistema estarão cobertas. IV. As tarefas do cliente em um Canvas de proposta de valor serão os casos de uso do diagrama de casos de uso. Assinale a alternativa correta: A) I, II, III e IV estão corretas. B) I e II estão corretas. C) I, II e III estão corretas. D) I e IV estão corretas. E) I, II e IV estão corretas. 5) O diagrama de casos de uso é uma importante ferramenta para ajudar a modelar os requisitos de um produto de software. Analise as definições a seguir e assinale a alternativa correta sobre esse diagrama: A) Um ator é um ser humano que executa os casos de uso do sistema. B) O diagrama de casos de uso representa requisitos funcionais e não funcionais. C) Cada caso de uso representa um requisito funcional. D) Um relacionamento de generalização só existe entre atores. E) Um sistema externo pode ser representado como um ator. NA PRÁTICA Não basta um produto de software utilizar as tecnologias mais modernas e integradas, seja ele um aplicativo ou um site, se ele não for capaz de resolver a dor do usuário. Dores mal compreendidas se transformam em requisitos mal definidos e, portanto, podem levar à frustração no uso do produto ou até mesmo ao abandono de sua utilização. O diagrama de casos de uso é uma ferramenta de fácil utilização para a comunicação entre a equipe de desenvolvimento e os clientes/usuários, na busca pela definição adequada dos requisitos. Ele é um dos diagramas de comportamento da UML e foi concebido utilizando elementos gráficos simples e de fácil compreensão e aplicação. Para apoiar a identificação dos atores envolvidos e suas dores, o Canvas da proposta de valor é outra ferramenta que pode ajudar a identificar o que agrega efetivamente valor sob a ótica do cliente. Judy é uma analista de requisitos que irá atuar no desenvolvimento de um sistema de venda e entrega de material escolar. A missão dela é reverter a imagem ruim que o cliente tem da empresa. Para isso, ela precisa começar entendendo as intenções dos atores para, então, fazer o diagrama de casos de uso. Acompanhe, Na Prática, os desafios de Judy e como ela organizou o seu trabalho desde o início para concluí-lo com sucesso. Conteúdo interativo disponível na plataforma de ensino! SAIBA MAIS Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Personas Este vídeo apresenta de forma prática e rápida o mapeamento de personas, o primeiro passo para identificar as intenções dos usuários. A ideia é criar empatia com os diversos tipos de perfis que utilizarão o sistema. Aproveite as ideias do vídeo e tente imaginar as personas envolvidas em um aplicativo como o Uber ou o 99Taxi. Conteúdo interativo disponível na plataforma de ensino! 4 formas de descobrir a principal dor do cliente O ponto de dor do cliente é basicamente o motivo pelo qual ele está buscando ajuda na sua solução. No mercado B2B, identificar essa dor significa fazer uma abordagem consultiva e oferecer uma solução que resolverá o problema do lead, correspondendo de imediato às expectativas dele. Conteúdo interativo disponível na plataforma de ensino! Como fazer um mapa da empatia Neste vídeo Michel Winkler aborda o mapa da empatia, uma outra forma de compreender as necessidades do usuário, detalhando seu perfil e seu contexto. Confira as dicas que podem ajudar na elicitação de requisitos e definição da intenção dos atores dos casos de uso. Conteúdo interativo disponível na plataforma de ensino! Mapa da jornada do cliente (em inglês) Este vídeo mostra de forma lúdica como compreender as jornadas de cada um dos tipos de usuários de uma cafeteria. Mostra cada persona (tipo de usuário) e como esse usuário gostaria de utilizar a cafeteria. É uma excelente maneira de você repensar a forma como enxerga os seus usuários e o que eles pretendem com o produto. Ative as legendas e confira. Conteúdo interativo disponível na plataforma de ensino! Modelagem de Processos APRESENTAÇÃO Você sabia que é possível prever como um processo vai funcionar antes mesmo de colocá-lo em prática? Isso é possível por meio da modelagem do processo, ou seja, por meio da criação de um modelo, que é uma representação da realidade e que pode ser avaliado e testado, prevendo seu funcionamento. Para isso, são utilizadas ferramentas e técnicas específicas. Nesta Unidade de Aprendizagem, você vai estudar os conceitos relacionados à modelagem de processos e diferenciar os conceitos de gestão por processos e gestão de processos. Além disso, vai estudar uma simbologia própria para modelar processos, o Business Process Model and Notation (BPMN). Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Expressar os conceitos envolvidos na metodologia de modelagem de processos.• Diferenciar os conceitos de gestão de processos e gestão por processos.• Construir modelos utilizando a simbologia do Business Process Model and Notation (BPMN). • DESAFIO Você é responsável pela gestão de uma empresa de prestação de serviços de tecnologia que atua em 30 grandes cidades do Brasil, tendo uma carteira com quase 1.000 clientes e um faturamento milionário. A gestão de tantas unidades e de seus diferentes processos sempre foi um desafio e, para manter a competitividade da organização e identificar oportunidades de melhoria, você decidiu, junto com seu staff, criar um processo seletivo para trainees, que teriam como missão atuar na revisão dos processos de trabalho da organização e suas unidades. uniformização e a clareza das respostas, garantindo que sejam melhor compreendidas e avaliadas por você e seu staff, evitando o problema ocorrido na fase anterior, e como viabilizar o início imediato das ações de melhoria logo após encerrado o processo seletivo? INFOGRÁFICO A construção de produtose o desenvolvimento de processos são necessidades constantes das organizações que querem se manter no mercado e permanecer competitivas. No entanto, criar novos processos ou redesenhar os existentes para torná-los mais eficientes, eficazes e confiáveis exige tempo e utilização significativa de diversos recursos. Assim, modelar os processos é uma forma de verificar como eles funcionarão na vida real de uma forma mais rápida, barata e eficiente. Veja no Infográfico como a criação de um modelo de processo de negócio pode ser útil para as organizações, bem como a simbologia Business Process Model and Notation (BPMN) pode ser utilizada para tal finalidade. CONTEÚDO DO LIVRO Desenvolver novos processos ou modificar os existentes é uma atividade que envolve grande responsabilidade pelas implicações, pois todos os trabalhos que são executados nas organizações ocorrem por meio de processos. Dessa forma, um processo inadequado vai fazer com que a organização sofra severas consequências, colocando em risco sua competitividade. É importante, então, "testar" os processos antes de sua efetiva implementação, o que pode ser feito mediante a modelagem dos processos. A modelagem permite que você possa estudar e prever o comportamento de determinado fenômeno sem a necessidade de produzi-lo de fato, o que seria complexo, caro e demorado. Para saber mais sobre o tema, leia o capítulo Modelagem de processos, da obra Mapeamento e modelagem de processos, que serve como base teórica desta Unidade de Aprendizagem. Boa leitura! MAPEAMENTO E MODELAGEM DE PROCESSOS Henrique Martins Rocha Modelagem de processos Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Expressar os conceitos envolvidos na metodologia de modelagem de processos. � Diferenciar os conceitos de gestão de processos e gestão por processos. � Construir modelos utilizando a simbologia BPMN. Introdução Você sabia que é possível prever como um processo vai funcionar antes mesmo de colocá-lo em prática? Isso é possível por meio da modelagem do processo, ou seja, por meio da criação de um modelo que representa da realidade e que pode ser avaliado e testado, prevendo o funcionamento do processo. Para isso, são utilizadas ferramentas e técnicas específicas. Neste capítulo, você vai ler a respeito dos conceitos relacionados à mo- delagem de processos e diferenciar os conceitos de gestão por processos e de gestão de processos. Além disso, vai analisar uma simbologia própria para modelar processos: a Business Process Modeling Notation (BPMN). Metodologia de modelagem de processos A acirrada competição no mundo atual exige que as organizações estejam cons- tantemente reformulando os seus produtos, serviços, as suas estratégias e, em especial, todos os processos relacionados. Antigamente, barreiras geográficas, limitações logísticas e de comunicação criavam barreiras mercadológicas que protegiam organizações instaladas em determinadas regiões. Por exemplo, obter bens e serviços de um fornecedor mais distante re- presentava um prazo muito mais longo para aquisição e recebimento, bem como severos impactos no custo, devido à distância a ser percorrida, ao frete, entre outros. O cenário atual, porém, é completamente diferente: modernos sistemas produtivos, aliados a avançados métodos de logística e distribuição, fazem a competição deixar de ser local para se tornar global. Um exemplo claro está no fato de encontrarmos tantos produtos fabricados em países asiáticos comercializados no Brasil a preços tão baixos. Além disso, os avanços em tecnologias de informação e comunicação, com destaque para a massificação do uso da internet, permitiram que houvesse uma mudança substancial na dinâmica de mercado: empresas, fornecedores e clientes têm acesso instantâneo a bens e serviços. Dessa forma, a velocidade exigida para as organizações se adaptarem às novas situações e oportunidades é cada vez maior. Porém, criar novos produtos, serviços e processos reais em um ambiente tão mutável é algo bastante desafiador e, em muitos casos, praticamente invi- ável, devido aos custos envolvidos e ao alto risco de perdas substanciais pela quantidade de variáveis envolvidas. Surge, assim, como estratégia, a modela- gem, caracterizada como uma representação total ou parcial de um elemento, conjunto ou sistema físico e real, que pode ser utilizada para descrever, testar ou predizer o comportamento do sistema físico em situações específicas. Como destaca Ferreira (2013a, p. 47): As organizações do século XXI para permanecerem ativas precisam estar em constante mudança. Tais mudanças acontecem por meio de implementação de novos conceitos, os quais surgem geralmente na forma de modelos, que são bastante diversificados e incluem um conjunto de técnicas aplicadas à melhoria das atividades organizacionais sempre buscando retratar a realidade do que se deseja modelar. A modelagem seria o ato de criar tal representação: maquete, modelo eletrô- nico, equação ou algoritmo, modelos matemáticos, gráficos ou textuais, entre outros. Especificamente abordando o contexto de processos, Baldam, Valle e Rozenfeld (2014) definem um modelo como uma representação (com maior ou menor grau de formalidade) abstrata da realidade, em um dado contexto. De acordo com a Associação dos Profissionais de Gerenciamento de Pro- cessos de Negócios (ABPMP) (2013), a modelagem de processos compõe (junto à análise, ao desenho, ao gerenciamento de desempenho e à transformação de processos) as atividades-chave e o conjunto de habilidades necessárias ao gerenciamento de processos do negócio, como mostrado na Figura 1. 85Modelagem de processos Figura 1. Ciclo de gerenciamento de processos. Fonte: ABPMP (2013, p. 52). Com essa representação simplificada da realidade (o modelo), é possível suportar o estudo da atual situação (conhecida como AS–IS), analisá-la, redesenhá-la, medir seu desempenho e prover as transformações necessárias para a sua melhoria, levando a novos patamares de desempenho dos processos (conhecido como TO–BE) e, por conseguinte, das organizações (ABPMP, 2013). De acordo com Ferreira (2013a, p. 77), a modelagem TO–BE “[...] consiste na representação gráfica de um processo a ser implementado ou a proposição de um novo [...]. Nesta etapa, as interações com os clientes, as diferentes oportunidades de melhorias identificadas na situação atual do processo, e a da caixa-preta devem ser observadas”. A expressão caixa-preta se refere ao não detalhamento de um processo (ou de um grupo de processos), por se tratar de participantes externos ao processo estudado. Por exemplo, os processos de um cliente externo que receba determinado serviço ou produto provavelmente não serão detalhados no modelo que representa a realidade da empresa que os fornece. Modelagem de processos86 Mais do que um exercício de construção de um modelo, a modelagem deve considerar o detalhamento da representação e a padronização na sua constru- ção, de forma que o modelo possa ser compreendido por todos os envolvidos. Para isso, há associações que estabeleceram simbologias específicas para mapeamento e modelagem de processos, além de serem fóruns de discussão e troca de experiências e práticas sobre o gerenciamento de processos: a ABPMP, a American Productivity & Quality Center (APQC) e a Business Process Management Group (BPMG). Para saber mais sobre gerenciamento e modelagem de processos, explore o site da ABPM Brasil: http://www.abpmp-br.org/ A ABPMP é uma associação internacional de profissionais de business process manage- ment (BPM), sem fins lucrativos, independente de fornecedores e dedicada à promoção de conceitos e práticas de gerenciamento de processos de negócio. Pavani Junior e Scucuglia (2011, p. 49) destacam que “um modelo nunca será uma representação integral e completa do processo real, mas se concentrará em focalizar atributos que suportem uma análisecontinuada”. Da mesma forma, Baldam, Valle e Rozenfeld (2014, p. 248) defendem que “Nenhum modelo corresponde exatamente à realidade, com todas as facetas e complexidade que o mundo real pode apresentar; todos apenas a representam, de um modo que parecerá mais adequado ou menos adequado, de acordo com o contexto, os atores e as finalidades da modelagem”. Assim, a modelagem permite que possamos estudar e prever o comporta- mento de determinado fenômeno sem a necessidade de produzi-lo de fato, o que seria complexo, caro e demorado. No lugar disso, a criação de um modelo, configurado conforme a necessidade da análise, podendo ser bastante simples ou mais completo e sofisticado, torna-se uma escolha sensata. A modelagem do processo é, dessa forma, uma parte importante da gestão de processos, que, na opinião de Ferreira (2013b, p. 22), “[...] é uma aborda- gem administrativa e se apresenta com uma abrangência muito reduzida em 87Modelagem de processos comparação com a gestão por processos, que é um estilo de gerenciamento da própria organização”. Gestão de processos e gestão por processos Ferreira (2013b, p. 18) define a gestão (ou gerência) de processos como “o conjunto de ações sistemáticas, baseadas em métodos, técnicas e ferramentas de análise, modelação e controle, que permitem manter estável a rotina e implantar melhorias na qualidade dos processos”. A noção de estabilidade da rotina está relacionada a processos previsíveis, ou seja, processos que gerem continuamente as saídas esperadas e previstas, sem desvios acentuados. Por exemplo, se o processo de controle da tempera- tura do ambiente de trabalho foi desenvolvido para garantir temperaturas por volta dos 23°C, adequado ao conforto das pessoas e à manutenção do bom funcionamento dos equipamentos instalados no local, a entrada e saída de pessoas do ambiente, o ato de ligar e desligar determinados equipamentos, as limitações nas vedações, as perdas térmicas e as próprias variações nos equipamentos de controle de temperatura farão com que ocorram variações da temperatura do ambiente, por exemplo, para mais ou menos 2°C. No entanto, ainda que compreendamos que ocorram variações, elas não podem ser excessivas. Por exemplo, não seria aceitável uma variação, para mais ou para menos, de 10°C, visto que, se há uma temperatura ideal, o afas- tamento excessivo comprometeria o conforto, por tornar o ambiente muito frio ou muito quente, podendo, também, comprometer o funcionamento de computadores e outros equipamentos eletrônicos. Ou seja, se a temperatura ideal é 23°C, afastamentos começam a compro- meter o bom andamento e os resultados dos processos, gerando insatisfação crescente dos envolvidos quanto maior for tal afastamento. Genichi Taguchi (1924–2012) caracterizou tal aspecto com o conceito de perdas para a socie- dade (COLLIN; PAMPLONA, 1997), visto que os desvios do ideal compro- metem processos, que comprometem o desempenho de produtos, serviços, instalações, pessoas e sistemas, gerando perdas para todos. Tais perdas podem ser calculadas pela denominada função perda, que representaria, por exemplo, insatisfação, reclamações, gastos com devoluções ou assistência técnica, perdas de vendas, entre outros, como observado na Figura 2. Modelagem de processos88 Figura 2. Variação da insatisfação em função da temperatura. Fonte: Adaptada de Fowlkes e Creveling (1995, p. 35). Repare que ficar dentro dos limites considerados normais e aceitáveis, como, por exemplo, mais ou menos 2°C (ou seja, entre 21 e 25°C), não garante a plena satisfação (o que só acontece quando estamos no valor nominal, referente à temperatura de 23°C). Na realidade, intuitivamente, é fácil perceber que a satisfação/insatisfação não ocorre em degraus ou saltos súbitos: se assim fosse, a temperatura de 25°C seria geradora de 100% de satisfação, por estar dentro dos limites, enquanto um décimo de grau acima disso, ou seja, a temperatura de 25,1°C, traria total insatisfação por estar fora dos limites. Observamos que, conforme a Figura 2, o grau de insatisfação começa a subir conforme nos afastamos dos 23°C: inicialmente, há pouca insatisfação, mas ela cresce muito rapidamente conforme nos afastamos mais. Além disso, os limites (21 e 25°C) representam algo como 50% de satisfação, o que faz sentido, por estar justamente no limite do aceitável: uma situação limítrofe. Afastamentos maiores fazem a insatisfação crescer fortemente, chegando ao limite de total recusa/inaceitação das condições. 89Modelagem de processos Para saber mais sobre Taguchi e a sua função perda, leia o texto Taguchi: conheça a função perda de Taguchi (FM2S, 2016). Note que alcançar e manter a estabilidade, citada por Ferreira (2013b), não deve ser o único foco: para se manter competitiva, a organização deve buscar a constante melhoria dos seus processos, afinal, como defendido por Baldam, Valle e Rozenfeld (2014), o processo excelente de ontem torna-se bom hoje e obsoleto amanhã. Ou seja, a organização deve implantar melhorias na quali- dade dos processos, as quais podem estar relacionadas à redução da variação: por exemplo, ainda utilizando o exemplo da temperatura, um processo mais robusto poderia garantir que a temperatura variasse somente um grau para cima ou para baixo. Pelo conceito explorado pela função perda, isso garante maior satisfação dos envolvidos. Plan, Do, Check, Act (PDCA), Kaizen, benchmarking, Método de Análise e Solução de Problemas (MASP), Desdobramento de Função Qualidade (QFD), Método Taguchi, Análise dos Modos de Falha e seus Efeitos (FMEA) e Define, Measure, Analyse, Improve e Control (DMAIC) são algumas ferramentas e métodos utilizados para melhoria contínua de processos. Para saber mais sobre essas ferramentas, leia os artigos de Abreu (1997), Carvalho, Ho e Pinto (2007), Fernandes e Rebelato (2006), Fernandes e colaboradores (2012), Pessoa e colaboradores (2010), Vasconcellos, Canen e Lins (2006) e Vivian, Ortiz e Paliari (2016). A gestão de processos corresponde, então, conforme Ferreira (2013b, p. 21), ao “esforço de estabelecer sistemas de trabalho submetidos a descrições, mensurações e controles das atividades em função do que foi planejado”, ou seja, conforme o autor, monitorar os processos para manter a conformidade e os resultados pretendidos. Assim, conforme Pavani Junior e Scucuglia (2011, p. 61), o gerenciamento de processos engloba: Modelagem de processos90 Estudo do trabalho — processo de observação e levantamento de informações de um fenômeno, com o objetivo de detalhar sua lógica (mapeamento). Entendimento do trabalho — observar o fenômeno após o levantamento de informações obtidas no estudo do trabalho, com o objetivo de compreender suas particularidades e entender sua lógica. Otimização do trabalho — procedimento contínuo de aperfeiçoamento sistêmico e sistemático da estrutura de trabalho, com base nos conhecimentos obtidos no entendimento do mesmo; Manutenção do trabalho — manter o trabalho dentro dos padrões de eficácia e eficiência previstos, bem como a melhoria contínua. Por outro lado, segundo Ferreira (2013b, p. 21), a gestão por processo se aplica a algo bem mais abrangente: “gerir a organização, considerando a interação entre os processos e entre esses e o ambiente”. Para tanto, passamos a ter organizações orien- tadas (ou estruturadas) por processos, nas quais suas estruturas organizacionais são pensadas, desenhadas e aplicadas com base nos seus processos estratégicos. “A lógica é a dinâmica da organização em prol de resultados efetivos e não mais a visão compartimentada de uma abordagem funcional” (FERREIRA, 2013b, p. 20), na qual as organizações constituem unidades funcionais verticalizadas, isoladas, porém organizadas de forma hierárquica, operando com pouquíssima interação. Ferreira (2013b, p. 22) destaca que, apesar das diferenças entre os conceitos de gestão de processos e gestão por processos, há forte vínculo entre eles, uma vez que “A organizaçãoorientada por processos precisa, necessariamente, de processos bem monitorados, caso contrário inviabiliza a possibilidade de tê-los funcionando eficientemente em rede ou de forma sistêmica”. Características e vantagens da gestão por processos De acordo com Ferreira (2013a), a gestão por processos exige que a organi- zação atenda a alguns requisitos, quais sejam: 1. clareza de missão e objetivos; 2. identificação e definição dos processos críticos (relacionados aos fatores críticos de sucesso da organização e aos seus objetivos estratégicos); 3. definição dos serviços e/ou produtos que pretendem oferecer em função de um público determinado (cliente ou usuários); 91Modelagem de processos 4. disponibilidade dos recursos necessários para gerar os serviços ou produtos pretendidos; 5. capacidade para gerenciar o fluxo de informações e as atividades necessárias para atingir os resultados pretendidos e a satisfação dos clientes ou usuários. A aderência da organização a tais características e a sua decisão de se redesenhar para se tornar uma organização de gerenciamento por processos trazem as seguintes vantagens para a organização (FERREIRA, 2013b): � inserir-se em um contexto de organizações mais versáteis e dinâmicas; � a organização se desenvolve além do seu desempenho básico; � direciona os esforços para resultados, por meio da melhoria efetiva dos processos essenciais; � mudança cultural (de visão por função para visão do todo, holística e integradora); � facilita a gestão do conhecimento organizacional; � permite a compreensão de como funciona a organização, revelando problemas, estrangulamento e ineficiências; � redução de custos (retrabalho e problemas logísticos, por exemplo) e conflitos; � aumento da satisfação dos clientes ou usuários (cidadãos e colaboradores); � concentra o foco no que realmente interessa; � facilita a gestão das competências; � proporciona flexibilidade organizacional (descentralização, organização em rede, alianças estratégicas entre organizações). Simbologia BPMN Ainda que existam inúmeras metodologias para modelar processos, a BPMN (também conhecida como Business Process Model and Notation, que cor- responde respectivamente à notação de modelagem de processos de negócio, à notação e ao modelo de processos de negócio) é dominante (BALDAM, VALLE, ROZENFELD, 2014), por resolver uma série de lacunas existentes em outros métodos de modelagem (PAVANI JUNIOR. SCUCUGLIA, 2011). BPMN (Business Process Modeling Notation) é uma notação que permite representar todas as atividades internas de um processo de forma que o mes- Modelagem de processos92 mo possa ser analisado e simulado. A notação é formada por um conjunto de imagens que são dispostas na forma de diagrama para representar os proces- sos, e dessa forma, demonstrar o seu real funcionamento (UNIVERSIDADE FEDERAL DE MATO GROSSO, 2017, p. 16). Ao escolher uma notação, devemos considerar as especificidades da orga- nização, uma vez que os símbolos podem ser utilizados para modelagem de diferentes aspectos de processos de negócios, descrevendo relacionamentos cla- ramente definidos. O BPMN utiliza os seguintes grupos de notações (ABPMP, 2013; UNIVERSIDADE FEDERAL DE MATO GROSSO, 2017, p. 17-24): Eventos — podem ser de início, término ou intermediários em um processo. A Figura 3 apresenta os eventos de início. Figura 3. Eventos de início. Fonte: Universidade Federal de Mato Grosso (2017). 93Modelagem de processos A Figura 4 apresenta os eventos intermediários. Figura 4. Eventos intermediários. Fonte: Universidade Federal de Mato Grosso (2017). Modelagem de processos94 A Figura 5 apresenta os eventos de término. Figura 5. Eventos de término. Fonte: Universidade Federal de Mato Grosso (2017). 95Modelagem de processos Desvios de fluxo — indicam razões para as tomadas de decisões em fluxos de processos (Figura 6). Figura 6. Desvios de fluxo. Fonte: Universidade Federal de Mato Grosso (2017). Modelagem de processos96 Tarefas — unidade de trabalho a ser executada por uma pessoa ou sistema (Figura 7). Figura 7. Tarefas. Fonte: Universidade Federal de Mato Grosso (2017). 97Modelagem de processos Subprocessos — conjuntos de atividades executadas dentro de um processo de negócio (Figura 8). Figura 8. Subprocessos. Fonte: Universidade Federal de Mato Grosso (2017). Modelagem de processos98 Conectores — elos lógicos entre outros elementos (Figura 9). Figura 9. Conectores. Fonte: Universidade Federal de Mato Grosso (2017). Piscinas — organizam os processos em um diagrama, com cada piscina contendo um único processo de negócio. Cada piscina deve ter um evento de início (seu primeiro elemento) e pelo menos um evento de fim (seu último elemento, mesmo que o processo continue em outra piscina). Na comunicação entre piscinas, deve-se usar fluxo de mensagem (seta pontilhada) e evento de mensagem na piscina que recebe a informação. O fluxo da piscina deve ser totalmente relacionado pelas setas (Figura 10). Figura 10. Piscinas. Fonte: Universidade Federal de Mato Grosso (2017). Raias — não representam uma notação específica, mas uma construção útil, pois separam os participantes internos de uma piscina (áreas funcionais, 99Modelagem de processos papel ou organizações externas), ou seja, cada raia é definida como um papel desempenhado por um ator na realização do trabalho (Figura 11). Figura 11. Raias. Fonte: Universidade Federal de Mato Grosso (2017). Milestones — linhas tracejadas utilizadas para separar o processo em diferentes partes ou em sequência (início, meio e fim) (Figura 12). Figura 12. Milestones. Fonte: Universidade Federal de Mato Grosso (2017). Modelagem de processos100 Um fluxo simples, como o mostrado na Figura 13, não necessita de piscinas ou raias. Figura 13. Processo simples. Fonte: ABPMP (2013, p. 93). No entanto, se você deseja mapear ou modelar processos mais complexos ou quer detalhá-los, outros elementos começam a ser utilizados, como podemos ver nas Figuras 14 a 17. Figura 14. Processo com mais detalhes. Fonte: ABPMP (2013, p. 93). 101Modelagem de processos Figura 15. Processo com piscinas. Fonte: Universidade Federal de Mato Grosso (2017, p. 25). Figura 16. Processo com raias. Fonte: ABPMP (2013, p. 104). Modelagem de processos102 Figura 17. Processo com raias. Fonte: ABPMP (2013, p. 94). Os símbolos de subprocessos contraídos podem ser utilizados, também, para simplificar o fluxo e facilitar a visualização e compreensão dos processos, como mostrado na Figura 18. Figura 18. Processo em alto nível. Fonte: ABPMP (2013, p. 93). 103Modelagem de processos ABPMP. BPM CBOK Guia para o gerenciamento de processos de negócio corpo comum de conhecimento. V3.0. [São Paulo]: BPM, 2013. Disponível em: <http://c.ymcdn.com/ sites/www.abpmp.org/resource/resmgr/Docs/ABPMP_CBOK_Guide__Portuguese. pdf>. Acesso em: 21 set. 2017. BALDAM, R.; VALLE, R.; ROZENFELD, H. Gerenciamento de processos de negócio — BPM: uma referência para implantação prática. Rio de Janeiro: Elsevier, 2014. COLLIN, L. R. O; PAMPLONA, E. O. A utilização da função perda de Taguchi na prática do controle estatístico de processo. ENEGEP, 32. Bento Gonçalves, 1997. Anais... Rio de Janeiro: Abepro, 1997. Disponível em: <http://www.abepro.org.br/biblioteca/ enegep1997_t4410.pdf>. Acesso em: 21 set. 2017. FERREIRA, E. A. Modelo para condução de mapeamento de processo organizacional: uma abordagem BPM com base no MAIA. 233f. 2013. Dissertação (Mestrado em Ciência da Informação) – Universidade de Brasília, Brasília, 2013a. FERREIRA, A. R. Gestão de processos; módulo 3. Apostila do programa de desenvolvi- mento de gerentes operacionais – DGO. Brasília: ENAP / DDG, 2013b. FM2S. Taguchi: conheça a função perda de Taguchi. 2016. Disponível em: <http://www. fm2s.com.br/taguchi-conheca-funcao-perda-de-taguchi/>. Acesso em: 21 set. 2017. FOWLKES, W. Y.; CREVELING, C. M. Engineering methods for robust product design: using taguchi methods