Engenharia de Software Introdução à Engenharia de Requisitos Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Definições para Engenharia de Requisitos • Definição Genérica: – Estabelecer o que o cliente quer de um sistema de software • Definição da IEEE: – Processo de aquisição, refinamento e verificação das necessidades do cliente, com o objetivo de obter uma especificação correta e completa dos requisitos. • Definição de A. Davis: – Durante a fase de requisitos, é necessário analisar, e portanto entender o problema a ser resolvido. – A análise do problema é a atividade que inclui o entendimento das necessidades do usuário e as limitações impostas na solução. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Definições para Engenharia de Requisitos • Definição de Boehm: – Disciplina para desenvolver uma especificação completa, consistente e não ambígua do software; – Um acordo entre as partes descrevendo o que o produto de software irá fazer. • Definição de B. Meyer: – Especificar o documento de requisitos de um software é definir de uma forma completa e não ambígua: • as características externas do software oferecidas aos usuários; • a forma pela qual o software é integrado ao sistema. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Motivações - aspectos sociais • Baixo nível de aceitação dos sistemas pelos usuários. – S.I. comerciais: 40% – S.I. de tempo-real: 75% Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Motivações - aspectos jurídicos • O documento de requisitos é um acordo contratual entre clientes e fornecedores; • Os desenvolvedores de software têm obrigação de inquirir os requisitos dos seus clientes; • Os desenvolvedores de software têm a obrigação de informar seus usuários acerca da solução proposta (um manual de usuários não é suficiente!). Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Motivações - aspectos econômicos 66% 70% Especificação Projeto Codificação 60% 50% 40% 40% 30% 30% 30% 25% 20% 9% 10% 0% % total erros % total do custo de correção erros Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Motivações - aspectos econômicos Custo de Correção de 1 erro 5,00 4,00 3,00 2,00 1,00 0,00 Especificação Codificação Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Mitos sobre Requisitos • “Você começa a codificar enquanto eu vou descobrir o que o cliente quer”; • Requisitos são fáceis de obter; • O cliente/usuário sabe o que quer; • Quando os requisitos estiverem congelados ...... Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Definição x Especificação de Requisitos • Definição de requisitos Uma declaração em linguagem natural (mais diagramas) dos serviços que o sistema deverá prover e suas limitações operacionais. Escrito para os clientes • Especifição de requisitos Um documento estruturado definindo de forma detalhada descrições dos serviços. Escrito como um contrato entre cliente e fornecedor Especificação de software Uma descrição de software detalhada que serve de base para o projeto ou implementação. Escrito para os desenvolvedores. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Definições e Especificações exemplos • Definição de Requisito: – “O software deve prover meios para representação e acesso a arquivos externos criados por outras ferramentas”. • Especificação de Requisitos: – O usuário deve ter facilidades para definir o tipo dos arquivos externos; – Cada arquivo externo pode ter uma ferramenta associada, a qual pode ser aplicada ao arquivo; – Cada arquivo externo pode ser representado como um ícone específico na tela do computador; – ... Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Imprecisão dos requisitos • Requisitos ambíguos podem ser interpretados de forma diferente por usuários e desenvolvedores • Idealmente, os requisitos deveriam ser completos e consistentes • Completo – Devem incluir a descrição de todos os itens requeridos • Consistente – Não deve haver conflitos ou contradições na descrição dos requisitos • Na prática, é quase impossível produzir uma especificação de requisitos completa de consistente Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Leitores dos Requisitos • Definição dos requisitos – – – – – Gerente do projeto; Usuários finais; Engenheiros do projeto; Contratante; Projetistas. • Especificação dos requisitos – – – – Usuários finais; Engenheiros do projeto; Projetistas; Equipe de desenvolvimento. • Especificação do software – Engenheiros do projeto – Projetistas; – Equipe de desenvolvimento. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Tipos de requisito • Requisitos do Usuário – Texto em linguagem natural e diagramas mostrando os serviços oferecidos pelo sistema. Escritos para os clientes. • Requisitos do Sistema – Um documento estruturado que provê descrições detalhadas dos serviços do sistema. Escritos como um contrato entre os clientes e os contratados. • Especificação do Software – Uma especificação detalhada do software que serve de base para o projeto e a implementação. Escrita para os desenvolvedores. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Requisitos funcionais e nãofuncionais • Requisitos funcionais – Serviços que o sistema deve prover, como o sistema deve reagir a determinadas entradas e como o sistema deve se comportar em determinadas situações. • Requisitos não-funcionais – Restrições aos serviços ou funções oferecidas pelo sistema, tais como restrições de tempo, restrições quanto ao processo de desenvolvimento, padrões, etc. • Requisitos de domínio – Requisitos que surgem do domínio da aplicação e que refletem características desse domínio. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Requisitos funcionais • Descrevem funcionalidades ou serviços do sistema • Dependem do tipo de software, de quem são os usuários e do sistema onde o software é usado. • Requisitos funcionais do usuário podem ser descrições de alto nível do que o sistema deve fazer, mas requisitos funcionais do sistema devem descrever os serviços do sistema de forma detalhada. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Exemplos de requisitos funcionais • O usuário deve poder procurar em todo o banco de dados ou em apenas um subconjunto deste. • O sistema deve prover visualizadores adequados para que o usuário possa ler os documentos da base de documentos. • Deve ser atribuído um identificador único a cada pedido e o usuário deve ser capaz de localizar opedido através do seu identificador. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Requisitos Não-funcionais • Definem propriedades e restrições do sistema. Ex: confiabilidade, tempo de resposta etc. • Requisitos de processo também podem ser especificados. Ex: utilização de uma ferramenta CASE, linguagem de programação ou método de desenvolvimento particular. • Requisitos não-funcionais podem ser mais críticos que os requisitos funcionais. O não atendimento a esses requisitos pode inutilizar o sistema Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Classificação de requisitos nãofuncionais • Requisitos de produto – Requisitos que especificam que o produto deve se comportar de determinada forma. Ex: tempo de execução, confiabilidade, etc. • Requisitos organizacionais – Requisitos que são uma conseqüência de políticas e procedimentos organizacionais. Ex: padrões de processo utilizados, requisitos de implementação, etc. • Requisitos externos – Requisitos que surgem de fatores externos ao sistema e ao processo de desenvolvimento. Ex: requisitos de interoperabilidade, requisitos legais, etc. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Exemplos de requisitos não-funcionais • Requisito de produto – O tempo de reinicialização do sistema deve ser inferior a 1 minuto • Requisitos organizacionais – O processo de desenvolvimento e toda a documentação a ser entregue devem estar em conformidade com o padrão definido no documento XYZCo-SP-STAN-95 • Requisitos externos – A cada compra realizada, o ssitema deve emitir uma nota fiscal contendo as informações especificadas na lei… Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Objetivos e requisitos • Requisitos não-funcionais podem ser difíceis de definir precisamente, e requisitos imprecisos podem ser difíceis de verificar • Objetivo – Uma intenção geral do usuário. Ex: facilidade de uso • Requisito não-funcional verificável – Uma descrição usando alguma medição que possa ser testada objetivamente • Objetivos ajudam os desenvolvedores a entender as intenções dos usuários Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Exemplos • Um objetivo do sistema – O sistema deve ser fácil de usar para controladores experientes e deve ser organizado de forma a minimizar o número de erros. • Um requisito não-funcional verificável – Controladores experientes devem ser capazes de utilizar todas as funcionalidades do sistema depois de duas horas de treinamento. Após esse treinamento, o número médio de erros cometidos por usuários experientes não deve passar de 2 por dia. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Medições de Requisitos • Velocidade – Número de transações por segundo – Tempo de resposta – Tempo de atualização da tela • Facilidade de uso – Tempo de treinamento necessário – Quantidade de telas de ajuda • Confiabilidade – Taxa de ocorrência de erros – Probabilidade de indisponibilidade • Portabilidade – Número de plataformas compatíveis – Porcentagem de instruções dependentes de plataforma Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Interação entre requisitos • Conflitos entre diferentes requisitos nãofuncionais são comuns em sistemas complexos • Sistema aero-espacial – Para minimizar o peso, o número de chips no sistema deve ser minimizado – Para minimizar o consumo de energia, chips menos potentes devem ser utilizados – Contudo, usar chips menos potentes pode significar que mais chips terão que ser usados. Qual é o requisito mais crítico? Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Requisitos de domínio • Derivados do domínio da aplicação. Descrevem características e funcionalidades que refletem o domínio • Podem ser requisitos funcionais ou nãofuncionais • Caso esses requisitos não sejam satisfeitos, pode ser inviável utilizar o sistema Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Razões para inconsistência • Os grandes sistemas de software devem melhorar a situação existente. É difícil antecipar os efeitos que o novo sistema terá na organização. • Diferentes usuários têm diferentes requisitos e prioridades. Há sempre uma constante mudança de compromissos. • Os usuários finais do sistema e a organização (divisão) que paga pelo sistema possuem requisitos diferentes. • Geralmente prototipagem é necessário para clarificar os requisitos Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Engenharia de Requisitos • O processo de estabelecer que serviços são requeridos e as restrições à operação e desenvolvimento do sistema • Processo de Engenharia de Requisitos – – – – Estudo de viabilidade Elicitação e análise de requisitos Especificação de requisitos Validação dos requisitos Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho O processo de Engenharia de Requisitos Feasibility study Requirements elicitation and analysis Requir ements specification Feasibility report Requirements validation System models User and system requirements Requirements document Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho O Documento de Requisitos • O documento de requisitos é uma definição oficial do que é necessário dos desenvolvedores do sistema • Deve incluir tanto uma definição como uma especificação dos requisitos • NÃO é um documento de projeto. Na medida do possível, deverá definir o QUE do sistema em vez de COMO o sistema deverá ser feito Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho O Documento de Requisitos Documento de Requisitos Requisitos Funcionais Requisitos Não-Funcionais Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho A Estrutura do Documento de Requisitos • Introdução – Descreve as necessidades de ter tal sistema e como ele se adequa aos objetivos de negócio da empresa. • Glossário – Define os termos técnicos usados. • Modelos do sistema – Define os modelos mostrando os componentes do sistema e seus relacionamentos. • Definição dos requisitos funcionais – Descreve os serviços providos. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho A Estrutura do Documento de Requisitos • Definição de requisitos não funcionais – Define limitações no sistema e no processo de desenvolvimento • Evolução do sistema – Define as premissas fundamentais na qual o sistema foi baseado e antecipa mudanças • Especificação de requisitos – Especificação detalhada dos requisitos funcionais Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho A Estrutura do Documento de Requisitos • Apêndices – Descrição da plataforma de hardware do sistema – Requisitos do banco de dados (talvez em termos de um modelo ER) • Índice Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Mudanças no documento de requisitos • O documento de requisito deve ser organizado de forma que mudanças sejam feitas sem necessidade de re-escritas extensas • Referências externas devem ser minimizadas e as sessões do documento devem ser tão modulares como possível • Mudanças são facilitadas se o documento for eletrônico. A falta de padronização de documentos torna isto difícil Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Linguagens para a Modelagem Conceitual Linguagens Naturais: • Texto informal não estruturado; • Desenhos, tabelas, diagramas de fluxo, etc. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Linguagens para a Modelagem Conceitual Problemas com as linguagens naturais: • ambigüidades (múltiplas interpretações); • incompletude (sub-especificações); • contradições (inconsistências); • super-especificações (como ao invés do que); • redundâncias; • etc. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Linguagens para a Modelagem Conceitual Linguagens Naturais Estruturadas: • Um forma limitada de linguagem natural usada para expressar requisitos; • Isto remove alguns dos problemas resultantes da ambigüidade e flexibilidade, impondo um grau de uniformidade `a especificação; • Geralmente melhor suportada através do uso de uma estratégia baseada em formulários. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Linguagens para a Modelagem Conceitual Linguagens Naturais Estruturadas (Formulários): • Definição da função ou entidade; • Descrição das entradas e de onde eles se originam; • Descrição das saídas e para onde elas vão; • Indicação de outras entidades necessárias ; • Pré e pós condições (se apropriado); • Efeitos colaterais (se existirem). Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Linguagens para a Modelagem Conceitual Linguagens de Descrição de Projetos (PDL): • Requisitos podem ser definidos operacionalmente usando uma linguagem similar a de programação, porém com mais flexibilidade de expressão. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Linguagens para a Modelagem Conceitual Linguagens Rigorosas: • Propostas nos anos 70; • Possuem uma base conceitual; • Parte da especificação é escrita usando uma sintaxe formal (textual/gráfica); • Parte da especificação é expressa informalmente; • Especificações suportam uma limitada interpretação formal. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Linguagens para a Modelagem Conceitual Linguagens Formais: • Linguagens baseadas em um sistema matemático que provê: – Notação matemática (regras de interpretação nãoambíguas); – Um sistema de inferência; – Uma metodologia que permite a verificação formal. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Características Específicas da E.R. • É uma atividade de negociação e comunicação entre especialistas e não-especialistas; • A qualidade da comunicação entre as partes envolvidas depende: – de um bom entendimento; – de uma análise rigorosa. • Usuários não sabem o que querem; Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Características Específicas da E.R. • As visões parciais dos usuários não são consistentes; • Usuários nem sempre querem um sistema baseado em computadores; Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Perfil do Engenheiro de Requisitos • Habilidade de lidar com conceitos abstratos, reorganizando-os em divisões lógicas, e sintetizando as soluções de acordo com cada divisão; • Habilidade de absorver fatos pertinentes a partir de fontes conflitantes e confusas; • Habilidade de entender o ambiente do usuário/cliente; • Habilidade de lidar com problemas complexos; Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Perfil do Engenheiro de Requisitos • Habilidade de aplicar elementos de software/hardware ao ambiente do usuário/cliente; • Habilidade de comunicar-se bem; • Habilidade de evitar detalhes desnecessários, concentrando-se nos objetivos gerais do sistema. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho