Capítulo 2: Aplicação OCI PIZZA
2.2 Da Necessidade à Definição dos Requisitos
2.2.1 Contado do Cliente
Imagine que você é uma empresa ou uma agência de desenvolvimento de software que acaba de receber uma ligação de um potencial cliente, ansioso para discutir suas necessidades e como você pode ajudá-lo a transformar suas ideias em soluções digitais eficazes.
O diálogo a seguir ilustra a interação entre Você, o desenvolvedor, e seu cliente, Fulano:
Fulano (cliente)
Olá! Eu sou o Fulano, proprietário da "OCI PIZZA". Estou interessado em criar um site para o meu negócio. Você pode me ajudar?
Você (desenvolvedor)
Olá, Fulano! Claro, ficaremos felizes em ajudar. Você já tem alguma ideia do que gostaria de incluir no seu site?
Fulano (cliente)
Sim, eu gostaria de ter uma página inicial com uma apresentação da pizzaria, uma seção para o nosso cardápio, informações de contato e um formulário para pedidos online.
Você (desenvolvedor)
Ótimo! Isso é um bom começo. Você já tem um design em mente ou gostaria de sugestões?
Fulano (cliente)
Eu gostaria de algo que fosse visualmente atraente, com cores quentes, que lembrassem pizza. Também quero que seja fácil de navegar.
Você (desenvolvedor)
Perfeito! Podemos desenvolver um design que atenda perfeitamente às suas necessidades. Você tem fotos das suas pizzas e do local que gostaria de usar no site?
Fulano (cliente)
Sim, tenho algumas fotos que tirei. Posso enviá-las para você.
Você (desenvolvedor)
Excelente! Isso ajudará a tornar o site mais pessoal. E quanto ao cardápio, você já tem uma versão digital que podemos usar?
Fulano (cliente)
Sim, eu tenho um PDF do cardápio. Posso enviar isso também.
Você (desenvolvedor)
Ótimo! E sobre o sistema de pedidos online, você gostaria de integrar um serviço de entrega ou prefere que os pedidos sejam feitos apenas para retirada?
Fulano (cliente)
Eu gostaria de oferecer ambos. Quero que os clientes possam escolher entre retirar na loja ou receber em casa.
Você (desenvolvedor)
Entendi. Podemos implementar um sistema de pedidos que permita essas opções. Você já tem um método de pagamento em mente?
Fulano (cliente)
Eu gostaria de aceitar cartões de crédito e débito, além de pagamentos via PIX.
Você (desenvolvedor)
Sem problemas! Vamos integrar essas opções de pagamento. Agora, você já tem um domínio registrado para o site?
Fulano (cliente)
Não, ainda não. Você pode me ajudar com isso?
Você (desenvolvedor)
Claro! Podemos ajudá-lo a registrar um domínio que se encaixe no nome da sua pizzaria. Você tem alguma ideia de qual nome gostaria de usar?
Fulano (cliente)
Eu pensei em algo como "ocipizza.com.br".
Você (desenvolvedor)
Esse nome parece ótimo! Vamos verificar se está disponível. Por último, qual é o seu prazo para ter o site pronto?
Fulano (cliente)
Eu gostaria de ter o site pronto em um mês, se possível. Estamos planejando uma promoção e seria ótimo ter tudo funcionando até lá.
Você (desenvolvedor)
Vamos trabalhar para atender a esse prazo. Vou preparar uma proposta com todos os detalhes e custos envolvidos e entrarei em contato em breve. Alguma outra dúvida ou consideração?
Fulano (cliente)
Não, isso é tudo por enquanto. Agradeço pela sua atenção!
Você (desenvolvedor)
De nada, Fulano! Estamos ansiosos para trabalhar com você. Fique à vontade para entrar em contato se tiver mais perguntas. Até logo!
2.2.2 Engenharia de Requisitos
Com base neste primeiro contato, podemos iniciar a elaboração de uma descrição das funcionalidades do sistema, alinhadas às necessidades do cliente.
Definir "o que um sistema deve fazer", ou seja, suas funcionalidades, refere-se ao que chamamos de Requisitos Funcionais ou Requisitos do Usuário.
Além dos requisitos funcionais, há uma outra categoria de requisitos chamada Requisitos Não-Funcionais ou Requisitos de Sistema. Esses requisitos tratam de aspectos como desempenho, usabilidade, segurança e escalabilidade, entre outros, e são especificados de maneira quantitativa, utilizando métricas para garantir sua mensuração e avaliação.
A definição e a especificação dos requisitos são etapas fundamentais no processo de desenvolvimento de software, abrangendo desde a identificação dos requisitos até os processos relacionados às metodologias de desenvolvimento, documentação e entrega. Nesse contexto, duas abordagens principais se destacam:
-
Processos Waterfall (Modelo em cascata)
- Primeiro a ser proposto e inspirado nos processos das engenharias tradicionais.
- Esse modelo coleta todas as informações necessárias para o desenvolvimento no início do projeto. Após a elaboração de uma documentação detalhada, o desenvolvimento inicia-se e avança de forma linear e sequencial, seguindo etapas que se sucedem em cascata, sem realizar interações ou coletar feedback do cliente ao longo do processo.
-
- Modo alternativo ao Waterfall para o desenvolvimento de software que prioriza a construção incremental de sistemas, mantendo uma interação contínua com o cliente.
- Práticas ágeis focam na coleta constante de feedback, possibilitando entregas regulares e frequentes de pequenas funcionalidades.
Processos no estilo Waterfall exigem um levantamento detalhado dos requisitos, seguido pela elaboração de uma documentação completa antes da implementação do que foi especificado. O sistema é disponibilizado ao cliente para validação somente após a conclusão de todo o desenvolvimento.
O principal problema do modelo Waterfall é que a documentação se torna um requisito obrigatório, muitas vezes mais valorizado do que o próprio software. A espera pela conclusão de toda a documentação antes de iniciar o desenvolvimento pode resultar em um produto que não atende mais às necessidades do cliente, que podem ter mudado desde o início do projeto.
Em fevereiro de 2001, na cidade de Snowbird, no estado de Utah, nos Estados Unidos, um grupo de dezessete Engenheiros de Software propôs um modo alternativo para construção de software, que prioriza a proximidade com o cliente e não documentações extensas antes de todo o desenvolvimento, promovendo interações curtas e constantes ao longo do processo de desenvolvimento. Essa nova forma de trabalho resultou no que é conhecido como "Manifesto do Desenvolvimento Ágil de Software", que prioriza certos princípios e valores em relação a outros, conforme destacados na imagem abaixo:

NOTA
A versão em português do Brasil do "Manifesto do Desenvolvimento Ágil de Software" está disponível para consulta através do link.
De certa forma, "Práticas Ágeis" ou "ser ágil" estão mais relacionadas a um estilo de "fazer acontecer" do que à implementação de ferramentas, processos ou qualquer forma de controle. A agilidade está mais relacionada às ações necessárias para alcançar um objetivo acordado, com expectativas alinhadas, especialmente em situações onde não há clareza sobre como atingi-lo. Esse processo, de certa forma, segue um ciclo que se repete da seguinte maneira:
- Avançar um passo de cada vez.
- Avaliar os resultados de cada passo.
- Ajustar o caminho caso os resultados não estejam de acordo com o esperado.
- Repetir o ciclo.
Além disso, as "Práticas Ágeis" introduziram novas abordagens para a criação de software, incluindo o desenvolvimento guiado por testes (test-driven development), que consiste em escrever os testes antes do código, e a integração contínua (continuous integration), que recomenda que os desenvolvedores integrem o código produzido o quanto antes no repositório principal do projeto, se possível todo dia.
Para o desenvolvimento da aplicação OCI PIZZA, serão adotadas as "Práticas Ágeis". Na definição dos requisitos dentro dessa abordagem, utiliza-se a linguagem natural, empregando o que chamamos de Histórias de Usuários (User Stories), que será explorado a seguir.
Histórias de Usuários
Após o diálogo com o cliente, identificou-se a necessidade de desenvolver uma aplicação web que apresente a pizzaria e inclua seções para o cardápio e cadastro de usuários para realizar pedidos de pizza.
Com base na necessidade apresentada, é possível especificar de forma simples as Histórias de Usuários a seguir:
-
Cadastro de Usuário
- Como um novo cliente, eu quero me cadastrar na aplicação, para que eu possa fazer pedidos de pizzas.
-
Cardápio de Pizzas
- Como um cliente, eu quero navegar pelo cardápio de pizzas, para que eu possa ver as opções disponíveis e escolher a que mais gosto.
-
Filtros de Pesquisa
- Como um cliente, eu quero filtrar as pizzas por categoria (como vegetarianas ou especiais), para que eu possa encontrar rapidamente o que estou procurando.
-
Adicionar ao Carrinho
- Como um cliente, eu quero adicionar pizzas e bebidas ao meu carrinho, para que eu possa revisar antes de finalizar o meu pedido.
-
Realizar Pedido
- Como cliente, desejo fazer o pedido da pizza informando um endereço para a entrega.
-
Painel Administrativo
- Como um funcionário da pizzaria, eu quero que o sistema me permita visualizar e gerenciar os pedidos em andamento, além de gerar relatórios sobre vendas e o desempenho geral da pizzaria
-
Suporte ao Cliente
- Como um cliente, eu quero ter acesso a um chat de suporte, para que eu possa esclarecer dúvidas, obter informações sobre o status do meu pedido e resolver quaisquer problemas relacionados à minha experiência de compra.
É importante mencionar que, no caso desta aplicação, os requisitos são simples. Documentar os requisitos de uma aplicação maior, com mais funcionalidades a serem desenvolvidas, não é uma tarefa fácil, pois é impossível prever todos os aspectos do sistema desde o início.
NOTA
O documento workflow-funcionament-pizzaria.pdf, enviado pelo cliente, serviu como base para a elaboração das Histórias de Usuários e também proporcionou uma visão geral do funcionamento da pizzaria.