Prévia do material em texto
Autor: Prof. André Luiz Dias Ribeiro Colaboradores: Prof. Luciano Soares de Souza Profa. Adriane Paulieli Colossetti Profa. Jorge Rodolfo Beingolea Garay Engenharia de Software II Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Professor conteudista: André Luiz Dias Ribeiro Mestre em Engenharia Elétrica pela Escola Politécnica da USP em 2006, certificado em Project Management Professional (PMP), Personal Professional Coaching (PPC) e profissional da área de Tecnologia da Informação há 25 anos, exercendo diversos níveis profissionais da área, desde programador de computadores a diretor da área de informática. Há dez anos atua como professor dos cursos de graduação em Sistemas de Informação, Ciência da Computação e Engenharia de Produção e em cursos de pós‑graduação em Gerenciamento de Projetos e Engenharia de Software. Responsável pela coordenação interdisciplinar de Engenharia de Software nos cursos de graduação e pela orientação de trabalhos de conclusão dos cursos de graduação e pós‑graduação. © Todos os direitos reservados. Nenhuma parte desta obra pode ser reproduzida ou transmitida por qualquer forma e/ou quaisquer meios (eletrônico, incluindo fotocópia e gravação) ou arquivada em qualquer sistema ou banco de dados sem permissão escrita da Universidade Paulista. Dados Internacionais de Catalogação na Publicação (CIP) R484t Ribeiro, André Luiz. Engenharia de Software II. / André Luiz Ribeiro. – São Paulo: Editora Sol, 2015. 188 p., il. Nota: este volume está publicado nos Cadernos de Estudos e Pesquisas da UNIP, Série Didática, ano XVII, n. 2‑025/15, ISSN 1517‑9230. 1. Qualidade de software. 2. Processos de manutenção. 3. Gestão da configuração. I. Título. CDU 681.3.02 U500.53 – 19 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Prof. Dr. João Carlos Di Genio Reitor Prof. Fábio Romeu de Carvalho Vice-Reitor de Planejamento, Administração e Finanças Profa. Melânia Dalla Torre Vice-Reitora de Unidades Universitárias Prof. Dr. Yugo Okida Vice-Reitor de Pós-Graduação e Pesquisa Profa. Dra. Marília Ancona‑Lopez Vice-Reitora de Graduação Unip Interativa – EaD Profa. Elisabete Brihy Prof. Marcelo Souza Prof. Dr. Luiz Felipe Scabar Prof. Ivan Daliberto Frugoli Material Didático – EaD Comissão editorial: Dra. Angélica L. Carlini (UNIP) Dra. Divane Alves da Silva (UNIP) Dr. Ivan Dias da Motta (CESUMAR) Dra. Kátia Mosorov Alonso (UFMT) Dra. Valéria de Carvalho (UNIP) Apoio: Profa. Cláudia Regina Baptista – EaD Profa. Betisa Malaman – Comissão de Qualificação e Avaliação de Cursos Projeto gráfico: Prof. Alexandre Ponzetto Revisão: Juliana Mendes Virgínia Bilatto Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Sumário Engenharia de Software II APRESENTAÇÃO ......................................................................................................................................................9 INTRODUÇÃO ...........................................................................................................................................................9 Unidade I 1 CONCEITOS SOBRE QUALIDADE DE SOFTWARE .................................................................................. 11 1.1 Benefícios da qualidade ..................................................................................................................... 12 1.2 Obstáculos da qualidade ................................................................................................................... 13 1.3 Visões da qualidade ............................................................................................................................. 14 1.4 Importância da qualidade ................................................................................................................. 14 1.5 Garantia da qualidade ........................................................................................................................ 16 1.6 Controle da qualidade ........................................................................................................................ 16 1.7 Sistemas de Gestão da Qualidade (SGQ) .................................................................................... 17 1.7.1 Fatores para implantação de um SGQ............................................................................................ 18 1.7.2 A NBR ISO 9000 – norma‑padrão ................................................................................................... 19 1.7.3 NBR ISO 9000‑3 – Norma para empresas de desenvolvimento de software ................ 20 2 GESTÃO DA QUALIDADE DO PRODUTO DE SOFTWARE .................................................................... 23 2.1 Modelo de McCall ................................................................................................................................ 23 2.1.1 Visão de operação ................................................................................................................................... 24 2.1.2 Visão de revisão ....................................................................................................................................... 25 2.1.3 Visão de transição ................................................................................................................................... 25 2.2 ISO/IEC 9126 – Características de qualidade do produto de software........................... 29 2.2.1 Métricas de qualidade........................................................................................................................... 32 2.3 Norma ISO/IEC 12207 – Ciclo de vida do software ................................................................ 33 2.3.1 Processos fundamentais ...................................................................................................................... 34 2.3.2 Processos de apoio ................................................................................................................................. 35 2.3.3 Processos organizacionais ................................................................................................................... 35 2.3.4 Processos de adaptação ....................................................................................................................... 36 2.4 ISO/IEC 14598 – Avaliação de produto de software .............................................................. 37 2.4.1 Relação entre as séries das normas ISO/IEC 9126 e ISO/IEC 14598 ................................... 39 2.5 ISO/IEC 25000 – SQuaRE (Software Product Quality Requirements and Evaluation) ............................................................................................................... 41 Unidade II 3 FUNDAMENTOS DE QUALIDADE PARA PROCESSO DE SOFTWARE ............................................. 49 3.1 Norma ISO/IEC 15504 – Spice – Melhoria do Processo de Software.............................. 50 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 3.1.1 Níveis de maturidade ............................................................................................................................ 54 3.1.2 Pontuação dos atributos para determinação do nível de maturidade ............................. 57 4 MODELOS DE QUALIDADE PARA PROCESSO DE SOFTWARE ......................................................... 59 4.1 Capability Maturity Model Integration (CMMI) ....................................................................... 59 4.1.1 Estrutura do CMMI ................................................................................................................................. 60 4.1.2 Áreas de processo ................................................................................................................................... 61 4.1.3 Representaçãoa aplicação da norma na organização ou em projetos de software que possuem características específicas. Esses processos permitem que a norma seja adaptável a qualquer empresa de desenvolvimento. Para exemplificar a abrangência de utilização da norma, a seguir são descritas as atividades envolvidas no processo fundamental de desenvolvimento da norma ISO/IEC 12207 (1995): • análise dos requisitos do sistema; • projeto da arquitetura do sistema; • análise dos requisitos do software; • projeto de arquitetura do software; • projeto detalhado do software; • codificação e testes do software; • integração do software; • testes de qualificação do software; • integração do sistema; • teste de qualificação do sistema; • instalação do software; • apoio à aceitação do software. 37 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II A norma ISO/IEC 12207 define os requisitos básicos, a partir desse conjunto, para que as organizações elaborem e definam a sua metodologia de desenvolvimento de software. Vale lembrar que metodologias são amplas e atendem a qualquer tipo de projeto, portanto deve haver, no início do projeto, um processo de customização da metodologia para adequá‑la às condições de execução de cada projeto. 2.4 ISO/IEC 14598 – Avaliação de produto de software A norma ISO/IEC 14598 foi publicada em 1999 e estabelece um conjunto de tarefas com o objetivo de padronizar a avaliação da qualidade do produto de software. Trata‑se de um complemento da norma ISO/IEC 9126 e deve ser utilizada em conjunto com esta. A norma ISO/ IEC 14598 possui atividades para medir as características de um produto de software, relatórios e documentos de avaliação (1999). A norma fornece subsídios para a avaliação de um produto de software em desenvolvimento ou já existente e descreve detalhadamente como avaliar cada característica do produto de forma quantitativa. A avaliação não se limita a avaliar o código ou o produto pronto, mas todos os artefatos produzidos durante o ciclo de vida do software, tais como: especificação de requisitos, protótipo de telas, modelo de dados, roteiro de testes, entre outros. A norma ISO/IEC 14598 está subdividida em seis partes, e o objetivo de cada série está detalhado no Quadro 3. Quadro 3 – Objetivo da série de normas da ISO/IEC 14598 (1999) Norma Título Objetivo 14598‑1 Parte 1 – Visão geral Descrição geral da estrutura da norma e dos processos de avaliação 14598‑2 Parte 2 – Planejamento e gestão Tarefas de planejamento e gestão do processo de avaliação 14598‑3 Parte 3 – Processo para desenvolvedores Atividades de avaliação durante o processo de desenvolvimento de software 14598‑4 Parte 4 – Processo para adquirentes Atividades de avaliação do processo de seleção para aquisição do software 14598‑5 Parte 5 – Processo para avaliadores Descrição do processo e das atividades de avaliação para os avaliadores 14598‑6 Parte 6 – Documentação de módulos de avaliação Descrição de métodos e ferramentas para apoio ao processo de avaliação A série de normas descreve o processo de avaliação do produto de software sob três perspectivas: desenvolvedor, adquirente e avaliador. Cada perspectiva possui quatro fases distintas no processo de avaliação: análise, especificação, projeto e execução, conforme exibido no Quadro 4. 38 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I Quadro 4 – Definição do processo de avaliação segundo a norma ISO/IEC 14598 (1999a) Análise Especificação Projeto Execução Processo para desenvolvedor Definir as métricas dos requisitos de qualidade Criar requisitos de qualidade Planejar a avaliação durante a construção Monitorar e controlar a qualidade durante a construção Processo para adquirente Estabelecer o escopo da avaliação Definir métricas externas a serem realizadas Planejar, programar e documentar a avaliação Monitorar e controlar a avaliação Processo para avaliador Descrever os objetivos da avaliação Definir escopo da avaliação e das medições Documentar os processos a serem usados pelo avaliador Obter os resultados a partir das ações de medição e verificação Isso se faz necessário, uma vez que cada um desses envolvidos tem um papel diferente na construção do produto. O avaliador deve se preocupar em estabelecer as métricas que serão aplicadas considerando os padrões estabelecidos. O desenvolvedor deve se preocupar em criar processos e formas de medição da qualidade do produto durante sua construção. O adquirente tem a responsabilidade de avaliar um produto de software que está sendo adquirido e, para isso, precisa criar parâmetros e métricas que deixem claros os critérios adotados no seu parecer. Para melhor descrever o conteúdo da norma ISO/IEC 14598, a seguir é descrito em detalhes o processo de avaliação de produtos de software sob a abordagem da série 14598‑1, pois esse ciclo se repete nas demais séries incluindo as tarefas específicas de cada uma delas. São quatro fases distintas que são apresentadas na Figura 13. 1) Estabelecer os requisitos de avaliação. 2) Especificar a avaliação. 3) Projetar a avaliação. 4) Executar a avaliação. 39 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Establecer requisitos de avaliação Especificar a avaliação Projetar a avaliação Executar a avaliação Estabelecer o propósito da avaliação Selecionar medidas Obter as medidas Identificar tipos de produto(s) a serem avaliados Estabelecer níveis de pontuação para as medidas Comparar com critérios Especificar modelo de qualidade Estabelecer critérios para julgamento Julgar os resultados Produzir o plano de avaliação Figura 13 – Visão geral do processo de avaliação da série ISO/IEC 14598 1) Estabelecer os requisitos de avaliação Consiste em dizer quais características do produto de software fazem parte do processo e devem estar associadas às características de qualidade definidas na norma ISO/IEC 9126‑1. Nessa fase, é importante adequar as características da qualidade ao produto a ser avaliado, pois cada software tem suas características específicas e que devem ser respeitadas. O resultado dessa fase consiste em dizer quais são os padrões de qualidade esperados. 2) Especificar a avaliação Essa fase consiste em definir as medidas quantitativas para as características selecionadas na fase de requisitos. Além disso, devem‑se definir as metas e os critérios de avaliação de cada uma das medidas. Novamente as séries da norma ISO/IEC 9126‑2 e ISO/IEC 9126‑3 que definem as métricas internas e externas podem ser utilizadas como referência. 3) Projetar a avaliação O objetivo dessa fase é descrever quem, como, o que, quando e onde as avaliações são aplicadas e documentadas para permitir a análise comparativa da evolução das medidas realizadas. 4) Executar a avaliação Nessa fase, a avaliação é aplicada e se obtêm os resultados quantitativos das medidas. Esses resultados são comparados com as metas estabelecidas de acordo com os critérios definidos. 2.4.1 Relação entre as séries das normas ISO/IEC 9126 e ISO/IEC 14598 A partir da descrição das fases do processo de avaliação é possível verificar que há uma forte relação entre as normas ISO/IEC 9126 e ISO/IEC 14598. Portanto, ambas devem ser utilizadas em conjunto para a obtenção de melhores resultados no processo de avaliação. Essa relação é apresentada na Figura 14. 40 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I Observa‑se que há convergência entre as normas no que tange às características e subcaracterísticas definidas na série ISO/IEC 9126‑1 e, principalmente, na definição das métricas internas, das externas e na qualidade em uso descrita nas séries ISO/IEC 9126‑2, ISO/IEC 9126‑3 e ISO/IEC 9126‑4. As métricas são essenciais para que o processo de avaliaçãoseja realizado. A série de normas da ISO/IEC 14598 define detalhadamente o processo de avaliação e como essas métricas são utilizadas durante a aplicação do modelo de avaliação do processo de software. Lembrando que a avaliação da qualidade do produto de software também está envolvida nesse cenário de avaliação. O processo de avaliação é iniciado com a definição do produto de software que faz parte da avaliação, a elaboração do plano de avaliação e a definição dos papéis e responsabilidades das pessoas envolvidas no processo. O passo seguinte é escolher, do conjunto de características e atributos de qualidade da norma ISO/ IEC 9126, aqueles que se aplicam à avaliação em questão. A seguir, procede‑se à avaliação do produto, considerando que diagramas, modelos e documentos serão avaliados como requisitos de qualidade interna (ISO/IEC 9126‑3), enquanto o código e a aplicação serão avaliados como requisitos externos (ISO/ IEC 9126‑2). Para cada um desses requisitos de qualidade definidos devem ser estabelecidas métricas que são a referência das metas a serem atingidas. Estas podem variar em uma escala atribuída pelo avaliador, em que será definido o valor mínimo aceitável de avaliação para cada requisito. Ao final, com base nas medidas coletadas pelo processo de avaliação, realizam‑se a avaliação dos resultados e o julgamento se o produto atende ao conjunto de requisitos da qualidade definidos. Recursos e ambiente Processo de avaliação Efeitos do produto de software 14598-1 14598-2 14598-6 9126-3 14598-5 14598-4 14598-3 9126-1 9126-2 9126-4 Produto de software Suporte à avaliação Processo de avaliação Métricas internas Métricas externas Métricas de qualidade em uso Figura 14 – Relação entre as séries de normas ISO/IEC 9126 e ISO/IEC 14598 41 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Portanto, a utilização das normas ISO/IEC 14598 e ISO/IEC 9126 deve ser em conjunto, pois são complementares. A geração do resultado da avaliação da qualidade deve ser realizada sempre com a participação do pessoal do produto que está sendo avaliado e de um avaliador certificado pela ISO. 2.5 ISO/IEC 25000 – SQuaRE (Software Product Quality Requirements and Evaluation) O Modelo SQuaRE é a nova versão das normas ISO/IEC 9126 e ISO/IEC 14598 para especificação e avaliação da qualidade do produto de software publicada em 2008, com o objetivo de unificar o processo de medição da qualidade do software. O objetivo da criação dessa norma é atualizar as informações de requisitos de qualidade, alinhar com novos conceitos de avaliação da qualidade, aumentar a consistência entre os atributos da qualidade descritos na norma ISO/IEC 9126 e o processo de avaliação da norma ISO/IEC 14598 e incluir procedimentos novos. Com isso, obtém‑se um documento único e consistente para todo o processo de qualidade. A ISO/IEC 25000 contém cinco séries distintas, cuja estrutura é ilustrada na Figura 15. ISO/IEC 25000 Guia do SQuaRE Planejamento e Gerenciamento de Qualidade ISO/IEC 25001 Modelo de qualidade ISO/IEC 25002 Medição de qualidade ISO/IEC 25003 Requisitos da qualidade ISO/IEC 25004 Avaliação da qualidade Figura 15 – Séries de normas ISO/IEC 25000 Observação A estrutura da norma ISO/IEC 25000 (SQuaRE) está em processo de revisão e deve sofrer alterações. A série ISO/IEC 25000 faz uma introdução geral sobre a norma e definição gerais sobre os termos utilizados nas séries. Também descreve orientações de como utilizar a norma e o relacionamento entre elas. A série ISO/IEC 25001 corresponde à norma ISO/IEC 9126, que descreve as características dos requisitos de qualidade externos e internos. Detalha os requisitos de qualidade do produto de software. A série ISO/IEC 25002 fornece um modelo de referência para medição da qualidade e orientações para a aplicação das métricas. 42 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I A série ISO/IEC 25003 apoia a especificação dos requisitos de qualidade durante a fase de levantamento de requisitos para um novo produto de software, ou seja, auxilia na definição dos padrões de qualidade esperados. Traz da norma ISO/IEC 9126 o conceito da relação de requisitos de qualidade com os requisitos do software. A série ISO/IEC 25004 descreve os requisitos, as orientações para o processo de avaliação de produto de software e a definição dos documentos necessários para registrar todo o ciclo de medição realizado durante a avaliação. Apresenta uma estrutura de avaliação da qualidade oriunda das normas ISO/IEC 9126‑1 e ISO/IEC 14598. A Figura 16 mostra o conteúdo básico de cada uma das séries da norma ISO/IEC 25000, em que se pode observar a total interação com as normas de origem ISO/IEC 9126 e ISO/IEC 14598. ISO/IEC 25000 ISO/IEC 25001 ISO/IEC 25002 ISO/IEC 25003 ISO/IEC 25004 • Guia do SQuaRE • Planejamento e gestão • Modelo de qualidade • Planejamento e gestão • Modelo de referência para medição • Elementos de medida de qualidade • Medição da qualidade interna • Medição da qualidade esterna • Medição da qualidade em uso • Guia de referência de avaliação • Módulo de avaliação • Processo de avaliação para desenvolvedores • Processo de avaliação para adquirintes • Processo de avaliação para avaliadores • Requisitos de qualidade Figura 16 – Conteúdo básico da série de normas ISO/IEC 25000 43 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Observação A norma ISO/IEC 25000 (SQuaRE) é mais recente, atualizada e incorpora todos os conceitos das normas ISO/IEC 9126 e ISO/IEC 14598. Portanto, deve‑se priorizar a sua utilização em relação às anteriores. A norma ISO/IEC 25000 organiza, completa e elimina alguns conflitos que existem entre as normas ISO/IEC 9126 e ISO/IEC 14598, e ainda possui exemplos de utilização da norma que facilitam seu uso. Portanto, torna‑se a referência para ser aplicada nas avaliações de produto de software. Resumo Nesta unidade, verificamos quão importante é o tema Qualidade de Software. Embora exista uma forte resistência das equipes de desenvolvimento de software e das próprias empresas fornecedoras de software, as organizações‑clientes estão cada vez mais exigentes com a qualidade do produto que recebem. Abordamos que o conceito básico de qualidade sobre fazer certo da primeira vez é muito pouco utilizado, prevalecendo a técnica de tentativa e erro. Não se atua de forma preventiva diante dos problemas que podem ocorrer e que, embora conhecidos, não são tratados, e as atitudes tornam‑se reativas. O ato de revisar todo e qualquer artefato antes de entrega ao cliente simplesmente é ignorado na maioria das vezes. Além disso, os desenvolvedores continuam a pensar que o gerente é o responsável pela qualidade do software, quando a responsabilidade é de toda a equipe. Seguindo e praticando esses princípios básicos, os resultados colhidos estão cada vez mais alinhados com as expectativas e com a satisfação dos usuários finais. Vimos também que os obstáculos à qualidade são muitos. Vão desde a cultura da organização que fornece o software e atua segundo o modelo corrente, que considera: “Se está dando certo até agora, para que alterar?”, quando os resultados poderiam ser muito melhores, até os próprios clientes, que continuam a contratar essas empresas que fornecem software ruim em vez de outras com processos de qualidade, porque simplesmente “Todo projeto de software é assim mesmo. Sempre está tudo com problema.”; além disso, os preços dessas empresas são mais baixos. Aprendemos ainda que outro fator relevante como obstáculo à qualidade são as características dos softwares atuais que aumentaram 44 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I muito a complexidade da interface com o usuário, as soluções técnicascada vez mais detalhadas para permitir uma infinidade de mídias a fim de consumir as informações e as necessidades de prazo cada vez menores para a construção do sistema. Além disso, temos a divergência das visões dos envolvidos no processo de desenvolvimento, em que cada um quer ver os resultados à sua maneira, mas são antagônicos; por exemplo: o cliente quer um produto rápido e barato, o usuário quer que atenda a todas as funções que ele deseja e que o sistema esteja sem erros, o desenvolvedor quer apenas codificar e ver seu programa funcionando e o gerente do projeto precisa que o sistema funcione dentro do prazo e do custo orçado. Essas diferentes visões tornam a qualidade do software um elemento deixado em segundo plano. Abordamos ainda que, para ter qualidade em tudo o que é produzido, não basta testar no final para ver se está tudo certo. Como visto, a qualidade é um processo preventivo e, para tal, requer que sejam tomadas ações de garantia da qualidade durante o desenvolvimento, com verificações e validações de tudo o que for produzido. Ao final, tem‑se o controle da qualidade, que é a aplicação de testes para ter o aceite do software produzido. Portanto, vimos que para minimizar os problemas de qualidade, as empresas precisam se dedicar mais à garantia dessa qualidade, o que é realizado durante o processo de desenvolvimento, buscando atuar fortemente na prevenção de problemas e ter o controle de qualidade, realizado ao final, apenas como um atestado de que o produto atende aos requisitos do usuário. Aprendemos também que a norma ISO/IEC 9000 trouxe para a área de Tecnologia da Informação os fundamentos de um SGQ, em que a preocupação está em transformar as atividades realizadas por pessoas em atividades perenes e que possam ser repetidas por qualquer indivíduo treinado e capacitado no processo. O SGQ define um conjunto de processos para que as empresas formalizem o seu padrão de trabalho, atendendo a um conjunto de requisitos essenciais para a elaboração de um trabalho. A norma NBR/ISO 9000 é o nome genérico que se dá às diversas normas que abordam o assunto. As normas básicas para garantia da qualidade são as contratuais – ISO 9001, ISO 9002 e ISO 9003 –, e as organizações só podem ser certificadas em relação a essas normas. Conhecemos também a norma NBR/ISO 9000‑3 – Norma para Empresas de Desenvolvimento de Software –, que define as diretrizes para facilitar a aplicação da norma ISO 9001 a organizações que desenvolvem, fornecem e mantêm software. Publicada em junho de 1993, essa norma é dividida em três partes: atividades de estrutura, atividades do ciclo de vida e atividades de suporte. Nas atividades de ciclo de vida, a NBR/ISO 9000‑3 45 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II abrange questões relacionadas ao entendimento dos requisitos funcionais, o uso de metodologias consistentes para desenvolvimento de software e o gerenciamento do projeto, desde a concepção até a implantação do software. Portanto, o objetivo da norma NBR/ISO 9000‑3 é indicar quais processos a organização deve ter e manter para o desenvolvimento do software com qualidade. Vimos que a certificação ISO 9000 é reconhecida no mercado por muitas empresas e traz uma série de benefícios às organizações que adotam o sistema, como abertura de novos mercados, maior satisfação do cliente e menores custos de desenvolvimento. Para realizar a certificação, a empresa deve analisar o seu processo e treinar os funcionários para a conscientização da necessidade da qualidade. Na sequência, desenvolve os procedimentos necessários ao sistema da qualidade, seleciona um órgão certificador que irá avaliar se o sistema está de acordo com a norma, faz pré‑auditorias e realiza a auditoria final de aderência ao SGQ para a certificação. Abordamos ainda que, durante a definição, deve‑se tomar cuidado para que o processo não se torne burocrático, do tipo que ninguém usa. Este deve se adaptar ao dia a dia da empresa, e não o contrário, senão o manual somente será lido quando houver processo de certificação. Além disso, a organização será reavaliada a cada dois anos e deverá manter o pessoal treinado e atualizado quanto aos processos para que não perca o certificado, pois isso pode ser muito custoso em termos financeiros e de imagem junto aos clientes. O gestor do SGQ deve ser o responsável por manter esse processo. Foram apresentadas também as principais normas para verificação da qualidade de um produto de software nas organizações. Essas normas têm como objetivo minimizar os problemas de qualidade resultantes do processo de desenvolvimento de um software. Em seguida, vimos que as primeiras preocupações com qualidade do produto de software surgiram em 1977, com McCall, que já destacava a visão de produzir um software pensando nas fases seguintes de operação e de manutenção, e não apenas na conclusão do trabalho. Isso mudou a forma de produção de software e deu origem a diversas normas que focam avaliar a qualidade dos produtos de software. O foco dos requisitos de McCall está em três abordagens. A primeira é a abordagem de revisão, com os requisitos de facilidade de manutenção, flexibilidade e facilidade de testes. Outra está relacionada à operação do produto com os requisitos de correção, confiabilidade, integridade e eficiência. A última abordagem é a de transição, com os requisitos de portabilidade, reúso e interoperabilidade. 46 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I Abordamos ainda que a norma de qualidade de produto de software pioneira foi a ISO/IEC 9126, que atribuiu características e subcaracterísticas ao software para permitir a avaliação de quão alinhada ao padrão de qualidade esperado a aplicação construída está, gerando uma avaliação quantitativa que possibilita a aceitação do produto ou a tomada de ações corretivas. Aprendemos que a norma segue basicamente os requisitos não funcionais definidos por McCall de forma reestruturada e acrescenta uma visão de facilidade de uso e funcional. Essas seis características são subdivididas para facilitar a avaliação. Para a característica de funcionalidade, são avaliadas a adequação, a acurácia, a segurança de acesso e a conformidade. Na confiabilidade, são avaliadas a maturidade, a tolerância a falhas, a recuperabilidade e a conformidade. Para a usabilidade, avaliam‑se os requisitos de facilidade de operação da aplicação. Para a eficiência, o foco é a avaliação do desempenho. Para a manutenibilidade, são abordados os requisitos de facilidade para incorporar mudanças. Para a portabilidade, são avaliados os requisitos de múltiplos ambientes. Em seguida, vimos que a norma ISO/IEC 12207 já traz o foco de processo de desenvolvimento de software, abordando o ciclo completo, desde a concepção até a manutenção das aplicações, definindo uma forma estruturada para a construção de um sistema, independentemente do processo de desenvolvimento pela organização: espiral, incremental ou iterativo. Aprendemos que a norma ISO/IEC 14598 traz os conceitos de avaliação quantitativa do produto de software e é utilizada em conjunto com a norma ISO/IEC 9126 para produzir notas relacionadas aos padrões de qualidade esperados e à avaliação de cada requisito de qualidade. Finalmente, abordamos a norma ISO/IEC 25000 – SquaRE –, que unificou as normas ISO/IEC 9126 e ISO/IEC 14598 em apenas uma, incluindo novas atualizações e proporcionando maior facilidade de uso, por trazer todos os conceitos de requisitos de qualidade do produto de software e avaliação na mesma norma. Exercícios Questão 1. No controle da qualidade, uma atividade deve ser executada visando avaliar se as ações de qualidade planejadas estão sendo executadas de acordo com o processo estabelecido. Essa atividade chama‑se auditoria e pode gerar ações corretivas no caso de não encontrar conformidades. Essasações corretivas são comumente classificadas em três tipos. Qual das alternativas corresponde ao tipo de ação corretiva que verifica especificamente se as ações de qualidade planejadas estão sendo executadas de forma adequada? 47 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II A) Auditorias de produto. B) Auditorias de processo. C) Auditorias de sistemas de qualidade. D) Sistemas de gestão de qualidade. E) Garantia de qualidade. Resposta correta: alternativa B. Análise das alternativas A) Alternativa incorreta. Justificativa: essa ação corretiva verifica apenas a conformidade do produto, e não os processos sobre os quais foi elaborado. B) Alternativa correta. Justificativa: somente essa ação corretiva de auditoria permite verificar se as ações de qualidade estão sendo executadas de forma adequada. Isso é possível com a verificação de cada ação (processo, etapas) do ciclo planejado. C) Alternativa incorreta. Justificativa: essa ação corretiva observa e avalia o processo como um todo e mensura os resultados, avalia a eficácia da utilização do sistema de qualidade implantado, e não especificamente de cada processo executado pelo sistema em questão. D) Alternativa incorreta. Justificativa: sistemas de gestão têm como objetivo padronizar processos de uma empresa, e não especificamente verificar as ações de qualidade planejadas. E) Alternativa incorreta. Justificativa: não verificam a execução de ações de qualidade planejadas. Essa alternativa está focada na garantia de qualidade do produto gerado com a adequação de padrões. Questão 2. Um Sistema de Gestão da Qualidade (SGQ) tem como objetivo padronizar os processos de uma empresa para a produção de seu produto final, proporcionando a satisfação de seus clientes e a melhoria contínua dos seus processos (ANTONIONI, 1995). Existem diversos fatores que podem motivar a implantação de um SGQ. 48 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I Assinale a alternativa que apresenta o fator mais relevante à necessidade de um SGQ. A) Diminuir o entrosamento entre empresa e cliente com o intuito de não dificultar os processos produtivos, regras de negócios e o ciclo planejado de entrega do produto. B) Diminuir o volume de dados relacionados às atividades ou dos processos de qualidade com o intuito de facilitar a tomada de decisão. C) Diminuir o volume de dados relacionados aos processos de gestão e das etapas de geração de um produto para flexibilizar as correições e melhorias. D) Evitar medir de forma contínua a satisfação do cliente. E) A alta direção de uma empresa reconhece que a qualidade é um diferencial e patrocina o processo. Resposta desta questão na plataforma. 49 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Unidade II 3 FUNDAMENTOS DE QUALIDADE PARA PROCESSO DE SOFTWARE Os modelos vistos até o tópico 2 são voltados para a qualidade do produto de software, ou seja, para o produto final. No entanto, para que o resultado seja adequado e o produto atenda aos requisitos estabelecidos, faz‑se necessário que a empresa tenha um processo de desenvolvimento consolidado e maduro que organize e padronize o processo. Os modelos de qualidade voltados para a avaliação do processo de desenvolvimento auxiliam as empresas a construírem uma estrutura adequada e robusta para a produção do software, orientando‑as a respeito de como podem evoluir e atingir graus de maturidade cada vez mais elevados. Os modelos abordados neste tópico são apresentados no Quadro 5. Quadro 5 – Modelos de qualidade para avaliação de processo de software Modelo Objetivo ISO/IEC 15504 (Spice) Modelo cujo objetivo é fazer a avaliação de processo de desenvolvimento de software CMMI Modelo de maturidade de desenvolvimento de software que auxilia as empresas a aprimorarem o seu processo MPS.BR Modelo que tem como objetivo a melhoria do processo de software voltado para a realidade brasileira O surgimento desses modelos de qualidade de processos vem desde a metade da década de 1980, com o aparecimento do SGQ da ISO 9000 e a introdução do Capability Maturity Model (CMM) pelo Software Enginnering Institute/Carnegie‑Mellow University (SEI/CMU), no início da década de 1990, que apresenta uma descrição das atividades necessárias para uma empresa atingir um alto nível de qualidade no desenvolvimento de software. A partir do CMM, foi elaborada a ISO/IEC 15504, modelo Spice, para padronizar o processo de avaliação de qualidade. Com a atualização do CMM, que se tornou CMMI, o modelo ficou mais abrangente e detalhado em relação à avaliação da maturidade. No Brasil, em razão dos altos custos de implementação do modelo CMMI, foi criado o modelo brasileiro denominado de Melhoria de Processos do Software Brasileiro (MPS.BR), cujo objetivo é reduzir os custos de evolução para as pequenas e médias empresas brasileiras, com vistas à evolução e à avaliação da maturidade. Saiba mais SEI/CMU é um instituto de pesquisa sobre engenharia de software nos Estados Unidos dedicado à melhoria do processo de desenvolvimento de sistemas. Visite o site: . 50 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II A cronologia da evolução dos modelos de qualidade de processos é apresentada na Figura 17. ISO 9000 ISO 9000 SPICE ISO 12207 CMM TR CMM 1.0 CMM 1.1 CMM I ISO 15504 MPS.BR ISO 9000 1985 1990 1995 2000 2005 Figura 17 – Cronologia dos modelos de qualidade para avaliação de processo de software 3.1 Norma ISO/IEC 15504 – Spice – Melhoria do Processo de Software A norma ISO/IEC 15504 foi publicada em 1998 e é o resultado da combinação do Modelo de Qualidade de Processo de Software CMM, da norma ISO/IEC 12207, da qual trouxe os processos de ciclo de vida, da ISO 9001, da ISO 9000‑3, dentre outros. O significado de Spice é Software Process Improvement and Capability Determination, ou seja, Melhoria do Processo de Software e Determinação da Capacidade, que está relacionada à maturidade das empresas na construção do software. Essa norma descreve um conjunto de processos que agregam uma série de boas práticas da Engenharia de Software e classificam as empresas em seis níveis de maturidade que permitem a avaliação do grau de qualidade de desenvolvimento de software em que as organizações se encontram, de acordo com as práticas utilizadas. A Spice está dividida em duas partes: Processo de Desenvolvimento e Processo de Capacidade. Na primeira parte os requisitos são descritos e classificados de acordo com a norma ISO/IEC 12207, que contém: os processos de engenharia de software, o processo de aquisição, os processos de gerência e os organizacionais. Na segunda parte são descritos os requisitos de maturidade das empresas de software de acordo com o modelo CMM. Lembrete Maturidade refere‑se aos graus de conhecimento e de execução das melhores práticas de Engenharia de Software que levam as empresas a produzirem software com qualidade. A norma ISO/IEC 15504 possui nove séries que descrevem o processo e estão ilustradas na Figura 18. 51 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Parte 7 Guia para melhoria de processo Parte 3 Realização de uma avaliação Parte 2 Modelo de referência para processos e capabilidade Parte 4 Guia para realização de uma avaliação Parte 5 Modelo para avaliação e guia de indicadores Parte 8 Guia para determinação da capabilidade de fornecedor Parte 1 Conceitos e guia introdutório Parte 9 Vocabulário Parte 6 Guia para qualificação de avaliadores Figura 18 – Série de normas da ISO/IEC 15504 1. Partes normativas • ISO/IEC 15504‑2 – Modelo de Referência para Processo e Capacidade: descreve o processo para a realização da avaliação da capacidade da organização.• ISO/IEC 15504‑3 – Requisitos para a Realização de uma Avaliação: é um guia de procedimento para a realização da avaliação da maturidade. 2. Partes informativas • ISO/IEC 15504‑1 – Visão Geral da Norma: apresenta uma série de conceitos e guia introdutório da descrição dos procedimentos na norma. • ISO/IEC 15504‑4 – Resultados de uma Avaliação: é um guia para a utilização dos resultados da avaliação. • ISO/IEC 15504‑5 – Modelo de Utilização: apresenta um exemplo para a utilização da norma. • ISO/IEC 15504‑6 – Guia para a Qualificação de Avaliadores: descreve os procedimentos para treinamento e certificação dos avaliadores do processo. • ISO/IEC 15504‑7 – Guia para Melhoria de Processo. • ISO/IEC 15504‑8 – Descrição para Determinação da Maturidade. • ISO/IEC 15504‑9 – Vocabulário de Termos. 52 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II Como a série ISO/IEC 15504‑2 é a principal do modelo da norma ISO/IEC 15504, são detalhadas aqui a lista dos processos de desenvolvimento e a determinação dos níveis de maturidade que as organizações podem alcançar e exibidas nos Quadros 6 e 7. Quadro 6 – Categorias do processo de desenvolvimento na norma ISO/IEC 15504‑2 Categoria Processo Cliente‑fornecedor • Aquisição • Fornecimento • Levantamento de requisitos • Operação e suporte ao usuário final Engenharia de Software Construção • Levantamento de requisitos • Análise • Projeto de software • Construção do software • Integração do software • Teste de software • Integração e testes de sistema Manutenção Apoio • Documentação • Gestão da configuração • Garantia da qualidade • Verificação • Validação • Revisão conjunta • Auditoria • Resolução de problemas Gerenciamento • Gestão de projetos • Gestão da qualidade • Gestão de riscos Organização • Alinhamento gerencial • Melhoria • Gestão de recursos humanos • Medições • Reutilização Fonte: ISO (2003c). 53 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Quadro 7 – Descrição dos níveis de maturidade na norma ISO/IEC 15504‑2 Nível de capacidade Características básicas 0 – Incompleto Processo inexistente ou geralmente falho 1 – Executado Atinge os objetivos, mas sem controle de escopo, prazo e custos e sem padrões de qualidade 2 – Gerenciado Atinge os objetivos de prazo, custo e qualidade, e os produtos são gerenciados 3 – Estabelecido Processo estabelecido, executado e gerenciado mediante adaptação ao padrão definido 4 – Previsível Processo estabelecido e totalmente controlado por medições específicas 5 – Otimizado Melhoria de forma contínua e disciplinada Fonte: ISO (2003c). O processo de desenvolvimento descreve os processos necessários para a aquisição da engenharia para a construção do produto de software, os procedimentos para manutenção do software, os processos para a garantia da qualidade, os processos relacionados ao gerenciamento e a descrição de como a estrutura da organização deve contribuir para o processo de desenvolvimento de software. Os níveis de maturidade determinam o quanto uma organização tem domínio de todo o ciclo de produção de software, bem como de todos os processos que podem garantir a produção de um software de qualidade e a capacitação contínua das pessoas envolvidas. 3. ISO/IEC 15504‑2 – O processo de desenvolvimento Nessa parte, a norma incorpora os requisitos da ISO/IEC 12207, detalhando como deve ser realizado o processo de desenvolvimento, abordando os aspectos primários concernentes à Engenharia de Software e à relação cliente‑fornecedor, além dos processos de apoio à qualidade, à gestão e dos processos organizacionais. 4. ISO/IEC 15504‑2 – Determinação da maturidade Nessa parte, a norma incorpora os requisitos do CMM publicado pelo SEI/CMU e estabelece um roteiro de seis níveis de maturidade, conforme a Figura 19, em que cada nível representa o estágio de conhecimento e qualidade em que a organização se encontra. Tais estágios podem ser alcançados sequencialmente, à medida que a empresa evolui e aperfeiçoa os seus processos de qualidade. 54 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II 4 – Previsível 5 – Otimizado 3 – Estabelecido 2 – Gerenciado 1 – Executado 0 – Incompleto Figura 19 – Níveis de maturidade na norma ISO/IEC 15504‑2 Cada nível de maturidade possui características básicas para avaliação de uma empresa, que, por sua vez, tem um conjunto de atributos específicos que permitem medir a evolução da capacidade de cada item, com o objetivo de determinar se as condições mínimas para atingir o nível desejado foram alcançadas. As características básicas para que uma organização atinja os níveis de maturidade esperados pela avaliação do processo são descritas no Quadro 7. Para que o processo possa fazer a avaliação de cada nível com base nessas características, são descritos atributos de processo que permitem que essas sejam avaliadas de forma quantitativa. A medição quantitativa é muito importante para todo processo de avaliação, pois permite que seja determinado quão perto ou distante da maturidade um atributo está, com base na nota atribuída durante a avaliação. 3.1.1 Níveis de maturidade A norma ISO/IEC 15504 – Spice descreve os níveis de maturidade e seus respectivos atributos que permitem a sua qualificação conforme descrito e apresentado no Quadro 8. Os atributos devem ser atendidos de forma cumulativa, à medida que a organização evolui em seus processos. 55 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Quadro 8 – Atributos por nível de maturidade na norma ISO/IEC 15504‑2 Nível de capacidade Atributos relacionados 0 – Incompleto Nenhum atributo 1 – Executado 1.1 2 – Gerenciado 2.1 e 2.2 3 – Estabelecido 3.1 e 3.2 4 – Previsível 4.1 e 4.2 5 – Otimizado 5.1 e 5.2 Fonte: ISO (2003c). • Nível 0 – Incompleto Nenhum processo é utilizado e não gera os resultados esperados. Esse nível também é conhecido como caótico. Não há atributos de processo para classificar esse nível. • Nível 1 – Executado O processo consegue alcançar alguns de seus objetivos e gerar os produtos de trabalhos esperados. — Atributo — Área de Processo 1.1 – Atributo de execução de processo O processo transforma as necessidades do cliente em produtos de trabalho que geram os resultados esperados para o projeto. • Nível 2 – Gerenciado O processo, além de executado, é feito de maneira gerenciada, planejada, controlada, acompanhada, verificada e corrigida de acordo com as condições estabelecidas. — Atributos — Área de Processo 2.1 – Atributo de gestão de execução de processo Esse atributo mede até que ponto o processo é gerenciado para gerar os produtos de trabalho que satisfazem aos seus objetivos. — Área de Processo 2.2 – Atributo de gestão dos produtos de trabalho Esse atributo mede até que ponto os produtos de trabalho são documentados, controlados e verificados. 56 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II • Nível 3 – Estabelecido O processo, agora, além de executado e gerenciado, é definido com base em princípios de engenharia de software e tem âmbito organizacional. — Atributos — Área de Processo 3.1 – Atributo de definição de processo Esse atributo mede até que ponto o processo é definido com base em um procedimento padronizado. — Área de Processo 3.2 – Atributo de recursos de processo Esse atributo mede até que ponto o processo faz uso de recursos humanos e materiais para ser executado de maneira bem‑sucedida. • Nível 4 – Previsível O processo, agora, além de ser executado, gerenciado e definido, também passa a ser medido quantitativamente em relação aos resultados produzidos. — Atributos — Área de Processo 4.1 – Atributo de medida Esse atributo mede até que ponto as mensurações feitas são utilizadas paraassegurar a execução do processo no que se refere a alcançar os objetivos de negócio da empresa. — Área de Processo 4.2 – Atributo de controle de processo Esse atributo mede até que ponto o processo é controlado por intermédio de coleta, análise e uso de medições, com o objetivo de servir como base para ações corretivas, quando necessário. • Nível 5 – Otimizado O processo, agora, além de executado, gerenciado, definido e medido dentro de limites quantitativos, pode ser mudado e evoluído de maneira dinâmica e controlada. — Atributos — Área de Processo 5.1 – Atributo de inovação Esse atributo mede até que ponto mudanças na definição, na gerência e na execução do processo são controladas. 57 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II — Área de Processo 5.2 – Atributo de melhoria contínua Esse atributo mede até que ponto as mudanças de processo contribuem para a melhoria contínua. Observação Embora seja um padrão ISO, a norma ISO/IEC 15504 é pouco utilizada no mercado, em que o modelo de qualidade do CMMI é o mais reconhecido no âmbito internacional, e o MPS.BR, no mercado brasileiro. 3.1.2 Pontuação dos atributos para determinação do nível de maturidade A partir da definição de cada área de processo dos níveis de maturidade, os atributos podem ser medidos quantitativamente para avaliar o grau de capacidade em que o processo é utilizado em uma organização. A norma ISO/IEC 15504 possui uma escala de faixa com quatro valores que avaliam o atendimento aos requisitos do atributo de processo, conforme segue. 1. N (Não atendido) — 0% a 15%: há pouca ou nenhuma evidência de que o atributo foi satisfeito. 2. P (Parcialmente atendido) — 16% a 50%: há evidências de uso contínuo e repetitivo de uma prática, no entanto algumas práticas ainda não são utilizadas. 3. L (Largamente atendido) — 51% a 85%: há evidências de uso contínuo e repetitivo das práticas; porém, durante a execução, há variação no uso do processo dentro da empresa. 4. F (Totalmente atendido) — 86% a 100%: há evidências de uso contínuo e repetitivo das práticas e não há diferenças significativas na execução do processo em todas as áreas da organização. A avaliação do processo de software dentro da organização considerando essas quatro faixas permite a classificação do grau de maturidade em que a empresa se encontra. Essa avaliação deve ser feita por examinadores treinados e capacitados pela ISO e deve seguir o processo descrito na norma ISO/IEC 15504‑5. 58 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II Observação O termo evidência indica que existe um artefato ou documento provando que determinada prática é realizada. Por exemplo: a ata é uma evidência da realização de uma reunião. Exemplo de aplicação Para realizar uma avaliação utilizando a norma ISO/IEC 15504 é necessário que seja elaborado o plano de avaliação, o qual descreve o que será avaliado em cada item do processo de desenvolvimento, como isso será feito e os responsáveis por cada etapa. Deve haver duas fases: uma avaliação preliminar e outra definitiva. O tempo compreendido entre as duas avaliações serve para a organização adequar‑se às não conformidades apontadas na avaliação preliminar. Por exemplo: ao avaliar o atributo 1.1 de execução de processo, foi avaliado com nota P – Atende parcialmente, indicando que algumas práticas ainda não são utilizadas. A organização tem o tempo até a avaliação definitiva para gerar as evidências de utilização das práticas pendentes. Uma vez definidos o plano de avaliação e os responsáveis, é necessário estabelecer o processo de avaliação que deve conter, no mínimo: • planejamento; • coleta de dados; • validação dos dados coletados; • atribuição de nota; • registro dos resultados. No planejamento são definidos os projetos que devem participar da avaliação e suas respectivas equipes. A coleta e a validação dos dados são feitas pela equipe do projeto e pelos avaliadores, com o intuito de garantir que os dados sejam válidos como evidência. Considerado válido o dado, deve ser atribuída uma nota a cada atributo do processo. As notas possíveis são: N (Não atendido), P (Parcialmente atendido), L (Largamente atendido) e F (Totalmente atendido). Para ser considerada em um nível de capacidade, a nota mínima de uma organização tem de ser L ou F, e obrigatoriamente F nos níveis anteriores. Ao final, é feita uma avaliação conjunta para registrar os resultados da avaliação. Na Tabela 5 são exemplificados resultados de avaliações hipotéticas realizadas sobre os processos do ciclo de vida de um software. 59 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Tabela 5 – Resultados das avaliações de processos do ciclo de vida de um software Nível 1 2 3 4 5 Capacidade Atributos 1.1 2.1 2.2 3.1 3.2 4.1 4.2 5.1 5.2 Elicitação de requisitos F L F P P ‑ ‑ ‑ ‑ 2 Projeto de arquitetura P P L N N ‑ ‑ ‑ ‑ 0 Projeto do software F F F F L L N ‑ ‑ 3 Construção F P L P N ‑ ‑ ‑ ‑ 1 Testes de software F F F F F L L ‑ ‑ 4 No processo Projeto de software, verifica‑se que está no nível 3, pois sua nota para os atributos dos níveis 1 e 2 é igual a F. Para o processo Arquitetura de software, verifica‑se que se encontra no nível 0, pois não contém nenhum atributo nos níveis anteriores com nota igual a F. 4 MODELOS DE QUALIDADE PARA PROCESSO DE SOFTWARE Os modelos de qualidade para processo de software visam verificar o quanto uma empresa está madura em relação à execução das melhores práticas de desenvolvimento de aplicações, uma vez que, se boas práticas forem aplicadas em todos os níveis, a qualidade do software será consequência disso. A seguir, são apresentados os dois modelos mais utilizados no mercado. 4.1 Capability Maturity Model Integration (CMMI) O CMMI é um modelo de qualidade de software, desenvolvido pelo Software Engineering Institute, da Carnegie‑Mellow University (SEI/CMU), para o Departamento de Defesa Norte‑americano – United States Department of Defense (DoD), com o objetivo de avaliar a maturidade das empresas que fornecem software para o departamento. Sua primeira versão foi publicada em 1991, quando ainda era denominado Software Capability Maturity Model (SW‑CMM) e abrangia outras áreas além do desenvolvimento de software. No ano 2000 foi publicada a primeira versão do CMMI, que foi criado com o objetivo de unificar os modelos CMM existentes. Em sua versão atual há descrição para os processos de desenvolvimento de software, aquisição e serviços. O modelo CMMI é reconhecido mundialmente pelas empresas que adquirem software. O CMMI descreve orientações de quais processos devem ser implementados pela organização para atingir a maturidade no desenvolvimento de software, mas não descreve o “como fazer”. Cada organização deve definir os seus próprios processos para implantar as melhores práticas previstas no modelo. 60 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II Ao verificar esses diversos modelos apresentados, você deve estar se perguntando: “Qual a vantagem para uma empresa implantar o modelo CMMI?”. Além de “abrir portas” para o fornecimento de software em diversos países e proporcionar a redução dos custos, podemos citar: • processo de desenvolvimento padronizado; • melhoria nas estimativas de prazos e custos; • aumento de produtividade por repetição dos processos; • satisfação do cliente e da equipe; • alta qualidade dos produtos de software. CMM 1991 CMMI‑SW 2000 Figura 20 – Evolução do Modelo CMM para o CMMI 4.1.1 Estrutura do CMMI O CMMI é estruturado em níveis de um a cinco que representam o grau de maturidade da empresa no processo de software. Essa divisão o difere do modelo Spice, que tem níveis de zero a cinco. Cada nível de maturidade possui um conjunto de boas práticas denominadas áreas de processoque precisam ser executadas durante o desenvolvimento do software. Da mesma forma que o modelo Spice, o CMMI não diz como fazer, apenas descreve o que as empresas devem realizar para atingir o nível de qualidade esperado. Cada qual deve estabelecer o seu processo para atingir os níveis de maturidade. Esses níveis podem ser representados de duas formas: contínua ou estagiada. A representação por estágio é mais utilizada e reconhecida no mercado de Tecnologia da Informação. Essas representações e suas estruturas são apresentadas em detalhes a seguir. Observação O termo projeto é utilizado para descrever o desenvolvimento de um software dentro de um tempo determinado para produzir algo inédito na visão dos usuários. 61 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 4.1.2 Áreas de processo As áreas de processo – process areas (PA) representam todas as boas práticas de Engenharia de Software que devem ser aplicadas no processo de construção de um software. Para cada área de processo existem tarefas que precisam ser praticadas para verificação de evidência de execução daquela PA. São 25 áreas de processo divididas em quatro categorias, conforme a Figura 21. CMMI Gerência de processos Gerência de projetosSuporte Engenharia Figura 21 – Categorias do CMMI • Área de Gerenciamento de Processos — Possui as áreas de processo relacionadas às ações organizacionais que permitem a definição, a implantação, o monitoramento, a avaliação e a medição dos processos. São elas: — Foco no Processo Organizacional. — Definição do Processo Organizacional. — Treinamento Organizacional. — Desempenho do Processo Organizacional. — Inovação e Desenvolvimento Organizacional. 62 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II • Área de Gerenciamento de Projetos — Descreve as áreas de processo que definem as boas práticas para o planejamento, a execução, o controle e o encerramento dos projetos de software. São elas: — Planejamento de Projetos. — Monitoramento e Controle de Projetos. — Gerência de Acordos com Fornecedores. — Gerência Integrada de Projetos. — Gerência de Riscos. — Integração de Equipes. — Gerência de Fornecedores Integrada. — Gerência Quantitativa de Projetos. • Área de Engenharia — Envolve as áreas de processo voltadas para a construção e a manutenção do software. São elas: — Gerência de Requisitos. — Desenvolvimento de Requisitos. — Solução Técnica. — Integração de Produtos. — Verificação. — Validação. • Área de Suporte — Relaciona as áreas de processo que servem de apoio ao desenvolvimento e à manutenção do software. São elas: — Gerência de Configuração. 63 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II — Garantia da Qualidade do Processo e do Produto. — Medição e Análise. — Ambiente Organizacional para Integração. — Análise de Decisões e Resoluções. — Análise de Causas e Resoluções. Os detalhes do que consiste cada área de processo são descritos a seguir, nas representações contínua e estagiada do Modelo CMMI. 4.1.3 Representação do modelo CMMI O CMMI apresenta duas abordagens para definição do nível de evolução em que uma organização se encontra. São as representações contínua e estagiada. A representação contínua permite a uma organização atingir diferentes níveis de capacidade para cada PA do modelo, priorizando a que traz maiores benefícios. Por exemplo, uma determinada área de uma organização pode estar no nível 3 para a PA de Gerência de Requisitos, mas, para a PA de Planejamento de Projetos, pode ainda estar no nível 2. A representação contínua apresenta seis níveis de capacidade, de zero a cinco. No caso da representação estagiada, o modelo reúne as áreas de processo em níveis e está estruturada de forma que permita a evolução gradual da organização na melhoria contínua e a maturidade dos seus processos. A representação estagiada apresenta cinco níveis de maturidade, de um a cinco. Lembrete A representação contínua refere‑se ao nível de capacidade do processo que é a habilidade técnica de se fazer algo e alcançar o resultado esperado. 4.1.4 Representação contínua Os níveis de capacidade do modelo CMMI para a representação contínua estão divididos em seis estágios e representados na Figura 22. 64 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II 0 Incompleto 1 Realizado 2 Gerenciado 3 Definido 4 Quantitativo 5 Otimizado Figura 22 – Níveis de capacidade da representação contínua • Nível 0: o processo praticamente não existe e é totalmente reativo. • Nível 1: o processo é mais definido, mas ainda reativo. • Nível 2: o processo é gerenciado e repetível. • Nível 3: o processo ocorre em nível organizacional e é proativo. • Nível 4: o processo é medido e controlado. • Nível 5: o processo é constantemente melhorado. As áreas de processo que são abrangidas pela representação contínua estão distribuídas em quatro categorias, de acordo com a ilustração da Figura 21. A utilização da representação contínua é útil para organizações que possuem diferentes níveis de evolução nas diversas PAs do modelo CMMI. Dentre suas principais vantagens estão: • estrutura compatível com a ISO/IEC 15504 – Spice; 65 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • fornecimento de maior flexibilidade focando áreas de processo específicas de acordo com metas e objetivos da organização; • maior visibilidade das melhorias alcançadas em cada PA; • menor investimento inicial. 4.1.5 Representação por estágio A representação estagiada apresenta um roteiro sequencial para a implementação do modelo em que cada nível alcançado dá suporte para a implementação dos níveis subsequentes, garantindo uma evolução sólida e sustentável. Lembrete A representação estagiada refere‑se ao nível de maturidade do processo que é a capacitação atingida na execução das atividades definidas. De acordo com a ilustração da Figura 23, são cinco os níveis de maturidade para representar em que ponto a organização se encontra no processo de melhoria contínua. 1 Inicial 2 Gerenciado 3 Definido 4 Quantitativo 5 Otimizado Figura 23 – Níveis de maturidade da representação por estágio • Nível 1: o processo é imprevisível, pouco controlado e muito reativo. • Nível 2: o processo ocorre por projetos, e a qualidade é alcançada por repetição. 66 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II • Nível 3: o processo ocorre em nível organizacional e é proativo. • Nível 4: o processo é medido e controlado. • Nível 5: o processo é constantemente melhorado. As áreas de processo estão distribuídas nos cinco níveis de maturidade de forma que permita a melhoria gradativa do nível de qualidade do software nas empresas, conforme apresentado no Quadro 9. A utilização da representação estagiada é a mais usada e mais comum no mercado de software, pois deriva do modelo CMM original. Entre suas principais vantagens tem‑se: • Classificação facilmente identificada no mercado de aquisição de software. • Modelo sequencial e gradativo de melhoria. • Foco na melhoria da organização. Em uma avaliação, atribui um nível de maturidade em que a organização se encontra, permitindo, assim, comparar organizações de forma direta. Quadro 9 – Áreas de processo da representação por estágio Nível de maturidade Áreas de processo 5 – Otimizado • Análise de Causas e Resoluções • Inovação e Desenvolvimento Organizacional 4 – Quantitativo • Desempenho do Processo Organizacional • Gerência Quantitativa de Projetos 3 – Definido • Foco no Processo Organizacional • Definição do Processo Organizacional • Treinamento Organizacional • Gerência Integrada de Projetos • Gerência de Riscos • Integração de Equipes • Gerênciade Fornecedores Integrada • Desenvolvimento de Requisitos • Solução Técnica • Integração de Produtos • Verificação • Validação • Ambiente Organizacional para Integração • Análise de Decisões e Resoluções 67 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 2 – Gerenciado • Planejamento de Projetos • Monitoramento e Controle de Projetos • Gerência de Acordos com Fornecedores • Gerência de Requisitos • Gerência de Configuração • Garantia da Qualidade do Processo e do Produto • Medição e Análise Fonte: SEI (2006). O CMMI não diz qual a melhor representação a ser utilizada. A escolha é exclusiva da empresa que aplica o modelo, de acordo com o nível de qualidade em que a organização se encontra, a sua maturidade organizacional e a disponibilidade financeira que possui para investir. O Quadro 10 apresenta uma análise comparativa entre as duas representações. Quadro 10 – Áreas de processo da representação por estágio Contínua Por estágio Maior flexibilidade na melhoria dos processos A melhoria de processos já está preestabelecida Foco na melhoria dentro da área de processo Foco na melhoria organizacional Evoluções das áreas de processos podem ocorrer de forma diferente Resultados são gerais, por nível de maturidade Práticas genéricas nas áreas de processo em todos os níveis Práticas genéricas para as áreas de processo dos níveis 2 e 3 Fonte: SEI (2006). Como a representação por estágio é a mais utilizada e reconhecida no âmbito internacional, a seguir, são detalhados os níveis de maturidade do modelo CMMI da representação estagiada apresentada no Quadro 9. Lembrando ainda que CMMI não é uma certificação de qualidade, mas sim uma avaliação do nível de maturidade em que as empresas se encontram no momento, realizada por empresas autorizadas pelo SEI/CMU para executá‑la e com uma validade de três anos, período após o qual deve ser feita nova avaliação. 4.1.5.1 CMMI – Nível 1: Inicial O Nível 1 representa um processo de software denominado caótico. Nesse nível, o processo é caracterizado como imprevisível, reativo aos problemas que ocorrem e baseado em esforços individuais para o sucesso do projeto. Normalmente, não há planejamento do projeto, os cronogramas são irreais, não há controle dos requisitos do software, o foco está apenas na codificação e o cliente avalia o produto somente ao final do projeto. Como resultado desse cenário, a equipe não acredita que a modelagem, os processos, a documentação e os padrões sejam significativos para o sucesso do projeto, e a execução deste se dá 68 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II com esforços e prazos fora das expectativas do cliente, causando insatisfação do cliente e constante desmotivação da equipe. 4.1.5.2 CMMI – Nível 2: gerenciado No Nível 2 são implementadas as sete áreas de processos básicas que estabelecem um conjunto de atividades mínimas necessárias para a execução e o controle de um projeto de software. Essas atividades focam o processo de gerenciamento de projetos para permitir que estes tenham êxito com base na repetição de sucesso de projetos anteriores. Essas sete áreas são: • Gerência de Requisitos. • Planejamento de Projeto. • Monitoração e Controle de Projeto. • Garantia da Qualidade do Processo e do Produto. • Gerência de Acordo com Fornecedores. • Gerência de Configuração. • Medição e Análise. Ao implementar o Nível 2, os processos de gestão de requisitos e controle de escopo, prazos e custos são estabelecidos, bem como as atividades de garantia da qualidade e o início do processo de medição que vai permitir a análise para a melhoria do processo. Normalmente, o ciclo completo para implementação, treinamento e implantação desse nível dura de 6 a 18 meses, dependendo do nível inicial da organização. 4.1.5.3 CMMI – Nível 3: definido No nível de maturidade 3, uma organização atingiu todas as metas esperadas das áreas de processos definidas para o nível de maturidade 2. Os processos estão descritos em padrões, procedimentos, ferramentas e métodos de forma detalhada e são usados para estabelecer a consistência em toda a organização. Para o Nível 3, são quatorze áreas de processo, número bem superior ao do Nível 2, pois a meta é ter toda a organização envolvida na melhoria da qualidade, bem como garantir a manutenção do processo por meio do treinamento de novos funcionários, do fortalecimento da gestão de projetos, da preocupação com a fase de arquitetura do software, da análise de riscos do projeto e das atividades gerais deste e da inclusão das atividades de verificação, validação e testes que serão vistas no tópico 5 deste livro. 69 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Trata‑se do nível mais complexo e detalhado do modelo CMMI, que exige muito esforço da empresa na sua implementação e envolvimento de todas as áreas para se obter sucesso na sua avaliação. As áreas de processos que compõem o Nível 3 são: • Foco no Processo Organizacional. • Definição do Processo Organizacional. • Treinamento Organizacional. • Gerência Integrada de Projetos. • Gerência de Riscos. • Integração de Equipes. • Gerência de Fornecedores Integrada. • Desenvolvimento de Requisitos. • Solução Técnica. • Integração de Produtos. • Verificação. • Validação. • Ambiente Organizacional para Integração. • Análise de Decisões e Resoluções. Normalmente, o ciclo completo para implementação, treinamento e implantação desse nível dura de 18 a 36 meses, após a organização ter obtido o Nível 2 do modelo. 4.1.5.4 CMMI – Nível 4: quantitativo No nível de maturidade 4 a qualidade e o desempenho do processo são avaliados e gerenciados no que se refere a métricas quantitativas realizadas durante todo o ciclo de desenvolvimento. Para isso, cada área de processo deve possuir métricas de avaliação e metas definidas de acordo com as necessidades dos clientes, dos usuários finais, da organização e dos responsáveis pela implementação dos processos. Nesse nível, as métricas são coletadas e analisadas de forma quantitativa para avaliar o desempenho de processos. As variações identificadas têm suas causas analisadas e corrigidas 70 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II para evitar novas ocorrências futuras, e ações corretivas são tomadas para cada desvio da meta definida pelo processo. Para que a organização seja avaliada como de Nível 4, é necessário que tenha atingido com sucesso o Nível 3 de maturidade. Para a obtenção do Nível 4, o esforço é estimado em 24 meses, entre a definição do processo, a definição das medições que serão realizadas, a coleta da medições feitas, a avaliação das métricas e as ações corretivas para a geração de evidências suficientes para provar a realização das atividades. As duas áreas de processos envolvidas nesse nível são: • Desempenho do Processo Organizacional. • Gerência Quantitativa. 4.1.5.5 CMMI – Nível 5: otimizado No nível de maturidade 5 o foco está na melhoria contínua do desempenho de processos mediante melhorias tecnológicas incrementais e inovadoras. As causas comuns de variações de processos são tratadas e melhoram de forma mensurável os processos da organização. As melhorias são selecionadas com base em um entendimento quantitativo de sua contribuição esperada para que a organização atinja seus objetivos de aperfeiçoamento de processos contra seu custo e seu impacto na organização. O desempenho dos processos da organização é continuamente melhorado. Trata‑se de um processo contínuo que está sempre em evolução. A empresa aprende com os seus erros, documenta e melhora o processo para não tornar a repeti‑los. Ao mesmo tempo, pesquisa e procura por inovações que proporcionem cada vez mais qualidade ao processo e ao desenvolvimento organizacional. Basicamente, noNível 5, são duas áreas de processo: • Análise de Causas e Resoluções. • Inovação e Desenvolvimento Organizacional. O modelo CMMI é muito exigente, demorado e custoso para as organizações, mas seus benefícios são compensatórios a longo prazo, e esse é um diferencial reconhecido internacionalmente. Não é fácil de ser implementado e, principalmente, de ser mantido ao longo do tempo sem perder as características de suas áreas de processo. Exige forte patrocínio da alta direção para se ter o sucesso esperado e um treinamento forte e rigoroso para os novos funcionários no que tange a utilizar os padrões, as técnicas e as ferramentas estabelecidas pelos processos. Em função do seu alto custo para pequenas e médias empresas brasileiras, o governo criou o MPS. BR a fim de incentivar essas organizações a ter níveis de qualidade avaliados e reconhecidos, porém esse modelo tem apenas alcance nacional. Esse assunto é tratado no próximo capítulo. 71 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Exemplo de aplicação Para exemplificar a avaliação de uma área de processo para o CMMI, é necessário saber que o modelo utiliza o método Standard CMMI Appraisal Method for Process Improvement (Scampi) para avaliação, cujo objetivo é determinar o nível de aderência de um processo ao conjunto de práticas definidas pelo modelo. A avaliação do modelo CMMI é demorada e também consiste em duas etapas: o chamado Scampi B, que é uma avaliação preliminar, idêntica à avaliação final, com o objetivo de detectar falhas e adequá‑las para a avaliação final, chamada de Scampi A. Ambas as avaliações precisam de uma empresa certificada e com avaliadores certificados pelo SEI. O Scampi B difere do Scampi A em relação ao número de pessoas envolvidas (duas para o Scampi B e quatro a nove no Scampi A) e à menor exigência de evidências das práticas das áreas de processo. Para a avaliação de cada requisito de uma área de processo, utiliza a mesma classificação do modelo ISO/IEC 15504, ou seja, N (Não atendido), P (Parcialmente atendido), L (Largamente atendido) e F (Totalmente atendido). Para ser considerada em um nível de maturidade, a nota mínima de uma prática‑chave tem de ser L ou F, e, obrigatoriamente, a nota tem de ser F nas práticas‑chaves anteriores. Vamos considerar a avaliação de Scampi B para uma organização que deseja a avaliação do Nível 2 do CMMI que envolve as seguintes áreas de processo: • Gerência de Requisitos. • Planejamento de Projeto. • Monitoração e Controle de Projeto. • Garantia da Qualidade do Processo e do Produto. • Gerência de Acordo com Fornecedores. • Gerência de Configuração. • Medição e Análise. Quadro 11 – Avaliação de Scampi B para o nível 2 do CMMI Área de processo: Gerência de Requisitos Idt Prática‑chave PRJ1 PRJ2 PRJ3 PRJ4 Avaliação PG1 Requisitos são gerenciados e inconsistências com o plano do projeto e produtos de trabalho ‑ ‑ ‑ ‑ L 72 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II PE1 Desenvolver o entendimento e o significado dos requisitos ‑ ‑ ‑ ‑ L 1.1 Obter um entendimento dos requisitos E E E E ‑ 1.2 Obter compromisso sobre os requisitos E E E E ‑ 1.3 Gerenciar mudanças nos requisitos N E E E ‑ 1.4 Manter a rastreabilidade bidirecional dos requisitos N N E E ‑ 1.5 Identificar inconsistências entre o trabalho do projeto e os requisitos E E E E ‑ Para cada área de processo, o modelo CMMI estabelece práticas‑chaves genéricas (PG) e práticas específicas (PE). Cada PE possui subpráticas que detalham o que deve ser feito para atingir a PE. A descrição detalhada de todas as práticas‑chaves e subpráticas está disponível no site do SEI/CMU. A avaliação abrange as PEs e as subpráticas, e o resultado acumulado é transposto para a PG. Para cada PE, três valores são possíveis: I (inexistente), N (não evidenciado) e E (evidenciado). Para a execução da avaliação precisam ser selecionados os projetos que fazem parte desta e são propostos pela organização a ser avaliada. No exemplo utilizado, tem‑se quatro projetos (PRJ) para avaliação, e é exemplificada a avaliação obtida para a área de processo Gerência de Requisitos. No exemplo, a avaliação final da área de processo é L, ou seja, largamente utilizada, que é a classificação mínima para a avaliação ser dada como satisfatória. Esse processo é repetido para todas as demais áreas de processo, e, ao término, é elaborado o relatório final sobre as melhorias que devem ser aplicadas para que a avaliação do Scampi A seja um sucesso. 4.2 Melhoria de Processos do Software Brasileiro (MPS.BR) O MPS.BR foi criado em 2003 pela Associação para Promoção da Excelência do Software Brasileiro (Softex), subordinada ao Ministério da Ciência, Tecnologia e Inovação, com o objetivo de incentivar as pequenas e médias empresas brasileiras de produção de software a implantar um modelo de qualidade de melhoria de processo com custos mais acessíveis à realidade brasileira. Conforme a Figura 24, o modelo está alinhado aos padrões e normas internacionais, como CMMI, ISO/IEC 12207, ISO/IEC 15504 e ISO/IEC 25000, mas o seu reconhecimento como selo de qualidade de software está limitado ao território brasileiro, sendo, inclusive, requisito básico que as organizações possuam a avaliação MPS.BR para fornecer software para o governo federal e muitas empresas do setor privado, como equivalente ao modelo CMMI. 73 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II CMMI MPS.BR ISO 12207ISO 15504 ISO 25000 Figura 24 – Alinhamento MPS.BR com os demais modelos de qualidade O MPS.BR ajuda as organizações a compreenderem todos os componentes envolvidos no desenvolvimento e na aquisição do software, bem como a executarem projetos de forma mais eficiente. Saiba mais A visão geral do modelo MPS.BR e os detalhes de implementação podem ser consultados em: . 4.2.1 Estrutura do modelo MPS.BR O modelo está dividido em 4 componentes, 7 níveis de maturidade e 19 processos distribuídos nos níveis definidos. Os componentes são modelos de referência para desenvolvimento, aquisição e avaliação do processo de software, os níveis de maturidade são a classificação que as organizações recebem de acordo com a avaliação e os processos são as atividades que as organizações precisam praticar para atingir os níveis de maturidade do modelo. Os componentes dos modelos de referência são descritos a seguir. • Modelo de referência para software Contém as definições dos níveis de maturidade, processos e atributos do processo para aquisição e implementação, em nível de boas práticas e sugestões de implementação. 74 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II • Modelo de referência para serviços Contém as definições dos níveis de maturidade, processos e atributos do processo para a prestação de serviços de informática. Está em conformidade com os requisitos da norma ISO/IEC 15504‑2. • Método de avaliação Contém os requisitos para os avaliadores‑líderes, os avaliadores‑adjuntos e as Instituições Avaliadoras (IAs). Está em conformidade com os requisitos da norma ISO/IEC 15504‑2. • Modelo de negócio Descreve as regras de negócio para implementação dos modelos de referência de software e de serviços pelas instituições implementadoras e para o método de avaliação pelas instituições avaliadoras (IA). 4.2.2 Níveis de maturidade do modelo MPS.BR Os níveis de maturidade estabelecem um indicador de evolução da qualidade, representando estágios de melhoria da implementação de processos na organização. O nível de maturidade em que se encontra uma organização permite definir quão maduro está seu modelo de qualidade. São sete níveis de maturidade sequenciais e dependentes entre si, representados na Figura 25: • Nível A: otimizado. • Nível B: gerenciado quantitativamente.• Nível C: definido. • Nível D: largamente definido. • Nível E: parcialmente definido. • Nível F: gerenciado. • Nível G: parcialmente gerenciado. 75 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II G Parcialmente gerenciado F Gerenciado E Parcialmente definido D Largamente definido C Definido A Otimizado B Gerenciado quantitativamente Figura 25 – Níveis de maturidade do MPS.BR 4.2.3 Processos do modelo Para cada nível de maturidade são definidos processos que indicam as boas práticas que precisam ser implementadas pela organização a fim de que atinja as metas estabelecidas para cada estágio de evolução. Esses processos estão ilustrados no Quadro 12. Quadro 12 – Processos do MPS.BR por nível de maturidade Nível de maturidade Processos A – Otimizado • Não há processos específicos B – Gerenciado quantitativamente • Não há processos específicos C – Definido • Gerência de decisões • Gerência de riscos • Desenvolvimento para reutilização 76 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II D – Largamente definido • Desenvolvimento de requisitos • Projeto e construção do produto • Integração do produto • Verificação • Validação E – Parcialmente definido • Definição do processo organizacional • Avaliação e melhoria do processo organizacional • Gerência para reutilização • Gerência de recursos humanos F – Gerenciado • Garantia da qualidade • Gerência da configuração • Medição • Aquisição • Gerência de portfólio G – Parcialmente gerenciado • Gerência de projetos • Gerência de requisitos Fonte: MPS.BR (2006). Observa‑se no Quadro 12 que não são apresentados processos para os níveis A e B, em virtude de ambos serem a evolução para uma gestão quantitativa e de melhoria contínua dos processos dos demais níveis. No nível B, o foco está em criar métricas e indicadores para o processo de gerência de projetos que permitam a correta avaliação das melhorias obtidas. No nível A, a evolução é medida a partir da análise de defeitos, problemas, causas comuns de variação do desempenho da implementação do processo. O modelo permite também a exclusão de processos em determinadas situações. O processo de aquisição e gerência de portfólio de projetos pode ser excluído, desde que não seja executado pela organização. O processo de desenvolvimento para reutilização também poderá ser removido se o objetivo da empresa não for relacionado à execução de projetos. 4.2.4 Atributos do processo Os atributos dos processos descrevem o que deve ser realizado em cada nível e os resultados esperados para evidenciar que as metas foram atingidas. São utilizados para a implementação e para a avaliação do processo. O modelo MPS.BR 2012 descreve esses atributos da seguinte forma: • Atributo 1.1 – O processo é executado Esse atributo evidencia quanto o processo é seguido. 77 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • Atributo 2.1 – O processo é gerenciado Esse atributo evidencia quanto a execução do processo é gerenciada. Algumas perguntas que permitem a avaliação desse atributo: — A execução do processo é planejada, monitorada, e ajustes são realizados? — As medidas são planejadas e coletadas para monitoração da execução do processo, e ajustes são realizados? — As informações e os recursos necessários para a execução do processo são identificados e disponibilizados? — As responsabilidades e a autoridade para executar o processo são definidas, atribuídas e comunicadas? — A comunicação entre as partes interessadas no processo é planejada e executada de forma que garanta o seu envolvimento? • Atributo 2.2 – Os produtos de trabalho do processo são gerenciados Esse atributo evidencia quanto os produtos de trabalho produzidos pelo processo são gerenciados apropriadamente. Algumas perguntas que permitem a avaliação desse atributo: — Os requisitos dos produtos de trabalho do processo são identificados? — Requisitos para documentação e controle dos produtos de trabalho são estabelecidos? — Os produtos de trabalho são avaliados objetivamente com relação aos padrões, procedimentos e requisitos aplicáveis, e são tratadas as não conformidades? • Atributo 3.1 – O processo é definido Esse atributo evidencia quanto um processo‑padrão é mantido para apoiar a implementação do processo definido. Algumas perguntas que permitem a avaliação desse atributo: — Um processo‑padrão é descrito, incluindo diretrizes para sua adaptação? — Os papéis e competências requeridos para executar o processo são identificados como parte do processo‑padrão? 78 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II — A infraestrutura e o ambiente de trabalho requerido para executar o processo são identificados como parte do processo‑padrão? • Atributo 3.2 – O processo está implementado Quanto o processo‑padrão é efetivamente implementado como um processo definido para atingir seus resultados. Algumas perguntas que permitem a avaliação desse atributo: — Um processo definido é implementado com base nas diretrizes para seleção e/ou adaptação do processo‑padrão? — A infraestrutura e o ambiente de trabalho requerido para executar o processo definido são disponibilizados, gerenciados e mantidos? — Dados apropriados são coletados e analisados? • Atributo 4.1 – O processo é medido Quanto os resultados de medição são usados para assegurar que a execução do processo atinja os seus objetivos. Algumas perguntas que permitem a avaliação desse atributo: — Os objetivos quantitativos organizacionais de qualidade e de desempenho dos processos são definidos para apoiar os objetivos de negócio? — Os processos que serão objeto de análise de desempenho são selecionados a partir do conjunto de processos‑padrão da organização e das necessidades de informação dos usuários dos processos? — Medidas, bem como a frequência de realização de suas medições, são identificadas e definidas de acordo com os objetivos de medição do processo e os objetivos quantitativos de qualidade e de desempenho do processo? — Os resultados das medições são coletados e analisados, utilizando técnicas estatísticas e outras técnicas quantitativas apropriadas, e são comunicados para monitorar o alcance dos objetivos quantitativos de qualidade e de desempenho do processo/subprocesso? — Os resultados de medição são utilizados para caracterizar o desempenho do processo? 79 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • Atributo 4.2 – O processo é controlado Quanto o processo é controlado estatisticamente para permanecer estável, capaz e previsível, dentro de limites estabelecidos. Algumas perguntas que permitem a avaliação desse atributo: — Limites de controle de variação são estabelecidos para o desempenho normal do processo? — Dados de medição são analisados com relação a causas especiais de variação? — Ações corretivas e preventivas são realizadas para tratar causas especiais, ou de outros tipos, de variação? • Atributo 5.1 – O processo é objeto de melhorias e inovações Esse atributo evidencia quanto as mudanças no processo são identificadas a partir da análise de defeitos, problemas, causas comuns de variação do desempenho e da investigação de enfoques inovadores para a definição e a implementação do processo. Algumas perguntas que permitem a avaliação desse atributo: — Os objetivos de melhoria do processo são definidos com base no entendimento do desempenho do processo, de forma que verifique que os objetivos de negócio relevantes são atingíveis? — Dados que influenciam o desempenho do processo são identificados, classificados e selecionados para análise de causas? — Dados selecionados são analisados para identificar causas‑raiz e propor soluções aceitáveis para evitar ocorrências futuras dedo modelo CMMI ..................................................................................................... 63 4.1.4 Representação contínua ...................................................................................................................... 63 4.1.5 Representação por estágio ................................................................................................................. 65 4.2 Melhoria de Processos do Software Brasileiro (MPS.BR) ..................................................... 72 4.2.1 Estrutura do modelo MPS.BR ............................................................................................................ 73 4.2.2 Níveis de maturidade do modelo MPS.BR .................................................................................... 74 4.2.3 Processos do modelo ............................................................................................................................. 75 4.2.4 Atributos do processo ........................................................................................................................... 76 4.2.5 Comparativo do nível de maturidade entre o MPS.BR e o CMMI ...................................... 80 Unidade III 5 VERIFICAÇÃO E VALIDAÇÃO DE SOFTWARE ......................................................................................... 89 5.1 Definições de verificação e validação .......................................................................................... 89 5.1.1 Verificação ................................................................................................................................................. 90 5.1.2 Validação .................................................................................................................................................... 91 5.1.3 Técnicas de V&V...................................................................................................................................... 91 5.2 Revisões técnicas .................................................................................................................................. 92 5.2.1 O processo de revisão ............................................................................................................................ 93 5.2.2 Diretrizes básicas de uma RTF ............................................................................................................ 94 5.3 Passeio (walkthrough) ........................................................................................................................ 94 5.3.1 O processo de walkthrough ................................................................................................................ 95 5.3.2 Diretrizes básicas de um walkthrough ......................................................................................... 96 5.3.3 Revisões progressivas por pares ........................................................................................................ 96 5.4 Técnica de inspeção ............................................................................................................................. 96 5.4.1 Processo de inspeção ............................................................................................................................ 97 5.4.2 Papéis e responsabilidades .................................................................................................................. 99 5.4.3 Checklist de uma inspeção ...............................................................................................................100 5.5 Sala limpa (clean room) ...................................................................................................................101 5.5.1 Processo sala limpa ..............................................................................................................................101 5.5.2 Testes estatísticos .................................................................................................................................102 5.5.3 Certificação de qualidade ..................................................................................................................103 6 TESTES DE SOFTWARE..................................................................................................................................103 6.1 Fundamentos sobre testes de software.....................................................................................104 6.1.1 Conceitos de testes de software .....................................................................................................104 6.1.2 Conceituação de defeito, erro e falha ..........................................................................................105 6.1.3 Por que devemos testar um software? ........................................................................................107 6.2 Ciclo de vida de testes ......................................................................................................................107 6.2.1 O Modelo V ..............................................................................................................................................108 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 6.2.2 Testes na fase de manutenção do sistema ..................................................................................111 6.3 Tipos de testes .....................................................................................................................................112 6.3.1 Amplitude dos tipos de testes .........................................................................................................112 6.4 Técnicas de testes ...............................................................................................................................114 6.4.1 Técnica de testes funcionais ou caixa‑preta ............................................................................. 115 6.4.2 Técnicas de teste estrutural ou caixa‑branca ........................................................................... 115 6.4.3 Técnica de teste funcional ou caixa‑preta .................................................................................121 6.5 Testes em processos ágeis ...............................................................................................................128 6.5.1 Testes ágeis ............................................................................................................................................. 130 6.5.2 Roteiro de testes ágeis .......................................................................................................................131 6.5.3 Processo de testes ágeis .....................................................................................................................131 6.5.4 Conceitos sobre Test Driven Development (TDD) ................................................................... 134 6.5.5 Quando terminar os testes? ............................................................................................................ 135 Unidade IV 7 MANUTENÇÃO DE SOFTWARE .................................................................................................................141 7.1 Definição de manutenção de software .....................................................................................141 7.1.1 Conceituação sobre manutenção de software ........................................................................ 142 7.1.2 Tipos de manutenção ......................................................................................................................... 143 7.2 Técnicas e padrões de manutenção de software ..................................................................145 7.2.1 As atividades de manutenção.........................................................................................................resultados similares, ou incorporar melhores práticas ao processo? — Oportunidades de melhoria derivadas de novas tecnologias e conceitos de processo são identificadas, avaliadas e selecionadas com base no impacto no alcance dos objetivos de negócio? • Atributo 5.2 – O processo é otimizado continuamente Esse atributo evidencia quanto as mudanças na definição, na gerência e no desempenho do processo têm impacto efetivo para o alcance dos objetivos relevantes de melhoria do processo. Algumas perguntas que permitem a avaliação desse atributo: 80 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II — A implementação de todas as mudanças acordadas é gerenciada para assegurar que qualquer alteração no desempenho do processo seja entendida e que sejam realizadas as ações pertinentes? — As ações implementadas para resolução de problemas e melhoria no processo são acompanhadas, com uso de técnicas estatísticas e outras técnicas quantitativas, para verificar se as mudanças no processo corrigiram o problema e melhoraram o seu desempenho? — Dados da análise de causas e de resolução são armazenados para uso em situações similares? A implementação desses atributos obedece a uma relação preestabelecida com os níveis de maturidade do modelo, conforme o Quadro 13. Quadro 13 – Processos do MPS.BR por nível de maturidade Nível de maturidade Atributos do processo G 1.1 e 2.1 F 1.1, 2.1 e 2.2 E 1.1, 2.1, 2.2, 3.1 e 3.2 D 1.1, 2.1, 2.2, 3.1 e 3.2 C 1.1, 2.1, 2.2, 3.1 e 3.2 B 1.1, 2.1, 2.2, 3.1, 3.2, 4.1 e 4.2 A 1.1, 2.1, 2.2, 3.1, 3.2, 4.1, 4.2, 5.1 e 5.2 Fonte: MPS.BR (2006). Os atributos de processo 4.1, 4.2, 5.1 e 5.2 devem ser implementados somente para os processos críticos da organização, identificados e selecionados antes do processo de avaliação, quando são selecionados para análise de desempenho, e para cada um deles são criadas as métricas e os indicadores que permitem a melhoria contínua dos atributos de processo. 4.2.5 Comparativo do nível de maturidade entre o MPS.BR e o CMMI Como o modelo MPS.BR é baseado no modelo CMMI, existem muitas semelhanças entre ambos. A diferença mais relevante está no número de níveis de maturidade – que no CMMI são cinco, e no MPS.BR são 7 –, porém sem equivalência ao Nível 1 inicial do CMMI. Essa relação entre os níveis está representada na Figura 26. 81 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II CMMI Nível 1 CMMI Nível 4 CMMI Nível 5 CMMI Nível 2 CMMI Nível 3 • Não há relação no MPS.BR • MPS.BR nível B • MPS.BR nível A • MPS.BR nível G • MPS.BR nível F • MPS.BR nível E • MPS.BR nível D • MPS.BR nível C Figura 26 – Comparativo de níveis de maturidade entre MPS.BR e CMMI No comparativo entre os dois modelos, pode‑se destacar que o MPS.BR não possui as áreas de processo Análise de Causas e Resolução, do Nível 5 do CMMI, e Desempenho do Processo Organizacional, do Nível 4 do CMMI. No MPS.BR, esses dois processos são atendidos por meio dos atributos de processo de números 4.1, 4.2, 5.1 e 5.2. Nesse modelo, existem duas áreas que não são atendidas pelo modelo CMMI: Gestão de Portfólio e Desenvolvimento para Reutilização. Além disso, é denominado de forma diferente o processo do CMMI de Treinamento, chamado de Gestão de Recursos Humanos no MPS.BR. O processo de Gestão de Projetos do CMMI é agrupado em uma única área de processo no MPS.BR, e a área de Solução Técnica é denominada de Projeto e Construção no MPS.BR. Em todas essas áreas, não há diferenças relevantes na implementação, e todas se mantêm no mesmo nível de maturidade. Exemplo de aplicação Para realizar a avaliação do modelo MPS.BR, é utilizada a mesma classificação do modelo ISO/IEC 15504, ou seja, N (não atendido), P (parcialmente atendido), L (largamente atendido) e F (totalmente atendido). A nota mínima tem de ser L ou F. Também é necessário que a avaliação seja realizada por uma empresa certificada e com avaliadores certificados pela Softex. No exemplo de aplicação é considerado que uma organização deseja ser avaliada no nível G do MPS.BR. O nível G é dito parcialmente gerenciado e é composto pelos processos de gerência de projetos e gerência 82 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II de requisitos. Neste nível, a implementação dos processos deve satisfazer os atributos de processo 1.1 e 2.1, como visto no Quadro 13. O processo de gerência de projetos envolve atividades e recursos necessários para planejar e controlar o projeto, permitindo realizar ações para corrigir os desvios encontrados. O processo de gerência de requisitos envolve atividades para identificar, controlar e aprovar os requisitos dos produtos do projeto. Uma vez definida a equipe de avaliação e estabelecido o nível de maturidade que a organização deseja atingir, devem ser selecionados os projetos que vão participar da avaliação. Para cada processo existe um conjunto de práticas que são os resultados esperados para cada uma delas. Como resultado da avaliação do processo de gerência de projeto no exemplo, temos: Quadro 14 Processo: Gerência de Projetos L Idt Prática‑chave PRJ1 PRJ2 PRJ3 PRJ4 Avaliação 1 O escopo do trabalho para o projeto é definido E E E E F 2 As tarefas e os produtos de trabalho do projeto são dimensionados utilizando métodos apropriados E E E E F 3 O modelo e as fases do ciclo de vida do projeto são definidos E E E E F 4 O esforço e o custo para a execução das tarefas são estimados com base em dados históricos E E E E F 5 O orçamento e o cronograma do projeto, incluindo a definição de marcos e pontos de controle, são estabelecidos e mantidos N E E E L 6 Os riscos do projeto são identificados e o seu impacto, a sua probabilidade de ocorrência e a sua prioridade de tratamento são determinados e documentados N N E E L 7 Os recursos humanos para o projeto são planejados considerando o perfil e o conhecimento E E E E F 8 Os recursos e o ambiente de trabalho necessário para executar o projeto são planejados E E E E F 83 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 9 É estabelecido um processo de gerência da configuração E E E E F 10 A viabilidade de atingir as metas do projeto é explicitamente avaliada considerando as restrições E E E E F 11 O plano do projeto é revisado com todos os envolvidos e o compromisso é obtido E E E E F 12 O escopo, as tarefas, as estimativas, o orçamento e o cronograma do projeto são atingidos N N E E L 13 Os recursos materiais e humanos, bem como os dados relevantes do projeto, são monitorados E E E E F 14 Os riscos são monitorados em relação ao planejado N N E E L 15 O envolvimento das partes interessadas no projeto é planejado, monitorado e mantido N N E E L 16 Revisões são realizadas em marcos do projeto e conforme estabelecido no planejamento E E E E F 17 Registros de problemas identificados e o resultado da análise são tratados com as partes envolvidas N N E E L 18 Ações para corrigir desvios em relação ao planejado são implementadas e acompanhadas N N E E L O resultado da avaliação do processo de gerência de requisitos é exposto a seguir. Quadro 15 – Resultado da avaliação Processo: Gerência de Requisitos F Idt Prática‑chave PRJ1 PRJ2 PRJ3 PRJ4 Avaliação 1 O entendimento dos requisitos é obtido junto aos fornecedores de requisitos E E E E F 2 Os requisitos são avaliados com base em critérios objetivos, e um comprometimento da equipe técnica com esses requisitos é obtido E E E E F 84 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II 3 A rastreabilidade bidirecional entre os requisitos e os produtos de trabalho é estabelecida e mantida E E E E F 4 Revisões em planose produtos de trabalho do projeto são realizadas visando identificar e corrigir inconsistências em relação aos requisitos E E E E F 5 Mudanças nos requisitos são gerenciadas ao longo do projeto E E E E F No exemplo, a avaliação final da área de Processo de Gestão de Projetos é L e a de Gestão de Requisitos é F, ou seja, largamente utilizado e totalmente utilizado, respectivamente, o que estabelece a classificação de avaliação satisfatória para o nível G. Porém, para mudar para o nível F, a organização tem de estar com classificação F em todas as áreas do nível anterior, portanto precisa melhorar a área de gestão de projetos. Resumo Nesta unidade foram apresentados os principais modelos da qualidade em uso no mercado para a implementação da melhoria de processos nas organizações. Essas normas têm como objetivo minimizar os problemas de qualidade das empresas quando da produção de um software, buscando fortalecer a atuação de todos os envolvidos na prevenção de problemas no software e satisfazer as necessidades dos usuários. Abordamos que, uma vez definidas as principais características de qualidade de um produto de software, é necessário que uma organização esteja com os processos de desenvolvimento bem‑definidos, chamados de modelos de qualidade, cuja preocupação está em estabelecer, medir e avaliar a capacidade de realização de um projeto de software pelas organizações com qualidade, mediante processos que medem o grau de maturidade da empresa em desenvolver sistemas. Vimos também que, no final dos anos 1990, a ISO/IEC 15504 – Spice – apresentou diversos conceitos sobre a melhoria do processo de software, definindo um conjunto de boas práticas de Engenharia de Software, gestão de projetos, qualidade, apoio e suporte que uma empresa deve aplicar para atingir a excelência na produção de uma aplicação. 85 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II A seguir, aprendemos que, de acordo com o estágio em que essas práticas são aplicadas, o modelo atribui um grau de capacidade à organização, que pode, por meio desses indicadores, traçar um plano de evolução de melhoria da qualidade. Esses estágios são classificados do Nível 0 até o Nível 5 de capacidade da empresa no processo de melhoria de software. No Nível 0, o processo é praticamente inexistente, ou geralmente falha; no Nível 1, os objetivos são atingidos, mas sem controle apropriado; no Nível 2, os objetivos são atingidos, mas com controle adequado; no Nível 3, o processo se encontra estabelecido; no Nível 4, o processo é totalmente controlado pela utilização de métricas; e o Nível 5 é a melhoria contínua do processo de forma disciplinada. Vimos que cada nível de maturidade possui características básicas para avaliação de uma organização, que, por sua vez, tem um conjunto de atributos específicos que permitem medir a evolução da capacidade de cada atributo, com o objetivo de determinar se as condições mínimas para atingir o nível desejado foram alcançadas. Para que o processo possa fazer a avaliação de cada nível com base nessas características, são descritos atributos que permitem avaliá‑las de forma quantitativa. Logo depois, abordamos o modelo CMMI, publicado no início dos anos 2000 pelo SEI/CMU, que é o modelo de qualidade mais reconhecido e utilizado no mercado de Tecnologia da Informação em âmbito internacional. Também apresenta avaliação em níveis de capacidade na representação continuada e alinhada à norma ISO/IEC 15504. Vimos que o CMMI é estruturado em níveis de um a cinco que representam o grau de maturidade da empresa no processo de software. Essa divisão o difere do modelo Spice, que tem níveis de zero a cinco. Cada nível de maturidade possui um conjunto de boas práticas, denominadas Áreas de Processo (APs), que precisam ser executadas durante o processo de desenvolvimento de software. Os níveis de maturidade podem ser representados de duas formas: contínua ou estagiada. A representação contínua permite que a organização evolua individualmente nas práticas preconizadas no processo de desenvolvimento, por exemplo, em gestão de requisitos, planejamento de projetos, dentre outras. A representação por estágio é mais utilizada e reconhecida no mercado de Tecnologia da Informação e exige a evolução conjunta das práticas do modelo. Abordamos ainda que o CMMI é um modelo de implementação demorada e de alto custo financeiro, porém essencial para as organizações que desejam fornecer serviços de desenvolvimento de software para o exterior. 86 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II Vimos o modelo de qualidade MPS.BR, elaborado com base nas normas ISO/IEC 12207, ISO/IEC 15504, ISO/IEC 25000 e no modelo CMMI, publicado e utilizado no Brasil para atender às necessidades de um modelo mais acessível, em termos financeiros, às pequenas e médias empresas que produzem software no Brasil. Da mesma forma que os modelos anteriores, apresenta a evolução da maturidade da organização dividida em níveis, o que permite definir quão maduro está o modelo de qualidade na organização. São sete os níveis de maturidade, do nível A até o nível G, que devem ser implantados e avaliados de maneira sequencial, pois são dependentes entre si. O maior número de níveis permite às organizações evoluírem de forma mais lenta e consistente em maturidade do modelo, reduzindo seus custos de implantação do processo. Abordamos ainda que o menor nível do MPS.BR é o G, dito parcialmente gerenciado, cujo foco está na gestão de requisitos e na gestão de projetos. No Nível F, dito gerenciado, as demais práticas de configuração, qualidade e medição são incluídas. No Nível E, parcialmente definido, começa a expansão da maturidade para a organização, e não somente no projeto. No Nível D, o processo é considerado largamente definido. No Nível C, é considerado definido. No Nível B, encontra‑se estabelecido um processo de medição para evolução da qualidade. O Nível A refere‑se à melhoria contínua do processo. Estabelecendo uma relação com o modelo do CMMI, o MPS.BR tem o Nível A equivalente ao Nível 5, o Nível B equivale ao Nível 4, os Níveis C, D e E formam o Nível 3 do CMMI e os Níveis F e G equivalem ao Nível 2 do modelo internacional. Finalmente, aprendemos que o MPS.BR é um modelo de implementação mais rápida e de custos mais baixos, porém tem seu reconhecimento limitado ao mercado brasileiro, em que é exigido para a prestação de serviços de desenvolvimento de software para o setor público e para algumas empresas do setor privado. Exercícios Questão 1. Os modelos de qualidade voltados para a avaliação do processo de desenvolvimento auxiliam as empresas a construírem uma estrutura adequada e robusta para a produção do software, orientando como essas empresas podem evoluir e atingir graus de maturidade cada vez mais elevados. Um dos modelos citados a seguir se apresenta como o maior influenciador em gestão de processos de software. Qual seria esse modelo? A) Modelo CMMI. B) Modelo MPS‑Br. 87 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II C) Modelo ISO/IEC 15504‑2. D) Modelo ISO/IEC 15504‑1. E) Modelo ISO 9000. Resposta correta: alternativa A. Análise das alternativas A) Alternativa correta. Justificativa: o modelo CMMI é um modelo maduro de desenvolvimento de software, serve como referência para novos padrões e é adotado em todo o mundo. A utilização do CMMI traz um processo de desenvolvimento padronizado com alta qualidade, permitindo a utilização de indicadores de aumento de produtividade e satisfação do cliente. B) Alternativa incorreta. Justificativa: o modelo é restrito ao cenário brasileiro. C) Alternativa incorreta. Justificativa: não é um modelo, e sim uma parte normativa que corresponde à norma 15504. Nessa parte normativa descreve‑se o processo para arealização da capacidade de organização. D) Alternativa incorreta. Justificativa: não é um modelo, e sim uma parte informativa que corresponde à norma 15504. Nessa parte informativa descreve‑se uma série de conceitos que servem como guia na descrição dos procedimentos da norma. E) Alternativa incorreta. Justificativa: ISO 9000 não é um modelo, e sim um conjunto de normas de qualidade. Questão 2. Os modelos de qualidade voltados para a avaliação do processo de desenvolvimento auxiliam as empresas a construírem uma estrutura adequada e robusta para a produção do software, orientando como essas empresas podem evoluir e atingir graus de maturidade cada vez mais elevados. A norma MPS.BR para melhoria de processos de software brasileiro ajuda as organizações a compreenderem todos os componentes envolvidos no desenvolvimento e aquisição do software, bem como a executarem projetos de forma mais eficiente. Considere as afirmativas a seguir acerca dos quatro componentes nos quais está dividida a estrutura do modelo MPS.BR. 88 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade II I – Contém as definições dos níveis de maturidade, processos e atributos do processo para aquisição e implementação, em nível de boas práticas e sugestões de implementação. II – Contém as definições dos níveis de maturidade, processos e atributos do processo para a prestação de serviços de informática. Está em conformidade com os requisitos da norma ISO/IEC 15504‑ 2. III – Descreve as regras de negócio para implementação dos modelos de referência de software e de serviços pelas Instituições Implementadoras e para o método de avaliação pelas Instituições Avaliadoras (IAs). IV – Estabelecem um indicador de evolução da qualidade, representando estágios de melhoria da implementação de processos na organização. O nível de maturidade em que se encontra uma organização permite definir o quão maduro está seu modelo de qualidade. V – Contém os requisitos para os avaliadores líderes, avaliadores adjuntos e Instituições Avaliadoras (IAs). Está em conformidade com os requisitos da norma ISO/IEC 15504‑2. É correto apenas o que se destaca em: A) I, II, III, V. B) I, II, III. C) II, III, IV. D) IV. E) I, II. Resposta desta questão na plataforma. 89 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Unidade III 5 VERIFICAÇÃO E VALIDAÇÃO DE SOFTWARE 5.1 Definições de verificação e validação As técnicas de verificação e validação são essenciais para o processo de qualidade no desenvolvimento de software e são chamadas popularmente de técnicas de V&V. Existem diversas técnicas que serão apresentadas nos próximos capítulos descrevendo as várias formas de garantia e controle de qualidade dos produtos de construção da aplicação. Porém, antes de detalhar essas técnicas, são descritas algumas definições básicas de qualidade. Como já visto, a garantia da qualidade é executada durante a construção do produto, e o controle da qualidade, após o produto ter sido construído. As técnicas de V&V abrangem ambos os cenários, por meio de: • aplicação de ferramentas que podem automatizar a revisão de determinados produtos; por exemplo, a simples revisão ortográfica do editor de texto é uma ferramenta automatizada de garantia da qualidade; • utilização do processo de revisão de artefatos, como revisão por pares; • adoção de normas e padrões, como um padrão de melhores práticas de codificação; • controle sistemático e formal das mudanças de requisitos que podem ocorrer durante o ciclo de construção; por exemplo, a inclusão de uma nova funcionalidade no software deve ser avaliada e aprovada pelo cliente antes da sua incorporação ao projeto; • manutenção de registros de todas as alterações realizadas nos artefatos, identificados, no mínimo, com o nome, a data da alteração e o motivo da alteração; • o mais importante, que é o processo de medição para avaliar se a qualidade está se mantendo, melhorando ou piorando. Uma das principais finalidades da V&V é garantir que o produto seja construído corretamente, ou seja, atuar de forma preventiva para que os esforços de correção de problemas causem o menor impacto possível. Há diversas questões relacionadas à garantia da qualidade de que todo esse processo preventivo é muito caro, e não compensaria financeiramente a uma empresa de desenvolvimento de software aplicar 90 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III tudo o que deveria. No entanto, essa equação não é difícil de resolver. Basta analisarmos se os custos para realizar as ações de garantia da qualidade (GQ1), somados aos custos para corrigir problemas não identificados pelo processo de garantia da qualidade (GQ2), são menores que os custos para corrigir os problemas em um cenário sem nenhuma ação de qualidade (NGQ). GQ1 + GQ2e técnicas dinâmicas. As técnicas estáticas são aquelas realizadas, de forma manual ou automática, sobre os artefatos de documentação e modelagem do sistema e não necessitam da execução do software. Por exemplo: • avaliação de diagramas de casos de uso; • avaliação de diagramas de classes; • avaliação do modelo de dados; • inspeções de código‑fonte. 92 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III As técnicas dinâmicas são aquelas realizadas, de forma manual ou automática, sobre o software construído e que necessitam de sua execução, por exemplo: • execução de simulação; • realização de testes. Nos próximos tópicos são detalhadas as principais técnicas de verificação e de validação. Requisitos do usuário Especificação Documento de projeto preliminar Documento de projeto detalhado Código Análise ... Projeto preliminar Projeto detalhado Codificação Figura 28 – Atividades de validação da qualidade 5.2 Revisões técnicas Segundo o SEI‑CMMI (2003), o processo de revisão é uma avaliação crítica de todos os artefatos produzidos durante o desenvolvimento de um software, não apenas sobre o código‑fonte, em pontos predefinidos do ciclo de vida com o objetivo de encontrar e corrigir eventuais erros inseridos durante o processo. O fato de encontrar esses erros mais cedo proporciona uma redução de custos no processo de desenvolvimento. Pressman (2006, p. 585) destaca uma série de benefícios à qualidade do software que podem ser alcançados com a utilização do processo de revisão: • verificação se o produto de trabalho está em conformidade com os padrões, as especificações e os requisitos definidos; • identificação de melhorias necessárias em um produto de trabalho; • documentação e geração de histórico de erros; • consenso entre cliente e equipe sobre os produtos de trabalho; 93 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • aumento do conhecimento da equipe; • “via” gerencial para, formalmente, completar uma tarefa. As revisões técnicas são atividades de garantia da qualidade realizadas durante o processo de desenvolvimento e são uma forma de envolver outros membros da equipe e/ou externos a esta, com o objetivo de chegar ao consenso de que o produto de software está de acordo com as expectativas. A partir da revisão, podem ser identificados desvios em relação ao padrão definido e realizadas correções e melhorias no produto. O objetivo principal da revisão não é encontrar erros, mas sim permitir o alinhamento de conhecimento entre os envolvidos no processo e o atendimento às expectativas do cliente. Uma revisão técnica pode ter características informais ou formais, dependendo das necessidades e/ou dos objetivos que se deseja atingir. São apresentadas neste tópico as características de uma Revisão Técnica Formal (RTF). 5.2.1 O processo de revisão O processo de RTF, ilustrado na Figura 29, deve ser estruturado, conduzido em uma reunião e será tão bem‑sucedido quanto for planejado e controlado. Deve ser realizado sobre artefatos que tratem de assunto único ou correlato para permitir melhor avaliação e aumentar as probabilidades de sucesso. Revisão Preparação • Definir equipe • Definir artefato • Revisar artefato por partes • Artefato revisado • Registro histórico Conclusão Figura 29 – O processo de revisão técnica Para a obtenção de melhores resultados durante uma sessão de RTF, os seguintes procedimentos devem ser observados, mas não se limitando a estes: • a equipe de revisão deve ter de três a cinco pessoas internas e externas ao projeto; • a equipe deve ser convidada e informada sobre o objetivo da revisão; • o artefato a ser revisado deve ser enviado com antecedência para que todos leiam previamente; • ter um checklist (lista de verificação) preparado; 94 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III • os papéis devem estar claramente definidos: moderador, autor e revisores; • iniciar pela leitura do documento pelo autor, de acordo com a estrutura do documento; • a cada parte do documento, a equipe de revisores faz os comentários; • o líder faz a mediação em eventuais conflitos e discordâncias; • todos os comentários devem ser registrados para histórico. A reunião deve ter, no máximo, a duração de 2 horas. 5.2.2 Diretrizes básicas de uma RTF Pressman (2006, p. 586) apresenta ainda um conjunto de diretrizes mínimas a serem seguidas durante uma RTF: • fixe e mantenha uma agenda com os participantes; • revise o produto, não o autor do artefato; • faça anotações por escrito; • enuncie os problemas, mas não tente resolver cada um deles; • limite o debate; • realize um treinamento sobre revisões para todos os revisores; • reveja suas antigas revisões. As revisões técnicas formais são procedimentos relativamente simples que produzem resultados significativos na garantia da qualidade de um produto de software. Planeje e utilize sempre a técnica de RTF. 5.3 Passeio (walkthrough) Os walkthroughs são revisões técnicas informais de um artefato de software visando à garantia da qualidade. Normalmente são chamados de revisão por pares, mas podem ter até três participantes: autor, revisor e moderador. O revisor pode ser um técnico, um cliente ou uma pessoa externa ao projeto que domine o assunto em revisão. O moderador, preferencialmente, não deve ser do mesmo nível hierárquico do autor e do revisor. 95 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Os passeios são bem mais simples que as RTFs, e seu alto grau de informalidade torna esta técnica muito aceita pela maioria das equipes de projeto e uma prática recomendada pelos métodos ágeis de desenvolvimento. Apoia a recomendação da qualidade a qual determina que tudo deve ser revisado antes de ser entregue ao cliente. Saiba mais Métodos ágeis são processos de desenvolvimento que se caracterizam pela velocidade e pela simplicidade da construção de um software. Veja mais detalhes em: . 5.3.1 O processo de walkthrough Por se tratar de reuniões informais para avaliação dos produtos, o processo é extremamente simples e não envolve agendamento, preparação ou planejamento. A Figura 30 ilustra esse processo. Autor Revisor Artefato revisado+ = Figura 30 – O processo de walkthrough Possui basicamente as seguintes características: • pouca ou nenhuma preparação requerida; • objetivo de comunicar ou receber aprovação do artefato; • papéis específicos não são estabelecidos; • o autor guia os presentes pelo artefato; • o revisor lê o documento e faz suas considerações; • o autor nunca pode ser o leitor. Observação Os walkthroughs são muito úteis, principalmente, para revisar artefatos de requisitos e de modelagem do software, como especificações de casos de uso, diagramas de classes, dentre outros. 96 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III 5.3.2 Diretrizes básicas de um walkthrough Algumas recomendações importantes que devem ser observadas e obedecidas durante uma sessão de walkthrough são apresentadas a seguir: • o autor seleciona os revisores e convida‑os para a reunião; • o autor entrega o artefato aos revisores na reunião; • o foco deve ser o artefato, e não o autor; • o autor deve apresentar o artefato durante a reunião; • os revisores apresentam possíveis falhas, comentários e sugestões de melhoria; • com base nas informações apresentadas, o autor faz as devidas correções. 5.3.3 Revisões progressivas por pares As revisões progressivas por pares constituem uma variação do walkthrough e apresentam características deste e da RTF. Basicamente, o artefato é dividido em partes e distribuído aos revisores. O seguinte procedimento deve ser cumprido: • o artefato deve ser separado, e suas partes, distribuídasaleatoriamente para os revisores (por exemplo, numa revisão de código, cada revisor pode ficar com um trecho de código); • no procedimento de revisão, cada revisor faz a leitura do artefato, como em um walkthrough; • todos os revisores fazem suas considerações, que são registradas; • ao término de cada trecho revisado, o revisor passa a vez para o próximo, e assim sucessivamente, até que todo o material seja revisado; • se possível, o autor já faz as alterações sugeridas para verificar a eficácia destas. 5.4 Técnica de inspeção Trata‑se de uma técnica de verificação extremamente formal, em que os envolvidos examinam os artefatos produzidos contra uma especificação inicial com o objetivo de encontrar incoerências, inconsistências e erros. As inspeções podem ser realizadas a qualquer momento dentro do ciclo de vida de um produto de software (análise, projeto, codificação e testes), não necessitando da execução do sistema para serem feitas. São efetivas para encontrar, documentar e corrigir erros em qualquer artefato produzido, pois 97 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II devem envolver pessoas com conhecimento e domínio do assunto que está sendo inspecionado e possuir um checklist dos pontos que devem ser verificados no artefato. Em um processo de inspeção, qualquer produto resultado do trabalho de desenvolvimento pode ser analisado, mas não se limitando a estes: • documento de requisitos; • especificação de casos de uso; • diagrama de classes; • protótipo de telas; • especificações de telas; • diagrama de arquitetura do sistema; • modelo de dados; • especificação de projeto; • código‑fonte; • casos de testes; • roteiro de testes; • plano de implantação. 5.4.1 Processo de inspeção Segundo Pressman (2006), um processo de inspeção é composto de seis etapas, conforme ilustrado na Figura 31 e detalhado a seguir: Planejamento Apresentação Reunião de inspeção Revisão Preparação Correção Figura 31 – O processo de inspeção 98 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III 5.4.1.1 Planejamento Fase inicial que compreende a previsão da inspeção dos artefatos no cronograma do processo de desenvolvimento de software, sem o qual a formalidade prevista não será atendida. A seguir, o artefato a ser revisado, bem como todos os documentos de referência para a reunião de inspeção, são reunidos e apresentados, para que a equipe de inspeção seja dimensionada e o número de reuniões seja definido. Os artefatos e demais subsídios são distribuídos à equipe de inspeção. 5.4.1.2 Apresentação Trata‑se de uma etapa opcional diretamente ligada ao tamanho e à complexidade do artefato a ser inspecionado. No caso de ocorrer, a equipe de inspeção é reunida, e o autor faz uma explicação sobre os pontos principais do artefato. 5.4.1.3 Preparação Os inspetores devem fazer a leitura prévia de toda a documentação distribuída dentro do tempo planejado e fazer suas anotações de correções necessárias e eventuais melhorias identificadas. Devem ser treinados e capacitados no processo de inspeção e ter domínio do assunto a que o artefato inspecionado se refere. 5.4.1.4 Inspeção Consiste na reunião propriamente dita. O leitor faz a apresentação do artefato por partes, para que os inspetores façam os questionamentos, que são respondidos pelos autores, e os apontamentos de correção, que são registrados pelo escritor. Os apontamentos devem ser classificados quanto a sua gravidade. O processo se repete até que todo o artefato seja inspecionado. Ao final, a equipe faz as considerações de melhoria e decide se o artefato será aceito, aceito com ressalvas ou se necessita de nova inspeção. 5.4.1.5 Correção As correções e melhorias apontadas durante a sessão de inspeção devem ser feitas pelos autores e registradas as respectivas soluções. 5.4.1.6 Revisão Os autores fazem a apresentação das soluções aplicadas aos apontamentos, e o moderador deve dar o aceite a cada item registrado e determinar a situação final da inspeção. O coordenador de inspeções recebe o documento final da inspeção. 99 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 5.4.2 Papéis e responsabilidades Por se tratar de um processo formal, uma inspeção define claramente quem são os integrantes da inspeção e quais são as responsabilidades de cada um deles, com o objetivo de melhorar a comunicação e evitar conflitos durante a sessão. A sessão deve, obrigatoriamente, envolver um usuário final do artefato inspecionado. Autor Inspetor Leitor Escritor Moderador Coordenador Figura 32 – Papéis em uma inspeção Segundo Pressman (2006), os papéis mais comuns em uma sessão de inspeção, conforme a Figura 32, são: • Coordenador das inspeções: é o responsável pelo registro de toda a sessão, pela geração do relatório final da inspeção e pela documentação das métricas de erros e correções que precisam ser realizadas visando à melhoria contínua. Também faz a aceitação final do produto inspecionado. • Moderador: é o responsável pelo planejamento, pela montagem da equipe de inspeção junto com o autor e pela condução da sessão a partir do checklist. Trata‑se do facilitador do processo. • Autor: é o elaborador do artefato a ser inspecionado; distribui o documento aos participantes, monta a equipe junto com o moderador, tira dúvidas durante a sessão e faz as correções dos erros identificados. • Leitor: faz a leitura gradual do artefato para que a equipe faça as observações, os questionamentos e o apontamento de incorreções. • Inspetor: examina o artefato antes da reunião de inspeção, aponta erros e faz sugestões de melhoria. Todos os participantes da reunião de inspeção têm o papel de inspetor. • Escritor: registra as incorreções apontadas pelos inspetores. Esses são os papéis mínimos em uma inspeção, e não quer dizer que tenhamos apenas uma pessoa em cada papel. A cada inspeção, definem‑se os participantes de forma coerente com o que precisa ser verificado. 100 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III 5.4.3 Checklist de uma inspeção Os checklists são listas de verificação elaboradas previamente com base em informações históricas de outras inspeções, lições aprendidas, dados fornecidos por especialistas e itens retirados de padrões preexistentes contra os quais o artefato será avaliado. Um checklist é incrementado a cada inspeção realizada, registrando as informações para inspeções futuras, e deve ser único por artefato elaborado. O Quadro 16 apresenta alguns exemplos de itens de verificação para alguns artefatos típicos do processo de desenvolvimento de software. Quadro 16 – Exemplos de itens de checklists para artefatos de software Artefato Itens de verificação Especificação dos casos de uso As precondições foram descritas? A especificação está de acordo com a tela? Os fluxos alternativos foram corretamente indicados? As regras de negócio foram apontadas? Na descrição dos casos de uso não há referências de navegação? Os atributos de entrada e saída estão descritos? As pós‑condições estão explícitas? Diagrama de classes As classes identificadas referem‑se a objetos reais do sistema? Os relacionamentos de agregação e herança fazem sentido no contexto do sistema? Métodos privados foram identificados? As classes têm menos de vinte atributos? O requisito de baixo acoplamento foi respeitado? O requisito de alta coesão foi atendido? Diagrama de dados Todas as tabelas possuem chaves primárias? A chave primária está correta? Existem índices secundários criados? As chaves secundárias estão corretamente relacionadas às tabelas? Documento de arquitetura Foram considerados os padrões do cliente? Existe uma implementação do padrão definido para servir de referência? Foram considerados os requisitos de segurança? Foram consideradosos requisitos de desempenho? Foram considerados os padrões de implementação da linguagem? Codificação As variáveis estão com nomes adequados? Todas as variáveis são inicializadas? Todas as variáveis são do tipo privado? Os métodos estão com nomes adequados? Todos os métodos retornam valores? Condições e loops estão corretamente grafados? Existem mais de duas condicionais aninhadas? 101 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Uma inspeção é extremamente eficaz para a identificação de erros e a verificação de suas correções, tornando‑se uma das principais ferramentas para a garantia da qualidade de um produto de software. Por não necessitar de execução da aplicação, seu caráter preventivo e de completude a faz mais efetiva que os testes unitários e integrados realizados pelas equipes de desenvolvimento. O planejamento e a realização de inspeções devem ser parte integrante do cronograma de desenvolvimento de um sistema por equipes maduras e experientes com foco na qualidade de seus produtos. 5.5 Sala limpa (clean room) O nome é derivado do processo clean room, usado na fabricação de circuitos integrados e proposto para a engenharia de software em 1980 por Mill, Dyer e Linger. Essa técnica é baseada em especificações formais matemáticas e destinada ao desenvolvimento de software de alta confiabilidade como os utilizados no controle de usinas nucleares, na navegação de aviões, trens, metrôs e navios, dentre outros. O foco da sala limpa é a realização de ações preventivas, e não a correção de erros. A verificação se dá por meio de inspeções rigorosas, provas matemáticas e testes estatísticos para determinar a confiabilidade do sistema, tornando‑a diferente de outras técnicas (SOMMERVILLE, 2013). Embora esteja comprovado que os resultados da confiabilidade do software aumenta consideravelmente com o processo sala limpa, Pressman (2006) atribui três situações que fazem a técnica não ser largamente utilizada no mercado de desenvolvimento de software: • a crença de que é uma metodologia muito teórica, matemática e radical para o desenvolvimento de software; • a substituição de testes unitários por verificação de correção e controle estatístico de qualidade é muito diferente do método costumeiramente empregado pelos desenvolvedores de software; • as empresas de desenvolvimento de software ainda não possuem nível de maturidade suficiente para aplicar o processo sala limpa. Agrega‑se a essas três situações o fato de ser um processo muito mais custoso que os tradicionais, tanto na especificação como na verificação, além de exigir maior qualificação técnica e matemática dos profissionais envolvidos no processo e manutenção de treinamentos constantes das equipes para a garantia dos padrões exigidos e para o tratamento de mudanças nos membros das equipes. 5.5.1 Processo sala limpa Segundo Sommerville (2013), o processo sala limpa é estruturado em quatro processos e suas respectivas atividades, ilustrados na Figura 33: 102 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III CR CR CR TE TE TE C C C PT PT PT EF EF EF PF PF PF VC VC VC COD COD COD IC IC IC ES Incremento 1 Incremento 2 Incremento 3 • COD (geração de código) • IC (inspeção de código) • TE (teste estatístico) • C (certicação) • PT (planejamento de teste) • ES (engenharia de sistemas) • CR (coleta de requisitos) • EF (especificação formal) • PF (projeto formal) • VC (verificação de correção) Figura 33 – O desenvolvimento com o processo sala limpa • Processo de gerenciamento: define as atividades relacionadas à gestão do projeto com as ações de planejamento e de gestão das mudanças durante o processo. • Processo de especificação: descreve as atividades de coleta de requisitos, a especificação formal dos requisitos, a especificação formal do projeto, a definição da arquitetura do sistema, o plano de desenvolvimento incremental do projeto e a verificação formal das especificações. • Processo de desenvolvimento: define as atividades de engenharia relativas à codificação e à inspeção formal do código produzido. • Processo de certificação: define o uso dos modelos de referência, os testes estatísticos formais, a execução da aplicação e a certificação da confiabilidade do software em desenvolvimento. 5.5.2 Testes estatísticos São utilizados com o objetivo de avaliar as condições operacionais do software relacionadas à robustez, ao desempenho e à confiabilidade a partir de registros em arquivos em tempo de execução (logs) para gerar as ocorrências que possam ser avaliadas por meio de dados estatísticos e matemáticos, tais como: número de falhas observadas, tempos de resposta, tempos de execução, dentre outras. Com essas medidas estatísticas registradas, a confiabilidade é definida com base nos resultados dos testes realizados. Se uma longa sequência de testes for conduzida sem falha ou ocorrência de defeitos, o tempo médio de falhas – Mean Time to Failure (MTTF) será baixo, e a confiabilidade do produto de software poderá ser considerada alta. 103 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Por exemplo, vamos supor que você tenha testado três sistemas exatamente iguais e de forma paralela, até que ocorresse uma falha ou um defeito em cada um deles. O primeiro sistema apresentou uma falha após 20 horas de execução, o segundo sistema falhou após 18 horas e o terceiro sistema falhou após 24 horas. Neste caso, o MTTF é igual à média aritmética dos três tempos registrados, ou seja, é calculado como (20 + 18 + 24)/3 que apresenta o resultado igual a 20,66. Observação Logs são arquivos físicos ou tabelas que registram as diversas atividades realizadas pelo software durante a sua execução, mediante previsão de gravação dessas informações. 5.5.3 Certificação de qualidade Para que a certificação de qualidade ocorra, os cenários de testes são criados e especificados, e os casos de testes são gerados e executados. O resultado dessa execução gera os dados das falhas que permitem o cálculo da confiabilidade, e, estando dentro da média esperada (MTTF), o software recebe a certificação. Observação MTTF é um indicador de confiabilidade de software que mostra o tempo médio em que uma falha não recuperável acontece durante os testes de um software. Saiba mais Para obter mais informações sobre confiabilidade de software e especificações formais, visite o site: . 6 TESTES DE SOFTWARE A atividade de teste de software sempre foi considerada como um gasto de tempo desnecessário, uma atividade de segunda classe, uma vez que a programação é a atividade principal no desenvolvimento de software. Os testes tinham apenas o objetivo de mostrar que o sistema funcionava. Somente a partir da década de 1980 começaram a ser elaborados métodos de testes que passaram a fazer parte do processo de desenvolvimento de software, de maneira formal e como uma atividade essencial ao processo de construção, que passou a ter o objetivo de garantir que o sistema atendesse aos requisitos especificados. 104 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III No final da década de 1990 começaram a ser criadas as funções de gerente de testes, analista de testes e operador de testes, que são especialistas no planejamento, na elaboração e na execução dos testes, tornando estes cada vez mais relevantes no ciclo de vida do software e assumindo um perfil de prevenção de problemas, e não apenas de localização de erros. 6.1 Fundamentos sobre testes de software Atualmente, o grau de exigência dos usuários com a qualidade dos produtos de software está cada vez maior. A complexidade das aplicações em relação à granularidade, a segurança e a integração com outros sistemas e o aumento da concorrência no mercado desoftware tornam os testes uma atividade essencial e indispensável, com equipes exclusivas e dedicadas a essas ações, com o objetivo de garantir e controlar a qualidade do sistema. Nos modelos de qualidade de processo de software, o processo de testes e as atividades de V&V aparecem apenas nos níveis de maturidade intermediários, como o Nível 3 para o CMMI e o Nível D do MPS.BR, conforme ilustrado na Figura 34. Teste de software CMMI nível 3 MPS.BR nível D + Figura 34 – O processo de testes nos modelos de qualidade 6.1.1 Conceitos de testes de software As definições sobre testes de software variam, mas todas convergem para os conceitos básicos de encontrar defeitos em um software que está sendo testado, conferir se está de acordo com os requisitos definidos pelo usuário e verificar se realiza o que deveria ser feito. Segundo Myers (2004), testar um software é um processo de executar um programa ou sistema com a intenção de encontrar defeitos. Para Dijkstra (1970), os testes podem mostrar a presença de falhas em um software, mas nunca a sua ausência. Para Hetzel (1988), testes são uma atividade que, a partir da avaliação de um atributo ou capacidade de um programa, torna possível determinar se ele alcança os resultados esperados. 105 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Para o Instituto de Engenheiros Eletricistas e Eletrônicos (IEEE), teste é um processo de execução de um sistema ou programa, sob condições específicas, para detectar diferenças entre os resultados obtidos e os esperados. Saiba mais IEEE é uma entidade internacional que publica trabalhos sobre Tecnologia da Informação, dentre ouras áreas. Acesse o site: . É importante ressaltar que muitos desenvolvedores ainda confundem o processo de testes com o processo de depuração de um programa, mas ambos são completamente diferentes, pois enquanto os testes são uma busca estruturada para encontrar erros em um programa pronto, a depuração, mais conhecida como debug, é um processo de busca de erros de forma não estruturada durante a execução de um programa, por meio de uma ferramenta de apoio ao desenvolvimento. Uma vez encontrado, o erro deve ser corrigido. A depuração, normalmente, ocorre durante a atividade de programação e antes da execução dos testes propriamente ditos. Os testes devem ser realizados: pelos desenvolvedores, por meio dos testes unitários; pelos testadores, mediante os testes integrados guiados por roteiro de testes elaborados a partir da especificação inicial; e pelos usuários, por meio dos testes de aceitação, nos quais é verificado se o software atende às necessidades. Em outras palavras, testes de software são uma atividade de validação, de responsabilidade de todos os que participam do processo de desenvolvimento, para garantir a qualidade. 6.1.2 Conceituação de defeito, erro e falha Constantemente há confusão entre o uso das palavras erro, defeito e falha pelos profissionais de Tecnologia da Informação, principalmente, pela tradução dos termos da língua inglesa. Para esclarecer esses conceitos, o IEEE, por meio da norma 610.12 (1990), definiu os seguintes fundamentos para esses três termos descritos no Quadro 17. Quadro 17 – Definições de termos segundo o IEEE 610.12 Termo Termo em inglês Definição Engano Mistake Ação humana que produz um resultado incorreto Falha Fault ou bug Manifestação, no software, de um engano cometido pelo desenvolvedor Erro Error Diferença entre o valor obtido e o valor esperado, ou seja, qualquer estado inesperado na execução do software Defeito Failure Incapacidade de o software fornecer o serviço conforme especificado Fonte: IEEE (1990). 106 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III Portanto, a partir das falhas inseridas no código pelos desenvolvedores, acontecem os erros e os defeitos do software, que são detectados pelo processo de testes. As principais falhas do software ocorrem em virtude dos enganos cometidos nas especificações iniciais da fase de requisitos, que mapeiam as necessidades dos usuários e que não são detectadas pelo processo de testes. Além dessa falha original, novos erros e defeitos são inseridos por meio de: • alterações e mudanças constantes que afetam o software, tornando a manutenção cada vez mais difícil; • tempo reduzido de implementação que pressiona o desenvolvedor a cometer mais erros; • código mal‑escrito, fora de padrões estabelecidos; • falta de documentação do software. Segundo Rios e Moreira (2013), diversos tipos de defeitos podem ser encontrados em um software. Esses defeitos podem ser evitados, desde que sejam do conhecimento do desenvolvedor, e podem fazer parte de um checklist de boas práticas para serem tratados nas fases iniciais da codificação, juntamente com os padrões de código. Os principais defeitos que podem ocorrer em um software são apresentados no Quadro 18. Quadro 18 – Principais tipos de defeitos de software Tipo de defeito Definição Funcionalidade Quando o software não faz o que o usuário espera que ele faça Usabilidade Quando há dificuldade de navegação, a cor do texto está muito clara, dificultando a leitura, ou o conteúdo é muito extenso, obrigando o usuário a usar barra de rolagem constantemente Desempenho O software não atende com a rapidez necessária às solicitações do usuário, especialmente, no caso dos sistemas muito interativos Prevenção de defeitos O programa não se protege das entradas de dados não previstas, que, posteriormente, são processadas de forma inadequada. O software pode, por exemplo, aceitar valores em branco em campos numéricos Detecção e recuperação de defeitos O programa não trata as operações, como: overflow, flags de defeitos, ou trata de forma inadequada Limites O software não consegue tratar ou trata inadequadamente valores extremos (o maior, o menor, o primeiro, o último) ou fora dos limites Cálculo O software executa um cálculo e produz um resultado errado. Muitas vezes, por questões de aproximação, uma fórmula não produz os resultados esperados Inicialização ou fechamento Alguns softwares ou rotinas devem ser inicializados quando usados pela primeira vez ou sempre que são chamados para execução. Exemplo de inicialização de programa: na primeira vez em que executa, o software deve criar um arquivo em disco. A ausência deste arquivo poderá causar problemas nas etapas seguintes do processamento Condições de disputa Ocorre quando o software espera pela resposta dos eventos A e B, sendo suposto que A sempre termine primeiro. Se por algum problema B terminar primeiro, o software poderá não estar preparado para esta situação e apresentar resultados inesperados 107 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Carga O software pode não suportar um pico de serviço em um determinado momento (estresse) ou uma carga alta de serviço por um tempo muito prolongado Hardware ou software Capacidade do equipamento ou do software básico de suportar as condições de operação da aplicação por tempo prolongado Fonte: Rios; Moreira (2013). 6.1.3 Por que devemos testar um software? Além do fator qualidade, que foi exposto até aqui, afeta a satisfação do cliente e é um dos principais indicadores de uma organização, o fator custo é um grande incentivador para que as organizações apliquem e utilizem o processo de testes no ciclo de desenvolvimento de software. Segundo um dos maiores especialistas em desenvolvimento de software no mundo, Boehm (1976), quanto mais tarde um defeito for identificado, mais caro ficará para corrigi‑lo. Além disso, os custos para se identificar e corrigir os defeitos em um software aumentam exponencialmente na proporção em que o trabalho evolui em suas fases de desenvolvimento. De acordo com Myers (2004), quanto mais cedo for descoberto e corrigido o defeito,menor será o seu custo para o projeto, pois esse custo cresce até dez vezes a cada fase para a qual o projeto do software avança. Essa afirmação é conhecida como a Regra 10 de Myers. É do conhecimento do mercado de Tecnologia da Informação que as organizações chegam a gastar até 30% do esforço total do desenvolvimento de software realizando testes, e, no caso de construção de softwares críticos, como software de controle de voo, trens e navios, a fase de testes pode custar de três a cinco vezes mais que todas as demais fases de um projeto tradicional. Garantir que o software esteja sem erros e defeitos é um dos desafios da Engenharia de Software, mas não é possível rever todas as combinações de testes que garantam a total cobertura de testes em uma aplicação. Portanto, sempre haverá algo a se fazer, seja testar, seja corrigir um defeito. Contudo, de todas as formas de verificação e validação da qualidade, o processo de testes é a forma mais eficaz de se aproximar do erro zero e, aliado ao trabalho de equipes de testes cada vez mais especializadas e independentes, os resultados tendem a ficar cada vez melhores, e os objetivos de aumento da qualidade e redução dos custos podem ser alcançados com esforços cada vez menores. 6.2 Ciclo de vida de testes O ciclo de vida do processo de testes deve seguir rigorosamente o processo de desenvolvimento adotado para a construção do software. O mais utilizado e conhecido processo de testes é o Modelo V, visto a seguir, o qual prevê que os testes devam começar o mais cedo possível, a partir de uma especificação inicial, devendo ser realizados durante todo o processo de construção. Porém, a falta dessa especificação ou a existência de especificações incompletas e ambíguas podem levar a resultados insatisfatórios nos testes e demonstrar 108 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III falsas conclusões a respeito da qualidade do software. A definição de um oráculo correto e validado pelos usuários é essencial para o sucesso dos testes. Observação Oráculo é uma referência que define os resultados esperados para serem comparados com os resultados reais durante os testes de um software. Segundo Rios e Moreira (2013), para que o processo de testes seja eficiente, é necessário: • entender o sistema em todos os seus detalhes; • dominar as técnicas de testes; • ter habilidade para aplicar essas técnicas. 6.2.1 O Modelo V O Modelo V foi desenvolvido a partir do processo de desenvolvimento cascata, no início da década de 1980, para incluir o processo de testes no ciclo de desenvolvimento do software. O foco é desenvolver os testes desde o início do ciclo de vida do software, para permitir a identificação de defeitos o mais corretamente possível, por meio de atividades de verificação e validação e da criação de casos de testes e roteiro de testes. A Figura 35 ilustra o Modelo V de testes e de desenvolvimento. Especificação requisitos Testes de aceitação Testes de sistema Projeto arquitetual Projeto detalhado Testes integrados Codificação Testes unitários Validação Validação Validação Figura 35 – O Modelo V do processo de testes 109 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Como dito anteriormente, o processo de testes deve acontecer em conjunto com o processo de desenvolvimento de software, seguindo suas fases e avaliando os produtos à medida que ficam prontos. Assim, mesmo que o Modelo V esteja desenhado a partir do processo cascata, todos os demais processos de desenvolvimento possuem em suas características pequenos ciclos desse processo denominados de minicascatas, seja o processo de desenvolvimento utilizado o espiral, o incremental ou o iterativo, por exemplo. Após o levantamento de requisitos pela equipe de desenvolvimento, a equipe de testes entra no processo a fim de obter as necessidades do cliente e começar a identificar os casos de testes com base na especificação elaborada e no protótipo de telas produzido e validado pelo usuário. A identificação dos casos de testes deve ser feita pela equipe de testes e validada com os usuários. Essa lista de casos de testes deve ser acrescida das situações de testes fornecidas pelos usuários. Uma vez que os casos de testes são avaliados e aprovados, inicia‑se a elaboração do roteiro de testes que descreve em detalhes o passo a passo para a realização dos testes, especificando o que deve ser feito e qual o resultado esperado. O nível de detalhe deve ser suficientemente claro para ser executado por pessoa externa ao processo. Esse roteiro deve ser submetido à inspeção e à aprovação do usuário antes de ser utilizado e deve cobrir todas as situações que os usuários utilizam na fase de aceite do sistema. Esse processo é ilustrado na Figura 36. • Regras de negócio • Protótipo de telas • Identificação dos cenários • validação com usuários • Descrição detalhada do caso de testes • Definição dos resultados esperados Requisitos Casos de teste Reoteiro de testes Figura 36 – Processo de criação de roteiro de testes Durante a fase de codificação os desenvolvedores realizam testes unitários e integrados que devem garantir que os programas construídos funcionam corretamente. Os roteiros podem ser utilizados nessa fase. Passado pelos testes iniciais, o software deve ser avaliado pela equipe de testes que, de posse do roteiro de testes, executa‑os para garantir que o software esteja de acordo com as especificações dos usuários. Nessa fase devem ser gerados os registros e as evidências de que os testes foram realizados com sucesso. 110 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III Na fase final, a homologação é feita pelos usuários que fazem os testes de aceitação, normalmente, sem utilizar o roteiro, para garantir que o software esteja de acordo com as necessidades e execute corretamente as funções que lhe são atribuídas. O Quadro 19 apresenta a coerência entre as fases de desenvolvimento e a fase de testes, as atividades que são realizadas nesta fase, as ações de qualidade que devem ser executadas e os membros das equipes envolvidos em cada caso. Quadro 19 – Atividades de testes dentro do ciclo de desenvolvimento Fase de desenvolvimento Fase de testes Atividade Ações de qualidade Participantes Especificação Planejamento Estratégia e preparação do ambiente de testes Revisão Equipe de testes Projeto de arquitetura Análise Identificação dos casos de testes Revisão e inspeção Equipe de projeto e de testes Projeto detalhado Especificação Elaboração do roteiro de testes Inspeção Equipe de testes e usuários Construção Execução Localização de defeitos e realização da correção Testes unitários e integrados Equipe de projeto e de testes Implantação Homologação Correção de defeitos Testes de sistema e aceitação Equipe de projeto, de testes e usuários 6.2.1.1 Níveis de testes do Modelo V Os testes são divididos em níveis para facilitar o entendimento de sua abrangência e cobertura dentro do ciclo de vida de um software. Esses níveis são detalhados a seguir. 6.2.1.1.1 Testes de unidade ou testes unitários São testes realizados pelos desenvolvedores de software com o objetivo de garantir o funcionamento adequado do programa, do módulo, da função ou da classe que foi construída. Podem ser automatizados ou realizados por meio de ferramentas. A Figura 37 ilustra as unidades de um teste. Figura 37 – Representação de unidades de testes 111 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 6.2.1.1.2 Testes de integração São testes realizados após o teste unitário para garantir que os elementos que compõem a aplicação funcionam de forma integrada com sucesso. Feitos pelos analistas de sistemas, envolvem testes de subsistemas ou incrementos do software. A Figura 38 ilustrao agrupamento dessas unidades. Figura 38 – Representação da integração das unidades de testes 6.2.1.1.3 Testes de validação/sistemas Realizados após os testes de integração, visam verificar se a aplicação desenvolvida está de acordo com a especificação inicial do sistema. São realizados pelos analistas de testes. Para melhor avaliação dos testes de validação é necessário que o ambiente seja o mais semelhante possível ao ambiente de produção e que exista um roteiro de testes, a ser seguido pelos envolvidos no teste, a fim de que os resultados sejam avaliados, registrados e evidenciados pelo sistema de controle da qualidade. 6.2.1.1.4 Testes de aceitação São testes realizados pelos usuários finais e analistas de testes que visam garantir que todos os requisitos solicitados foram incluídos e funcionam corretamente no produto entregue. São feitos utilizando os critérios estabelecidos pelos usuários e sem roteiro preestabelecido, pois o usuário testa como se estivesse utilizando o software no seu dia a dia. Sua duração está condicionada à aceitação, pelos usuários, dos defeitos e pendências encontrados durante os testes, bem como aos riscos associados à liberação do software. 6.2.2 Testes na fase de manutenção do sistema O processo de testes também deve ser aplicado à fase de manutenção do software, que consiste na inclusão ou na retirada de alguma funcionalidade do sistema ou na alteração de alguma característica preexistente. A manutenção nos softwares ocorre com muito mais frequência do que o desenvolvimento de novos sistemas, portanto a importância da realização de testes é tão grande quanto em novos sistemas. Os roteiros de testes elaborados para o desenvolvimento do software devem ser alterados para atender às novas necessidades incluídas ou excluídas pelo processo de manutenção do sistema. Porém, não basta executar a parte do sistema que sofreu alterações: toda a aplicação deve ser testada para garantir que nenhuma funcionalidade preexistente tenha sido afetada pela mudança. Esse processo é chamado de teste de regressão. 112 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III Segundo Rios e Moreira (2013), é evidente que, quanto melhores forem os testes feitos durante o desenvolvimento, menores serão os custos durante a fase de manutenção. 6.3 Tipos de testes Normalmente, a preocupação dos desenvolvedores está em realizar testes que garantam que o software atende às necessidades dos usuários. Porém, os testes não se limitam aos requisitos funcionais. Os requisitos funcionais envolvem o correto funcionamento do software, sua integração com outros sistemas, suas interfaces e a garantia de que qualquer alteração feita não afete a aplicação. Os requisitos não funcionais surgem principalmente na fase de projeto arquitetural e/ou detalhado, estão ligados às características comportamentais do software e não são solicitados pelos usuários. Esses requisitos devem ser avaliados pela equipe de desenvolvimento, validados junto aos usuários e definidos aqueles que devem ser aplicados a cada tipo de sistema. Neste tópico serão apresentados e descritos os diversos tipos de testes mais utilizados pelo mercado de Tecnologia da Informação, tanto para os requisitos funcionais quanto para os requisitos não funcionais, e que devem ser parte integrante do checklist de qualidade de desenvolvimento de software, principalmente, para a fase de projeto. 6.3.1 Amplitude dos tipos de testes Existem diversos tipos de testes para serem realizados. Podem ter caráter funcional ou não funcional e, no desenvolvimento ou na manutenção de um sistema, podem ser total ou parcialmente executados, dependendo das características da aplicação e do ambiente em que serão executados. Esses tipos de testes são ilustrados na Figura 39. Regressão Interoperabilidade Usabilidade Alfa/beta Carga ou stress Desempenho Segurança Recuperação Confiablidade Portabilidade Estáticos Aderência ao código Configuração Navegação Instalação Testes funcionais Testes não funcionais Testes de ambiente Figura 39 – Principais tipos de testes 113 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 6.3.1.1 Tipos de testes para requisitos funcionais • Testes de regressão: têm como objetivo garantir que, mesmo após mudanças realizadas nas fases de desenvolvimento ou manutenção, a aplicação continue funcionando adequadamente e produzindo os resultados esperados. • Testes de interoperabilidade: visam avaliar e garantir que a comunicação entre os sistemas envolvidos e entre os ambientes computacionais da aplicação estejam funcionando adequadamente. Por exemplo: ao acessar um sistema de validação de CEP, este retorna valores válidos. • Testes alfa e beta: são testes executados após a aplicação estar pronta e feita pelos usuários finais da aplicação. Os roteiros de testes não são seguidos, e o objetivo é identificar o maior número de defeitos possível antes de liberar a aplicação para a produção. • Testes de usabilidade: avaliam a facilidade de uso da aplicação quanto à visão dos dados na tela, às cores, à disposição dos componentes de interação dos usuários, à facilidade de interpretação das mensagens e ao conteúdo e à clareza das informações nas telas. 6.3.1.2 Tipos de testes para requisitos não funcionais • Testes de carga ou stress: são testes que têm como objetivo avaliar o comportamento da aplicação sob condições extremas de acessos simultâneos ou de requisições ao servidor para verificar se suporta o volume esperado. Em razão do volume de requisições que precisam ser geradas, esses testes são realizados por ferramentas específicas para esse fim. Exemplo: a aplicação deve suportar até mil usuários realizando login ao mesmo tempo ou responder a até trezentas requisições por minuto. • Testes de desempenho ou performance: têm por objetivo verificar se a aplicação responde às requisições dos usuários dentro do tempo esperado. Também são testes automatizados. Por exemplo: a cada solicitação do usuário, o sistema deve responder em, no máximo, 5 segundos. Saiba mais Existem diversas ferramentas para testes de carga e testes de desempenho. Um dos mais utilizados é o JMeter, que pode encontrado no site: . • Testes de segurança: verificam a capacidade da aplicação de lidar com as tentativas não autorizadas de acesso aos perfis dos usuários autorizados. • Testes de recuperação ou disaster recovery: o objetivo desses testes é validar como a aplicação se comporta em situações extremas de falta de energia, queda da rede, falha de comunicação, dentre outras. 114 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III • Testes de portabilidade: visam avaliar a instalação e o funcionamento da aplicação em ambientes operacionais diferentes, previstos no planejamento. • Testes de confiabilidade ou disponibilidade: visam avaliar o comportamento da aplicação quando submetida à falha de algum item do seu ambiente operacional, como servidor de aplicação, servidor de banco de dados, dentre outros. Nessa situação, o software deverá manter‑se funcionando parcialmente e/ou tratar as falhas adequadamente por meio de mensagens aos usuários. 6.3.1.3 Tipos de testes para ambiente • Testes estáticos: validam se as especificações, os diagramas de casos de uso, o diagrama de classes, o modelo de dados, dentre outros estão coerentes com a aplicação desenvolvida. São realizados por meio de revisões técnicas formais ou inspeções. • Testes de aderência de código: visam avaliar se o código‑fonte da aplicação está de acordo com os padrões e as melhores práticas previstas no processo de qualidade. São executados por meio de ferramentas ou de inspeções. • Testes de configuração: avaliam se o software se comporta adequadamente de acordo com as especificações de hardware e software planejadas. Por exemplo:o software funciona nas versões x e y do browser Z? • Testes de navegação: avaliam o comportamento da aplicação no que tange à navegação entre telas, aos links para outros sistemas, dentre outros. • Testes de instalação: verificam se o plano de instalação do sistema está correto e se a aplicação funciona após a instalação em um novo ambiente. 6.4 Técnicas de testes Como visto até aqui, os testes são essenciais no processo de desenvolvimento e devem ser aplicados nas várias fases do ciclo de vida do software. As técnicas de testes mais utilizadas no mercado definem basicamente duas estratégias: uma baseada na especificação funcional da aplicação e outra focada em avaliar a qualidade do código produzido. A primeira é mais direcionada aos testes de sistema e de aceite, enquanto a segunda é utilizada nos testes de unidade e de integração. A definição de qual técnica deve ser utilizada depende de vários fatores, mas o mais determinante é o tempo disponível para a aplicação desses testes dentro do prazo do projeto. Entrando em maiores detalhes, as principais técnicas de testes estão ilustradas na Figura 40. 115 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Testes caixa-preta Testes caixa-branca Análise de mutantes Figura 40 – Principais tipos de testes 6.4.1 Técnica de testes funcionais ou caixa‑preta Baseada na especificação inicial do sistema, elaborada na fase de levantamento de requisitos, como as especificações de casos de uso e o protótipo de telas, são extraídas as situações de sucesso e insucesso na execução de determinadas funcionalidades que são chamadas de casos de teste. • Técnica de teste estrutural ou teste caixa‑branca: realizada sobre o código escrito pelos desenvolvedores para garantir a qualidade do código produzido. • Técnica de teste baseada em erros: feita com base nos erros típicos cometidos durante o desenvolvimento de software. Fundamenta‑se em duas abordagens básicas. Uma delas é relativa à semeadura de defeitos, em que erros mais comuns de programação são inseridos no código, sem o conhecimento do testador, para que sejam encontrados. A outra abordagem é a chamada análise de mutantes, em que cópias do programa a ser testado são criadas e condições de erro são incluídas, para verificação. São mais utilizadas na fase de testes unitários e testes de integração, mas seu uso é bastante reduzido no mercado e não são detalhadas neste livro. 6.4.2 Técnicas de teste estrutural ou caixa‑branca O teste estrutural ou caixa‑branca é focado em avaliar a qualidade do código produzido pelos desenvolvedores, garantindo que toda linha de código escrita seja executada pelo menos uma vez. Para isso, são identificadas todas as condições de controle do programa (if, while, repeat, case, switch, dentre outras) e gerada a massa de testes necessária para a verificação do código‑fonte em cada uma das situações mapeadas. Observação Massa de testes refere‑se ao conjunto de dados de entrada em um teste que produz um resultado esperado pelo testador. 116 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III Como os testes estruturais são focados na codificação, sua aplicação pode fazer parte das inspeções de código, em que, além de verificar a aderência do código aos padrões e às boas práticas de programação, devem‑se avaliar as diversas condições previstas no programa. Para auxiliar na identificação dos caminhos de programação exclusivos e necessários para testar cada linha de código, existe uma técnica de mapeamento chamada grafo de fluxo de controle. 6.4.2.1 Grafo de fluxo de controle Trata‑se de uma representação gráfica que permite visualizar a complexidade dos caminhos de um programa, independentemente da linguagem de programação utilizada. O grafo é formado por nós que são ligados por arestas mediante setas que mostram sua direção. Os nós representam blocos de comandos. O bloco de comando é um conjunto de instruções no qual, ao executar o primeiro comando, todos os comandos seguintes também são executados. As arestas informam a direção e a sequência em que os nós são chamados. Além das estruturas básicas de nós e arestas, o grafo de controle possui os chamados nós predicados, que são aqueles de onde partem pelo menos duas arestas. 6.4.2.2 Representação gráfica das estruturas básicas de controle A seguir são apresentadas as estruturas básicas do grafo de controle. • Sequência: são comandos procedurais. Representação gráfica na Figura 41. Figura 41 – Grafo de controle: sequência • Seleção: comandos if… then… else; case; switch. Representação gráfica na Figura 42. If Case ou switch Figura 42 – Grafo de controle: seleção 117 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • Repetição: comandos while...; for…; do... until. Representação gráfica na Figura 43. While Repeat Figura 43 – Grafo de controle: repetição Essas estruturas básicas de controle permitem a construção da lógica do programa que será avaliado nos testes de caixa‑branca. No exemplo da Figura 44, tem‑se a representação de um grafo de controle para um programa com dois caminhos retirados a partir de um comando if. Cada número no programa representa um nó no grafo, e cada caminho possível é uma aresta. início leia nro se nro > 0 raiz = taiz‑quadrada(nro) escreva raiz senão escreva mensagem de erro fim‑se fim 1 2 3 4 1 2 3 4 Figura 44 – Exemplo 1 de um grafo de controle No exemplo da Figura 45, tem‑se um programa um pouco mais complexo que inclui, além do comando if, um comando while. No grafo, a bolha 1 representa um comando sequencial e as bolhas 2 e 7 são da repetição, enquanto as bolhas 3, 4 e 5 e 6 representam o if. 118 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III início leio nro enquanto nro ≠ 0 se nro > 0 raiz = raiz‑quadrada(nro) escreva raiz senão escreva mensagem de erro fim‑se leia nro fim‑enquanto fim 1 4 5 6 2 7 3 3 4 5 6 1 2 7 Figura 45 – Exemplo 2 de um grafo de controle 6.4.2.3 Testes de caminhos independentes Com a construção do grafo de controle é possível determinar os caminhos de testes básicos do programa, chamados de caminhos independentes. Caminho independente é aquele que contém pelo menos uma nova aresta no grafo de controle e garante que todo comando será executado pelo menos uma vez. No exemplo da Figura 46, cada caminho possui ao menos um nó exclusivo. Caminhos independentes 1‑2‑7 1‑2‑3‑4‑6‑2 1‑2‑3‑5‑6‑2 3 4 5 6 1 2 7 Figura 46 – Identificação de caminhos independentes 119 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 6.4.2.4 Complexidade ciclomática – V(G) Desenvolvida por Tom McCabe em 1976, baseada no grafo de controle, tem como objetivo medir quantitativamente a complexidade lógica de um programa e fornecer o limite superior para o número de caminhos independentes, que determina a quantidade de testes necessários para garantir que todas as linhas de código sejam executadas pelo menos uma vez. Existem duas formas para se calcular a complexidade ciclomática: • V(G) = (E – N)+2, onde: E é o número de arestas. N é o número de nós do grafo. • V(G) = P + 1, onde: P é o número de nós predicados do grafo. Para o grafo de controle ilustrado na Figura 47, existem sete nós, oito arestas e dois nós predicados, que são os nós 2 e 3, de onde sai mais de uma aresta. Nesse caso, tem‑se a determinação de três caminhos independentes para testar, conforme apresentado na Figura 46. Ainda segundo McCabe (1976), a partir do cálculo da complexidade ciclomática, é possível determinar o grau de risco de se testar um programa, ou seja, se o código ultrapassar a V(G) de 20, significará que existe um alto grau de chance de que não seja possível testá‑lo adequadamente146 7.2.2 Papéis e responsabilidades na manutenção ............................................................................. 146 7.2.3 Manutenção de sistemas legados ................................................................................................. 147 7.2.4 Engenharia reversa .............................................................................................................................. 147 7.2.5 Técnicas de manutenção .................................................................................................................. 147 7.2.6 Custos de manutenção ...................................................................................................................... 148 7.3 Processos de manutenção ..............................................................................................................148 7.3.1 Definição do processo de manutenção ...................................................................................... 149 7.3.2 Análise das mudanças ........................................................................................................................ 150 7.3.3 Aceitação e revisão da mudança ....................................................................................................151 7.3.4 Migração ...................................................................................................................................................151 7.3.5 Retirada de produção ......................................................................................................................... 152 7.4 Impactos na manutenção ...............................................................................................................152 7.4.1 Desenvolvimento orientado a objetos ........................................................................................ 153 7.4.2 Desenvolvimento baseado em componentes ........................................................................... 154 7.4.3 Desenvolvimento ágil ......................................................................................................................... 155 8 GESTÃO DA CONFIGURAÇÃO ...................................................................................................................155 8.1 Conceitos de gestão da configuração........................................................................................156 8.1.1 Problemas mais comuns ................................................................................................................... 156 8.1.2 Conceitos de gestão da configuração ......................................................................................... 159 8.2 Processo de gestão da configuração ..........................................................................................160 8.2.1 Identificação dos itens de configuração .....................................................................................161 8.2.2 Controle de versões ............................................................................................................................. 162 8.2.3 Controle de mudanças ....................................................................................................................... 164 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 8.2.4 Auditoria de configuração ............................................................................................................... 165 8.2.5 Registro do status ................................................................................................................................ 166 8.3 Padrões de gestão da configuração ............................................................................................166 8.3.1 Padrão de gestão de configuração – CMMI.............................................................................. 166 8.3.2 Padrão de gestão de configuração – ISO/IEC 12207 ..............................................................170 8.3.3 Padrão de gestão de configuração – ISO/IEC 9000‑3 ...........................................................171 8.3.4 Padrão de gestão de configuração – ISO/IEC 15504 (Spice) .............................................. 173 8.4 Application Lifecycle Management (ALM) ...............................................................................175 8.4.1 Gerenciamento de requisitos .......................................................................................................... 176 8.4.2 Gerenciamento da configuração ................................................................................................... 176 8.4.3 Gestão de mudança ............................................................................................................................ 176 8.4.4 Versionamento e integração ........................................................................................................... 176 8.4.5 Distribuição do software ................................................................................................................... 177 9 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 APRESENTAÇÃO O objetivo da disciplina Engenharia de Software II é apresentar a você características importantes no desenvolvimento de um software que, normalmente, são esquecidas e/ou abandonadas pela incontrolável vontade de programar inerente aos profissionais ligados á área de Tecnologia da Informação. Nessa disciplina são descritos os requisitos de qualidade indispensáveis a um bom software, como devem estar inseridos no ciclo de desenvolvimento, a importância das atividades de testes, como controlar os diversos artefatos e o código do software e suas consequências na manutenção de software produzido. O livro‑texto está dividido em quatro unidades, em que são apresentados os principais conceitos e modelos de qualidade para o desenvolvimento de software, as principais técnicas para garantir e controlar a qualidade, as características do processo de manutenção do software e como controlar tudo o que é produzido durante a construção de um sistema. Na unidade I, são apresentados os principais conceitos sobre qualidade de software; o Sistema de Gestão da Qualidade (SGQ) baseado na norma ISO9000, pioneiro na questão de qualidade; e as principais normas para avaliação da qualidade do produto de software. Na unidade II, são apresentadas as principais normas de padronização para avaliação da qualidade e os modelos de qualidade reconhecidos e praticados pelo mercado de Tecnologia da Informação para melhoria dos processos de desenvolvimento. Na unidade III, são descritas a principais técnicas e ferramentas de verificação e validação que podem ser utilizadas pelas equipes durante o desenvolvimento do software para garantir e controlar a qualidade daquilo que é produzido e o processo de testes de software. Na unidade IV, são discutidos os impactos de tempo e custo na manutenção de softwares desenvolvidos com e sem qualidade, mostrando claramente as vantagens de construir sistemas fundamentados em qualidade. Também são apresentadas técnicas para gerenciar e controlar os artefatos e códigos produzidos durante o ciclo de vida, visando garantir a integridade das informações por meio da gestão da configuração. O objetivo é mostrar que é possível produzir um software com qualidade, em detrimento do processo de “fazer para entregar no prazo”, tornando o desenvolvimento claro, com o menor retrabalho possível e a garantia da satisfação da equipe e do cliente com o produto final. Divirtam‑se! INTRODUÇÃO Quando se fala em qualidade de software, a primeira ideia que vem à cabeça é: “Que coisa chata”, ou “Isso não adianta nada”. Em parte, isso é verdade, pois produzir qualquer coisa com qualidade demanda mais cuidado, mais esmero, mais atenção e mais disciplina, logo, não é uma atividade corriqueira que traz prazere de que ele venha a falhar em determinado momento. Complexidade ciclomática V(G) = (E – N) + 2 V(G) = (8 – 7) + 2 => V(G) = 3 Ou V(G) = P + 1 V(G) = 2 + 1 => V(G) = 3 3 4 5 6 1 2 7 Figura 47 – Cálculo da complexidade ciclomática Atualmente, com a programação orientada a objetos, os programas estão muito reduzidos em linhas de código, limitando‑se a métodos de uma classe. Com esse conceito, a complexidade 120 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III ciclomática tende a ser baixa, facilitando os testes caixa‑branca, mas aumentando a complexidade dos testes caixa‑preta. A Tabela 6 mostra a classificação de riscos de acordo com a complexidade ciclomática de um programa. Tabela 6 – Classificação de riscos de acordo com a V(G) Complexidade Avaliação de risco 1 – 10 Programa simples, sem risco 11 – 20 Programa médio, risco moderado 21 – 50 Programa complexo, alto risco > 50 Programa não testável Fonte: McCabe (1976). 6.4.2.5 Definindo os casos de testes caixa‑branca Elaborado o grafo de controle e calculados a V(G) e o número de caminhos independentes, resta determinar os casos de testes necessários para verificar o código do programa em questão. Para isso, seguem‑se os quatro passos básicos: 1. Desenhar o grafo de fluxo correspondente ao programa (Figura 48). início leio nro enquanto nro ≠ 0 se nro > 0 raiz = raiz‑quadrada(nro) escreva raiz senão escreva mensagem de erro fim‑se leia nro fim‑enquanto fim 1 4 5 6 2 7 3 3 4 5 6 1 2 7 Figura 48 – Passo 1: desenhar o grafo de controle 121 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 2. Determinar a V(G) do grafo de fluxo correspondente: V(G) = (E – N) + 2 ou V(G) = P + 1 V(G) = (8 – 7) + 2 => V(G) = 3 V(G) = 2 + 1 => V(G) = 3 3. Determinar os caminhos independentes. São eles: 1‑2‑7 1‑2‑3‑4‑6‑2 1‑2‑3‑5‑6‑2 4. Preparar os casos de teste para executar cada caminho: Tabela 7 – Preparação dos casos de teste Caminho Dado de entrada Resultado esperado 1‑2‑7 Zero Sai do programa sem executar nada 1‑2‑3‑4‑6‑2 2 e 4 Calcula a raiz quadrada de 2 e depois de 4 1‑2‑3‑5‑6‑2 4 e–20 Calcula a raiz quadrada de 4 e escreve mensagem de erro para–20 O teste estrutural conforme apresentado aqui é pouco utilizado no mercado, em função da falta de conhecimento da técnica pela maioria dos desenvolvedores e, principalmente, pela falta de processo de qualidade voltado para o código produzido. 6.4.3 Técnica de teste funcional ou caixa‑preta Os testes funcionais são os mais amplamente utilizados no desenvolvimento de software. Focadas nas necessidades ditadas pelos usuários e transformadas em requisitos pelos analistas de sistemas, as situações de testes criadas devem atestar que o software faz exatamente o que foi solicitado e que funciona corretamente. A única desvantagem para os testes funcionais é que não é possível garantir que a especificação esteja 100% correta, mesmo com as validações dos usuários. Quando isso ocorre, podem aparecer surpresas durante os testes de aceite realizados pelos usuários, em que surgem novos comportamentos esperados ou novas funcionalidades não previstas pela aplicação e que são necessárias para esta. Em tal situação, essas novas necessidades também não são mapeadas pelos testes funcionais. Para garantir a elaboração de bons testes funcionais, devem ser obtidos, no mínimo, os seguintes artefatos validados pelos usuários: 122 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III • a especificação dos requisitos, como uma especificação de casos de uso ou um documento de requisitos; • um protótipo de telas visual com as respectivas especificações detalhadas de seu comportamento. De posse desses artefatos, a equipe de testes pode iniciar suas atividades de planejamento, preparação e execução dos testes e definir o oráculo de testes, ou seja, constituir a referência para dizer se os resultados produzidos pela aplicação estão corretos ou não. A Figura 49 apresenta um processo de elaboração dos testes funcionais. Planejamento – Determinar o que será testado Projeto – Identicar os casos de teste Implementação – Elaborar o roteiro de testes Execução – Executar o roteiro de testes Verificação – Gerar as evidências de testes Figura 49 – Passos para a elaboração dos testes funcionais Para a elaboração dos testes funcionais, duas atividades devem ser desenvolvidas e devidamente validadas com os usuários do sistema: • especificar os casos de testes ou cenários de testes; • elaborar o roteiro de testes. 6.4.3.1 Casos de testes ou cenários de testes Um caso de teste ou um cenário de teste é uma situação que o sistema apresenta para a qual, dada uma informação de entrada, será gerada uma saída esperada pelo usuário. Por exemplo, você quer testar um software para uma calculadora simples com quatro operações. Todas as operações precisam ser testadas, e, para cada uma, um conjunto de valores precisa ser verificado para constatar se está fazendo o cálculo correto. Nessa situação, os casos de testes para operação de soma seriam: 123 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • 2 + 2 = 4 – soma de dois números inteiros positivos. • ‑2 + 2 = 0 – soma de número inteiro positivo e negativo. • ‑2 – 2 =–4 – soma de dois números. • 2 + 0,5 = 2,5 – soma de um número inteiro com decimal positivo. • 2 +–0,5 = 1,5 – soma de número inteiro com decimal negativo. • ‑ 2 +–0,5 =–2,5 – soma de número inteiro negativo com decimal positivo. E assim sucessivamente até que todas as situações possíveis possam ser verificadas e validadas com as combinações envolvendo dois números e com aquelas envolvendo três números, quando todas as possíveis operações estiverem dentro da chamada cobertura dos testes. Quanto maior a cobertura dos testes, melhores os resultados da qualidade. Outro exemplo, agora relacionado a uma aplicação transacional: imagine que você queira testar o cadastro de um cliente para uma locadora de games (o sistema deve incluir, alterar, excluir e consultar clientes). As regras informadas pelos usuários dizem que o CPF deve ser válido, o endereço deve ser obtido por meio do CEP e o cliente não pode possuir pendências de dívidas no órgão XPTO. Para a situação descrita, os seguintes casos de testes devem ser identificados: • incluir cliente com sucesso; • alterar cliente com sucesso; • excluir cliente com sucesso; • consultar cliente com sucesso; • consultar cliente por CPF inexistente; • incluir cliente com CPF inválido; • alterar cliente com CPF inválido; • incluir cliente com CEP inválido; • alterar cliente com CEP inválido; • incluir cliente com pendência no órgão XPTO. 124 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III Contudo, de onde vamos obter as informações para criar esses casos de testes? Normalmente, usam‑se a história do cenário, como descrito nos exemplos, a especificação de requisitos do sistema, a especificação de casos de uso e o protótipo de telas. A partir desses artefatos, identificam‑se os cenários de sucesso, o que significa realizar os testes sem erros, e as diversas situações de exceção que podem ocorrer durante o uso da aplicação, conforme o exemplo do cadastro de cliente e os cenários de CPF inválido, CEP inválido e pendência no órgão. Vale ressaltar que o objetivo dos casos de testes é identificar e criar cenários de teste relacionados às regras de negócio da aplicação. Lembrete Se utilizar a especificação de casos de uso para criação dos casos de testes, o cenário de sucesso será o fluxo básico, e os cenários de insucesso serão os fluxos alternativos. Além disso, criar casos de testes para validar as precondições de cada caso de uso. A elaboração dos casos de testespode ser feita pela equipe de testes de forma independente, e esses devem ser claros e objetivos. Após a elaboração da lista de casos de testes, essa precisa ser avaliada e validada pelos usuários do sistema para se ter a maior cobertura possível das situações de testes. Com esses casos de testes prontos, pode‑se avançar para a elaboração do roteiro de testes. 6.4.3.2 Roteiro de testes O roteiro de testes é uma descrição detalhada do passo a passo para a execução do sistema, a fim de verificar cada caso de teste identificado na fase anterior. Para cada caso de teste deve haver um roteiro contendo as seguintes informações: • nome do caso de testes; • procedimento inicial para determinar onde começa o teste; • descrição detalhada contendo: — passos para a execução; — dados de entrada; — resultado esperado; — situação (sucesso ou não); — data da realização; 125 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II — usuário que realizou o teste. • evidência de realização do teste. Observe que nos dois exemplos são informados os dados de entrada para que a operação seja verificada por meio do dado de saída. O que são esses dados de entrada e o resultado esperado? • Procedimento inicial: descreve detalhadamente as atividades que precisam ser feitas antes de iniciar a execução dos testes. • Dado de entrada: é a informação que deve ser inserida no sistema para satisfazer o passo descrito e gerar a saída esperada. • Resultado esperado: é o dado de saída gerado pelo sistema após a execução do passo e que serve de avaliação para indicar o sucesso da realização do passo. • Evidência de teste: é a informação que pode mostrar ao usuário que o caso de teste foi realmente executado. Pode ser uma “foto” da tela, um arquivo, dentre outros. Ao elaborar o roteiro de testes, deve‑se observar a integração do roteiro com a tela associada à funcionalidade e ao uso cotidiano pelos usuários para que sua execução seja intuitiva e objetiva. Os passos devem ser descritos com detalhes suficientes para que não causem dúvidas ao testador e este possa fazer a análise correta do resultado do teste. Além disso, é importante que os casos de testes tenham poucos passos, para serem de fácil compreensão. O roteiro, assim como as especificações, não é um documento estático do projeto. As evoluções e mudanças que ocorrem durante o desenvolvimento devem ser informadas à equipe de testes para a manutenção dos roteiros de testes alinhados com as especificações de requisitos e para evitar divergências e conflitos internos. As informações descritas sobre a situação em que o passo se encontra (sucesso ou insucesso), a data do teste, o usuário que o realizou e a evidência de testes são atualizados quando da execução efetiva do roteiro de teste, não fazendo parte da elaboração desse roteiro. A Tabela 8 ilustra o plano de um roteiro de testes para o caso de teste Consultar cliente com sucesso descrito no exemplo. 126 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III Tabela 8 – Exemplo de um roteiro de testes Caso de teste: consultar cliente com sucesso Procedimento inicial: acessar a URL como usuário administrador, acessar o menu Cadastros, acessar a opção Cliente e clicar em Consultar ID Passo para execução Dado de entrada Resultado esperado 1 Sistema exibe tela para pesquisa por nome ou CPF – Dados exibidos: campos, nome e CPF 2 Usuário informa CPF válido e clica em Buscar 111.111.111‑11 Sistema exibe dados do cliente: nome: xxxx, endereço: xxxxx, cidade: xxxx, estado: xx e país: xxxxx 3 Usuário clica em Nova Busca – Tela é limpa, e retorna a tela de pesquisa Durante a execução do roteiro de testes, os defeitos podem e devem ser encontrados na aplicação. Esses defeitos precisam ser registrados e controlados pela equipe de testes e, após o término do ciclo de testes, a equipe de desenvolvimento analisa e verifica se os apontamentos são procedentes. Em caso afirmativo, faz as correções e encaminha a aplicação para novo ciclo de testes. Esse ciclo se repete até que o roteiro de testes esteja 100% executado, e os resultados, corretos. Saiba mais São boas ferramentas para gerenciamento dos defeitos encontrados durante os testes funcionais, o Mantis – e o Jira – . 6.4.3.3 Testes funcionais de interface Além dos casos de testes relacionados às regras de negócio abordadas até aqui, existem os casos de testes relativos ao comportamento técnico das telas ou interfaces. Esses casos de testes são importantes para garantir que a interface faça as verificações necessárias para tornar o software mais robusto e confiável com os dados de entrada. Esses casos de testes devem ser identificados a partir da própria interface ou da especificação de interface gerada para a aplicação e devem ser executados desde a fase dos testes de unidade até os testes de sistema. A participação dos usuários na definição desses testes é essencial para evitar solicitações de mudanças na interface no momento dos testes de aceite, e a realização desses testes pelos desenvolvedores reduz substancialmente os apontamentos de defeitos nos testes de sistema. Os principais casos de testes de interface estão relacionados a: • reconhecer os atributos de cada campo; • identificar e obter as regras de validação de cada campo; 127 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • validar a navegação; • validar as mensagens que serão exibidas. Para criar os casos de testes de interface, obedeça aos seguintes passos: • identifique os campos e componentes da interface; • para cada campo identificado: — coloque o nome, o tipo do campo, o tamanho, o formato, as validações e se é obrigatório ou não. • identifique os eventos que podem ser disparados pelos componentes (links, botões, caixas de texto, listas, dentre outros); • valide as ações que serão realizadas para cada evento; • defina e valide as mensagens de advertência criadas. Por exemplo, para o cenário de testes de Consultar cliente com sucesso exposto anteriormente, temos a seguinte especificação da interface: Tabela 9 – Especificações da interface Elemento Descrição Tipo/tamanho Formato Validação Campo Nome Alfa (40) Alinhado à esquerda Pode estar em branco Campo CPF Numérico (9) 111.111.111‑11 CPF deve ser válido Campo Endereço Alfa (40) Alinhado à esquerda – Campo Cidade Alfa (20) Alinhado à esquerda – Campo Estado Alfa (2) – UFs válidas do Brasil Campo País Alfa (10) Fixo “Brasil” Botão Buscar ‑ – Obter dados Botão Nova Busca – – Limpa tela Botão Voltar – – Retorna ao menu Temos também a seguinte especificação de mensagem: Quadro 20 – Especificações da mensagem a ser exibida Elemento Descrição Situação Mensagem a ser exibida Botão Buscar Cliente não encontrado “Cliente não encontrado” 128 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III Com essa especificação criada para cada interface do software em desenvolvimento, os testes funcionais devem ser realizados seguindo as abordagens de testes a seguir: • ortografia: verificar a escrita correta de todo o texto da tela, inclusive das mensagens; • tamanho dos campos: verificar se os campos permitem a entrada da quantidade de dados até o limite especificado; • formato: validar se a máscara do campo corresponde ao formato da especificação, por exemplo, o campo valor dever ser apresentado na forma 9,999,999.99, ou o CPF, no formato 111.111.111‑11; • campos obrigatórios: validar se os campos com indicação de obrigatoriedade estão sendo bloqueados; • caracteres especiais: testar se a aplicação permite o preenchimento dos campos com &, *,%, @, :, ;, dentre outros; • valores de domínio: testar se as regras de validação estão funcionando conforme especificado e se os valoresmínimo e máximo de cada campo estão sendo respeitados; • ordem alfabética: testar se os objetos do tipo lista e as caixas de texto estão em ordem alfabética; • navegação: acionar todos os links e botões para verificar o correto funcionamento, de acordo com a especificação; • massa de dados: testar a aplicação em relação à massa de dados para verificar o comportamento do software quanto a tabela vazia, tabela indisponível, falha de comunicação com o banco de dados, tabela carregada com volume similar à produção, consultas que não retornam dados, dentre outras. Podemos observar neste tópico que os testes funcionais são variados e amplos e não são executados de forma trivial e não planejada. Sem dúvida alguma, a correta execução dos testes funcionais garante a qualidade do software, mas exige esforço, dedicação e comprometimento de todos os envolvidos e não apenas da equipe de testes. 6.5 Testes em processos ágeis Antes de abordar os testes em processos ágeis, é importante entender quando surgiu e o que é um processo ágil. É importante salientar que ágil não quer dizer “desenvolver rápido e de qualquer jeito”, mas sim desenvolver um software com foco no produto, criando o que é estritamente necessário para o entendimento da equipe e do usuário e utilizando técnicas e ferramentas para auxiliar nesse processo. Os processos ágeis começaram a tomar forma a partir de 2001, quando Kent Beck e outros pesquisadores do desenvolvimento de software se reuniram para discutir alternativas aos problemas 129 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II mais comuns em um processo de desenvolvimento tradicional e propuseram quatro pilares básicos para o desenvolvimento ágil: • foco nas pessoas e não em processos; • software funcionando, em vez de documentação abrangente; • colaboração do cliente, em vez de negociação de contratos; • resposta às modificações, em vez de seguir um plano. À primeira vista, esses pilares parecem direcionar para o caos, e parece que tudo o que foi pesquisado até à época não tem fundamento, mas não é bem assim. O que esses pilares querem dizer é que a equipe de projeto é uma só; gerente, desenvolvedores, clientes, usuários, todos estão juntos para atingir um objetivo comum, que é o software funcionando. De nada adianta criar documentos infinitos que não são utilizados agora nem depois do software pronto. Cria‑se o que é necessário para o entendimento e a comunicação da equipe, e as temidas mudanças de escopo existem e são bem‑vindas; não haverá por que bloqueá‑las ou deixá‑las para depois, se forem essenciais para o cliente. Em outras palavras, para manter tudo isso orquestrado, um processo ágil é até mais organizado do que um processo tradicional. Nessa mesma época, além desses pilares, foi criado e assinado pela equipe reunida e por Kent Beck o chamado Manifesto Ágil, o qual descreve doze princípios que, se seguidos, tornam o desenvolvimento do software mais rápido que a forma tradicional, com mais qualidade e satisfazendo às necessidades dos usuários. Esses doze princípios estão listados a seguir, em ordem de importância para o processo ágil: • clientes, usuários e desenvolvedores trabalham juntos; • O levantamento e a validação dos requisitos são feitos face a face; • entregas contínuas de software funcionando, não só ao final; • satisfação do cliente por meio das entregas contínuas; • a evolução do projeto é feita por meio de funcionalidades entregues; • mudanças de requisitos são bem‑vindas; • equipes autogerenciadas: todos sabem o que fazer; • equipes multidisciplinares e capacitadas tecnicamente; • faça o essencial, a simplicidade é o caminho; 130 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III • equipe motivada e comprometida com o processo e o produto; • ritmo constante de desenvolvimento, não “picos” de entrega; • a equipe busca tornar‑se mais efetiva sempre; melhoria contínua. Embora sejam princípios de um processo ágil, nada impede que esses fundamentos sejam utilizados como parte de qualquer processo de desenvolvimento tradicional, com o objetivo de melhorar os resultados e aumentar a qualidade do software. Saiba mais Mais conceitos e informações sobre os doze princípios ágeis podem ser encontrados em: . 6.5.1 Testes ágeis Contudo, o que tudo isso tem a ver com o processo de testes ágeis? A relação está no fato de que muda radicalmente a forma de atuação e interação do pessoal de testes com os desenvolvedores e com os usuários. Como visto no tópico anterior, o pessoal de testes, no processo tradicional, é separado da equipe de desenvolvimento do software; as interações ocorrem de forma pontual no ciclo de vida e em maior grau quando a aplicação está pronta e precisa ser realizado o teste de sistema, com o objetivo de encontrar e corrigir erros. No processo ágil, o teste é um compromisso e uma responsabilidade de toda a equipe. Todos devem possuir habilidade para testar e todos trabalham em conjunto, com interação constante durante todo o ciclo de desenvolvimento do software. Os testadores atuam de forma que entendam o processo de negócio, criando os casos de testes e participando efetivamente do projeto desde a fase de requisitos, passando pelos testes de unidade, testes integrados, testes de sistema e testes de aceitação. O objetivo nos testes ágeis é colaborar com a solução dos defeitos e não apenas apontá‑los, por meio da identificação das causas desses defeitos, para que não voltem a acontecer. No processo ágil, não há uma fase de testes específica. Os testes são realizados à medida que a codificação termina, e o feedback é imediato, ou seja, o defeito é apontado e corrigido na hora. Além disso, os testadores devem acompanhar a evolução das entregas de software com foco na qualidade e automatizar os testes, sempre que possível. Em alguns casos, as equipes de testes podem atuar de forma separada das equipes de projeto que utilizam um processo ágil. Essas situações podem estar relacionadas ao desenvolvimento de sistemas grandes e complexos, para aumentar a automação de testes, pela necessidade de fazer testes finais de uma versão antes de entrar em produção ou para que a equipe de testes possa ser utilizada em mais de um projeto. 131 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 6.5.2 Roteiro de testes ágeis A elaboração do roteiro de testes para processos ágeis começa pela definição de quais tipos de testes devem ser executados, se devem ser automatizados ou manuais e os responsáveis por cada um. Para os testes automatizados, são definidas as ferramentas que devem ser utilizadas. Definido o conjunto de testes necessários, a equipe elabora, a partir das histórias e do protótipo, os casos para os testes funcionais e para os requisitos não funcionais. A identificação dos casos de testes, obrigatoriamente, deve ser realizada pela equipe e pelos usuários, para obter a maior cobertura possível, não sendo necessária a elaboração do roteiro com o passo a passo, em razão de os testes serem realizados pela própria equipe envolvida no projeto. Com o roteiro elaborado, os testes são executados com uma visão colaborativa entre desenvolvedores e usuários até que a aplicação esteja pronta, ou seja, até que os defeitos tenham sido removidos e a aplicação funcione de acordo com as expectativas dos usuários. 6.5.3 Processo de testes ágeis O principal processo de testes ágil está baseado nos quadrantes de testes definidos por Crispin e Gregory (2009), que agrupam os testes em visões e auxiliam na definição do que deve ser feito em cada nível de testes dentro do ciclo de desenvolvimento de software. A Figura 50 apresenta esses quadrantes, cujas características são descritas a seguir. Testes integrados Testes funcionais Protótipos Simulação Testes de unidade Testes de componentesTestes de sistema Testes de aceitação Usabilidade Testes de desempenho Testes de carga Testes de segurança Testes ágeis Foco no negócio Suporte à equipe Foco no produto Foco técnico Figura 50 – Quadrantes de testes ágeis 6.5.3.1 Quadrante 1 São os testes focados no código produzido. Devem verificar a aderência aos padrões de codificação, bem como as boas práticas de programação e as de testes caixa‑branca. O papel dos testes nesse 132 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III quadrante é apoiar os desenvolvedores para encontrar e corrigir os defeitos. Os testes de unidade e de componente são a menor unidade testável do software e devem abranger toda a ligação da arquitetura da aplicação, como camada visual, camada de negócio, acesso ao banco de dados, integração com outros sistemas, comunicação, dentre outros. Quanto mais automatizados, mas rápidos e efetivos. Podem utilizar o Test Driven Development (TDD) para auxiliar na elaboração. 6.5.3.2 Quadrante 2 São os testes focados no negócio. O objetivo é garantir que as regras de negócio especificadas tenham sido construídas e funcionem corretamente. Envolve os testes de integração, em que essas regras são verificadas por meio dos casos de testes criados, e os testes são executados pelo desenvolvedor, pelo testador e pelos usuários. O papel dos testes nesse quadrante é melhorar o alinhamento a respeito do negócio entre os desenvolvedores e os usuários, por meio de testes simulando situações reais de utilização da aplicação. Aqui os testes podem ser parcialmente automatizados, mas a maior parte é manual. Também podem utilizar o Behavior Driven Development (BDD) para auxiliar na elaboração dos testes seguintes, uma estrutura de linguagem natural que facilita o entendimento de todos e funciona como um caso de teste dentro do processo ágil de desenvolvimento. Para elaborar um bom BDD, o testador do processo ágil deve seguir esta estrutura básica para cada história descrita no cenário de testes considerado: • Teste a ser executado: — funcionalidade: ; — como um ; — eu quero ; — de modo que . • Caso de teste: — cenário: ; — dado ; — quando ; — então . Por exemplo, para o cenário de testes do cadastro de clientes relativo à consulta de cliente com sucesso por CPF: 133 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • Teste a ser executado: — funcionalidade: consultar clientes; — como um funcionário; — eu quero consultar um cliente cadastrado com sucesso por CPF; — de modo que eu possa garantir que a consulta está correta. • Caso de teste: — cenário: consultar cliente com sucesso por CPF; — dado: ao selecionar a opção Buscar; — quando: digitado o CPF 111.111.111‑11; — então: deve listar nome, CPF e data de nascimento do cliente. 6.5.3.3 Quadrante 3 São os testes com foco no produto final da aplicação, os mais próximos dos testes realizados no processo tradicional. A ideia é criar situações nos produtos para permitir os testes de sistema e os testes de aceitação. Também são apoiados pelos casos de testes do roteiro elaborado, mas podem ser aleatórios. Esses testes simulam a visão do usuário final e são realizados após uma versão estar fechada para ser entregue ao usuário. Os testes desse quadrante devem ser executados em todo o sistema, principalmente, nas áreas mais cruciais para o negócio. Devem‑se avaliar a usabilidade do software e os testes de navegação para garantir que tudo esteja funcionando adequadamente, conforme o esperado pelos usuários. O papel dos testes nessa etapa é ganhar a confiança do cliente e envolvê‑lo na entrega, conseguindo a sua avaliação prévia e conjunta a respeito da qualidade do software e, principalmente, corrigir defeitos que possam causar danos ao usuário quando em produção. Esses testes são manuais e devem ser realizados por pessoal experiente e com conhecimento do negócio. 6.5.3.4 Quadrante 4 São os testes com foco nos requisitos técnicos, ditos requisitos não funcionais. Abrangem os testes de carga, segurança, desempenho, recuperação, confiabilidade, dentre outros. Os padrões de qualidade esperados para esses testes precisam ser levantados, e sua execução é dependente do uso de ferramentas, pois não são executados de forma manual. O papel dos testes é apontar deficiências técnicas do produto, e requerem especialistas para sua execução. Para obter melhores resultados com esses testes, é preciso definir claramente a necessidade do tipo de teste, montar o ambiente adequado 134 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III para simular as situações necessárias, criar a massa de testes para a replicação e definir as ferramentas que devem ser utilizadas. 6.5.4 Conceitos sobre Test Driven Development (TDD) O TDD é uma técnica utilizada para a realização de testes unitários e de integração que começa pela identificação dos casos de teste. Em seguida, faz‑se a escrita do código necessário para atender ao caso de testes, e, se necessário, a refatoração do código para acomodar eventuais mudanças que possam ocorrer. É um método para construir software direcionado ao programador, com o objetivo de melhorar a qualidade do código produzido. Vem do conceito ágil da Extreme Programming de “testar primeiro que programar”. Basicamente, o processo TDD funciona como ilustrado na Figura 51. Escreva um teste que vai falhar Execute o teste Escreva o código para tratar a falha Elimine redundâncias no código Figura 51 – Processo TDD Os principais benefícios que podemos obter com a utilização do TDD no processo de desenvolvimento são: • melhorar a qualidade do código; • garantir a criação dos testes unitários; • permitir testes contínuos sempre que o programa for alterado. 135 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Saiba mais Mais detalhes de como utilizar o TDD podem ser encontrados no livro: BECK, K. TDD: desenvolvimento guiado por testes. São Paulo: Bookman, 2010. 6.5.5 Quando terminar os testes? Um dos principais desafios é determinar quando os testes são suficientes para garantir que o software atende às necessidades dos usuários. A maior parte dos testes termina em virtude da pressão de tempo que os usuários impõem à equipe de desenvolvimento, muitas vezes, causando entregas desastrosas, em razão da falta de qualidade do produto final e também em virtude dos custos da realização de todos os testes necessários para garantir a qualidade. Como visto anteriormente, não são poucos e demandam tempo, dinheiro e especialistas no assunto. Considerando um cenário em que essas duas variáveis não afetem o término dos testes, pode‑se dizer que os testes terminam quando: • o número de defeitos está dentro de uma margem aceitável; • a frequência em que os defeitos são encontrados é pequena; • houver a garantia de que os testes‑caixa foram realizados; • todos os casos de testes tiverem sido realizados com sucesso. Enfim, determinar o fim dos testes não é uma tarefa isolada da equipe de desenvolvimento. Cabe uma decisão conjunta entre a equipe e o cliente para determinar se as condições atuais do software são aceitáveis e os riscos desse aceite para a operação. Resumo Nesta unidade foram abordadas as principais técnicas de verificação e validação de um produto de software, com o objetivo de garantir e melhorar a qualidade do software em desenvolvimento. Abordamos que as técnicas de verificação têm por objetivo avaliar os artefatos produzidos à medida que são construídos, visando reduzir o retrabalho em caso de ajustes e reduzir o impacto de corrigir o que já está pronto. Vimos que as atividadesde verificação podem ser reuniões técnicas 136 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III formais ou não, revisão por pares ou inspeções e são essenciais para a garantia da qualidade de todos os artefatos produzidos durante o ciclo de desenvolvimento e não só ao seu final. Aprendemos ainda que as técnicas de validação visam avaliar os artefatos produzidos contra uma especificação inicial que serve de referência para validar se o que foi produzido atende àquelas necessidades especificadas. Normalmente são utilizados quando o produto de software está pronto. As atividades de validação podem ser inspeções, sala limpa, testes caixa‑branca e testes caixa‑preta. Lembrando que a especificação inicial deve ser validada pelo usuário antes da utilização pela equipe do projeto, caso contrário poderá tornar‑se uma referência incorreta e não aceita pelos usuários, causando erros no processo de validação. Vimos também que as revisões por pares ou passeios (walkthroughs) são a técnica mais simples para verificar a qualidade de um produto. Trata‑se de uma técnica essencial para atender a um princípio básico da qualidade, que é: “Quem faz não revisa”. Com a revisão por pares, os artefatos sofrem críticas em tempo de construção, permitindo a rápida correção de eventuais desvios encontrados. A revisão por pares pode ser formal ou informal, sendo esta última a mais utilizada pelas equipes de desenvolvimento. O objetivo é encontrar erros e defeitos nos artefatos. Em seguida, abordamos que as revisões técnicas formais também são técnicas de verificação e envolvem cenários de planejamento e preparação antes de uma sessão de revisão. Envolvem pelo menos três participantes (autor, revisor e mediador), com o objetivo de avaliar os artefatos quanto ao formato (capítulo, título, subtítulo, ortografia etc.) e quanto ao conteúdo técnico do documento. Devem ser planejadas e organizadas com antecedência e não devem durar mais de duas horas. Vimos também que a inspeção é uma técnica que pode ser usada tanto para a verificação como para a validação. Esta é a mais formal das reuniões de avaliação dos artefatos e envolve, pelo menos, cinco participantes: o autor, o inspetor, o leitor, o escritor e o moderador. Os artefatos que são objeto da inspeção e a especificação de referência devem ser enviados aos inspetores com antecedência, para a preparação da reunião. Todos os participantes têm o papel de inspetor e devem ser treinados e capacitados tecnicamente no assunto envolvido na inspeção. O processo de inspeção é iniciado pelo leitor, que faz a leitura do artefato por partes, para que os inspetores façam os questionamentos e apontamentos. O autor responde às questões, e o escritor registra as informações da inspeção. O moderador tem o papel de resolver conflitos entres as partes, e o checklist é um excelente apoio durante a sessão. 137 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Abordamos que a técnica sala limpa tem origem no processo de produção de componentes eletrônicos, e sua fundamentação é matemática e estatística. O processo sala limpa é indicado para sistemas que podem trazer riscos a vidas humanas, como controle de aviões, trens, usinas, dentre outros, e sua especificação deve ser precisa e sem ambiguidades, com formato matemático. Aprendemos que a verificação se dá por meio de inspeções rigorosas, provas matemáticas e testes estatísticos para determinar a confiabilidade do sistema e que isso a torna diferente de outras técnicas. Porém, seu uso é bastante limitado, em razão dos custos, da capacitação técnica exigida, do fundamento matemático, que afasta os desenvolvedores, e da falta de maturidade das empresas de desenvolvimento de software para uma utilização efetiva. Vimos ainda que, das técnicas de validação, a mais amplamente utilizada são os testes de software que envolvem a execução do código da aplicação para que possam ser realizados. A execução desses testes tem o mesmo fundamento: encontrar defeitos no código quando comparado com a especificação de referência. Abordamos que existem diversos tipos de testes, com abordagem funcional (usabilidade, caixa‑preta, dentre outros) e não funcional (desempenho, segurança, carga, configuração, confiabilidade, dentre outros), e ambos devem ser executados durante o processo de desenvolvimento do software. Além disso, existem os níveis de testes que começam com os testes unitários, com foco no código e realizados pelos desenvolvedores; os testes de integração, também realizados pelos desenvolvedores, mas com foco na verificação das regras de negócio; os testes de sistema, realizados pelos testadores e focados em validar o produto de software; e os testes de aceitação, realizados pelos usuários do sistema e acompanhados pelos testadores, com o objetivo de dar o aceite final ao software construído. Vimos que o processo de testes mais conhecido no mercado é o Modelo V, baseado no processo de desenvolvimento, desde o seu início até a entrega final ao usuário. Este considera a equipe de testes separada do time de construção. Preconiza que a atividade de testes deva começar junto com a fase de levantamento de requisitos, para que os analistas de testes tenham conhecimento do negócio e possam gerar bons casos de testes, a partir das especificações e do protótipo de telas. A partir dos casos de teste são elaborados os roteiros de testes, que devem ser executados pelas equipes de testes durante os testes de sistema e de aceitação. Esses testes são chamados funcionais ou caixa‑preta. 138 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III Aprendemos ainda que os testes estruturais ou caixa‑branca são aqueles focados no código‑fonte produzido e têm por objetivo garantir que todas as linhas de código sejam executadas pelo menos uma vez. Requerem que o código esteja pronto para serem executados. Utilizam uma técnica chamada de grafos de controle, que identifica os diversos caminhos independentes que o programa pode percorrer e, de posse desses caminhos, cria as massas de testes necessárias para garantir a aderência do código às situações previstas nos caminhos mapeados. São chamados de testes unitários e de testes de integração, caracterizando o ponto de partida para a qualidade de um software. Porém, são muito pouco utilizados, em razão das constantes pressões de prazos nos projetos e da resistência natural dos desenvolvedores a executar testes mais estruturados nessa fase. Vimos também os testes utilizados em processos ágeis, cujo objetivo principal é fazer mais rápido e com alta qualidade, com a participação de todos: desenvolvedores, usuários e clientes, para a entrega de um software que atenda às expectativas de todos. Os testes ágeis têm os mesmos níveis daqueles do processo tradicional e são divididos em quatro quadrantes: testes para suporte ao desenvolvedor, testes com foco no negócio, testes com foco no produto e testes com foco na tecnologia. Porém, diferem daqueles do processo tradicional pela participação efetiva do usuário na criação e na validação dos testes, utilizando o conceito “meu sucesso, seu sucesso”, e na automação dos testes de unidade e de integração que proporciona excelentes resultados na qualidade final do produto. Aprendemos que no processo ágil não há uma fase de testes específica, e a equipe não é separada do time de desenvolvimento. Os testes são realizados à medida que a codificação termina, e o feedback é imediato, ou seja, o defeito é apontado e corrigido na hora. Além disso, os testadores devem acompanhar a evolução das entregas de software, realizar os testes de aceitação junto com os usuários e garantir a qualidade dos testes técnicos, tais como os de carga, desempenho, segurança, dentre outros. Abordamos as principais técnicas de testes ágeis. Um deles é o TestDriven Development (TDD), cujo objetivo é apoiar os testes unitários do desenvolvedor e facilitar a automação desses testes para facilitar mudanças posteriores. Sua estrutura básica é especificar um teste, construir o código, executar o teste e melhorar o código por meio de refactoring. O outro teste é o Behavior Driven Development (BDD), cujo objetivo é apoiar o desenvolvedor nos testes integrados com foco nas regras de negócio por meio da elaboração de casos de testes, que podem ser executados na fase de testes de sistema. Finalmente, aprendemos que o processo de teste é a técnica mais utilizada no mercado para verificação e validação da qualidade, porém é sabido que não 139 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II podemos identificar todos os defeitos existentes somente com a realização de testes. É necessário um processo preventivo de revisão, inspeção, execução de checklists e definição de padrões e boas práticas de programação para que a qualidade seja parte integrante do processo de desenvolvimento do software e não requerer que, com a realização dos testes, se atinja a qualidade esperada somente ao final do processo de desenvolvimento. Exercícios Questão 1. As técnicas de verificação e validação são essenciais para manter a qualidade no processo de desenvolvimento de software e são chamadas popularmente de técnicas de V&V. Existem diversas técnicas, no entanto, das estudadas apenas uma utiliza como metodologia a revisão técnica informal denominada revisão por pares. O revisor pode ser um técnico, um cliente ou uma pessoa externa ao projeto, porém com amplo domínio no assunto. Das alternativas apresentadas a seguir, assinale qual é a técnica informal que se ajusta à metodologia de revisão por pares. A) Passeio (walkthrough). B) Inspeção. C) Sala limpa. D) Processo de especificação. E) RTF. Resposta correta: alternativa A. Análise das alternativas A) Alternativa correta. Justificativa: é uma técnica informal que utiliza revisão por pares, mas é possível ter até três participantes: autor, revisor e moderador. É uma técnica muito mais simples de executar quando comparada ao RTF. O alto grau de informalidade faz com que seja uma técnica bastante aplicada e facilmente aceita pela maioria das equipes de projeto. B) Alternativa incorreta. Justificativa: não é uma técnica informal, e sim formal, por meio da qual os envolvidos examinam os artefatos produzidos e os confrontam com uma especificação inicial com o objetivo de encontrar incoerências, inconsistências e possíveis erros. 140 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade III C) Alternativa incorreta. Justificativa: a técnica de sala limpa é baseada em especificações formais matemáticas e destinada ao desenvolvimento de software com alto nível de confiabilidade. D) Alternativa incorreta. Justificativa: não é uma técnica informal ou formal, é apenas um dos quatro processos nos quais está estruturada a técnica de sala limpa. E) Alternativa incorreta. Justificativa: não é uma técnica informal. O RTF é uma técnica de verificação formal. Questão 2. A atividade de teste de software sempre foi considerada como um gasto de tempo desnecessário, uma atividade de segunda classe, uma vez que a programação é a atividade principal no desenvolvimento de software. Atualmente são muitos os desenvolvedores que ainda confundem o processo de testes com o processo de depuração de um programa. Considerando o exposto, leia as afirmativas a seguir: I – Os testes são processos de depuração, mais conhecida como debug. Trata‑se de um processo de busca de erros de forma não estruturada durante a execução de um programa, através de uma ferramenta de apoio ao desenvolvimento: uma vez encontrado, o erro deve ser corrigido. II – Os testes são um processo que ocorre normalmente durante a atividade de programação e antes da execução da segunda etapa de testes propriamente dita. III – A execução de testes é uma busca estruturada para encontrar erros em um programa pronto. IV – Os testes devem ser realizados pelos desenvolvedores – por meio dos testes unitários; pelos testadores – por meio dos testes integrados guiados por roteiro de testes elaborados a partir da especificação inicial; e pelos usuários – por meio dos testes de aceitação, que verificam se o software atende às suas necessidades. É correto apenas o que se destaca em: A) I, II. B) I, II, III, IV. C) I, III. D) III, IV. E) I, IV. Resposta desta questão na plataforma. 141 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Unidade IV 7 MANUTENÇÃO DE SOFTWARE 7.1 Definição de manutenção de software As manutenções de software são correções, evoluções ou adaptações técnicas que são realizadas no software já construído e em produção, para adequá‑lo às mudanças de requisitos dos usuários, às novas funcionalidades solicitadas, para a atualização de regras de negócio e para a adaptação do software ao mercado ou às necessidades de atualizações tecnológicas que são demandadas durante o ciclo de vida de um software. Este é uma entidade viva, ou seja, precisa sofrer alterações e evoluções para continuar a ser utilizado de maneira adequada pelos usuários. As manutenções de software ocorrem não apenas para corrigir defeitos em um software; são bem mais amplas que isso. Surgem em razão de diversos fatores, mas se destacam pelas mudanças e alterações relacionadas a: • nova ordem estratégica na organização; • demandas para acompanhar os concorrentes; • adequação para atender a novas leis e regras; • novas características sugeridas por clientes; • evoluções da tecnologia. 142 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV Conceitos gerais sobre manutenção de software para alinhar nomenclatura Plano de manutenção Análise de recursos Processo de execução (ISO/IEC 12207) Medições e métricas Documentação e registro Definição do processo Análise da mudança Implementação da mudança Aceite e revisão da mudança Migração Retirada da produção Conceitos de manutenção Processos de manutenção Execução da manutenção Estratégia de manutenção Figura 52 – Estrutura da norma ISO/IEC 14764 Segundo Boehm (1988), a fase de manutenção é a mais problemática do ciclo de vida de um software e representa mais de 60% de todo o esforço em Tecnologia da Informação para uma organização. A maioria desses problemas está relacionada à maneira pela qual o software foi construído, normalmente, sem documentação ou documentação desatualizada, sem padrões de codificação, sem boas práticas de programação e, muitas vezes, sem controle adequado das evoluções, gerando um grande esforço das equipes para encontrar e corrigir defeitos ou para criar novas funcionalidades, fazendo a atividade de manutenção ser evitada pela maioria dos desenvolvedores. Com isso, acaba ficando nas mãos de desenvolvedores menos experientes, agravando o problema. A Norma ISO/IEC 12207, vista na unidade I, descreve um conjunto de atividades para a realização da manutenção de um software, apresentadas como um processo fundamental da área de Engenharia, mas a norma ISO/IEC 14764 (2006), que é apresentada neste tópico e cuja estrutura está representada na Figura 52, é específica para descrever o ciclo de manutenção do software, definindo os conceitos envolvidos em manutenção e estabelecendo um processo claro para tratar e apoiar os desenvolvedores nessa complexa etapa do ciclo de um software. Saiba mais Detalhes sobre a norma ISO/IEC 14764 podem ser obtidos em: . 7.1.1 Conceituação sobre manutenção de software A Norma ISO/IEC 14764 (2006) considera as seguintes definições para a unificação da terminologia utilizada no contexto de manutenção de software: 143 Re vi sã o: Ju lia na -D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • manutenção: modificação de um produto de software após a entrega para corrigir defeitos, melhorar o desempenho ou outros atributos, para adaptar o produto a um ambiente de mudança, incluir novas funcionalidades ou recursos não previstos anteriormente; • evolução: a evolução de software que gera uma nova versão do produto com um conjunto relevante de alterações solicitadas após a colocação do software em produção; • alteração: mudanças realizadas no código do software; engloba as correções de defeitos e os novos requisitos propostos pelo usuário; • melhoramento: mudança realizada no software com o objetivo de melhorar o desempenho, a segurança ou adaptá‑lo a novos ambientes; • linha de base: uma versão aprovada formalmente pelo cliente em um determinado momento do ciclo de vida do software; • pedido de mudança: termo utilizado para caracterizar a solicitação de uma mudança; após a correção, pode ser classificado como uma correção ou uma melhoria, conforme ilustrado na Figura 53; • plano de manutenção: documento que descreve as práticas específicas, os recursos e as atividades relevantes para a manutenção; esse documento é elaborado pelo responsável pela manutenção; • processo de manutenção: contém um conjunto de tarefas para a realização da manutenção; é disparado quando há um pedido de mudança para um produto de software. 7.1.2 Tipos de manutenção Ainda segundo a norma ISO/IEC 14764, as manutenções são classificadas em quatro tipos distintos e ilustradas na Figura 53: Pedido de mudança Correção Melhoria Manutenção adaptativa Manutenção preventiva Manutenção perfectiva Manutenção corretiva Figura 53 – Classificação de um pedido de mudança • Manutenção corretiva: são as ações efetuadas para corrigir defeitos encontrados em um software em produção normalmente identificados pelos usuários finais. Na maioria dos casos, essas 144 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV manutenções possuem equipe dedicada, são atividades rotineiras para a solução de defeitos e a atuação é reativa e emergencial. Esse tipo de manutenção tem características de proatividade e é planejado. • Manutenção perfectiva: são as ações de manutenção para incluir novas funcionalidades ou alterações que têm por objetivo satisfazer novas necessidades dos usuários. Surgem principalmente a partir da evolução do processo de negócio e para igualar ou superar concorrentes no mercado. • Manutenção adaptativa: são manutenções feitas para adequar o software a novas tecnologias, metodologias, modelos de gestão ou à nova legislação. Muitas vezes são tratadas de forma não planejada e reativa. • Manutenção preventiva: são manutenções proativas e planejadas para melhorar algum aspecto deficiente no software, como desempenho, segurança, defeitos ainda não identificados pelos usuários, usabilidade, dentre outros. Lembrete A manutenção perfectiva é mais conhecida no mercado como manutenção evolutiva. A classificação da manutenção em tipos permite o melhor direcionamento dos esforços e a alocação dos recursos humanos necessários para realizar as atividades de acordo com a demanda. De posse dessas informações, o plano de manutenção pode ser elaborado e aprovado pelos envolvidos, formalizando o processo de manutenção. Como pode ser observado na Figura 54, que apresenta a distribuição média dos esforços gastos por uma organização por tipo de manutenção, os esforços com as manutenções perfectivas ou evolutivas é bastante superior às manutenções corretivas e adaptativas. Observação As manutenções perfectivas e adaptativas, normalmente, são tratadas como um projeto de software, e não como atividade rotineira. 145 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Novas necessidades ou mudanças: 65% Correção de defeitos: 17% Adaptação à tecnologia: 18% Figura 54 – Distribuição de esforço por tipo de manutenção 7.2 Técnicas e padrões de manutenção de software Um dos principais requisitos, já destacados por McCall, Richards e Walters (1977), para a manutenção de um software é a preocupação constante com a manutenibilidade deste, desde a sua concepção e durante todo o seu ciclo de vida. A manutenibilidade indica quão fácil é fazer uma alteração, uma correção ou uma melhoria em um determinado software e é qualificada em função da preocupação com a clareza e as boas práticas da codificação, o uso de padrões no projeto e a boa documentação elaborada durante o desenvolvimento. Embora o grau de manutenibilidade seja qualitativo, algumas métricas podem ser utilizadas pelas organizações visando avaliar a facilidade de manutenção e criar mecanismos para correção, tais como: • Em quanto tempo um defeito é encontrado? • Quanto tempo leva para corrigir o defeito? • Quanto tempo é necessário para validar a correção do defeito? • Quanto tempo decorre entre a identificação do defeito e a implantação da correção? Lembrete Métricas quantitativas são criadas para que, a partir de uma avaliação inicial, sejam feitas medidas constantes a fim de que o processo possa ser melhorado dentro de um período de tempo. 146 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV 7.2.1 As atividades de manutenção A execução da atividade de manutenção é iniciada por uma solicitação de mudança de um usuário do sistema e submetida à avaliação de um grupo responsável por aprovar a mudança. Uma vez aprovada, esta é encaminhada à gerência da manutenção, que irá classificar e priorizar o seu desenvolvimento, e, após isso, a mudança será construída. O ciclo de desenvolvimento de uma manutenção segue os mesmos passos que o da construção de sistema novo. Análise do pedido de mudança Cçassificação e priorização Realização da manutenção Figura 55 – Atividades para a realização de uma manutenção Porém, existem exceções para aquelas manutenções chamadas de emergenciais, como correção de defeitos em produção, alterações críticas no ambiente ou regras de negócio essenciais para o bom funcionamento da aplicação. Esse fluxo é apresentado na Figura 55. 7.2.2 Papéis e responsabilidades na manutenção Em uma manutenção, a determinação de papéis e responsabilidades claros permite a execução de um fluxo de trabalho estruturado, reduz substancialmente os conflitos e melhora o processo de comunicação. Os principais papéis em uma manutenção estão expostos a seguir. Equipe de manutenção Gerência de manutenção Gerência de de TI Usuários finais Responsáveis pelo produto Figura 56 – Atividades para a realização de uma manutenção • Usuários: são os usuários finais do produto de software. Normalmente, são eles que identificam os defeitos que exigem correções imediatas ou apontamento de melhorias necessárias na aplicação. Também são responsáveis pelo aceite final das alterações executadas. 147 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • Responsáveis pelo produto: são aqueles que solicitaram o software original. São responsáveis pela evolução de negócio da aplicação tratada pelas manutenções evolutivas e por prover os recursos financeiros para a realização das manutenções do sistema. Também devem dar o aceite nas melhorias e participar do processo de análise da mudança, podendo acatar ou não as solicitações feitas pelos usuários. • Gerência de TI: são aqueles que cuidam da aplicação e são responsáveis pelo ambiente técnico e pela evolução tecnológica do software (manutenções adaptativas). Devem sugerir melhorias técnicas aos responsáveis pelo produto, manter o software operando de maneira adequada e participar da análise dos pedidos de mudança. • Gerência de manutenção: é o responsável técnico por cuidar das manutenções aprovadas. Analisa, classifica e prioriza as manutençõesem conjunto com o responsável pelo produto a fim de determinar o que e quando as solicitações de mudança serão atendidas. • Equipe de manutenção: realiza as mudanças aprovadas e priorizadas pela gerência. Normalmente atendem as solicitações de alteração emergenciais e pequenas melhorias. As mudanças maiores, na maioria das vezes, são tratadas como um projeto à parte. 7.2.3 Manutenção de sistemas legados Um software legado é uma aplicação desenvolvida no passado e que ainda está em uso numa organização. Trata‑se de aplicações que sofreram muitas mudanças e adaptações, possuem tecnologia obsoleta, cuja documentação é praticamente inexistente e não há mais pessoas que participaram do desenvolvimento original. Em razão dessas características, tais softwares são bastante sensíveis a novas mudanças e se gasta mais tempo e dinheiro para executar as alterações. Portanto, qualquer mudança deve ser cuidadosamente analisada, e testes rigorosos devem ser realizados para evitar surpresas desagradáveis durante o desenvolvimento ou na fase de aceite pelos usuários. 7.2.4 Engenharia reversa Segundo Chikofsky e Cross II (1990), engenharia reversa é um processo de análise e entendimento de um produto de software, com o objetivo de recapturar e decifrar os seus requisitos a partir da sua codificação existente para melhorar a qualidade do produto, reduzir custos de manutenção e atualizar tecnicamente o software. A engenharia reversa é uma forma de manutenção muito utilizada para criar novos produtos de software a fim de substituir os sistemas legados, em razão das dificuldades que as organizações têm para manter esses sistemas legados funcionando adequadamente. 7.2.5 Técnicas de manutenção As manutenções em um software podem ser classificadas em dois tipos básicos: a manutenção não estruturada e a manutenção estruturada. 148 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV A manutenção não estruturada é aquela na qual a análise de um pedido de manutenção é feita por uma verificação direta no código‑fonte, uma vez que este é a única documentação disponível no produto existente. Trata‑se de uma atividade demorada, delicada e não é possível verificar os requisitos não funcionais da aplicação. Cada correção de defeito é um desafio. Na maioria das vezes, essa manutenção é executada por pessoal com pouca experiência e com pouco conhecimento do software, o que gera desmotivação e insatisfação da equipe e dos usuários. A manutenção estruturada é aquela que é executada em um software que tem uma estrutura documentada e que foi construído seguindo as melhores práticas de desenvolvimento de software. Nesse tipo de manutenção, a análise e a correção de defeito são mais rápidas e menos custosas para desenvolvedores e usuários, tornando os resultados melhores e com maior qualidade. 7.2.6 Custos de manutenção Os custos com a manutenção de uma aplicação são bem superiores aos custos de desenvolvimento de um software novo, pois o tempo de vida do software em manutenção é bem maior do que o tempo de criação. Além disso, à medida que o software vai sofrendo modificações por diversas pessoas ao longo da sua vida útil, as alterações vão se tornando cada vez mais complexas e demoradas. Como exemplo, podemos citar os sistemas legados, vistos anteriormente. De acordo com Chikofsky (1990), os seguintes fatores são relevantes e afetam diretamente os custos de manutenção de um produto de software durante o processo de manutenção: • Estabilidade da equipe: se a equipe de manutenção for fixa e tiver baixa rotatividade, os custos com a manutenção serão menores e a produtividade será maior que numa situação de trocas constantes. • Responsabilidade contratual: um software novo é desenvolvido por uma equipe por meio de um projeto. Não há garantia, para essa equipe, de que a manutenção será de sua responsabilidade, portanto não há motivação para criar um software de fácil manutenção. A saída é fazer a revisão e a inspeção do software enquanto é produzido. • Habilidade da equipe: as atividades de manutenção não são consideradas nobres pelos desenvolvedores, e a equipe designada, com frequência, tem menos experiência e pouco conhecimento do negócio. 7.3 Processos de manutenção Um processo de manutenção define o conjunto de atividades necessárias para a realização de uma modificação em um produto de software para que este atenda as necessidades dos usuários. A Norma ISO/IEC 14764 (2006) define um processo de manutenção que descreve as tarefas e atividades necessárias para modificar um produto de software, mantendo sua integridade. Vale lembrar que o processo de manutenção não determina como fazer o desenvolvimento da manutenção, mas 149 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II descreve as atividades de identificação da mudança, análise e aceitação das mudanças, eventual migração ou retirada do software de produção. As atividades que compõem o processo de desenvolvimento são: • definição do processo de manutenção; • análise das mudanças; • desenvolvimento da mudança; • aceitação e revisão da mudança; • migração; • retirada do software de produção. Essas atividades são apresentadas na Figura 57, exceto a atividade de desenvolvimento da mudança, que trata do processo de desenvolvimento de software que é direcionado para a norma ISO/IEC 12207. Na prática, significa que a organização pode utilizar a sua própria metodologia para implementar as manutenções identificadas. Definição do processo de manutenção Migração Retirada de produção Análise das mudanças Aceitação/revisão da mudança Figura 57 – Atividades para a realização de uma manutenção 7.3.1 Definição do processo de manutenção A definição do processo de manutenção envolve a criação do procedimento a ser adotado pela equipe de desenvolvimento para a execução de uma manutenção. O procedimento deve descrever o que deve ser feito desde o pedido de manutenção até o seu aceite por parte dos usuários envolvidos. Além disso, deve determinar os papéis e as responsabilidades dos envolvidos no processo de manutenção. Conforme ilustrado na Figura 58, a partir de um pedido de mudança, a equipe de manutenção deve identificar o tipo de manutenção, por exemplo: uma correção ou uma nova funcionalidade. Se for uma nova funcionalidade, a equipe de manutenção deverá fazer a análise, a classificação e a priorização da mudança. Se for uma correção de defeito, deverá primeiro avaliar a gravidade. Se for uma ocorrência 150 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV em produção, a mudança deverá ser executada imediatamente, caso contrário passará pelo processo de avaliação. Porém, esse procedimento é apenas um exemplo, podendo a organização estabelecer o processo que melhor se adapta a sua situação cotidiana. 7.3.2 Análise das mudanças A análise de mudanças envolve o conjunto de atividades para entender o que precisa ser realizado, classificar o tipo de manutenção envolvida e o tempo necessário para a implementação da mudança. Deve ser realizado por um grupo de manutenção que envolva o pessoal de desenvolvimento e os usuários, a fim de determinar corretamente o tipo e a prioridade da alteração solicitada. Essas atividades envolvem: • analisar o pedido de mudança, identificar o seu tipo e definir claramente os requisitos da manutenção; • identificar o que precisa ser realizado no código e realizar a documentação do sistema; • criar as opções de alterações possíveis e estimar pessoal e tempo de alteração necessário para a opção escolhida; • submeter a solução à aprovação dos usuários. A análise da mudança é diretamente afetada pelo fato de a classificação da manutenção ser estruturada ou não estruturada. Como visto anteriormente, as manutenções não estruturadas trazem complicações à análise e maiores riscos à mudança que precisa ser realizada.Detalhamento da mudança Detalhamento da mudança Análise da mudança Documentação e encerramento Pedido de mudança Classificação da mudança Implementação imediata Classificação e priorização da mudança Baixa gravidade Urgente AprovaAprova Não aprova Não aprova DefeitoNova Figura 58 – Exemplo de um fluxo de processo de manutenção 151 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 7.3.3 Aceitação e revisão da mudança Envolvem as atividades para garantir que a mudança esteja corretamente implementada e atenda aos requisitos solicitados. Além de incluir as atividades de garantia da qualidade, deve prever o aceite da mudança efetuada pelo usuário. Algumas atividades envolvidas são: • revisões; • inspeções; • testes; • testes de regressão; • processo de aceitação. Após o aceite da manutenção, a documentação deve ser atualizada e arquivada, além de ser necessária a geração da nova linha de base da aplicação. Observação No caso de não existir um roteiro de testes da aplicação, a equipe de manutenção deve criar um roteiro específico para a mudança que está em desenvolvimento. 7.3.4 Migração No ciclo de vida de um software podem ocorrem mudanças que exijam migrar os dados de um ambiente para outro. Normalmente, ocorrem em função de uma mudança adaptativa ou da realização da engenharia reversa em alguma aplicação. A migração dos dados é uma tarefa delicada e exige a elaboração de um plano de migração para a garantia da integridade das informações. Esse plano de migração deve conter: • análise dos requisitos e definição da migração; • criação do processo de de‑para da migração; • definição de conversões de dados necessárias; • identificação dos riscos da migração; • execução do processo de migração; 152 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV • verificação dos resultados da migração; • definição do processo de validação dos usuários; • criação de um processo de retorno, em caso de insucesso da migração; • atualização da documentação. Uma vez elaborado o plano de migração, a equipe de manutenção deve apresentá‑lo aos usuários para que seja avaliado em conjunto e aprovado por todos os envolvidos no processo. Além disso, deve descrever e apresentar aos usuários as necessidades relacionadas às pessoas e ao tempo de dedicação necessário para a execução das atividades de migração. Observação O termo de‑para significa que o desenvolvedor deve identificar, para cada campo da tabela de dados Origem, qual o seu equivalente na tabela de dados Destino. 7.3.5 Retirada de produção Consiste em uma análise técnica ou econômica para determinar se o software deve permanecer em produção ou ser descontinuado. Essa decisão deve ser conjunta, entre a equipe de desenvolvimento e os usuários, a fim de garantir o investimento necessário para a manutenção do software existente ou para a aquisição ou o desenvolvimento de um novo produto. Após a decisão pela descontinuidade, é elaborado o plano de retirada de produção envolvendo o tempo em que a manutenção deve permanecer em operação até a desativação do sistema, o tempo de transição (paralelismo) entre o novo sistema e o sistema atual, a obtenção e a documentação dos requisitos do sistema a ser descontinuado, o plano de migração de dados e o registro e o arquivamento da documentação. Lembrete A descontinuidade de um software não tem prazo determinado. Tudo depende de como foi construído, de como atende aos usuários atualmente e dos custos para mantê‑lo funcionando. 7.4 Impactos na manutenção Como visto até aqui, a manutenção é diretamente afetada pela forma que o software foi construído, a qual pode gerar maior ou menor esforço e mais ou menos custos durante o ciclo de manutenção, causando impactos diversos no processo. 153 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Destacam‑se os impactos gerados pelas práticas mais comuns no mercado de Tecnologia da Informação: o desenvolvimento orientado a objetos, o desenvolvimento baseado em componentes e os processos de desenvolvimento ágeis, que são abordados a seguir e ilustrados na Figura 59. Desenvolvimento orientado a objetos Desenvolvimento baseado em componentes Impactos de manutenção Processos ágeis Figura 59 – Impactos na manutenção de software baseado em métodos ágeis 7.4.1 Desenvolvimento orientado a objetos O desenvolvimento orientado a objetos se baseia em objetos do mundo real que interagem entre si e são acionados por pessoas do mundo real chamadas de atores. Um projeto orientado a objetos é composto de classes que são a representação de um objeto de negócio do mundo real com suas próprias características (atributos) e seus próprios comportamentos (métodos) que executam as ações necessárias para o negócio. Sua implementação garante códigos reduzidos nos métodos e responsabilidade dos objetos, permitindo a extensão desses comportamentos. A codificação se dá pela interação desses objetos, permitindo a separação clara das responsabilidades e ações de cada classe. Os conceitos de herança e agregação aumentam a capacidade de adaptação de um software desenvolvido com orientação a objetos. A concepção do projeto normalmente é no padrão Model View Controller (MVC), em que cada camada view é responsável pela interface com o usuário, a camada model, pela construção das regras de negócio, e a controller, pela ligação entre as camadas view e model. A construção orientada a objetos associada ao padrão MVC permite o perfeito isolamento das funções e a evolução da aplicação. Por exemplo, um software orientado a objetos no padrão MVC viabiliza a existência de aplicações para qualquer mídia na camada visual, e a camada de negócio permanece sem alterações. Seguindo os princípios básicos da orientação a objetos e do padrão de arquitetura MVC na construção de um software, vários impactos podem ser destacados na manutenção de uma aplicação. Destacam‑se os seguintes durante o processo de manutenção, ilustrados no Quadro 21: 154 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV Quadro 21 – Impacto na manutenção de software desenvolvido com orientação a objetos Tipo Impacto Observações Corretiva Ajuste pontual nas classes envolvidas Testes devem ser realizados em todas as funcionalidades que utilizam as classes alteradas. Teste de regressão é recomendado Perfectiva O modelo objeto permite a extensão das classes existentes e a criação de novas classes sem afetar a aplicação existente Depende da correta modelagem dos objetos para garantir que as classes existentes tenham apenas extensões e não se modifique o que já está funcionando Os testes devem envolver o que foi criado de novo e os testes de regressão das demais funcionalidades Adaptativa Pela estrutura de objetos, deverá gerar alterações nas classes envolvidas e nas camadas que incluírem novos comportamentos Demandam a realização de testes completos do sistema Preventiva Dependerá da alteração que for gerada pelo processo A alteração pode gerar uma manutenção corretiva, perfectiva ou adaptativa 7.4.2 Desenvolvimento baseado em componentes O desenvolvimento baseado em componentes tem como objetivo criar estruturas de código que possibilitem a sua utilização em mais de um sistema. Esse conceito é conhecido como reúso e tem se tornado uma abordagem comum no mercado de Tecnologia da Informação. A ideia é criar componentes que não sejam específicos para um determinado sistema, mas com uma visão de uso genérico para atender a todos os sistemas. Por exemplo, ao criar uma classe‑cliente para um sistema de vendas, o projetista deve pensar que essa classe pode ser usada no sistema de cobrança, no de faturamento, dentre outros. Os benefícios fornecidos por uma abordagem baseada em componentes são: criar uma estrutura de código que aumenta a velocidade de desenvolvimento dos sistemas e atender à demanda dos sistemas atuais, que se tornam cada vez maiores e mais complexos. Na visão da manutenção para sistemas baseados em componentes, podemos analisar os impactos a partir das alterações nos componentes construídos e submetidos a mudanças pelos processos de manutenção, ilustrados no Quadro 22: Quadro 22 – Impacto na manutenção de software desenvolvido com base em componentes Tipo Impacto Observações Corretiva As correções nos componentes são mais delicadas, em razão do uso genérico. As correções devem ser publicadas para todos os que utilizam o componente Necessários testes rigorosos com o componente e as partes dos sistemas que o utilizam, antes de colocar em produção Perfectiva Alterações evolutivas nos componentes devem manter a compatibilidade com as versões anteriores. Os componentes não podem ser simplesmente alterados e devem manter o legado estável Necessários testes com as novas funções do componente e dos sistemas que o utilizam Adaptativa Evoluções tecnológicas devem gerar novas versões dos componentes. Não alterar os existentes Testes rigorosos com os novos componentes como se fossem criados no momento Preventiva Depende da alteração que for gerada pelo processo A alteração pode gerar uma manutenção corretiva, perfectiva ou adaptativa 155 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Saiba mais Para mais informações sobre o desenvolvimento baseado em componentes e orientado a objetos, consulte o livro: SOMMERVILLE, I. Engenharia de software. São Paulo: Pearson, 2013. 7.4.3 Desenvolvimento ágil O desenvolvimento ágil é um processo de desenvolvimento de software, e não uma estrutura para construir um software. Suas características estão relacionadas à rapidez, à integração cliente‑equipe e à alta qualidade durante o ciclo de construção, podendo utilizar uma estrutura orientada a objetos ou baseada em componentes. Portanto, a manutenção é afetada pelas características do processo ágil que alteram profundamente a relação cliente‑desenvolvedor, e não pela estrutura de construção da aplicação. O desenvolvimento pode utilizar tanto a orientação a objetos quanto o desenvolvimento baseado em componentes. Olhando sob o aspecto dos processos ágeis, podemos analisar os impactos da manutenção da seguinte forma, no Quadro 23: Quadro 23 – Impacto na manutenção de software baseado em métodos ágeis Tipo Impacto Observações Corretiva No processo ágil, a correção é realizada de forma interativa para atender rapidamente ao usuário Validações são realizadas ao fim da codificação Perfectiva Novas funcionalidades são tratadas como mudanças no software O uso de métodos ágeis na manutenção implica a existência de equipe treinada e que entenda do negócio em evolução Adaptativa Tratadas como um novo projeto de acordo com o método ágil Deve seguir o padrão de desenvolvimento ágil utilizado Preventiva Dependerá da alteração que for gerada pelo processo A alteração pode gerar uma manutenção corretiva, perfectiva ou adaptativa É importante salientar que, independentemente do processo de desenvolvimento ou da arquitetura utilizada para a criação do software, a manutenção sempre apresentará alto grau de dificuldade no gerenciamento e no controle das alterações, pois sempre impactará diretamente os usuários finais que já utilizarem o software em produção, podendo trazer impactos à imagem da empresa e também à parte financeira. 8 GESTÃO DA CONFIGURAÇÃO O Gerenciamento de Configuração de Software (GCS), também conhecido como Software Configuration Management (SCM), é um processo da engenharia de software que tem por objetivo estabelecer as condições para a organização dos artefatos de software, controlar suas versões e suas alterações, manter a integridade de tudo o que foi produzido durante o ciclo de vida de um projeto de software e garantir seu armazenamento adequado. Esses conceitos são ilustrados na Figura 60. 156 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV 8.1 Conceitos de gestão da configuração Segundo o SEI (2006), a gestão de configuração envolve identificar o que deve ser controlado, gerenciar suas alterações e manter a integridade e a rastreabilidade dos artefatos de um software. Os objetivos essenciais da GCS são: aumentar a produtividade do time, diminuir o esforço manual de controle e reduzir os erros causados pela falta de controle dos artefatos de projeto. Já que uma mudança pode ocorrer a qualquer tempo, as atividades de GCS são desenvolvidas para: Relatar a mudança Controlar a mudança Garantir sua implementação Identificar a mudança Definição Todo o processo Figura 60 – Conceitos de gestão da configuração de software Lembrete Manter a integridade dos artefatos significa garantir que, dado um artefato, somente pessoas autorizadas podem alterá‑lo, e todas as alterações serão registradas. 8.1.1 Problemas mais comuns Durante o ciclo de desenvolvimento de um software são produzidos vários artefatos solicitados pelo cliente, pela metodologia e pelos usuários, bem como diversos arquivos de código‑fonte. Manter esse conjunto de artefatos organizado e controlado não é uma tarefa trivial, principalmente, quando o número de desenvolvedores é muito grande, trabalhando em locais físicos diferentes e compartilhando esses artefatos com outras equipes e com o próprio cliente. As seguintes frases são muito ouvidas em cenários de desenvolvimento de software: “Qual versão do documento de requisitos enviamos ao cliente, mesmo?”, “Quem enviou?”, “Procure no e‑mail...”. São comentários assustadores em qualquer ambiente de projeto de software. 157 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II São apresentadas, a seguir, situações corriqueiras que envolvem essa concorrência pela informação, compartilhamento de arquivos e o controle sistemático desses artefatos produzidos. Observação Para fins conceituais, artefato é todo e qualquer documento produzido durante o projeto, inclusive o código‑fonte. 8.1.1.1 Problema 1 – Relacionado a desenvolvedor com os artefatos isolados Embora o projeto tenha vários desenvolvedores, um desenvolvedor trabalha na sua própria máquina, mantendo os arquivos sob seu domínio e, eventualmente, coloca‑os no servidor, mas continua alterando a versão na sua própria máquina, como na Figura 61. Figura 61 – Exemplo de desenvolvimento isolado Nesse cenário, quando outro desenvolvedor precisar modificar o artefato, ele irá buscar no servidor, e a versão poderá estar desatualizada, ou nem estar disponível. 8.1.1.2 Problema 2 – Relacionado a artefatos compartilhados Esse problema ocorre quando dois ou mais desenvolvedores estão fazendo alterações no mesmo artefato. Nessa situação, o desenvolvedor A modifica o artefato, e, mais tarde, o desenvolvedor B também faz alterações no mesmo artefato, sem saber que ele já foi alterado pelo desenvolvedor A, conforme ilustrado na Figura 62. Versão 1 Versão 2 Figura 62 – Exemplo de artefatos compartilhados 158 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV Como consequência, quando o desenvolvedor A tentar compilar o artefato, serão apontados erros, mas nenhum deles causado pelas alterações que ele fez. 8.1.1.3 Problema 3 – Relacionado a manutenção simultânea Ocorre quando cada desenvolvedor trabalha com uma cópia local do artefato, gerando dificuldades para identificar o que já foi realizado e para saber que defeitos foram corrigidos, conforme a Figura 63. Artefato A Artefato B Desenvolvedor BDesenvolvedor A Figura 63 – Exemplo de manutenção simultânea Nesse cenário, há grande dificuldade para identificar qual é a versão correta a ser utilizada no software. 8.1.1.4 Problema 4 – Relacionadoao ser executada. O prazer vem ao final, quando o cliente recebe o produto de software 10 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 com poucos erros, o programador faz poucas alterações no código que produziu e alguém, ao efetuar a manutenção desse software, diz: “Nossa! Como está fácil fazer essa alteração!”. Enfim, nem sempre você poderá presenciar esses resultados, mas saberá que fez o seu melhor, e isso é o mais importante. A partir desse cenário, ao conhecer as características que traduzem um software de qualidade, saber quais são os processos e modelos de qualidade mais utilizados e praticados no mercado de trabalho torna você um profissional diferenciado, uma vez que a maioria dos profissionais está apenas preocupada com a programação dos computadores e se esquece de que esta é somente a atividade‑fim de um processo de construção. Dominando esses requisitos básicos do que é produzir um software de qualidade, passamos a explanar e conhecer as técnicas e ferramentas que permitem definir o como fazer, que irá direcionar as atividades de qualidade durante todo o processo de desenvolvimento, desde o levantamento de requisitos até a programação, para que os resultados sejam avaliados constantemente durante o ciclo de vida, e não apenas ao seu final, como é feito na maioria das empresas. Como resultado dessa preocupação com a qualidade do que é produzido, as manutenções preventivas e evolutivas do sistema tornam‑se mais fáceis e rápidas, gerando satisfação a todos os envolvidos no trabalho. Para dar suporte a esse processo de construção de um software de qualidade e com facilidade de manutenção, faz‑se necessário um processo bem‑definido para controlar todos os artefatos e códigos produzidos, a fim de que não se percam versões, documentos e outros elementos essenciais para manter a integridade e a confiança no produto e permitir que apenas pessoas autorizadas façam modificações no software final. Enfim, dominando esses assuntos e aplicando as técnicas apresentadas, você terá um grande diferencial em relação aos outros profissionais: saberá produzir software com qualidade. 11 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Unidade I 1 CONCEITOS SOBRE QUALIDADE DE SOFTWARE Na Engenharia de Software, a área de qualidade tem como objetivo garantir que, ao final, o software esteja de acordo com as características definidas pelos usuários no início e no decorrer do processo de desenvolvimento da aplicação. Segundo a norma NBR ISO (2000a), qualidade de software é definida como um conjunto de características que devem ser alcançadas em um determinado grau para que o produto atenda às necessidades de seus usuários. A totalidade de características de uma entidade que lhe confere a capacidade de satisfazer a necessidades explícitas e implícitas. Há um consenso entre os diversos autores da área de qualidade de que o objetivo principal da qualidade é proporcionar a satisfação dos clientes por meio do atendimento das necessidades especificadas e também dos requisitos implícitos do software. Conforme ilustrado na Figura 1, para Crosby (1990), existem cinco princípios básicos da qualidade que, se seguidos, produzirão melhores resultados: 1) Fazer certo da primeira vez economiza tempo e dinheiro. Ao se preocupar em produzir com qualidade desde o primeiro momento, as atividades de correção de erros diminuirão e, por consequência, haverá redução dos custos e cumprimento dos prazos estabelecidos. 2) Qualidade é um processo preventivo. A qualidade deve ser aplicada desde o primeiro momento, e não só após o produto estar pronto. 3) Qualidade é incorporada ao produto como resultado da atenção dedicada às necessidades dos clientes. Logo no início do processo de desenvolvimento, devem‑se identificar e definir os padrões de qualidade esperados pelos clientes, a fim de construir o software alinhado a essa expectativa. 4) Qualidade é responsabilidade de todos os envolvidos. Não basta que a gerência esteja preocupada com a qualidade. Cada membro da equipe deve ter a consciência de que deve fazer o melhor possível sempre, bem como assumir a responsabilidade por isso. 12 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I 5) Qualidade é um processo de melhoria contínua. Em todos os processos, sempre há o que pode ser melhorado. A qualidade não foge à regra. Cada vez que produzimos algo, aprendemos e aperfeiçoamos, sempre em busca de fazer melhor da próxima vez. Fazer certo na primeira vez Processo preventivo Responsabilidade de todos Melhoria contínua Atenção às necessidades dos usuários Figura 1 – Princípios básicos da qualidade Observação Envolvidos no projeto são todos aqueles que participam do projeto de software direta ou indiretamente. Esses envolvidos também são chamados de interessados ou stakeholders. 1.1 Benefícios da qualidade Embora existam várias iniciativas sobre a qualidade de software, muitas empresas de Tecnologia da Informação ainda permanecem na situação denominada caos, significando que o software é produzido com base em pessoas, e não em processos. A partir da conscientização de todos de que a qualidade pode transformar o cenário atual, processos e métodos são introduzidos gradativamente para alcançar o grau de organização necessário para que a empresa usufrua dos benefícios da qualidade, conforme ilustrado na Figura 2. Observação OS envolvidos devem ser identificados logo nas fases iniciais do projeto. Os principais são: o patrocinador, os clientes, os usuários finais e os fornecedores. Alguns benefícios podem ser observados como resultado direto da produção de um software com qualidade: • aumento da produtividade; • redução de defeitos no produto; • aumento da confiabilidade do produto; 13 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • menos retrabalho; • menos horas extras de trabalho; • maior satisfação dos clientes. Caos Qualidade Organização Figura 2 – Evolução com a conscientização sobre a qualidade 1.2 Obstáculos da qualidade Fazer software com qualidade, porém, não é uma tarefa fácil. Há sempre um conjunto de fatores internos e externos que são opostos às boas práticas e que acabam por criar dificuldades à implementação do processo de qualidade em uma empresa e até mesmo a ações individuais de melhoria. Alguns desses fatores são descritos na Figura 3. Cultura da organização Cultura da organização Custo e prazo maldefinidos Envolvidos não identificados Figura 3 – Obstáculos à qualidade de software Lembrete A cultura da organização é um dos principais obstáculos à qualidade. O conceito “Se está dando certo, por que mudar?” contribui para uma resistência ainda maior da equipe de desenvolvimento. As aplicações de software estão a cada dia mais complexas para construir, testar e navegar, em virtude da evolução de tecnologias como tablets, smartphones, dentre outros, bem como das interfaces para a internet que são cada vez mais interativas com o usuário, o que aumenta o grau de dificuldades das aplicações. 14 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I Custos e prazos maldefinidos são uma constante em virtude da pressão, do mercado e da própria concorrência que os clientes vêm sofrendo para o lançamento de novos produtos. Esses dois fatores levam as equipes a abandonarem os processos de qualidade para atender ao tempo e aos custos do projeto que são prioridades para a direção da empresa. Por último, um novo produto de software é iniciado sem o correto esclarecimento a todos os envolvidos, e, muitas vezes, estes não são nem notificados sobre esses produtos, o que causa surpresas e problemas no atendimento às necessidades desses envolvidos. 1.3 Visões da qualidade Como mencionado nos obstáculoscom atualizações simultâneas Essa situação ocorre quando um desenvolvedor A corrige um problema em sua versão de artefato e armazena‑o num repositório central. O desenvolvedor B corrige outro problema no mesmo artefato e também o armazena no repositório central, ilustrado na Figura 64. Versão A Versão B Desenvolvedor BDesenvolvedor A Figura 64 – Exemplo de atualização simultânea 159 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II No cenário descrito, os desenvolvedores não se preocupam com quem atualizou o quê, gerando retrabalho para todos. A gestão da configuração existe para solucionar esses problemas e outros que surgem em relação à efetiva organização dos artefatos, permitindo à equipe de projeto ter mais rapidez na identificação e na solução de problemas, identificar quem fez as mudanças ao longo do tempo, controlar as versões desses artefatos e estabelecer padrões para toda a equipe. 8.1.2 Conceitos de gestão da configuração Os profissionais de Tecnologia da Informação costumam confundir o termo manutenção com configuração, e o termo configuração com controle de versões, dentre outros. Visando ao melhor alinhamento do vocabulário, esses conceitos diferentes são vistos a seguir: • Manutenção: mudanças e/ou alterações que são realizadas no software após sua conclusão e entrada em produção. Necessariamente, envolve alterações no código‑fonte ou no ambiente da aplicação. • Configuração: atividades de gerenciamento de todo o fluxo dos artefatos produzidos em um software, desde seu início até sua descontinuidade. Para isso, envolve o uso de ferramentas e não altera código de programas. • Controle de versões: uma das atividades da GCS. Envolve o uso de uma ferramenta que controla o armazenamento dos artefatos e gerencia todas as alterações que esse artefato possa sofrer durante seu ciclo de vida. • Itens de configuração: artefatos criados como parte do processo de desenvolvimento de um software. Uma vez identificados e determinados como controlados, esses itens de configuração vão estar sob a gestão da configuração. • Baseline: fotografia do momento de um artefato, quando este é aprovado pelo cliente. Após a criação desta baseline, esse artefato só poderá sofrer alterações mediante autorização e aprovação formal do cliente, o que gera uma nova baseline. Trata‑se de um ponto de controle no desenvolvimento de software, caracterizado pela entrega de um item de configuração para aprovação formal, por meio de uma RTF, por exemplo. Os artefatos que necessitam de criação de baselines são definidos pelos desenvolvedores e pelo cliente nas fases iniciais do projeto, e alguns exemplos por fase de desenvolvimento são ilustrados na Figura 65. 160 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV Engenharia de sistema Especificação de sistema Especificação de requisitos Especificação de projeto Código‑fonte Planos de testes Análise de requisitos Projeto de software Codificação Testes Figura 65 – Exemplo de artefatos que precisam de baseline 8.2 Processo de gestão da configuração Antes de descrever as tarefas, é preciso definir a estrutura de armazenamento dos artefatos, a nomenclatura de cada um dos artefatos envolvidos no processo de gestão da configuração e quem pode fazer o quê com os artefatos. Inicialmente é necessário identificar como os nomes dos artefatos são descritos. O nome deve conter um conjunto de caracteres que defina o artefato em si de modo único e contenha o nome do projeto e a versão a que se refere. Essa denominação é predefinida pela equipe de gestão de configuração da organização para atender todo o processo de desenvolvimento de software. Por exemplo, para denominar os artefatos para o projeto XPT001 que tem os seguintes itens de configuração: Tabela 10 – Artefatos e respectivas nomenclaturas Artefato Nomenclatura Documento de requisitos XPT001_DOCREQ_V1.0. Especificação de casos de uso XPT001_ESPEC_UC_V1.0 Modelo de dados XPT001_MER_V1.0. Uma vez definida a nomenclatura dos artefatos, é preciso ter também a estrutura de armazenamento, que corresponde à árvore de diretórios nas quais os artefatos são distribuídos no projeto. Também são predefinidos pela equipe de gestão da configuração. Um exemplo dessa estrutura para o projeto XPT001 é apresentado a seguir. /XPT001 /versao1.0 /Analise /Projeto /Codificação /Testes /versao1.1 /Analise /Projeto /Codificação 161 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Definidos a árvore de diretórios e os artefatos que fazem parte do GCS, o controle de acesso de segurança para eles também terá de ser definido. O controle de acesso é realizado com base na equipe do projeto fornecida e com as permissões atribuídas pelo gerente. Por exemplo, programadores têm acesso a leitura e gravação na pasta Codificação, mas apenas de leitura nas pastas Análise e Projetos. Uma vez definida a nomenclatura, o controle de acesso à informação e a estrutura de organização dos artefatos, é necessária a definição do processo de gestão da configuração, que é dividido em cinco tarefas básicas: • identificação dos itens de configuração; • controle de versão; • controle de mudanças; • auditoria na configuração de software; • registro do status. 8.2.1 Identificação dos itens de configuração Um item de configuração é a menor unidade produzida em um projeto passível de controle. Esse item pode ser qualquer artefato produzido durante o ciclo de vida do projeto que precise ser controlado em suas diversas versões e aprovações pelo cliente. O projeto pode produzir diversos artefatos, mas nem todos estão sob a gestão da configuração. A Tabela 11 apresenta uma lista dos artefatos mais comuns gerados durante o ciclo de desenvolvimento de um software. Tabela 11 – Lista de artefatos de um projeto de software ID Artefato ID Artefato 1 Documento de requisitos 2 Cronograma 3 Plano de riscos 4 Protótipo de telas 5 Especificação caso‑uso 6 Diagrama de casos de uso 7 Diagrama de classes 8 Documento de arquitetura 9 Diagramas de sequência 10 Diagramas de estados 11 Códigos‑fonte 12 Casos de teste 13 Roteiro de testes 14 Plano de implantação 15 Manual de usuário 16 Modelo de dados 17 Plano de instalação 18 Pedidos de mudança 162 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV Essa lista traz exemplos de artefatos, que não se limitam a esses itens. Cada projeto tem o seu conjunto de artefatos definidos pela metodologia ou pelo cliente, e sobre esses artefatos deve ser gerada a lista de itens de configuração do projeto. Como informação complementar, em alguns projetos e clientes, as atas de reunião e os e‑mails trocados durante o projeto são considerados itens de configuração. Outros artefatos de software, como os programas executáveis, não são controlados pela configuração, mas o código‑fonte a partir do qual é gerado tem de ser controlado. Outros itens precisam ser controlados para garantir a integridade do projeto, como versões de editores, compiladores e de frameworks, por exemplo, JVM 5.0, Struts 2.0, JSF 2, EJB 3.2, dentre outros. 8.2.2 Controle de versões Combina procedimentos e ferramentas para gerenciar diferentes versões de itens de configuração criadas durante o processo de desenvolvimento de software. Permite conhecer e controlar a evolução dos artefatos por meio desses procedimentos, como ilustrado na Figura 66. Algumas ferramentas mais utilizadas e conhecidas para o controle de versões são Visual Source Safe, PVCS, CVS, SubVersion, dentre outras. 1.0 1.1 1.2 1.3 2.0 1.1.1 1.4 2.1 1.1.2 Figura 66 – Exemplo de evolução de versão de um artefato Os procedimentos de controle de versões devem possuir um servidor próprio para ser o repositório dos arquivos controlados e não existem apenas para os desenvolvedores,mas sim para todos os envolvidos no projeto de software, como ferramenta central para a obtenção de qualquer informação sobre o software. Alguns motivos para uso do controle de versões são: • efetuar o registro histórico dos artefatos do projeto ao longo do tempo; • permitir que desenvolvedores trabalhem juntos, sem que um atrapalhe o outro; • promover segurança na manipulação e na alteração do código‑fonte. 163 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Com a utilização efetiva do controle de versões, basta acessar a ferramenta para saber da informação necessária. O controle de versões ainda permite o compartilhamento de todos os arquivos de forma segura e organizada, a recuperação fácil de qualquer artefato e a consulta de qualquer versão. Além disso, funciona como um backup de todas as informações do projeto. Observação Backup é uma cópia de segurança de tudo o que é produzido, realizada pela ferramenta de controle de versões de forma automática. Para fazer funcionar um controle de versões, diversas operações são realizadas, independentemente da ferramenta utilizada. O procedimento básico do trabalho de controle de versões é: • retirar uma cópia do artefato para alteração do repositório; • fazer as alterações na cópia realizada; • validar as alterações; • gravar as alterações no repositório. Vamos conhecer algumas operações importantes no controle de versões e alinhar a terminologia utilizada nessa tarefa: • Check out: ação para retirar o artefato do repositório e copiar para o seu ambiente para poder fazer alterações. Ao realizar essa ação, você também pode bloquear o artefato para não permitir que ele seja alterado até você liberar o check‑in. • Check‑in: ação de devolver o artefato retirado para alteração para o repositório central com as modificações realizadas. Se for código‑fonte, somente faça se o programa estiver compilando sem erros. Também chamado de commit. Às vezes, é necessário realizar uma combinação de possíveis outras alterações feitas por outros usuários, chamada de merge. • Diff: ação que compara a versão que está no repositório com a versão que você está alterando, ou compara duas versões que estão no repositório. São exibidas as diferenças entre os dois artefatos. • Merge: atividade realizada antes de um check out, e depois de um diff, com o objetivo de verificar as diferenças entre duas versões de um artefato e garantir a integridade das alterações. • Tag ou label: são rótulos atribuídos a um artefato para identificar o projeto e as versões aos quais ele pertence. Constituem uma das principais operações para o controle de versões. Todo artefato precisa de uma tag. Esta pode ser usada quando uma versão é criada, antes de se fazer uma alteração que envolva muitos artefatos ou numa situação julgada relevante para “marcar” a tag. 164 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV • Branch: são usados branches quando é preciso trabalhar em duas versões distintas de um projeto ao mesmo tempo. Por exemplo, após colocar a versão 1.0 de seu software em produção, você precisa continuar o desenvolvimento da versão 2.0. Nesse caso, caso ocorra um problema na versão 1.0, há como identificar tudo o que faz parte dessa versão para gerar uma nova build. • Build: uma versão do software produzida para ser utilizada em testes, aceitação ou em produção. Podem ser manual ou automaticamente gerada por uma ferramenta específica. 8.2.3 Controle de mudanças O controle de mudanças estabelece um processo para identificar e analisar as mudanças, aprovar e controlar sua implementação, garantir sua correção e publicar as mudanças de um item de configuração. É recomendado haver um comitê para o controle de mudanças, mas não é obrigatório. Essas atividades estão ilustradas na Figura 67. Identificar e analisar a mudança Garantir sua correta construção Aprovar e controlar a mudança Públicar a mudança para outros stakeholders Figura 67 – Atividades de um controle de mudança Caso exista o comitê de gestão de mudança, ele é responsável pela análise, pela aprovação ou não da mudança, pela priorização da implementação e pelo controle do escopo da alteração. Caso não exista um comitê, deve haver um representante do usuário e outro representante da construção para realizar esse papel. A mudança ocorre a partir da identificação de uma necessidade pelos usuários ou por qualquer outro envolvido no projeto. Essa solicitação é conhecida como pedido de mudança ou change request. 165 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Solicitar alteração Libearar para alteração Liberar alteração para testes Aprovar alteração Checkin do item de configuração Check out do item de configuração Implementação da alteração Alterar baseline Validar alteração Avaliar alteração Alteração reprovada Baseline Figura 68 – Atividades de mudança dentro do GCS Conforme apresentado na Figura 68, ao ser recebida, a mudança precisa ser avaliada quanto à sua necessidade. Caso aprovada, o item de configuração é retirado da baseline por meio de uma ação de check out, a qual permite que o item seja modificado pelo desenvolvedor. Após a alteração do artefato, é feito o registro com a descrição da modificação, quem alterou e quando alterou, e é realizado o ckeck‑in do item. Este item é submetido à validação do solicitante do pedido de alteração. Uma vez validado, uma nova tag (label) e uma nova baseline são geradas para o item de configuração. Todo o pessoal envolvido no projeto ou na manutenção dos itens sob gerência da configuração deve ser treinado no processo e nas ferramentas, a fim de garantir sua correta utilização. 8.2.4 Auditoria de configuração A auditoria de configuração tem como objetivo garantir que a mudança esteja correta, que o processo de gestão da configuração esteja sendo seguido corretamente e que o uso da ferramenta também esteja correto. As auditorias devem ser parte do processo de gestão da configuração e ser realizadas por pessoal externo ao projeto, com o objetivo de garantir a isenção dos apontamentos realizados. A verificação de que a mudança está correta é feita em RTF. Esta tem foco na correção técnica do item de configuração e deve ser realizada antes da atividade de validação da mudança pelos envolvidos. A auditoria tem foco na verificação de que os procedimentos descritos no processo de gestão de configuração estejam sendo realizados por todos os envolvidos no trabalho. Os seguintes questionamentos precisam ser respondidos em uma auditoria da configuração: 166 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV • Os itens de configuração estão nomeados de acordo com o padrão definido? • A estrutura de diretórios está de acordo com o padrão? • Os itens de configuração estão colocados corretamente em suas pastas de armazenamento? • O controle de acesso aos artefatos está implementado? • Existe um registro de revisão da mudança? • Histórico e comentários da mudança, autor e data estão registrados? 8.2.5 Registro do status O registro de status consiste em registrar nos itens de configuração as informações relacionadas à mudança efetuada, quem a fez, a data da mudança e a informação de outros itens de configuração que podem ser afetados. 8.3 Padrões de gestão da configuração Existem diversos padrões de gestão de configuração já definidos por modelos de qualidade e processos ISO para que uma organização possa escolher, de acordo com as suas próprias necessidades ou com o modelo de qualidade que utiliza. Os principais padrões de gestão da configuração sugeridos são os propostos pelo CMMI, pela ISO/IEC 12207, pela ISO/IEC 9000‑3 e pela ISO/IEC 15504, apresentados na Figura 69. CMMI ISO/IEC 12207 ISO/IEC 9000‑3 ISO/IEC 15504 Figura 69 – Modelos e processosque definem padrões de GCS 8.3.1 Padrão de gestão de configuração – CMMI A gestão da configuração no modelo de qualidade CMMI está previsto no Nível 2 – Gerenciado e é parte dos requisitos básicos de maturidade no desenvolvimento de software. 167 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Segundo o CMMI (SEI, 2006), o objetivo do gerenciamento de configuração é manter a integridade dos produtos de trabalho, utilizando a identificação, o controle, a comunicação do status e auditorias das configurações, de acordo com a Figura 70. Estabelecer baselines Rastrear e controlar mudanças Estabelecer integridade Auditar as configuranças Figura 70 – Gestão de configuração segundo o CMMI Essa área de processo envolve as seguintes atividades: • selecionar os artefatos que compõem a configuração e as baselines do software; • controlar as mudanças nos itens de configuração; • manter a integridade das baselines; • fornecer a situação precisa dos itens de configurações para desenvolvedores, usuários finais e clientes. O CMMI descreve a área de processo da gerência da configuração em metas genéricas e específicas, de acordo com a Tabela 12. Tabela 12 – Práticas do Modelo CMMI para a GCS Práticas genéricas Práticas específicas Estabelecer as baselines • Identificar os itens de configuração • Estabelecer um sistema de gestão de configuração • Criar ou liberar as baselines Rastrear e controlar as mudanças • Rastrear as solicitações de mudança • Controlar os itens de configuração Estabelecer a integridade • Estabelecer registros de configuração • Rastrear as solicitações de mudança • Executar auditorias da configuração Fonte: CMMI (2014). As práticas genéricas compõem as atividades de estabelecer baselines, rastrear as mudanças e estabelecer a integridade dos itens de configuração. As práticas específicas descrevem as tarefas que definem o que precisa ser realizado para que as práticas genéricas atinjam a meta. 168 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV Para cada prática específica há um conjunto de atividades detalhadas denominadas de subpráticas, que têm o objetivo de atingir as metas específicas, com sugestão de produtos de trabalho e descrição de processos. Lembrando que o CMMI não define como você deve realizar a gestão de configuração. São descritas as atividades necessárias para definir o que deve ser feito para se atingir o nível de maturidade esperado pela equipe e pela organização envolvida. 8.3.1.1 Estabelecer baselines Consiste no conjunto de tarefas para determinar quais são os itens de configuração que devem ser controlados. Envolve as seguintes atividades: • Identificar itens de configurações — selecionar os itens de configurações a partir dos artefatos previstos no projeto; — atribuir identificadores únicos para os itens de configurações; — especificar quando cada item de configuração será colocado sob GCS; — identificar o proprietário responsável por cada item de configuração. • Estabelecer um sistema de gerenciamento de configurações — estabelecer um mecanismo para armazenar e recuperar itens de configurações no sistema de gerenciamento de configurações; — armazenar e recuperar versões arquivadas de itens de configurações; — armazenar, atualizar e recuperar registros de gerenciamento de configurações; — criar relatórios de gerenciamento de configurações a partir do sistema de gerenciamento de configurações. • Criar ou liberar baselines — obter autorização do comitê ou do cliente antes de criar ou liberar baselines de um item de configuração; — somente utilizar artefatos recuperados do sistema de gerenciamento de configurações; — manter os itens de configuração disponíveis. 169 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 8.3.1.2 Rastrear e controlar mudanças Consiste no conjunto de tarefas para controlar e rastrear mudanças nos itens de configuração definidos. Envolve as seguintes atividades: • Rastrear solicitações de mudanças — iniciar e registrar as solicitações de mudanças; — analisar o impacto das mudanças e as correções propostas nas solicitações de mudanças; — revisar as solicitações de mudanças que serão tratadas na próxima baseline com os que serão afetados pelas mudanças e obter a sua concordância; — rastrear os status das solicitações de mudanças até o encerramento. • Controlar itens de configurações — controlar mudanças nos itens de configuração durante toda a vida do produto; — obter a autorização apropriada antes que os itens de configurações modificados entrem no sistema de gerenciamento de configurações; — executar o check‑in e o check out dos itens de configurações de uma maneira que mantenha a correção e a integridade dos itens de configuração; — registrar as mudanças nos itens de configurações e os motivos das mudanças. 8.3.1.3 Estabelecer a integridade Consiste no conjunto de tarefas para controlar e rastrear mudanças nos itens de configuração definidos. Envolve as seguintes atividades: • Estabelecer registros de gerenciamento de configurações — registrar com detalhes o status de cada item de configuração, de forma que cada um seja conhecido e versões anteriores possam ser recuperadas; — assegurar que todos os envolvidos tenham acesso ao status dos itens de configuração e conhecimento destes; — especificar e identificar a versão mais atual das baselines. 170 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV • Executar auditorias de configurações — analisar a integridade das baselines; — confirmar que os registros de configurações identificam corretamente a configuração dos itens de configuração; — confirmar a conformidade com os padrões e procedimentos de gerenciamento de configurações aplicáveis; — rastrear os itens de ação da auditoria até o encerramento. 8.3.2 Padrão de gestão de configuração – ISO/IEC 12207 A norma ISO/IEC 12207 descreve o processo de gestão da configuração na parte referente aos processos de apoio e se baseia na aplicação de tarefas no ciclo de desenvolvimento de software para identificar e definir os itens de configuração, estabelecer suas baselines, controlar as mudanças e registrar a situação dos itens durante o processo. Resumindo, a ISO/IEC 12207 descreve os seguintes processos para a gerência de configuração, ilustrados na Figura 71: • implementação do processo; • identificação da configuração; • controle da configuração; • relato da situação da configuração; • avaliação da configuração; • gerência de liberação e distribuição. Implementação do processo Identificação dos itens de configuração Controle da configuração Relato da situação Avaliação da configuração Gerência da liberação Figura 71 – Gestão de configuração segundo o ISO/IEC 12207 8.3.2.1 Implementação do processo Descreve as atividades que são realizadas durante o gerenciamento da configuração, formando o plano de gerenciamento de configuração, cujo objetivo é padronizar os procedimentos e as ferramentas para todas as equipes de desenvolvimento da organização. 171 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II O plano de GCS também inclui o seu relacionamento com o plano de desenvolvimento de software e o plano de manutenção do software. 8.3.2.2 Identificação da configuração A partir dos artefatos previstos no plano de desenvolvimento do software, os itens que têm de estar sob a gestão da configuração devem ser selecionados e nomeados, bem como estabelecidas versões para o controle das baselines de configuração. A lista de itens sob a gestão da configuração deve ser aprovada pelos envolvidos no projeto. 8.3.2.3 Controle da configuração Detalha o conjunto de atividades para identificação e registro dos pedidos de mudanças, implementação,verificação e liberação do item de software modificado. Nessa tarefa, são realizadas análise, classificação, priorização e avaliação das mudanças, além de aprovação ou rejeição do pedido de mudança e controle de acesso aos itens de configuração. Devem existir registros de todas as alterações executadas para permitir uma eventual necessidade de rastreabilidade. 8.3.2.4 Avaliação da configuração Descreve um conjunto de procedimentos para garantir que a implementação das mudanças esteja de acordo com as especificações e que os itens de configuração estejam adequadamente atualizados. 8.3.2.5 Relato da situação da configuração Processo que prepara e exibe os registros da situação atual e do histórico dos itens de configuração do software. Os relatórios de situação podem conter, para cada item, suas últimas versões, o número de alterações, identificadores de liberação, a quantidade de liberações, dentre outros. 8.3.2.6 Gerência de liberação e distribuição Na liberação e na distribuição dos itens de configuração, a documentação deve estar atualizada. O código e a documentação devem estar armazenados, empacotados e distribuídos de acordo com os procedimentos estabelecidos no plano de gerenciamento da configuração. 8.3.3 Padrão de gestão de configuração – ISO/IEC 9000‑3 A ISO/IEC 9000‑3 é a norma específica de organizações de desenvolvimento de software e a mais utilizada na implantação do SGQ. Segundo a descrição da norma, a gestão da configuração é aplicada durante o ciclo de vida de um produto, a fim de fornecer visibilidade e controle de suas funcionalidades e características físicas. Na norma ISO/IEC 9000‑3, o gerenciamento de configuração 172 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV está descrito em três partes: identificação, controle e situação dos itens sob a gestão de configuração, ilustradas na Figura 72. Identificação e rastreabilidade Controle de alterações Relatório da situação da configuração Figura 72 – Gestão de configuração segundo o ISO/IEC 9000‑3 Saiba mais Uma norma específica para o gerenciamento da configuração foi criada pela ISO: é a norma ISO/IEC 10007:95, que fornece diretrizes para gestão da configuração e pode ser acessada em . Segundo o modelo, a organização que produz o software deve desenvolver e criar um plano de gestão que inclua as atividades de gestão de configuração, ferramentas, técnicas, metodologias usadas e o estado no qual os itens de configuração devem ser submetidos ao controle da configuração. 8.3.3.1 Identificação e rastreabilidade de configuração A organização deve manter procedimentos para identificar os artefatos de software, durante todas as fases do ciclo de vida, nos quais devem ser aplicadas atividades para assegurar que cada item seja identificado, incluindo: especificações funcionais e técnicas, ferramentas de desenvolvimento usadas no projeto, todas as interfaces com outros itens de software e hardware e todos os documentos produzidos durante o processo de desenvolvimento do software. 8.3.3.2 Controle de alterações A organização deve estabelecer e manter procedimentos para identificar, documentar, analisar criticamente e autorizar quaisquer alterações em itens de configuração. Para isso, antes da aceitação de uma alteração, uma análise de impacto da alteração verifica sua validade e os possíveis efeitos causados sobre outros itens de configuração. Durante o controle de alterações, a atividade de comunicação aos envolvidos quanto às alterações e para demonstrar a rastreabilidade das alterações precisa ser mantida. 8.3.3.3 Relatório de situação da configuração A organização estabelece e mantém procedimentos para registrar, administrar e relatar a situação de itens de configuração, quanto a alterações, versões, requisições e implementação das alterações aprovadas. 173 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 8.3.4 Padrão de gestão de configuração – ISO/IEC 15504 (Spice) Na norma ISO/IEC 15504, o processo de gerenciamento da configuração está no Nível 2, como no CMMI, e é considerado uma atividade de suporte aos demais processos do modelo de qualidade. Estabelecer sistema biblioteca Manter descrição dos itens Identificar itens de configuração Administrar e controlar mudanças Manter e relatar histórico Figura 73 – Gestão de configuração segundo o ISO/IEC 15504 A norma estabelece que o processo de gerência da configuração tem como objetivo criar e manter a integridade de todos os produtos que são elaborados e resultam do ciclo de vida de desenvolvimento do software. Como nos demais padrões, nem todos os produtos são controlados, sendo necessário que o conjunto de artefatos que precisam ter o controle do sistema de gerenciamento da configuração seja definido pela equipe do projeto e pelo cliente. 8.3.4.1 Estabelecer a biblioteca de gestão da configuração Criar um repositório de software com controle de acesso para o armazenamento e a recuperação de itens sob a gestão da configuração, bem como para o compartilhamento dos itens entre as diversas equipes envolvidas no processo. 8.3.4.2 Identificar itens da configuração Identificar cada artefato produzido no projeto de software e selecionar aqueles que ficarão sob a gerência da configuração. 8.3.4.3 Manter descrições dos itens da configuração Fornecer e manter descrições para cada item de configuração, identificando‑o com sua descrição de função, o responsável pelo item e a partir de quando está sob o processo de gerência da configuração. 8.3.4.4 Administrar pedidos de mudança Gravar, revisar, aprovar e rastrear todas as requisições de mudanças e todos os relatórios de problemas para todos os itens da configuração e suas versões. 8.3.4.5 Controlar as mudanças Estabelecer um controle de acesso para manter a clareza e a integridade dos itens da configuração gerenciados pela biblioteca de configuração. 174 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV 8.3.4.6 Construir versões do produto As versões dos itens de configuração (baselines) somente podem ser geradas a partir da biblioteca de configuração e depois de formalmente autorizado. 8.3.4.7 Manter históricos dos itens da configuração Manter um histórico de cada item da configuração e das ações realizadas em um nível de detalhe suficiente para permitir que possam ser feitas recuperações de versões anteriores. 8.3.4.8 Relatar o estado da configuração Reportar os resultados das atividades realizadas em cada item da configuração. Genericamente, os padrões descrevem um núcleo comum para a gestão da configuração relacionado a identificação, controle de versões e mudanças dos itens sob gerência da configuração. Exceção feita aos processos de segurança e auditoria não abrangidos por todos os padrões. O Quadro 24 apresenta um resumo dos padrões descritos. Quadro 24 – Comparativo entre os padrões de gestão de configuração Atividade de GCS CMMI ISO/IEC 12207 ISO/IEC 9000‑3 ISO/IEC 15504 Identificar item de configuração A identificação dos artefatos de software que devem ser controlados, a partir da relação produzida no projeto Além da identificação do item, descreve a criação do processo de GCS Identifica os artefatos que devem ser controlados pelo GCS Além da identificação dos itens, descreve a criação da biblioteca para o repositório da GCS Controlar as versões Os itens de configuração devem ser descritos, e suas baselines, mantidas mediante aprovação Não descrito explicitamente na norma Não descrito explicitamente na norma Construir versões dos itens de configuração apenas a partir da biblioteca de itens Gerenciar mudanças Criar um processo formal para analisar, classificar e aprovar as mudanças identificadas nos itens de configuração Identificar os registros dos pedidos de mudanças, análise, classificação,priorização e avaliação das mudanças, além da aprovação ou rejeição do pedido de mudança Fazer uma análise de impacto da alteração para verificar sua validade e os possíveis efeitos causados sobre outros itens de configuração Gravar, revisar, aprovar e rastrear as mudanças e garantir que estas sejam feitas por pessoal autorizado e aprovadas ao seu final Auditoria de configuração São realizadas regularmente para verificar aderência ao processo de GCS Não estão descritas no processo Não estão descritas no processo Não estão descritas no processo Registro de status da configuração Todas as mudanças devem ter suas informações de descrição, de quem alterou e quando mantidas em histórico Descrever a situação de cada item contendo: o número de alterações, identificadores de liberação, a quantidade de liberações, dentre outras Relatar a situação dos itens quanto às alterações, versões, requisições e à implementação das alterações aprovadas Manter um histórico dos itens com um nível de detalhe suficiente para permitir a recuperação de versões anteriores A gestão da configuração é um processo essencial para uma gestão controlada e madura dos artefatos produzidos durante o ciclo de desenvolvimento de um software. As organizações de 175 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Tecnologia da Informação devem possuir esse processo implantado para iniciar qualquer modelo de qualidade de software. O processo de GCS é simples e barato, pois as ferramentas não possuem custos de aquisição de licença. A definição do processo e o treinamento das equipes constituem a parte mais demorada do gerenciamento da configuração. Alguns benefícios que uma organização pode alcançar com a implantação do GCS são: • ganhos em maturidade no desenvolvimento de software; • maior capacidade de executar projetos mais complexos; • capacidade de retornar a versões anteriores do software; • melhoria da comunicação dos desenvolvedores; • melhoria da competitividade; • aumento da qualidade. Saiba mais O IEEE também possui um padrão para gestão de configuração disponível em , descritos nas normas IEEE 1042/1987 e IEEE 828/1998. 8.4 Application Lifecycle Management (ALM) O contexto abordado até o momento sobre gestão de mudanças e gestão da configuração tem ligação direta com o conceito de gerência do ciclo de vida das aplicações, ou Application Lifecycle Management (ALM). ALM é a gestão integrada entre as necessidades de atender ao negócio e aos processos de Engenharia de Software, por meio da criação de procedimentos e do suporte de ferramentas que fazem a automação dos processos. Permite o gerenciamento contínuo do processo de desenvolvimento de software, deixando clara a interligação de requisitos, manutenção, mudança, configuração e distribuição. Para isso, compõe‑se de cinco processos: • gerenciamento de requisitos; • gerenciamento de configuração; • gestão de mudança; 176 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV • versionamento e integração; • distribuição de software. 8.4.1 Gerenciamento de requisitos Os requisitos de um software são as necessidades dos usuários que têm de ser atendidas por um novo software ou um pedido de mudança para ser incluída em uma aplicação já existente. O gerenciamento de requisitos é composto por um conjunto de atividades para levantar as necessidades dos usuários, entender essas necessidades, documentá‑las, validar com os usuários e conseguir rastrear todo e qualquer requisito ao longo do ciclo de vida do software. As principais atividades envolvidas na gestão de requisitos são: • documentar os requisitos funcionais e os não funcionais; • identificar, analisar e selecionar as necessidades de negócio; • priorizar o que deve ser feito; • analisar a interdependência dos requisitos; • relacionar com os requisitos de arquitetura; • validar os requisitos com os usuários. 8.4.2 Gerenciamento da configuração O processo de construção de uma aplicação envolve o controle de diversos artefatos de software, os quais podem sofrer diversas modificações durante seu ciclo de vida. Como vimos, o GCS é responsável por manter e gerenciar esses artefatos e por manter a rastreabilidade e o versionamento desses itens. Muitas pessoas confundem ALM com gerenciamento da configuração, mas o GCS isolado no contexto de desenvolvimento de software não garante o processo de ALM completo. 8.4.3 Gestão de mudança Processo para avaliar, coordenar e decidir sobre a realização de mudanças em itens de configuração. Possui relacionamento direto com o gerenciamento da configuração. As mudanças aprovadas são implementadas em todos os artefatos relacionados. 8.4.4 Versionamento e integração Consiste nas atividades de reunir os diversos elementos que compõem uma versão de software e agrupá‑las em um único pacote, a fim de ser testado e distribuído dentro do ambiente do projeto. Para esse processo, temos: 177 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • recuperar todos os artefatos do repositório de código; • mapear os artefatos com a nova versão da aplicação; • compilar o código; • organizar a aplicação, conforme definido; • criar um pacote de instalação. 8.4.5 Distribuição do software Tem como objetivo garantir a consistência das diversas versões de uma aplicação, pois há várias versões durante o ciclo de vida de um software. Sem um processo de GCS adequado, corre‑se alto risco com a perda da integridade da aplicação, gerando grande retrabalho e gastos para a correta distribuição. Para o correto funcionamento da distribuição do software, é essencial um processo de GCS consistente e maduro. Algumas atividades de distribuição: • identificar o pacote correto de versionamento; • documentar as dependências entre as versões; • automatizar a distribuição das versões ou correções; • distribuir os pacotes de software para validação, testes e produção. Resumo Nesta unidade, abordamos que a manutenção de software é uma atividade essencial para que a aplicação desenvolvida tenha um longo ciclo de vida. No entanto, a manutenção depende da estrutura da aplicação desenvolvida, ou seja, documentação, padrão de codificação e foco em criar um software modularizado para facilitar o processo de desenvolvimento futuro e reduzir os custos das mudanças que podem atingir até 60% do custo original. Vimos que essas manutenções surgem a partir da evolução das necessidades de negócio para atender à evolução das regras ou para alinhar a competição no mercado, de ser uma demanda baseada na exigência da lei ou da necessidade de atender a uma norma solicitada pelo cliente, para corrigir defeitos que surgem ao longo da vida útil de um sistema e para atender à evolução tecnológica de hardware e software. Aprendemos também que a norma ISO/IEC 12207 descreve um procedimento para manutenção na engenharia dos seus processos fundamentais, porém a norma ISO/IEC 14764 (2006) é específica para 178 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV manutenção e descreve conceitos e um processo a ser aplicado para os diversos tipos de manutenção. Esses tipos podem ser: manutenções corretivas, que se referem à correção de defeitos que ocorrem após o software entrar em produção; manutenções perfectivas, relacionadas às novas funcionalidades solicitadas pelos usuários e também denominadas de evolutivas ou de melhoria; manutenções adaptativas, voltadas para atender as demandas técnicas da evolução do software no ambiente computacional; e manutenções preventivas, que são análises prévias para tentar identificar defeitos antes que ocorram em produção. Vimos diversos conceitos intrínsecos ao processo de manutenção, como: evolução, referente a mudanças que incluemcomportamentos na aplicação; alteração, que modifica algo já existente; correção, para tratar defeitos; melhoramento, referente a melhorias técnicas; e manutenibilidade, que é um requisito não funcional referente à facilidade com a qual um software pode sofrer uma mudança. Abordamos que, além dos tipos de manutenção apresentados, a própria engenharia reversa também pode ser tratada como tal, uma vez que sua função é criar uma nova aplicação a partir de uma existente, utilizando o código‑fonte como a principal referência de requisitos. Ocorre quando a manutenção de um sistema começa a se tornar inviável em termos técnicos (sistema obsoleto) ou financeiros (manutenções demoradas e difíceis, e recursos especializados escassos). Vimos ainda outro tipo de manutenção que onera bastante os custos: a manutenção de sistemas legados, que são aplicações muito antigas, das quais não há documentação, nem pessoas que conheçam o código. Aliada a isso, há a resistência dos desenvolvedores mais experientes em manter esses softwares, que acabam nas mãos de desenvolvedores menos experientes e tornam‑se um fator de desmotivação, constituindo um desafio para as equipes de manutenção. Abordamos que, em relação à equipe de manutenção, é importante que se tenha os papéis claramente definidos quanto às suas responsabilidades, para que o processo de manutenção sofra menos impacto e conflitos sejam evitados. Os principais envolvidos são: os usuários finais, que são aqueles responsáveis pelas solicitações de correções ou de melhoria e que também vão dar o aceite nas mudanças; os responsáveis pelo produto, aqueles que dão suporte financeiro para que a aplicação sofra as mudanças; a gerência de Tecnologia da Informação, que cuida de receber as solicitações dos usuários e gerar a demanda para a gerência de manutenção, que é responsável por realizar análise, classificação, priorização e implementação das mudanças junto com a equipe de manutenção. 179 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Estudamos também que outro fator que afeta os custos das manutenções são as condições iniciais do processo, podendo‑se classificar as manutenções em estruturada e não estruturada. As manutenções não estruturadas se referem àquelas aplicações cuja única documentação é o código‑fonte, tornando o esforço maior, de alto risco e alta complexidade. As manutenções estruturadas se dão em softwares desenvolvidos com documentação, padrões e preocupação com a qualidade, conferindo‑lhes um alto grau de manutenibilidade. Vimos que a norma ISO/IEC 14764 (2006) define cinco atividades básicas para um processo de manutenção: a definição do processo, a análise da mudança, a implementação da mudança, o aceite e a revisão da alteração, e o processo de migração e de retirada do software de produção. Abordamos ainda que a definição do processo, junto com a definição dos papéis e das responsabilidades, estabelece qual é o fluxo de um pedido de mudança realizado por um usuário. Basicamente define que, após receber o pedido de mudança, este seja avaliado quanto a novas funções ou correção. Em se tratando de correção, deve‑se avaliar a gravidade. Se for grave, implementar imediatamente; caso contrário, fazer a avaliação e a classificação da mudança como para as solicitações de novas funcionalidades. Após isso, obtém‑se a aprovação dos usuários e priorizados na fila de manutenção. As mudanças não aprovadas devem ser documentadas e armazenadas. Vimos que a análise da mudança consiste na avaliação profunda da solicitação, bem como de seus riscos e seus impactos na aplicação existente. Avaliam‑se prazo e custos e submete‑se à aprovação dos usuários. O processo de implementação da mudança deve seguir os procedimentos de desenvolvimento utilizados pela organização. Abordamos também que, após a codificação e os testes das mudanças, estas deverão ser submetidas à aceitação dos usuários quanto à qualidade e ao preenchimento dos requisitos solicitados. Envolvem também as ações de garantia da qualidade, como revisões, inspeções e testes. Vimos ainda que o processo de migração refere‑se à elaboração de um procedimento para que os dados de um software em produção sejam levados para outro ambiente ou para serem utilizados em outra aplicação. Esse processo deve ser formalizado por meio de um plano de migração que descreva detalhadamente o que será migrado, o de‑para dos campos e as regras de conversão, que precisam do aceite dos usuários. Abordamos também que o processo de retirada de produção está relacionado à descontinuidade da aplicação por alcançar o fim do seu 180 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV ciclo de vida, seja pela inviabilidade técnica ou econômica, seja pela sua substituição por um novo software. Também exige um plano formal validado pelos usuários descrevendo o que e como o processo será realizado, principalmente, o paralelismo e a transição das aplicações. Como visto, as manutenções são diretamente afetadas pela forma que foram desenvolvidas. Os desenvolvimentos orientados a objetos e baseados em componentes são os que causam menos impactos, mas não estão livres de problemas. Ambos se baseiam na característica de reúso de código, que minimiza os testes, mas, em caso de modificação, geram um esforço maior para garantir que tudo o que os utiliza continue funcionando adequadamente. Vimos também que outro impacto a analisar é o relacionado ao processo de desenvolvimento ágil que, em razão das suas características, facilita a interação de usuário e desenvolvedor durante o ciclo de manutenção. Porém, as vantagens e desvantagens são as mesmas do processo de desenvolvimento utilizado, seja este orientado a objetos ou baseado em componentes. Aprendemos que o Gerenciamento de Configuração de Software (GCS), também conhecido como Software Configuration Management (SCM), é um processo da engenharia de software que tem por objetivo estabelecer as condições para a organização dos artefatos de software, controlar suas versões, controlar as suas alterações e manter a integridade de tudo o que foi produzido durante o ciclo de vida de um projeto de software, bem como garantir seu armazenamento adequado. Estudamos que, para realizar um processo de GCS eficiente, é preciso definir um repositório para o armazenamento dos artefatos, a estrutura de diretórios, a nomenclatura de cada um dos artefatos envolvidos no processo de gestão da configuração e o controle de acesso aos artefatos. O próximo passo consiste em identificar, a partir do conjunto de artefatos, quais devem ter o controle, além de serem definidos como itens de configuração. Esses itens estão submetidos a um controle rigoroso das versões relacionadas às mudanças que podem sofrer ao longo do ciclo de vida, mediante um processo de análise, classificação, priorização e validação das alterações. Todas essas mudanças devem ser rastreadas a qualquer momento para exibir a situação do artefato. Um processo de auditoria dos itens de configuração deve estar estabelecido para a verificação e a garantia de aderência aos padrões de GCS. Vimos que esse é o processo básico da GCS, mas existem padrões que descrevem detalhadamente o processo de gestão da configuração, como o do modelo CMMI, a ISO/IEC 12207, a ISO/IEC 9000‑3 e a ISO/IEC 15504. 181 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Exercícios Questão 1. Segundo Boehm (1988), no ciclo de vida de um software a fase de manutenção é a mais problemática e representa mais de 60% de todo o esforço de TI de uma organização. A norma ISO/IEC 14764 (2006) é específica para descrever o ciclo de manutenção do software, definindo os conceitos envolvidos e estabelecendo um processo claro para tratar e apoiar os desenvolvedores nessa complexa etapa. A norma citada especificaquatro tipos distintos de manutenção e em apenas uma descreve como corrigir defeitos encontrados em um software em produção, defeitos normalmente identificados pelos usuários finais. Qual seria esse tipo de manutenção, descrito na norma ISO/IEC 14764? Assinale a alternativa correta. A) Manutenção perfectiva. B) Manutenção adaptativa. C) Manutenção corretiva. D) Manutenção preventiva. E) Manutenção perfectiva e adaptativa. Resposta correta: alternativa C. Análise das alternativas A) Alternativa incorreta. Justificativa: não corrige defeitos de software em produção. A manutenção perfectiva realiza ações para incluir novas funcionalidade ou realizar alterações cujos objetivos sejam satisfazer novas necessidades dos usuários. B) Alternativa incorreta. Justificativa: não corrige defeitos de software em produção, muito menos defeitos encontrados pelo usuário final. A manutenção adaptativa realiza processos para adequar o software a novas tecnologias, modelos de gestão etc., isto é, de uma nova legislação. C) Alternativa correta. Justificativa: a manutenção corretiva executa ações para corrigir defeitos encontrados em um software em produção, normalmente observados pelo usuário final. Na maioria dos casos, essas manutenções possuem uma equipe dedicada que realiza atividades rotineiras para a solução de defeitos. 182 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade IV D) Alternativa incorreta. Justificativa: não corrige defeitos de software em produção. A manutenção preventiva é proativa e planejada, realiza processos para melhorar algum aspecto deficiente no software, como desempenho, segurança, defeitos ainda não identificados pelos usuários, usabilidade etc. E) Alternativa incorreta. Justificativa: tanto em conjunto como individualmente, essas manutenções não corrigem defeitos de software em produção. Quando necessário os tipos de manutenção podem ser aplicados de forma sequencial, e não de forma simultânea. Questão 2. A norma ISO/IEC 14764 (2006) define cinco atividades básicas para um processo de manutenção: a definição do processo, a análise da mudança, a implementação da mudança, o aceite e revisão da alteração, o processo de migração e de retirada de produção do software. Em relação ao processo de migração, assinale a alternativa correta. I – Procedimento elaborado para avaliação profunda da solicitação, seus riscos e seus impactos na aplicação existente. II – Procedimento elaborado para que os dados de um software em produção sejam levados para outro ambiente. III – Procedimento realizado para que os dados de um software em produção sejam utilizados em outra aplicação. Esse procedimento deve ser formalizado através de um detalhamento do que será migrado. IV – Procedimento que está relacionado à descontinuidade da aplicação por alcançar o fim do seu ciclo de vida, seja pela inviabilidade técnica ou econômica, seja pela sua substituição por um novo software. É correto apenas o que se destaca em: A) I, II. B) I, II, III, IV. C) II, III. D) III. E) II. Resposta desta questão na plataforma. 183 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 FIGURAS E ILUSTRAÇÕES Figura 5 ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS (ABNT). NBR ISO 9001: Sistemas de gestão da qualidade – Requisitos. Rio de Janeiro, 2000b. p. 2. Figura 9 McCALL, J.; RICHARDS, P. K.; WALTERS, G. F. Factors in Software Quality: Concept and Definitions of Software Quality. RADC_TR‑77‑369, v. 1, Nov. 1977. Final Technical Report. Adaptado. Figura 10 INTERNATIONAL ORGANIZATION FOR STANDARDIZATION (ISO). ISO/IEC 9126‑1: International Standard. Information Technology – Software engineering – Product quality – Part 1: Quality model. Genebra, 2001. p. 7. Figura 11 INTERNATIONAL ORGANIZATION FOR STANDARDIZATION (ISO). ISO/IEC 9126‑1: International Standard. Information Technology – Software engineering – Product quality – Part 1: Quality model. Genebra, 2001. p. 1. Adaptado. Figura 17 COUTO, A. B. CMMI: integração dos modelos de capacitação e maturidade de sistemas. Rio de Janeiro: Ciência Moderna, 2007. P. 47. Adaptado. Figura 50 CRISPIN, L; GREGORY, J. Agile Testing: A Practical Guide for Testers and Agile Teams. New York: Addison Wesley, 2009. Adaptado. Figura 51 BECK, K. TDD: desenvolvimento guiado por testes. São Paulo: Bookman, 2010. Adaptado. REFERÊNCIAS ANTONIONI, J. A. Qualidade em software: manual de aplicação da ISO‑9000. São Paulo: Makron Books, 1995. 184 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS (ABNT). NBR ISO 9000: Sistemas de gestão da qualidade – Fundamentos e vocabulário. Rio de Janeiro, 2000a. ___. NBR ISO 9001: Sistemas de gestão da qualidade – Requisitos. Rio de Janeiro, 2000b. ASSOCIAÇÃO BRASILEIRA PARA PROMOÇÃO DA EXCELÊNCIA DO SOFTWARE BRASILEIRO (SOFTEX). MPS.BR – Melhoria de processo do software brasileiro: guia geral – Versão 1.1. 2006. BECK, K. TDD: desenvolvimento guiado por testes. São Paulo: Bookman, 2010. BOEHM, B. Software Engineering. IEEE Trans Computers, Dec. 1976, p. 1226‑41. ___. A Spiral Model of Software. Development and Enhancement, IEEE Computer, 1988. CHIKOFSKY, E. J.; CROSS II, J. H. Reverse Engineering and Design Recovery: A Taxonomy. IEEE Software, v. 7, n. 1, p. 13‑7, 1990. CORTÊS, M. et al. Modelos de qualidade de software. Campinas: Unicamp, 2001. COUTO, A. B. CMMI: integração dos modelos de capacitação e maturidade de sistemas. Rio de Janeiro: Ciência Moderna, 2007. CRISPIN, L.; GREGORY, J. Agile Testing: A Practical Guide for Testers and Agile Teams. New York: Addison Wesley, 2009. CROSBY, P. B. Qualidade, falando sério. São Paulo: McGraw‑Hill, 1990. DIJKSTRA, E. W. Notes on Structured Programming. Circulated privately, Apr. 1970. GUERRA A. C.; COLOMBO, R. M. T. Tecnologia da informação: qualidade de produto de software. Brasília: PBQP Software, 2009. HETZEL, W.C. The Growth of Software Testing. Englewood: Prentice‑Hall, 1988. HUMPHREY, W. Managing the Software Process. New York: Addison Wesley, 1989. lEEE. IEEE Std 610.12 – Glossário de padrão de engenharia de software. 1990. INTERNATIONAL ORGANIZATION FOR STANDARDIZATION (ISO). ISO 10007: Quality management– Guidelines for configuration management. Genebra, 1995. ___. ISO/IEC 9000‑3: International Standard. Information Technology – Guidelines for the application of ISO 9001:2000 to computer software. Genebra, 2004. 185 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ___. ISO/IEC 9126‑1: International Standard. Information Technology – Software engineering – Product quality – Part 1: Quality model. Genebra, 2001. ___. ISO/IEC 9126‑2: International Standard. Information Technology – Software engineering – Product quality – Part 2: External metrics. Genebra, 2003a. ___. ISO/IEC 9126‑3: International Standard. Information Technology – Software engineering – Product quality – Part 3: Internal metrics. Genebra, 2003b. ___. ISO/IEC 9126‑4: International Standard. Information Technology – Software engineering – Product quality – Part 4: Quality in use metrics. Genebra, 2004. ___. ISO/IEC 12207: International Standard. Information Technology – Systems and software engineering – Software life cycle processes. Genebra, 2008. ___. ISO/IEC 14598‑1: International Standard. Information Technology – Software Product Evaluation – Part 1: General Overview. Genebra, 1999a. ___. ISO/IEC 14598‑2: International Standard. Information Technology – Software Product Evaluation – Part 2: Planning and Management. Genebra, 2000. ___. ISO/IEC 14598‑3: International Standard. Information Technology – Software Product Evaluation – Part 3: Process for Developers. Genebra, 2000. ___. ISO/IEC 14598‑4: International Standard. Information Technology – Software Product Evaluation – Part 4: Process for Acquirers. Genebra, 1999b. ___. ISO/IEC14598‑5: International Standard. Information Technology – Software Product Evaluation – Part 5: Process for Evaluators. Genebra, 1998. ___. ISO/IEC 14598‑6: International Standard. Information Technology – Software Product Evaluation – Part 6: Evaluation Modules. Genebra, 2001. ___. ISO/IEC 14764: Software Engineering – Software Life Cycle Processes — Maintenance. 2. ed. Genebra, 2006. ___. ISO/IEC 15504‑1 (Spice): International Standard. Information Technology – Process assessment – Part 1: Concepts and vocabulary. Genebra, 2004. ___. ISO/IEC 15504‑2 (Spice): International Standard. Information Technology – Process assessment – Part 2: Performing an assessment. Genebra, 2003c. ___. ISO/IEC 15504‑3 (Spice): International Standard. Information Technology – Process assessment – Part 3: Guidance on performing an assessment. Genebra, 2004. 186 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ___. ISO/IEC 15504‑4 (Spice): International Standard. Information Technology – Process assessment – Part 4: Guidance on use for process improvement and process capability determination. Genebra, 2004. ___. ISO/IEC 15504‑5 (Spice): International Standard. Information Technology – Process assessment – Part 5: An exemplar software life cycle process assessment model. Genebra, 2012. ___. ISO/IEC 15504‑6 (Spice): International Standard. Information Technology – Process assessment – Part 6: An exemplar system life cycle process assessment model. Genebra, 2013. ___. ISO/IEC 15504‑7 (Spice): International Standard. Information Technology – Process assessment – Part 7: Assessment of organizational maturity. Genebra, 2008. ___. ISO/IEC 15504‑8 (Spice): International Standard. Information Technology – Process assessment – Part 8: An exemplar process assessment model for IT service management. Genebra, 2012. ___. ISO/IEC 15504‑9 (Spice): International Standard. Information Technology – Process assessment – Part 9: Target process profiles. Genebra, 2011. ___. ISO/IEC 25000: International Standard. Information Technology – Systems and software engineering – Systems and software Quality Requirements and Evaluation (SQuaRE) – Guide to SQuaRE. Genebra, 2014. KOSCIANSKI, A.; SOARES, M. S. Qualidade de software. Rio de Janeiro: Novatec, 2010. McCABE, T. A Complexity Measure. IEEE Transactions on Software Engineering, p. 308‑20, 1976. McCALL, J.; RICHARDS, P. K.; WALTERS, G. F. Factors in Software Quality: Concept and Definitions of Software Quality. RADC_TR‑77‑369, v. 1, Nov. 1977. Final Technical Report. MYERS, G. The Art of Software Testing. 2. ed. New Jersey: John Wiley and Sons, 2004. PAULA FILHO, W. Engenharia de software: fundamentos, métodos e padrões. Rio de Janeiro: LTC, 2011. PEZZÉ, M.; YOUNG, M. Teste e análise de software: processo, princípios e técnicas. Porto Alegre: Bookman, 2008. PFLEEGER, S. L. Engenharia de software: teoria e prática. 2. ed. São Paulo: Prentice Hall Brasil, 2007. PRESSMAN, R. S. Engenharia de software. São Paulo: McGraw‑Hill, 2006. RAKITIN, S. R. Software Verification and Validation: a Practitioner’s Guide. London: Artech House, 1997. RAPCHAN, F. A Norma ISO 9000‑3. Vitória: Ufes, 2005. Disponível em: . Acesso em: 20 jul. 2014. 187 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 RIOS, E.; MOREIRA, T. Testes de software. 3. ed. São Paulo: Alta Books, 2013. ROCHA, A. R. C. et al. Qualidade de software: teoria e prática. São Paulo: Prentice Hall, 2001. SCHULMEYER, G. Handbook of Software Quality Assurance. New York: Prentice Hall, 1999. SOFTWARE ENGINEERING INSTITUTE (SEI). Standard CMMI Appraisal Method for Process Improvement (SCAMPISM) A, Version 1.2: Method Definition Document. 2006. Disponível em: . Acesso em: 20 jul. 2014. SOMMERVILLE, I. Engenharia de software. São Paulo: Pearson, 2013. TELES, F. S. Um processo para análise de desempenho de produtos de software. Pernambuco: UFPE, 2005. VILAS BOAS, A. L. C. Qualidade e avaliação de produto de software. Lavras: Ufla/Faepe. 2004. Sites . . . . . . . . . . 188 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Informações: www.sepi.unip.br ou 0800 010 9000 A IMPORTÂNCIA DA ATIVIDADE DE TESTE NO DESENVOLVIMENTO DE SOFTWARE Karla Pires de Souza (FPM ) karlapsouza@hotmail.com Angelita Moutin Segoria Gasparotto (FPM ) angelita@usp.br A atividade de teste de software tem um objetivo de encontrar defeitos inseridos no decorrer do processo de desenvolvimento. Estima-se que o custo com correção de falhas aumenta com o avanço das fases, mesmo assim, em algumas empresas a fasse de teste ainda não é executada com tempo hábil para atividade ou os testes são efetuados pelos próprios desenvolvedores dos sistemas. Este artigo tem o objetivo de apresentar conceitos de teste de software, assim como um estudo de caso realizado em um centro de desenvolvimento de software, onde se pode constatar a importância da execução dos testes por uma equipe qualificada e estruturada, tal resultado foi levantado a partir da análise de defeitos e horas trabalhados de três projetos da empresa. Palavras-chaves: Teste de software; Qualidade; Desenvolvimento de software. XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 2 1. Introdução A atividade de teste em várias empresas é executada pela equipe de desenvolvimento de software, que muitas vezes não possui a qualificação adequada para exercer tal tarefa. Isto ocorre, pois a atividade não é considerada tão importante no processo de construção do software. Devido à sobrecarga de trabalho e aos curtos prazos a atividade de teste é afetada e como resultado é gerado um sistema com grande quantidade de defeitos. Estima-se que o custo com correção de falhas avança com o passar das fases de desenvolvimento de software, entretanto, mesmo com este aumento de custo, muitas empresas ainda negligenciam a fase de teste. Este artigo tem a finalidade de listar a importância da atividade do teste no desenvolvimento de software, assim como mostrar os benefícios obtidos com a execução dos testes e apresentar alguns tipos de teste existentes. Por fim será evidenciada, através de um estudo de caso, a quantidade de defeitos evitados/corrigidos após execução dos testes. 2. Teste de software A atividade de teste é uma das etapas do ciclo de desenvolvimento de software e tem o objetivo de relatar possíveis defeitos existentes no sistema para que estes sejam solucionados. Nesta fase verifica-se se o comportamento do sistema está de acordo com o especificado nos requisitos levantados junto ao cliente. A partir desta atividade pode-se diagnosticar o grau de qualidade do sistema. O principal objetivo da realização do teste de software é reduzir a probabilidade de ocorrência de erros quando o sistema estiver em produção (MOLINARI, 2012). Na década de 70 a execução do teste nos softwares era feita pelos próprios desenvolvedores dos sistemas, a atividade era vista como uma tarefa secundária, sem muita importância, feita apenas se o prazo de entrega e custo doproduto permitisse. Com o passar do tempo, devido à concorrência existente no mercado e ao aumento da complexidade dos sistemas, o nível de exigência por qualidade aumentou e com isso a necessidade de testes mais eficazes. XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 3 Para Pressman (2002), "teste de software é um elemento crítico da garantia de qualidade de software e representa a revisão final da especificação, projeto e geração de código". Por ser a última etapa, antes da entrega ao cliente, à fase de teste tem a responsabilidade de encontrar as falhas inseridas no decorrer do projeto. Pressman (2002) define qualidade como a satisfação de requisitos funcionais e de desempenho explicitamente declarados, normas de desenvolvimento explicitamente documentadas e características implícitas que são esperadas em todo software desenvolvido profissionalmente. O conceito de qualidade é variável, para a equipe de desenvolvimento de software um produto possui qualidade quando se comporta conforme está descrito nos requisitos, já para o cliente um produto terá qualidade quando este atender suas necessidades. Devido ao aumento da exigência por qualidade, várias normas, metodologias ou modelos (ágil e RUP, por exemplo) e órgão reguladores como CMMI, MPS.Br e ISO foram criados. 3. Custo da não qualidade Além de colaborar para obtenção de um produto com qualidade, a atividade de teste tem o papel fundamental na redução de custos com possíveis reparos ao sistema. Em 1979 Myers apresentou em seu livro “The Art of Software Testing” (A arte de teste de software) a Regra de 10, que constatava que quanto mais cedo descoberto e corrigido um erro, menor é o seu custo para o projeto. De acordo com (MYERS, 1979) o custo em correção cresce exponencialmente 10 vezes para cada estágio que o projeto avança, conforme apresentado no gráfico abaixo (Figura1), ou seja, defeitos encontrados nas fases iniciais do desenvolvimento do software são mais baratos de serem corrigidos do que aqueles encontrados quando o software já está em produção. Figura 1 - Custo dos defeitos com passar das fases do projeto XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 4 Fonte: (BASTOS; RIOS; CRISTALLI; MOREIRA, 2007) O teste de software não é uma atividade barata e fácil, normalmente o valor gasto com teste varia de 30% a 40% do valor total do projeto, dependendo das técnicas de teste que foram utilizadas e da tolerância a falhas exigidas pelo projeto (BASTOS; RIOS; CRISTALLI; MOREIRA, 2007). Como é possível verificar na imagem abaixo (Figura2) o custo com falhas é muito maior do que custo gasto com atividades de prevenção como revisões e inspeções em artefatos e código-fonte. Figura 2 - Categoria dos custos com falhas Fonte: (FROTA, 1999) Atualmente ainda existem empresas que negligenciam a atividade de teste devido ao custo e tempo exigidos pela fase. Muitas vezes os testes ainda são executados por desenvolvedores ou outro profissional que tenha conhecimento das regras de negócio do sistema. Também é comum que a fase de teste seja abreviada para que o prazo e custo do projeto sejam alcançados, consequentemente, é comum entregar ao cliente um XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 5 software com defeitos não revelados (MOLINARI, 2012). Tal atitude pode acarretar um alto custo à empresa para solucionar os defeitos encontrados após a entrega, assim como a queda de credibilidade e satisfação do cliente. 4. Verificação e validação Para que os possíveis defeitos inseridos durante o andamento do projeto sejam encontrados o quanto antes, é importante que atividades de verificação e validação sejam executadas. O objetivo da verificação é garantir que sistema está sendo desenvolvido da maneira correta, dentro das normas e metodologia adotadas para o projeto, nesta atividade normalmente são realizadas revisões e inspeções dos artefatos e código-fonte, ou seja, uma verificação estática (SILVA, 2013). Na validação é verificado se o sistema foi construído conforme descrito nos requisitos, esta é uma verificação dinâmica, pois é necessário navegar pelo sistema para detectar possíveis diferenças entre o sistema e os artefatos do cliente. O modelo em V é um dos mais aceitos atualmente, ele enfatiza as atividades de verificação e validação com o objetivo de encontrar defeitos gerados durante o desenvolvimento do software e minimizar os riscos do projeto. Este modelo reforça o entendimento de que a atividade de teste não deve ser efetuada apenas no fim do projeto e sim em todo o desenvolvimento do sistema. Na Figura acima (Figura3) é possível verificar o paralelismo entre as atividades de teste (à direita) e desenvolvimento (à esquerda). Figura 3 - Modelo em V XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 6 Fonte: (SILVA, 2013) 4.1. Níveis ou estágios de teste Os testes podem ser divididos em quatro níveis conforme exibido na Figura 3, estes níveis definem basicamente a fase em que estes serão executados, ou seja, qual o melhor momento de executar determinado teste (BASTOS; RIOS; CRISTALLI; MOREIRA, 2007). a) O Teste Unitário valida a menor parte do código-fonte, neste nível de teste é verificado, por exemplo, o método de uma classe. b) No Teste de Integração é validado se a integração entre sistemas, componentes ou outras funcionalidades foi feita corretamente. c) Na fase do Teste de Sistema o software é exercitado como um todo afim de encontrar discrepâncias entre os funcionamento especificado nos requisitos e o construído. d) O Teste de Aceitação é realizado pelo cliente no momento da entrega do sistema, ou de parte dele, este teste é executado para validar se o sistema realiza o que solicitado. 4.2. Técnicas de teste Atualmente existem várias formas de testar um software. Técnicas utilizadas antigamente ainda são de grande valia apesar da mudança de tecnologia e linguagem de programação, apesar destas mudanças o objetivo continua o mesmo: encontrar o maior número de defeitos antes da entrega ao cliente. XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 7 As técnicas são classificadas com base na origem das informações utilizadas para teste (código-fonte ou informações das funcionalidades do sistema). Estas técnicas abordam perspectivas diferentes do software e podem ser classificadas como: Funcional e Estrutural (NETO, 2013). 4.2.1 Técnica estrutural ou Teste de caixa branca: Nesta técnica é avaliado o comportamento interno do sistema, ou seja, o código-fonte. Esta técnica é recomendada nos níveis de Teste de Unidade e Teste de Integração, testes que normalmente ficam a cargo dos desenvolvedores do código-fonte, que possuem maior conhecimento no código-fonte. O objetivo desta é auxiliar na redução de possíveis problemas existentes nas funções ou unidades que compõem um software. 4.2.2 Técnica funcional ou Teste de caixa preta: A técnica é chamada de caixa preta, poisa estrutura interna do sistema não é considerada durante a execução destes testes. Esta técnica pode ser aplicada em todos os níveis de teste. Dados de entrada são fornecidos, o teste é executado e o resultado obtido é comparado a um resultado esperado previamente conhecido. Haverá sucesso no teste se o resultado obtido for igual ao resultado esperado. O componente de software a ser testado pode ser um método, uma função interna, um programa, um componente, um conjunto de programas e/ou componentes ou mesmo uma funcionalidade (NETO, 2013). Existem outras técnicas de teste como, por exemplo, o Teste de caixa cinza, que se trata de uma junção das técnicas de caixa preta e branca, que não serão apresentadas neste artigo. 4.3. Tipos de teste Os tipos de teste que serão executados são definidos na fase de planejamento. Para realizar tal definição devem-se analisar vários fatores como: o público que utilizará o sistema, se este ficará disponível na internet, se fará integração com outros sistemas, se será acessível a deficientes visuais, se trabalhará com muitos registros cadastrados, se poderá ser acessado por vários usuários simultaneamente, entre outras informações, ou seja, devem-se verificar os XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 8 riscos do projeto, seu nível de tolerância a erros (BASTOS; RIOS; CRISTALLI; MOREIRA, 2007). A figura abaixo apresenta os métodos, os estágios de cada método e os tipos de teste divididos por categorias: Os tipos de teste apresentados na Figura 4, destacados em azul, são executados no nível do teste de sistema. Figura 4 - Distribuição dos tipos de teste por categorias Fonte: Adaptado de (DATASUS, 2013) Na tabela abaixo (Quadro1) são descriminados alguns dos tipos de teste existentes e sua descrição. Figura 5 - Tipos de teste XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 9 Fonte: Adaptado de (BARBOSA, 2011) No Quadro 2, para melhor entendimento das atividades de teste, foram listados alguns dos possíveis cenários executados em uma funcionalidade de saque em conta corrente e conta poupança. Na coluna “Exemplos de cenários de teste” são listados todos os cenários que serão verificados e então estes cenários foram divididos em Tipos de teste, ou seja, a qual tipo de teste o cenário a ser testado se enquadra. XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 10 Figura 6 - Cenários de teste para realização de saque Fonte: Adaptado de (BARTIE, 2005) 4.4. Estratégia de teste Para elaboração de uma estratégia de teste são analisados quais os métodos, níveis e tipos de teste de serão adotados. XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 11 Na construção da estratégia de teste devem ser considerados diversos fatores como: o porte e importância do software, os requisitos, os prazos assumidos, os riscos do projeto, entre outros fatores (RIOS; MOREIRA, 2006). A Figura 5 demonstra a relação existente entre as técnicas, níveis e tipos de teste. Figura 7 - Estratégia de teste Fonte: (SILVA, 2013) 5. Ciclo de vida de teste A Figura 6 apresenta o ciclo de vida da fase de teste. As atividades de teste serão melhor detalhados no estudo de caso. Figura 8 - Ciclo de vida do teste de software Fonte: (RIOS, 2013) Na fase de iniciação (Procedimento inicial) é feita a investigação do contexto e escopo do projeto com intuito de criar estratégias e diretrizes. XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 12 A próxima fase é a de Planejamento (Planejar Testes), neste momento são analisados os objetivos das atividades de teste. A documentação do projeto é analisada para obtenção de informações como os riscos e nível de importância do projeto para que então sejam definidos quais técnicas e tipos de testes melhor se adéquam. Cada tipo de aplicação possui características especificas que devem ser consideradas no momento do planejamento e realização dos testes. O passo seguinte é a elaboração dos casos de teste (Projetar testes) e preparação do ambiente. Após elaboração dos artefatos da fase de teste tem início a execução dos testes definidos no Plano de teste. São executados primeiro e segundo ciclo de teste (Teste e Reteste, respectivamente) e gestão e monitoramento dos defeitos registrados durante o andamento dos testes. Por fim, ao término dos testes e correção dos defeitos é feito o levantamento das ocorrências abertas e feita a liberação do sistema ou parte dele ao cliente. 6. Estudo de caso 6.1. Informações da empresa A empresa analisada para o estudo de caso será identificada como empresa Alfa. Esta atua no mercado de desenvolvimento de software há 23 anos. Possui filiais em vários pontos do Brasil e algumas no exterior. A Alfa tem aproximadamente 1.800 colaboradores e conquistou no decorrer destes anos as certificações ISO9001:2008, CMMI nível 3 e MPS.Br nível C. A norma ISO-9001:2008 especifica os requisitos para um sistema de gestão da qualidade, voltado para organizações que necessitam demonstrar sua habilidade de fornecer produtos que satisfaçam os requisitos dos seus clientes, requisitos estatutários e da legislação aplicável de forma consistente e que buscam aumentar a satisfação dos seus clientes através da aplicação efetiva do sistema, incluindo processos para a sua melhoria contínua e para a garantia da conformidade com estes requisitos (CEDET, 2009). 6.2. Fase de teste XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 13 A execução dos testes tem início após construção e liberação do código-fonte, entretanto antes de exercitar o sistema é necessária a elaboração de alguns artefatos. O primeiro artefato da fase de teste a ser elaborado é o Plano de teste, que como próprio nome sugere, é o documento que conterá todo o planejamento realizado para a execução dos testes, nele terão informações como as funcionalidades que deverão ser testadas, quais métodos e tipos de teste serão executados, as ferramentas necessárias, configuração do ambiente de teste, entre outras informações. O caso de teste também é um dos documentos construídos antes da execução dos testes. Nele são descritos os passos a passos que devem ser executados durante a verificação do sistema. Normalmente é descrita a ação do ator e a resposta do sistema para determinado cenário. Na ilustração abaixo (Figura 7) é possível verificar com mais detalhes como são elaborados os casos de teste. Na primeira coluna há uma breve descrição do cenário que será verificado, na segunda coluna são descritos os passos que o ator (usuário do sistema) deve executar e na terceira coluna é informado o resultado esperado do sistemaà qualidade, entender a forma pela qual cada envolvido percebe a qualidade de um produto de software é muito importante, pois há interesses que não convergem e causam uma série de conflitos durante o desenvolvimento do software, seja por questões de dinheiro e prazo, seja para ver o software funcionando corretamente. As visões no desenvolvimento de um software envolvem os gerentes, os desenvolvedores, os clientes e os usuários, e esses interesses são ilustrados na Figura 4. Cliente Baixo custo Atende ao negócio Desenvolvedor Com código Fácil de corrigir Usuário Fácil de usar Funcionalidades Gerente Prazo e custos dentro das estimativas Confiável Sem erros Figura 4 – Visões da qualidade de software 1.4 Importância da qualidade A importância de se produzir software com qualidade é inegável, mas na área de Tecnologia da Informação esse aspecto não vem recebendo a atenção devida. Exceção feita aos softwares que podem causar a perda de vidas humanas, que recebem a atenção e a preocupação que deve ser uma constante na cabeça dos desenvolvedores. 15 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Hoje, os sistemas computacionais são a base de controle de todas as empresas. A dependência da tecnologia é visível a todos: usuários e empresas. Imagine o que o mau funcionamento de um software pode causar: • bancos perdem milhões; • clientes veem saldos sumirem de suas contas de repente; • os telefones param de funcionar; • aviões têm rotas desviadas; • trens de metrô são colocados no mesmo trilho. Imagine o caos nas empresas. Contudo, isto não são previsões. Já está ocorrendo em diversas situações do mundo atual e que realmente fazem refletir sobre qualidade na produção de software, independentemente do fato de causar perda de vidas humanas, ou não. Veja alguns exemplos de bugs de software famosos: • Derrubada do Airbus A320, 1988 — Ocorrência: o navio da Marinha americana USS Vincennes derrubou um Airbus A320, que foi confundido com um F‑14. Morreram 290 pessoas. — Motivo: o software do radar não diferenciou um avião de passageiros de um caça inimigo de ataque. • Pentium Floating-Point, 1994 — Ocorrência: em 1994 a Intel apresentou ao mercado a primeira versão do processador Pentium, o qual possuía uma unidade de processamento de ponto flutuante bastante rápida, mas que fazia cálculos errados. Exemplo: 4,195,835 – (4,195,835/3,135,727) * 3,135,727 era igual a zero no processador 486, mas igual a 256 no Pentium. — Motivo: o bug foi causado por um erro na tabela que era utilizada para acelerar o algoritmo de processamento de multiplicação de ponto flutuante. A Intel afirmou que um usuário típico do Pentium somente perceberia o problema uma vez em 27 mil anos. Ao final, a Intel foi forçada a vir a público e anunciar um programa de troca de chips, o qual teve um custo de cerca de US$ 475 milhões. • Recall de veículos, 2003 — Ocorrência: uma fabricante de caminhões e tratores americana anunciou um grande programa de recall dos seus veículos no inverno de 2003. 16 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I — Motivo: a fabricante de veículos detectou pelo seu controle de qualidade e informou a existência de um problema de software que poderia causar instabilidade nos veículos em determinadas circunstâncias. Saiba mais Para ver mais exemplos de bugs famosos de software, visite o site: . Acesso em: 9 dez. 2014. No processo de qualidade existem dois conceitos que sempre causam confusão em relação à sua definição e à sua finalidade. São estes: a garantia da qualidade e o controle da qualidade. Vejamos a diferença. 1.5 Garantia da qualidade São ações planejadas e sistemáticas de qualidade realizadas durante o processo de desenvolvimento cujo objetivo é atuar de forma preventiva para se atingir a qualidade do produto de software. A garantia da qualidade avalia se as características do produto estão de acordo com os padrões estabelecidos e se as atividades estão ocorrendo conforme o planejado. Algumas atividades de garantia da qualidade devem envolver: • uso, pelos desenvolvedores, de métodos e ferramentas que ajudem a conseguir especificações, projeto e codificação de maior qualidade; • estabelecimento de padrões para documentos, código e estilo de codificação (como usar linguagem de programação); esses padrões podem ser determinados pelo cliente, por normas internacionais ou pela empresa de desenvolvimento; • realização das atividades de verificação e validação, como revisões, inspeções, dentre outras. Observação Segundo a NBR ISO 9000:2005 (Sistemas de Gestão da Qualidade – Fundamentos e Vocabulário), não conformidade é o não atendimento a um requisito de qualidade (necessidade ou expectativa implícita ou obrigatória). 1.6 Controle da qualidade São atividades de qualidade realizadas após o produto de software estar pronto. O objetivo do controle da qualidade é permitir o aceite do produto, uma vez que se caracteriza por um “selo” atestando que a aplicação está de acordo com as especificações. Por meio do controle da qualidade, evita‑se que 17 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II produtos defeituosos sejam entregues aos clientes. A principal atividade de controle da qualidade são os testes funcionais do software. No controle da qualidade, uma atividade deve ser executada visando avaliar se as ações de qualidade planejadas estão sendo executadas de acordo com o processo estabelecido. Essa atividade chama‑se auditoria. Tais auditorias podem geram ações corretivas, no caso de encontrar não conformidades, e podem ser classificadas em três tipos: • auditorias de produto: foco em verificar a conformidade de produtos com os padrões estabelecidos; • auditorias de processo: verificam se as ações de qualidade planejadas estão sendo executadas; • auditorias de sistemas de qualidade: avaliam a eficácia da implementação desse sistema e determinam o grau em que os objetivos do sistema estão sendo atingidos. Lembrete A garantia da qualidade é feita durante o desenvolvimento do software, e o controle da qualidade é realizado após o produto estar pronto. Alinhados os conceitos iniciais de qualidade de software, veremos no próximo tópico os sistemas de gestão da qualidade que orientam e definem os procedimentos de qualidade nas diversas organizações. Saiba mais Informações detalhadas sobre qualidade de software podem ser obtidas no livro: GUERRA, A. C.; COLOMBO, R. M. Tecnologia da Informação: qualidade de produto de software. Brasília: PBQP Software, 2009. 1.7 Sistemas de Gestão da Qualidade (SGQ) Um SGQ tem como objetivo padronizar os processos de uma empresa para a criação de seu produto final, proporcionando a satisfação de seus clientes e a melhoria contínua dos seus processos (ANTONIONI, 1995). 18 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I Melhoria contínua do Sistema de Gestão da Qualidade Realização do serviço Serviço Responsabilidade de administração Medição, análise, melhoria Gestão dos Recursos R e q u i s i t o s C l i e n t e C l i e n t e S a t i s f a ç ã o Entrada Saída Figura 5 – Melhoria contínua do SGQ (ISO) ABNT (2000b, p. 2) Conforme ilustrado na Figura 5, o SGQ se inicia com os requisitos do cliente, a partir dos quais o produto é construído, passando pelo processo de medição e análise dos padrões definidos para a garantia da qualidade. Nesse momento, são tomadas as ações corretivas para melhoria do processo. Em todo o processo, a alta administração e a gerência são responsáveis pelo patrocínio do SGQ, pela gestão dos recursos necessários e pela comunicação com o cliente. O objetivo final do SGQ é proporcionar a satisfação do cliente. 1.7.1 Fatores para implantação de um SGQ Conformepara a ação executada. A quarta coluna indicará a situação do cenário, se o sistema se comportou conforme o indicado nos requisitos. Figura 9 - Exemplo de caso de teste Fonte: Elaborado pelo autor Após a elaboração dos artefatos e liberação do caso de uso para teste inicia-se a primeira bateria de testes, neste momento são exercitados os tipos de teste definidos na fase de planejamento. A equipe de teste percorre os cenários descritos nos casos de teste e caso encontre algum defeito o registra em uma ferramenta de gestão de ocorrência. XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 14 Os defeitos são abertos para o desenvolvedor do caso de uso. Este verifica se o defeito realmente ocorre e em caso positivo realiza a correção do código-fonte. Após correção o desenvolvedor libera a modificação para uma nova validação. Neste momento o testador que cadastrou a ocorrência verifica se o defeito foi eliminado e caso esteja correto a ocorrência é fechada. Após execução da primeira bateria de testes é iniciado o reteste, onde ocorre uma nova validação da funcionalidade ou caso de uso por outro testador. A execução de duas baterias de teste por recursos diferente é importante, pois permite que o sistema seja analisado por pessoas com experiências profissionais, conhecimentos e características diferentes. Na etapa de reteste os defeitos encontrados são registrados e corrigidos assim como ocorrido na primeira etapa do teste. Após execução do Teste e Reteste é iniciado o Teste Regressivo. Nesta etapa o intuito é encontrar possíveis defeitos que foram gerados devido às correções. Neste momento a quantidade de defeitos encontrada normalmente é baixa e o sistema é totalmente percorrido, ou seja, caso o sistema tenha casos de uso que já foram entregues, no Teste Regressivo serão verificados os casos de uso que serão e os que já foram entregues. Com o término dos testes, nos projetos tradicionais, ou seja, os que não usam a metodologia ágil, é elaborado o Sumário de Avaliação de Teste. Neste artefato é listada a quantidade de defeitos por caso de uso, a quantidade de cenários por caso de teste, os defeitos abertos, os fechados, os defeitos satisfatórios (que realmente ocorriam) e os insatisfatórios (abertos indevidamente, por algum engano do testador) e os responsáveis pela execução dos testes. Ao finalizar os três ciclos de teste e correção de todos os defeitos encontrados o sistema é disponibilizado ao cliente, para o teste de aceitação. Para evidenciar os impactos gerados no sistema após a fase teste foram analisados 3 projetos, conforme demonstrado na tabela abaixo. Tabela 1. Horas de teste e defeitos por projeto XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 15 *Quantidade de dias calculada com 8 horas diárias de trabalho de um profissional Fonte: Elaborado pelo autor Tabela 2. Quantidade de defeitos por projeto. Fonte: Elaborado pelo autor Foram coletadas informações como: Quantidade total de horas gastas no projeto, Quantidade de horas gastas com teste e Quantidade de defeitos de cada projeto. Com base nos dados coletados e apresentados na Tabela1 é possível verificar que os Projetos 2 e 3, que são projetos que seguem a processo tradicional, qual é baseado na metodologia XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 16 RUP, o tempo gasto com teste são inferiores a 20% do projeto. Para o Projeto 1 foi adotado a metodologia ágil, deste modo, devido a menor necessidade de tempo gasto com elaboração de artefatos, torna-se possível destinar mais horas a atividade de teste. Na Tabela 2 pode-se perceber que sem a execução dos testes o sistema seria entregue com grande quantidade de defeitos nos três projetos analisados. O projeto 1, onde foi possível destinar quantidade maior de tempo para as atividades de teste a quantidade de defeitos externos, ou seja, abertos pelo cliente, foi zero. 7. Considerações Finais O teste de software é uma das atividades mais custosas do processo de desenvolvimento de software, pois pode envolver uma quantidade significativa dos recursos de um projeto. O rigor e o custo associado a esta atividade dependem principalmente da criticidade da aplicação a ser desenvolvida. Diferentes categorias de aplicações requerem uma preocupação diferenciada com as atividades de teste. Realizar testes não consiste simplesmente na geração e execução de casos de teste, mas envolvem também questões de planejamento, gerenciamento e análise de resultados. Neste artigo foram apresentados alguns conceitos sobre teste de software e o objetivo principal foi apresentar a importância da fase de teste para a entrega de um produto com maior qualidade. Entretanto, para a entrega ocorra conforme o esperado é necessário planejamento, o envolvimento de profissionais capacitados e tempo hábil para execução dos testes. Também é importante destacar que a execução dos testes deve ocorrer em todo o processo de desenvolvimento do sistema. REFERÊNCIAS BARBOSA, Filipe B.; TORRES, Isabelle V. O Teste de Software no Mercado de Trabalho, 2011. Disponível em: . Acessado em: 09 mar. 2013. BARTIE, Alexandre. Categorias de Teste de Software, 2005. Disponível em: . Acessado em: 09 mar. 2013. BASTOS Aderson; RIOS Emerson; CRISTALLI Ricardo; MOREIRA Trayahú. Base de conhecimento em teste de software. 2.ed. São Paulo: Martins, 2007, 263 p. http://revista.faculdadeprojecao.edu.br/revista/index.php/projecao2/article/viewFile/82/70 http://imasters.com.br/artigo/3648/software/categorias-de-testes-de-software/ XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos Salvador, BA, Brasil, 08 a 11 de outubro de 2013. 17 CEDET – Centro de Desenvolvimento Profissional e Tecnológico, 2009. Disponível em: . Acessado em: 23 fev. 2013. DATASUS, 2013. Disponível em: . Acessado em: 09 mar. 2013. FROTA, Álvaro. O Barato Sai Caro! Como reduzir custos através da qualidade. São Paulo: Qualitymark, 1999, 166 p. MOLINARI Leonardo. Teste de Software – Produzindo sistema melhores e mais confiáveis. 4 ed. São Paulo: Editora Érica Ltda, 2012, 228 p. MYERS, Glenford J. The art of software testing. New York: John Wiley & Sons, 1979, 177p. NETO, Arilo C. D, 2013. Revista Engenharia de Software. Disponível em: . Acessado em: 04 mar. 2013. PRESSMAN, R. S. Engenharia de Software. 5. ed. Rio de Janeiro: McGraw-Hill, 2002, 843 p. RIOS, Emerson, 2013. Fundamentos de teste de software. Disponível em: . Acessado em: 09 mar. 2013. RIOS, Emerson; MOREIRA, Trayahú. Teste de Software. 2.ed. São Paulo: Alta Book, 2006, 232 p. SILVA, Fernando R, 2013. Revista Engenharia de Software. Disponível em: . Acessadoa Figura 6, diversos fatores podem motivar uma empresa a implantar um SGQ. Dentre estes, podem‑se destacar: • Conscientização da alta administração: a alta direção reconhece que a qualidade é um diferencial e patrocina o processo. É o fator mais eficaz. • Razões contratuais: a fim de manter ou iniciar o fornecimento de produtos ou serviços para outros países, para o governo e para algumas organizações da iniciativa privada. O tempo para alcançar a maturidade é maior, mas normalmente se alcança a conscientização. • Competitividade: necessária para manter a empresa concorrendo no mercado. • Modismo: fazer porque estão todos fazendo. Bastante ineficaz, normalmente, não atinge a conscientização da alta administração e, com isso, o processo é abandonado no meio do caminho. 19 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Conscientização da alta administração Razões contratuais Competitividade Modismo Figura 6 – Fatores motivacionais para a implantação do SGQ 1.7.2 A NBR ISO 9000 – norma‑padrão O SGQ mais comum e conhecido no mercado é a NBR ISO 9000 – Normas de Gestão da Qualidade e Garantia da Qualidade –, lançada no fim da década de 1980. Serve como arcabouço‑padrão para definir como as demais normas específicas devem ser utilizadas. A NBR ISO 9000 auxilia a empresa na seleção da norma mais apropriada para o seu negócio e na sua utilização. Trata‑se de um documento não normativo (ABNT, 2000a). Observação A International Organization for Standardization (ISO) é um órgão da ONU e tem o objetivo de fixar normas técnicas essenciais, de âmbito internacional. NBR ISO 9000 é o nome genérico que se dá às diversas normas que abrangem o assunto. As normas básicas para garantia da qualidade são as contratuais – ISO 9001, ISO 9002 e ISO 9003 – e as organizações só podem ser certificadas em relação a essas normas. Observação O representante brasileiro da ISO no Brasil é a Associação Brasileira de Normas Técnicas (ABNT), e as normas são descritas como Normas Brasileiras (NBRs). 1.7.2.1 Descrição básica das normas Para o estudo relacionado à qualidade de software, são relevantes as seguintes normas relacionadas à ISO 9000 e apresentadas na Figura 7: 20 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I • ISO 9000 – Normas de Gestão da Qualidade e Garantia da Qualidade: um guia de como as demais normas devem ser usadas. • ISO 9001 – Sistemas da Qualidade – Modelo para Garantia da Qualidade em Projeto, Desenvolvimento, Produção, Instalação e Assistência Técnica: para uso quando a conformidade com os requisitos especificados tiver de ser garantida pelo fornecedor desde o projeto até a manutenção. • ISO 9000‑1 – Normas de Gestão da Qualidade e Garantia da Qualidade – Parte 1: estabelece os princípios gerenciais que permeiam toda a série de normas. • ISO 9000‑3 – Normas de Gestão da Qualidade e Garantia da Qualidade – Parte 3: esta norma define diretrizes para facilitar a aplicação da norma ISO 9001 a organizações que desenvolvem, fornecem e mantêm software. Destina‑se a fornecer orientação quando um contrato entre duas partes exigir a demonstração da capacidade do fornecedor em desenvolver, fornecer e realizar manutenção em produtos de software. ISO 9000 ISO 9001 ISO 9000‑1 ISO 9000‑3 Figura 7 – Normas ISO relacionadas a organizações que produzem software 1.7.3 NBR ISO 9000‑3 – Norma para empresas de desenvolvimento de software Em junho de 1993 foi criado o guia ISO 9000‑3, com diretrizes para a aplicação da ISO 9001 ao desenvolvimento, ao fornecimento e à manutenção de software. Para cada item da NBR ISO 9001 existe um correspondente na NBR ISO 9000‑3 que a detalha e a adequa às empresas de software. Lembrete A NBR ISO 9000‑3 é a norma da qualidade do SGQ aplicada às empresas de desenvolvimento de software. 21 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II A NBR ISO 9000‑3 abrange questões relacionadas ao entendimento dos requisitos funcionais, ao uso de metodologias consistentes para desenvolvimento de software e ao gerenciamento do projeto desde a concepção até a manutenção. Uma das principais limitações da NBR ISO 9000‑3 é não abordar os aspectos relacionados à melhoria contínua do processo de software que são tratados pelo modelo Capability Maturity Model Integration (CMMI) e pela NBR ISO IEC 15504 – Spice (Software Process Improvement and Capability Determination – Melhoria do Processo de Software e Determinação da Capacidade). Portanto, o objetivo da NBR ISO 9000‑3 é trazer quais processos a organização deve ter e manter para o desenvolvimento do software (RAPCHAN, 2005). Observação O Modelo CMMI e a norma ISO/IEC 15504 serão detalhados no tópico 4. 1.7.3.1 A estrutura da NBR ISO 9000‑3 A NBR ISO 9001 baseia‑se em vinte diretrizes que englobam vários aspectos da garantia da qualidade. A NBR ISO 9000‑3 exige que 18 critérios estejam presentes no sistema da qualidade e agrupa essas diretrizes em três partes principais, que são apresentadas na Figura 8: • estrutura: aspectos organizacionais, relacionados ao SGQ; • ciclo de vida: descreve as atividades de desenvolvimento de software; • suporte: descreve operações que apoiam as atividades do ciclo de vida. 1.7.3.2 O processo de certificação da NBR ISO série 9000 A certificação ISO 9000 é reconhecida no mercado por muitas organizações e traz uma série de benefícios às empresas que adotam o sistema. Dentre estes, podemos destacar: • abertura de novos mercados; • maior conformidade e atendimento às exigências dos clientes; • maior integração entre os setores da organização; • melhores condições para acompanhar e controlar os processos; • diminuição dos custos de desenvolvimento. O primeiro passo para realizar o processo de certificação é selecionar, do modelo ISO 9000, a norma mais adequada aos propósitos da organização (ISO 9001, ISO 9002 ou ISO 9003). Para empresas de desenvolvimento de software, é a norma NBR ISO 9000‑1. 22 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I Após a escolha, a empresa deverá analisar o seu processo e treinar os funcionários para a conscientização sobre a necessidade da qualidade. Na sequência, deverá desenvolver e implementar os procedimentos necessários ao sistema da qualidade, selecionar um órgão certificador que irá avaliar se o sistema está de acordo com a norma, fazer pré‑auditorias e realizar a auditoria final de aderência ao SGQ para a certificação. Durante a definição do processo, deve‑se tomar cuidado para que este não se torne burocrático. Ele deve adaptar‑se ao dia a dia da empresa, e não o contrário. Além disso, a organização será reavaliada a cada dois anos e deverá cuidar para não perder o certificado, pois isso pode ser muito custoso em termos financeiros e de imagem no mercado. NBR/ISO 9000-3 Atividades de estrutura Responsabilidade da administração Análise crítica do contrato Projeto e implementação Técnicas e ferramentas Gestão de configuração Auditorias internas Planejamento da qualidade Entrega e instalação Registro da qualidade Sistema de qualidade Especificação dos requisitos Validação e aceitação Treinamentos Controle de documentos Ações corretivas Planejamento do desenvolvimento Atividades de manutenção Medição e análise Atividades do ciclo de vida Atividades de suporte Figura 8 – Melhoria contínua do SGQ O processo de certificação pode se estender de alguns meses a dois anos, dependendo do nível de maturidade da qualidade em que a organização se encontra. 1.7.3.3 Custo da certificação da NBR ISO série 9000 Pesquisa realizada pelo National ISO 9000 Support Group nos Estados Unidos e pelo seu correlato no Brasil (ABNT, 2000a) avaliou que os valores para obter a certificação ficam numa faixa de US$ 6.500,00 a US$ 30.000,00, dependendodo grau inicial em que a empresa se encontra. Saiba mais Mais detalhes sobre as NBRs ISO da série 9000 podem ser obtidas nos sites oficiais: ou . 23 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 2 GESTÃO DA QUALIDADE DO PRODUTO DE SOFTWARE A partir da padronização de processos por meio das normas ISO, foram criadas normas específicas para o desenvolvimento de software, com o objetivo de garantir a aderência dos produtos de software a padrões preestabelecidos, e outras para avaliação desses produtos. Embora existam diversas normas relacionadas a esse assunto, aqui são selecionadas as normas mais utilizadas pelo mercado de Tecnologia da Informação, mais o Modelo de McCall, que foi o primeiro a abordar os assuntos relacionados à qualidade de um produto de software. Essas normas principais são: ISO/IEC 9126, ISO/IEC 12207, ISO/IEC 14598 e ISO/IEC 25000. Apresentamos no Quadro 1 uma relação das normas que são abordadas neste tópico. Quadro 1 – Normas e modelo de qualidade para produtos de software Norma Objetivo Modelo de McCall Define fatores e critérios de qualidade para o produto de software ISO/IEC 9126 ou NBR 13596 Define as características da qualidade que devem estar presentes em um produto de software ISO/IEC 12207 Define as tarefas para o ciclo de vida do software ISO/IEC 14598 Estabelece um plano para avaliação do produto de software ISO/IEC 25000 Define uma especificação e uma avaliação da qualidade do produto de software É a nova geração das séries ISO/IEC 9126 e ISO/IEC14598 2.1 Modelo de McCall Em 1977, Jim McCall desenvolveu um modelo de qualidade para o Departamento de Defesa Americano em que a qualidade é definida por um conjunto de características internas e externas de um software, tornando‑se o primeiro modelo de qualidade a ser amplamente divulgado e utilizado. Essas características estão divididas em fatores de qualidade que definem os atributos externos e que só podem ser medidos indiretamente e critérios de qualidade que são os atributos internos e que podem ser medidos diretamente. A combinação de ambos permite chegar a um fator quantitativo de qualidade que um software apresenta. Observação McCall definiu 11 fatores de qualidade e 23 critérios que, inter‑relacionados, permitem a avaliação da qualidade de um produto de software. O Modelo de McCall define claramente quais são esses fatores de qualidade que podem ser avaliados e os dividiu em três visões, conforme ilustrado na Figura 9. 24 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I Essas três visões são: a visão de revisão, que avalia a capacidade de sofrer manutenção; a visão de operação, a qual verifica as condições de utilização do software; e a visão de transição, cujo foco está na avaliação da capacidade do software de adaptar‑se a outros ambientes. A seguir são descritos os conceitos fundamentais dos 11 fatores do modelo (McCALL; RICHARDS; WALTERS, 1977): Revisão Operação Transição – Correção – Confiabilidade – Integridade – Eficiência – Manutenção – Flexibilidade – Testabilidade – Portabilidade – Reuso – Interoperabilidade Figura 9 – Fatores de qualidade de McCall 2.1.1 Visão de operação • Correção: quanto o sistema satisfaz a sua especificação e cumpre os objetivos esperados pelo cliente. Faz‑se a pergunta: “O software faz o que queremos?”. • Confiabilidade: quanto o sistema executa sua função com a precisão exigida. Faz‑se a pergunta: “O software é estável?”. • Eficiência: quanto o sistema usa os recursos computacionais. Faz‑se a pergunta: “O software usa o hardware de maneira adequada?”. • Integridade: quanto o acesso ao software ou aos dados por pessoas não autorizadas pode ser controlado. Faz‑se a pergunta: “O software é seguro?”. • Usabilidade: quanto de esforço é necessário para aprender e usar o sistema. Faz‑se a pergunta: “O software é fácil de usar?”. 25 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 2.1.2 Visão de revisão • Manutenibilidade: quanto de esforço é necessário para localizar e eliminar erros no sistema. Faz‑se a pergunta: “O software é fácil de corrigir?”. • Flexibilidade: quanto de esforço é necessário para modificar um programa. Faz‑se a pergunta: “É fácil incluir novas funcionalidades?”. • Testabilidade: quanto de esforço é necessário para testar um programa a fim de garantir que ele atenda às necessidades. Faz‑se a pergunta: “É fácil testar o sistema?”. 2.1.3 Visão de transição • Portabilidade: quanto de esforço é necessário para transferir um sistema de uma plataforma de hardware ou software para outra. Faz‑se a pergunta: “O software pode ser usado em outra máquina?”. • Reusabilidade: quanto de um sistema pode ser reutilizado por outros sistemas. Faz‑se a pergunta: “Alguma parte pode ser reutilizada?”. • Interoperabilidade: quanto de esforço é necessário para estabelecer conectividade entre o sistema e os outros sistemas. Faz‑se a pergunta: “O software está apto para fazer interface com outros sistemas?”. McCall, Richards e Walters (1977) também definiram 23 critérios. Atribuindo peso a cada um deles e combinando‑os com os fatores de qualidade, chegaram a uma classificação quantitativa para a verificação da aderência do software aos padrões de qualidade esperados. A atribuição de pesos aos fatores e critérios de qualidade decorre do fato de que cada tipo de software possui suas próprias características e seus próprios requisitos de qualidade. Portanto, a importância de cada fator e cada critério de qualidade varia conforme o tipo do software. Por exemplo, para um software de locação de games, os fatores de integridade, confiabilidade, usabilidade e facilidade de manutenção são essenciais. Porém, para um software embarcado para um automóvel, a eficiência, a correção e a confiabilidade são os fatores mais importantes. Nesses dois cenários, cada fator receberá seu peso equivalente à importância estabelecida. Cada critério de qualidade está associado a um ou mais fatores de qualidade que permitem a correta avaliação de cada fator para cada tipo de software, conforme ilustrado no Quadro 2. 26 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I Quadro 2 – Correlação entre fatores e critérios de qualidade de McCall Co rr eç ão Co nfi ab ili da de Efi ci ên ci a In te gr id ad e Us ab ili da de M an ut en ib ili da de Te st ab ili da de Fl ex ib ili da de Po rt ab ili da de Re us ab ili da de In te ro pe ra bi lid ad e Acesso a auditoria X Controle de acesso X Acurácia X Conectividade X Completude X Comunicabilidade X Clareza e concisão X Consistência X X X Compartilhamento de dados X Tolerância a erros X Eficiência na execução X Capacidade de expansão X Generalista X Independência de hardware X Facilidade de manipulação X X X Modularidade X X X X X X Operabilidade X Autodocumentação X X X X X Simplicidade X X X Independência de software X X Eficiência de armazenamento X Rastreabilidade X Treinamento X Adaptado de: McCall; Richards; Walters (1977). Observação Os critérios de qualidade são denominados de requisitos não funcionais e estão presentes em qualquer tipo de software. Exemplo de aplicação Vamos considerar a relação entre os fatores e os critérios de qualidade apresentados no Quadro 2 para simularmos a avaliação de um software de biblioteca que atende aos alunos de 27 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II uma universidade pela internet e controla os empréstimos e as devoluções dos livros. A avaliação mínima deve ser 7,0. Em primeiro lugar, vamos identificar os fatores que precisam ser avaliados para esse tipo de software. Dos 11 fatores disponíveis, vamos selecionar e atribuir um pesode 0 a 5 para sua importância no contexto: Tabela 1 – Exemplo 1 Fator Peso • Correção 4 • Confiabilidade 5 • Eficiência 5 • Integridade 3 • Usabilidade 5 • Manutenibilidade 3 • Testabilidade 3 Os pesos estão relacionados ao grau de importância do fator: zero significa nenhuma importância, e cinco, importância muito alta. Agora, vamos selecionar os critérios relevantes dentro de cada fator de qualidade e distribuir o peso atribuído ao fator entre os critérios. Não é necessário que os fatores contenham todos os critérios previstos no Quadro 2. Tabela 2 – Exemplo 2 Fator Peso • Correção — Completude — Rastreabilidade 4 2 2 • Confiabilidade — Tolerância a erros — Simplicidade 5 3 2 • Eficiência — Na execução — No armazenamento 5 3 2 • Integridade — Controle de acesso 3 3 • Usabilidade — Comunicabilidade — Treinamento 5 4 1 28 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I • Manutenibilidade — Modularidade — Documentação 3 2 1 • Testabilidade — Facilidade de manipulação 3 3 Temos todos os fatores e critérios selecionados para o tipo de software que vamos avaliar. O passo seguinte é fazer uma avaliação de 0 a 10 para cada critério de qualidade. Para atribuir essa nota, podem‑se usar critérios subjetivos do próprio avaliador ou criar um checklist com os itens que são considerados na atribuição da nota para cada um dos critérios listados para a aplicação. No exemplo, para fins didáticos, são utilizados os critérios subjetivos. Geradas as notas individuais para cada critério, calculamos a nota final do fator pelo somatório dessas. Após isso, calculamos a nota final da aplicação somando as notas dos fatores de qualidade do mapa que elaboramos. Vejamos o exemplo: Tabela 3 – Exemplo 3 Fator Peso Nota Cálculo • Correção — Completude — Rastreabilidade 4 2 2 2,5 7,5 5 25/10 7,5*2 5*2 • Confiabilidade — Tolerância a erros — Simplicidade 5 3 2 4,5 10 7,5 45/10 10*3 2*7,5 • Eficiência — Na execução — No armazenamento 5 3 2 4,4 8 10 44/10 8*3 10*2 • Integridade ̶ Controle de acesso 3 3 3 10 30/10 10*3 • Usabilidade — Comunicabilidade — Treinamento 5 4 1 4,0 7,5 10 40/10 7,5*4 1*10 • Manutenibilidade — Modularidade — Documentação 3 2 1 1,9 7 5 19/10 7*2 5*1 • Testabilidade — Facilidade de manipulação 3 3 1,8 6 18/10 6*3 O próximo passo é calcular a média ponderada da matriz de acordo com as notas de cada fator: 29 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II Tabela 4 – Exemplo 4 Fator Peso Nota Final • Correção 4 2,5 10 • Confiabilidade 5 4,5 22,5 • Eficiência 5 4,4 22 • Integridade 4 3 12 • Usabilidade 5 4 20 • Manutenibilidade 3 1,9 5,7 • Testabilidade 3 1,8 5,4 • Soma total 28 22,1 97,6 Calculando a nota final da aplicação, temos: 97,6 dividido por 28, que resulta em uma nota final de 3,48 de um total de 5, significando que a aplicação tem uma nota final de 6,96. Sem o critério estabelecido para a escolha da aplicação de biblioteca, nesse cenário apresentado no exemplo, essa aplicação estaria fora do processo de seleção por não atender as condições mínimas de aceitação. O importante nessa avaliação é estabelecer critérios claros por meio de um checklist para a atribuição correta das notas, a fim de que não gere dúvidas se a nota é justa ou não e permita uma conclusão imparcial da aplicação. 2.2 ISO/IEC 9126 – Características de qualidade do produto de software A norma ISO/IEC 9126 é uma referência técnica mundial para a qualidade de um produto de software elaborada pela ISO e pelo IEC em 1991 e publicada no Brasil em 1996 como NBR/13596. Fornece um modelo geral que define seis categorias de características de qualidade do produto de software divididas em subcaracterísticas. Estas podem ser avaliadas por meio de métricas quantitativas. Tal conjunto permite dizer se o software satisfaz as necessidades e os padrões estabelecidos pelos desenvolvedores e pelos usuários (ISO, 2001). Observação IEC significa International Electrotechnical Commission e é uma organização internacional sem fins lucrativos que desenvolve padrões sobre tecnologias elétricas e eletrônicas, inclusive sobre software, presente em mais de 150 países. De acordo com a norma ISO/IEC 9126, o documento propõe um conjunto de atributos de qualidade, distribuídos em seis características, que, por sua vez, são divididas em subcaracterísticas, chamado de modelo de referência e ilustrado na Figura 10. 30 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I Os conceitos e detalhes de cada característica e sua composição são descritos a seguir (ISO, 2001): • Funcionalidade: descreve o que o software faz. Pergunta‑se: “Satisfaz as necessidades dos usuários?”. — Subcaracterísticas: — Adequação: todas as funções especificadas estão construídas? — Acurácia: o produto gera resultados precisos ou dentro do esperado? — Interoperabilidade: interage com outros sistemas? — Segurança de acesso: previne acesso não autorizado ao sistema? — Conformidade: está de acordo com padrões, convenções ou regras? • Confiabilidade: descreve a capacidade do software de realizar suas funções sem falhas. Pergunta‑se: “O software é tolerante a falhas?”. — Subcaracterísticas: — Maturidade: qual a frequência em que falhas ocorrem? — Tolerância a falhas: como o sistema se comporta na presença de problemas? — Recuperabilidade: é capaz de se restabelecer em caso de ocorrência de falha? • Usabilidade: descreve quão fácil um sistema é de ser utilizado. Pergunta‑se: “O software é fácil de usar?”. — Subcaracterísticas: — Inteligibilidade: o software é de fácil entendimento para o uso? — Apreensibilidade: o sistema é fácil de aprender a usar? — Operacionalidade: é fácil de utilizar? — Atratividade: quão agradáveis são a navegação e o uso do software? 31 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II • Eficiência: descreve qual é a relação entre o desempenho e os recursos utilizados. Pergunta‑se: “O software é fácil de usar?”. — Subcaracterísticas: — Comportamento em relação ao tempo de resposta: o tempo de resposta do sistema está de acordo com as expectativas? — Utilização de recursos: quanto tempo o sistema utiliza dos recursos computacionais (CPU, disco e memória)? • Manutenibilidade: descreve qual é a facilidade de fazer as alterações. Pergunta‑se: “O software é fácil de alterar?”. — Subcaracterísticas: — Analisabilidade: qual o esforço para identificar as causas de falhas? — Modificabilidade: qual o esforço para realizar as alterações a eventuais mudanças no sistema? — Estabilidade: qual o risco de efeitos inesperados de alterações? — Testabilidade: qual o esforço para testar o software alterado? Qualidade interna e externa Funcionalidade Adequação Acurácia Interoperabilidade Segurança e acesso Conformidade Confiabilidade Maturidade Tolerância a falhas Recuperabilidade Conformidade Usabilidade Inteligibilidade Apreensibilidade Operacionalidade Atratividade Conformidade Eficiência Comportamento em relação ao tempo Utilização dos recursos Conformidade Manutenbilidade Analisabilidade Modificabilidade Estabilidade Testabilidade Conformidade portabilidade Adaptabilidade Capacidade para ser instalado Coexistência Capacidade de substituir Conformidade Figura 10 – Modelo de referência da norma ISO/9126 32 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I • Portabilidade: descreve qual é a facilidade de transferir a aplicação para outro ambiente. Pergunta‑se: “O software é utilizável em outro ambiente?”. — Subcaracterísticas: — Adaptabilidade: qual a facilidade de se adaptar o produto para funcionar em outros ambientes operacionais? — Capacidade paraser instalado: qual o esforço para instalar o software em outros ambientes? — Coexistência: o software está de acordo com padrões referentes à portabilidade? — Capacidade de substituir: qual o esforço de utilizar o software em substituição a outro? 2.2.1 Métricas de qualidade A norma ISO/IEC 9126 não define métricas para utilização nas características propostas, mas define três classes de aplicação de métricas que auxiliam as empresas na criação de suas próprias métricas. Com base na estrutura apresentada na Figura 11, tem‑se as classes de métricas externas, de métricas internas e a qualidade em uso definidas pela norma. As métricas externas definem indicadores para avaliar um software por meio da medição do comportamento do sistema quando da sua execução. O objetivo das métricas externas é medir se o software satisfaz as necessidades de operação do sistema pelos usuários. Por exemplo: avaliando a característica de eficiência e a subcaracterística de tempo de resposta, cria‑se a métrica X para medir o tempo que a aplicação leva desde o acesso até a abertura da página inicial. Com essa métrica é possível avaliar se a aplicação atende aos requisitos de desempenho esperados. 9126-1 Modelo qualidade 9126-3 Métricas internas 9126-2 Métricas externas 9126-4 Qualidade em uso Figura 11 – Estrutura da série de normas da ISO/9126 As métricas internas são aplicáveis para avaliar o software durante sua construção, ou seja, para a garantia da qualidade. Por meio das métricas internas é possível medir a qualidade de produtos 33 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II intermediários produzidos e predizer a qualidade final do software. Por exemplo: avaliar o número de erros encontrados em revisões. A qualidade em uso avalia a qualidade do software na perspectiva do uso cotidiano pelos usuários. Nesse cenário, são avaliadas a efetividade, a produtividade, a segurança e a satisfação do usuário com o software. A norma ISO/IEC 9126 pode ser utilizada para definir os padrões de qualidade esperados pelos usuários e para a avaliação da garantia da qualidade durante a construção do software, bem como para o controle de qualidade por meio da verificação antes da entrega ao usuário final. Sua aplicação é idêntica aos requisitos de McCall, porém com mais características que devem ser avaliadas. O exemplo de aplicação demonstrado no tópico referente ao Modelo de McCall serve de referência para a aplicação da norma ISO/IEC 9126, utilizando o mesmo princípio de adaptação ao tipo de software e posteriores pontuação e avaliação da qualidade do produto de software. Lembrete A norma ISSO/IEC 9126 pode ser utilizada como checklist para definir os requisitos não funcionais e para avaliar se estes estão atendidos ao final da construção do software. 2.3 Norma ISO/IEC 12207 – Ciclo de vida do software A norma ISO/IEC 12207 descreve os processos de ciclo de vida de um produto de software e foi publicada em 1995. A norma define um conjunto de processos que padroniza as atividades e orienta o desenvolvimento, a manutenção e a aquisição para as empresas de desenvolvimento de software. Observação Ciclo de vida é uma estrutura que contém atividades aplicadas ao desenvolvimento, à operação e à manutenção de software, desde a definição de requisitos até o término de seu uso (ISO, 2008). A norma ISO/IEC 12207 está estruturada em três grupos de processo: os processos fundamentais, que abrangem a execução do desenvolvimento do software; os processos de apoio, que são as atividades de suporte e qualidade do software; e os processos organizacionais, que são as atividades que permitem a manutenção e a melhoria dos processos. A organização desses processos é apresentada na Figura 12. 34 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I Processos fundamentais Aquisição Fornecimento Desenvolvimento Operação Manutenção Processos de apoio Documentação Gerência de configuração Garantia da qualidade Verificação Validação Revisão Auditoria Resolução de problemas Adaptação Processos Organizacionais Gerência Melhoria Infraestrutura Treinamento Figura 12 – Estrutura da norma ISO/IEC 12207, publicada em 1995 2.3.1 Processos fundamentais Execução do desenvolvimento, da operação e da manutenção do software durante o seu ciclo de vida. • Aquisição Define as tarefas do adquirente de software. Inclui as atividades de definição das necessidades de adquirir um software, pedido de proposta, seleção de fornecedores, gerência da aquisição e aceitação do software. • Fornecimento Define as tarefas do fornecedor ou da organização que provê o software. Abrange as atividades de preparação da proposta, assinatura de contrato, determinação dos recursos necessários, planejamento do projeto e entrega do software. • Desenvolvimento Define as tarefas do desenvolvedor ou da organização que desenvolve o software. Inclui as atividades de definição de requisitos, análise, projeto, codificação, integração, testes, instalação e aceitação do software. • Operação Define as tarefas a serem executadas pelo operador ou pela organização que presta serviço de manutenção do seu ambiente computacional para seus usuários. • Manutenção Define as tarefas a serem realizadas por quem presta serviços de manutenção do software. Inclui as atividades de gerenciamento das alterações, migração e descontinuação do software. Esses tópicos são detalhados no tópico 8. 35 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 ENGENHARIA DE SOFTWARE II 2.3.2 Processos de apoio Definem as tarefas que auxiliam outros processos, principalmente, as relacionadas à qualidade do software. • Documentação Define as tarefas para registrar as informações produzidas por um processo. Inclui as atividades de produção, edição, distribuição e manutenção dos documentos necessários a gerentes, desenvolvedores e usuários do software. • Configuração Define as tarefas de identificação e controle dos artefatos produzidos no desenvolvimento do software. Engloba as atividades de identificação, controle, armazenamento, liberação, manipulação, distribuição e modificação dos artefatos que compõem o software. • Garantia da qualidade Define as tarefas para garantir que o software esteja seguindo os padrões de qualidade estabelecidos. Técnicas de revisão, auditoria, verificação e validação podem ser utilizadas. • Verificação Define as tarefas para verificar se os artefatos de software atendem aos requisitos estabelecidos. • Validação Define as tarefas para validação dos requisitos e do software final e se estão de acordo com a proposição inicial. • Revisão Define as tarefas para avaliação da situação e dos produtos de uma atividade. Atividade essencial para a garantia da qualidade. • Auditoria Define as tarefas para determinar a conformidade de requisitos, planos e contrato aos padrões estabelecidos. • Resolução de problemas Define as tarefas para análise e eliminação dos problemas identificados durante a execução dos processos de desenvolvimento, de operação e de manutenção do software. 2.3.3 Processos organizacionais Definem as tarefas que permitem a manutenção ou a melhoria contínua dos processos. • Gerência Define as tarefas de gerenciamento do projeto durante o ciclo de vida. 36 Re vi sã o: Ju lia na - D ia gr am aç ão : J ef fe rs on - 29 /1 2/ 14 Unidade I • Infraestrutura Define as tarefas de fornecimento de recursos para outros processos, tais como hardware, software, ferramentas e técnicas. • Melhoria Estabelece as tarefas que visam medir, controlar e melhorar o seu ciclo de vida. • Treinamento Estabelece as tarefas necessárias para manter o pessoal treinado e o treinamento dos novos funcionários. 2.3.4 Processos de adaptação Camada que proporciona a flexibilidade necessária a todo processo. Estão definidas as tarefas para adequar