Faculdade de Tecnologia de Mauá Tecnologia em Informática e Negócios Engenharia de Software Jarbas Thaunahy Santos de Almeida Home page: www.professorjarbas.com.br e-mail: [email protected] MSN: [email protected] A importância do software Atualmente, uma grande parte da população mundial depende de aplicações de software para realizar suas operações diárias. Se alguns sistemas de uso global deixarem de funcionar, aproximadamente 40% da população mundial sofrerá as conseqüências do problema (Reed, 2000). A importância do software O principal objetivo da engenharia de software é, sem dúvida, melhorar a qualidade do software. A qualidade de produtos de software, entretanto está fortemente relacionada à qualidade do processo de software. (Fuggetta, 2000). A importância do software Para muitos engenheiros de software, a qualidade do processo de software é tão importante quanto à qualidade do produto. Assim, na década de 90 houve uma grande preocupação com a modelagem e melhorias no processo de software. (Rocha, 2001). Software Consiste em um conjunto de informações em diferentes níveis de abstração e em um conjunto de transformações e decisões associadas a essas transformações. Software A engenharia de software, embora possua várias definições, segundo Pressman (2000) é uma disciplina que pode ser vista, de forma objetiva, como o estabelecimento e o uso dos princípios básicos da engenharia com a finalidade de desenvolver software de maneira sistemática e econômica, resultando em um produto confiável e eficiente. Engenharia de software Elementos fundamentais: Métodos Ferramentas Procedimentos Métodos Envolvem um amplo conjunto de tarefas que incluem: 1. 2. 3. 4. planejamento e estimativa de projeto, análise de requisitos de software e de sistemas, projeto da estrutura de dados, arquitetura de programas e algoritmo de processamento, 5. codificação, 6. teste e 7. manutenção. Ferramentas Proporcionam apoio automatizado ou semiautomatizado aos métodos. Atualmente, existem ferramentas para sustentar cada um dos métodos citados anteriormente. Ferramentas Quando as ferramentas são integradas de forma que a informação criada por uma ferramenta possa ser usada por outra, é estabelecido um sistema de suporte ao desenvolvimento de software chamado engenharia de software auxiliado por computador (CASE – Computer-Aided Software Engineering). Procedimentos Constituem o elo que mantém juntos os métodos e as ferramentas e possibilita o desenvolvimento racional e oportuno do software de computador. Definem a seqüência em que os métodos serão aplicados. Mitos do software Por que demora tanto tempo para que os programas sejam concluídos? Por que os custos são tão elevados? Por que não descobrimos todos os erros antes de entregarmos o software aos nossos clientes? Visão genérica Fases do processo de desenvolvimento Definição Desenvolvimento Manutenção Paradigmas da engenharia de software O ciclo de vida clássico; Prototipação; O modelo espiral; Técnicas de 4ª geração. Ciclo de vida clássico Também chamado modelo cascata, o paradigma do ciclo de vida requer uma abordagem sistemática, seqüencial ao desenvolvimento do software, que se inicia no nível do sistema e avança ao longo da análise, projeto, codificação, teste e manutenção. Ciclo de vida clássico Engenharia de sistemas Análise Projeto Codificação Teste Manutenção Prototipação É um processo que capacita o desenvolvedor a criar um modelo do software que será implementado. Pode assumir uma das seguintes formas: 1. 2. 3. Protótipo em papel; Protótipo de trabalho; Programa existente. Prototipação Início Fim Coleta e refinamento de requisitos Engenharia Projeto do rápido produto Refinamento Construção do do protótipo protótipo Avaliação do protótipo pelo cliente Modelo espiral Foi desenvolvido para abranger as melhores características tanto do ciclo de vida clássico como da prototipação, acrescentando, ao mesmo tempo, um novo elemento – a análise de riscos – que falta a esses paradigmas. Modelo espiral Planejamento Coleta inicial dos requisitos e planejamento do projeto Planejamento baseado nos comentários do cliente Análise de riscos Análise de riscos baseada nos requisitos iniciais Análise de riscos baseada na reação do cliente Decisão de prosseguir/ não prosseguir Protótipo de software inicial Avaliação do cliente Protótipo no nível seguinte Sistema construído pela engenharia Avaliação do cliente Engenharia Técnicas de 4ª geração Abrange um amplo conjunto de ferramentas de software que possuem algo em comum: cada uma delas possibilita que o desenvolvedor de software especifique alguma característica do software num nível elevado. A ferramenta gera então, automaticamente, o código-fonte, tendo como base a especificação do desenvolvedor. Técnicas de 4ª geração Coleta de requisitos Estratégia de “projeto” Implementação usando 4ª geração Teste Obtenção preliminar dos requisitos Análise de requisitos Prototipação Técnicas de 4ª geração Modelo espiral Técnicas de 4ª geração Projeto Prototipação enésima iteração Codificação Modelo espiral enésima iteração Técnicas de 4ª geração Realização de testes Sistema operacional Manutenção Garantia de qualidade de software Todos os métodos, ferramentas e procedimentos trabalham na direção de uma meta única: produzir software de alta qualidade. O que significa qualidade de software? SQA – Software Quality Assurance 1. 2. 3. 4. 5. 6. Métodos e ferramentas de análise, projeto, codificação e teste; Revisões técnicas formais que são aplicadas durante cada fase de engenharia de software; Uma estratégia de teste de múltiplas fases; Controle da documentação de software e das mudanças feitas nela; Um procedimento para garantir a adequação aos padrões de desenvolvimento de software (quando aplicáveis); Mecanismos de medição e divulgação. Qualidade de software Conformidade a requisitos funcionais e de desempenho explicitamente declarados, a padrões de desenvolvimento claramente documentados e a características implícitas que são esperadas de todo software profissionalmente desenvolvido. Qualidade de software Os requisitos de software são a base a partir da qual a qualidade é medida. A falta de conformidade aos requisitos significa falta de qualidade. Padrões especificados definem um conjunto de critérios de desenvolvimento. Se os critérios não forem seguidos, o resultado quase que seguramente será a falta de qualidade. Há um conjunto de requisitos implícitos que freqüentemente não são mencionados (a manutenibilidade, por exemplo). Fatores de Qualidade de software McCall Manutenibilidade Portabilidade Flexibilidade Reusabilidade Testabilidade Interoperabilidade Revisão do produto Transição do produto Operação do produto Corretitude / Confiabilidade / Eficiência / Integridade / Usabilidade Revisão do produto Manutenibilidade: o esforço exigido para localizar e reparar erros num programa. Flexibilidade: o esforço exigido para modificar um programa operacional. Testabilidade: o esforço exigido para testar um programa a fim de garantir que ele execute sua função pretendida. Transição do produto Portabilidade: o esforço exigido para transferir o programa de um ambiente de sistema de hardware e/ou software para outro. Reusabilidade: à medida que um programa (ou partes de um programa) pode ser reusado em outras aplicações – relacionada ao empacotamento e escopo das funções que o programa executa. Interoperabilidade: o esforço exigido para se acoplar um sistema a outro. Operação do produto Corretitude: à medida que um programa satisfaz sua especificação e cumpre os objetivos visados pelo cliente. Confiabilidade: à medida que se pode esperar que um programa execute sua função pretendida com a precisão exigida. Eficiência: a quantidade de recursos de computação e de código exigida para que um programa execute sua função. Integridade: à medida que o acesso ao software ou a dados por pessoas nãoautorizadas pode ser controlado. Usabilidade: O esforço para aprender, operar, preparar a entrada e interpretar a saída de um programa. Algumas Métricas utilizadas Auditabilidade: a facilidade com que se pode checar a conformidade aos padrões. Inteireza: o quanto a implementação total da função requerida foi conseguida. Concisão: a compactação do programa em termos de linhas de código. Consistência: o uso de técnicas de projeto e documentação uniformes ao longo do projeto de desenvolvimento de software. Expansibilidade: o quanto o projeto de arquitetura, procedimental e de dados podem ser ampliados. Algumas Métricas utilizadas Independência de hardware: o quanto o software é desvinculado do hardware que opera. Instrumentação: o quanto o programa monitora sua própria operação e identifica erros que venham a ocorrer. Modularidade: a independência funcional dos componentes do programa. Operabilidade: a facilidade de operação de um programa. Simplicidade: o quanto um programa pode ser entendido sem dificuldade. Bibliografia REED, K. Software engineering – a new millenium? IEEE Software, jul-ago, 2000. FUGGETTA, A. Software process: a roadmap. In: The future of software engineering, 2000. PRESSMAN, Roger S. Engenharia de Software. São Paulo: Makron Books, 1995. ROCHA, Ana Regina Cavalcanti da. Qualidade de software. São Paulo: Prentice Hall, 2001.