Baixe o app para aproveitar ainda mais
Prévia do material em texto
Gerência de Configuração de Software Evolução de Software sob Controle Tecnologia para Gerência de Configuração de Software Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 2 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle Gerência de Configuração de Software Autoria: Angelina A.A. C. P. de Oliveira – angelina.oliveira@iti.br Francisco Formoso Primo – francisco.formoso@iti.br Jorge Luiz da Cruz – jorge.cruz@iti.br Wagner Roberto De Martino – wagner.de-martino@iti.br Os autores pertencem à equipe técnica do Instituto Nacional de Tecnologia da Informação – ITI, órgão do Ministério da Ciência e Tecnologia. Última atualização: Junho/2001 Nenhuma parte desta apostila pode ser utilizada ou reproduzida, em qualquer meio ou forma, seja mecânico ou eletrônico, fotocópia, gravação, ou outros, sem autorização, prévia, expressa e específica dos autores. ITI - Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software Via D. Pedro I (SP-65), Km 143.6 – Caixa Postal 6162 Fone: (019) 3746- 6000 Fax (019) 3746-6092 Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 3 ÍNDICE 1 INTRODUÇÃO ..................................................................................................................................................7 1.1 PÚBLICO ALVO E OBJETIVOS .........................................................................................................................8 1.2 VISÃO GERAL DO TEXTO ...............................................................................................................................8 2 HISTÓRICO.....................................................................................................................................................11 3 MOTIVAÇÃO ..................................................................................................................................................15 3.1 O COMPUTADOR COMO UMA MÁQUINA DE USO GERAL ...............................................................................16 3.2 O SOFTWARE..............................................................................................................................................17 3.3 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE............................................................................................21 3.3.1 GCS: Custos & Benefícios .............................................................................................................22 3.3.2 Impedimentos à adoção de GCS.....................................................................................................22 3.3.3 GCS - Estado atual..........................................................................................................................23 4 CARACTERIZAÇÃO DE GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE..................................25 4.1 CONCEITOS FUNDAMENTAIS.......................................................................................................................26 4.2 DESENVOLVIMENTO DE SOFTWARE COM CONFIGURAÇÕES-BASE ..............................................................27 4.3 DISTRIBUIÇÕES...........................................................................................................................................34 4.4 DEFINIÇÃO FORMAL DE GCS ......................................................................................................................35 4.5 ATIVIDADES DE GCS..................................................................................................................................35 4.5.1 Identificação de configuração.........................................................................................................36 4.5.2 Controle de configuração................................................................................................................36 4.5.3 Administração de estado.................................................................................................................38 4.5.4 Auditagem de configuração ............................................................................................................39 4.6 ELEMENTOS ORGANIZACIONAIS DE GCS ....................................................................................................39 5 CONTROLE DE VERSÕES ...........................................................................................................................43 5.1 DESENVOLVIMENTO EM PARALELO ............................................................................................................45 5.2 OPERAÇÕES DE ACESSO ..............................................................................................................................46 5.3 AGREGAÇÕES .............................................................................................................................................48 5.4 DESENVOLVIMENTO DE SOFTWARE COM CONTROLE DE VERSÕES .............................................................49 5.5 CONCLUSÕES SOBRE CONTROLE DE VERSÕES ............................................................................................52 6 FERRAMENTAS DE GCS .............................................................................................................................53 6.1 CRITÉRIOS PARA AVALIAR UMA FERRAMENTA DE GERÊNCIA DE CONFIGURAÇÃO......................................53 6.1.1 Suporte a equipe de desenvolvimento.............................................................................................53 6.1.2 Suporte a desenvolvimento remoto.................................................................................................53 6.1.3 Suporte a configurações..................................................................................................................54 6.1.4 Suporte a gerência de mudanças.....................................................................................................54 6.1.5 Suporte de “build” e de distribuição de produto .............................................................................54 6.1.6 Suporte de processo ........................................................................................................................54 6.1.7 Usabilidade .....................................................................................................................................54 6.1.8 Facilidade de “set-up”.....................................................................................................................54 6.1.9 Personalização ................................................................................................................................54 6.2 CLASSIFICAÇÃO DAS FERRAMENTAS DE GCS .............................................................................................54 6.2.1 Ferramentas de controle de versões ................................................................................................55 6.2.2 Ferramentas orientadas ao desenvolvedor ......................................................................................55 6.2.3 Ferramentas orientadas a processo .................................................................................................55 PabloHenrique Realce PabloHenrique Realce PabloHenrique Realce PabloHenrique Nota 1 a 7 prova N1nullGCS PabloHenrique Realce Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 4 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Softwaresob Controle 6.3 ESTUDOS DE CASO ......................................................................................................................................55 6.3.1 Análise da ferramenta Source Integrity ..........................................................................................56 6.3.1.1 Suporte a equipe de desenvolvimento..............................................................................................56 6.3.1.2 Desenvolvimento remoto.................................................................................................................56 6.3.1.3 Gerenciamento de configuração ......................................................................................................57 6.3.1.4 Gerenciamento de modificação........................................................................................................57 6.3.1.5 Suporte a geração de distribuição de um produto ............................................................................57 6.3.1.6 Gerenciamento de processo .............................................................................................................57 6.3.1.7 Usabilidade ......................................................................................................................................58 6.3.1.8 Facilidade de configuração inicial ...................................................................................................58 6.3.1.9 Personalização .................................................................................................................................58 6.3.2 Análise da ferramenta Visual Source Safe ......................................................................................58 6.3.2.1 Suporte a equipe de desenvolvimento..............................................................................................58 6.3.2.2 Desenvolvimento remoto.................................................................................................................59 6.3.2.3 Gerenciamento de configuração ......................................................................................................59 6.3.2.4 Gerenciamento de modificação........................................................................................................59 6.3.2.5 Suporte a geração de distribuição de um produto ............................................................................59 6.3.2.6 Gerenciamento de processo .............................................................................................................59 6.3.2.7 Usabilidade ......................................................................................................................................59 6.3.2.8 Facilidade de configuração inicial ...................................................................................................60 6.3.2.9 Personalização .................................................................................................................................60 7 NORMAS E PADRÕES...................................................................................................................................61 7.1 IEEE...........................................................................................................................................................61 7.2 ISO/IEC .....................................................................................................................................................61 7.3 SEI-CMU...................................................................................................................................................63 7.3.1 O Processo de GCS segundo o modelo CMM................................................................................67 7.4 INICIATIVAS NO BRASIL..............................................................................................................................69 8 IMPLEMENTAÇÃO DE GCS........................................................................................................................71 9 EXEMPLO DE APLICAÇÃO: GCS PARA PEQUENAS EMPRESAS ....................................................73 9.1 INTRODUÇÃO ..............................................................................................................................................73 9.2 CARACTERIZAÇÃO DO PROBLEMA..............................................................................................................73 9.3 ESTRATÉGIA DE ABORDAGEM ....................................................................................................................73 9.4 O PLANO DE GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE .......................................................................74 9.5 RESULTADOS OBTIDOS ...............................................................................................................................78 10 EXEMPLO DE APLICAÇÃO: O MODELO NASA DE GCS ....................................................................79 10.1 DEFINIÇÃO..................................................................................................................................................79 10.2 FUNÇÕES DE GCS.......................................................................................................................................79 10.3 CONCEITOS BÁSICOS...................................................................................................................................79 10.4 ESTRUTURA ORGANIZACIONAL DE GCS .....................................................................................................80 10.5 CICLO DE VIDA...........................................................................................................................................81 10.5.1 Fase Conceito e Iniciação ...............................................................................................................81 10.5.2 Fase Requisitos ...............................................................................................................................82 10.5.3 Fase Arquitetura .............................................................................................................................82 10.5.4 Fase Projeto Detalhado ...................................................................................................................83 10.5.5 Fase Implementação .......................................................................................................................83 10.5.6 Fase Integração e Teste...................................................................................................................84 10.5.7 Fase Aceitação e Entrega................................................................................................................84 10.5.8 Fase Operação e Manutenção .........................................................................................................85 11 CONCLUSÃO ..................................................................................................................................................87 APÊNDICE A - PLANO DE GERÊNCIA DE CONFIGURAÇÃO DO PROJETO SW_CRIT ....................89 Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 5 1 INTRODUÇÃO ................................................................................................................................................90 1.1 OBJETIVOS..................................................................................................................................................90 1.2 ESCOPO.......................................................................................................................................................901.3 DEFINIÇÕES E MNEMÔNICOS .......................................................................................................................91 1.3.1 Definições.......................................................................................................................................91 1.3.2 Mnemônicos ...................................................................................................................................91 1.4 REFERÊNCIAS ............................................................................................................................... ..............92 2 GERÊNCIA ...................................................................................................................... ................................93 2.1 ORGANIZAÇÃO ...........................................................................................................................................93 2.2 RESPONSABILIDADES DE GCS ....................................................................................................................93 2.2.1 Identificação da Configuração ........................................................................................................94 2.2.1.1 Configurações-Base .........................................................................................................................94 2.2.1.2 Liberações (Releases) ......................................................................................................................94 2.2.1.3 Documentação .................................................................................................................................95 2.2.2 Controle da Configuração...............................................................................................................95 2.2.2.1 Requisição de Modificação de Software/Sistema (RMS) ................................................................95 2.2.2.2 Autorização para Modificação de Software (AMS).........................................................................95 2.2.3 Administração de Estado ................................................................................................................95 2.2.4 Auditagens ......................................................................................................................................95 2.2.4.1 Auditagem de GQS..........................................................................................................................95 2.2.5 Comitê de Controle de Configuração (CCC)..................................................................................96 2.3 POLÍTICAS, DIRETIVAS E PROCEDIMENTOS APLICÁVEIS.............................................................................96 3 ATIVIDADES DE GCS ...................................................................................................................................97 3.1 IDENTIFICAÇÃO DE CONFIGURAÇÃO............................................................................................................97 3.1.1 Configurações-Base........................................................................................................................97 3.1.1.1 Configuração-Base Funcional..........................................................................................................97 3.1.1.2 Configuração-Base de Alocação......................................................................................................97 3.1.1.3 Configuração-Base de Projeto Básico..............................................................................................97 3.1.1.4 Configuração-Base de Projeto Detalhado ........................................................................................98 3.1.1.5 Configuração-Base de Código ............................................................................................. ............98 3.1.1.6 Configuração-Base de Produto ............................................................................................ ............98 3.1.2 Documentação ................................................................................................................................98 3.1.3 Partes do software...........................................................................................................................99 3.2 CONTROLE DE CONFIGURAÇÃO...................................................................................................................99 3.2.1 Função do Comitê de Controle da Configuração..........................................................................100 3.2.2 Requisição de Modificação de Software/Sistema (RMS).............................................................100 3.2.3 Autorização de Modificação de Software (AMS).........................................................................100 3.2.4 Ferramentas automatizadas de GCS para controle de modificações............................................101 3.3 ADMINISTRAÇÃO DE ESTADO ...................................................................................................................101 3.4 AUDITAGENS E REVISÕES DE CONFIGURAÇÃO..........................................................................................102 3.4.1 Auditagem Funcional de Configuração (FCA).............................................................................102 3.4.2 Auditagem Física de Configuração (PCA) ...................................................................................102 3.4.3 Revisões........................................................................................................................................102 3.5 CONTROLE DE INTERFACES.......................................................................................................................102 3.6 CONTROLE DE FORNECEDORES E SUBCONTRATADOS...............................................................................103 3.6.1 Software adquirido de fornecedor.................................................................................................103 3.6.2 Software subcontratado ................................................................................................................103 3.6.3 Auditagem de software de fornecedor e de subcontratado ...........................................................103 4 IMPLANTAÇÃO ...........................................................................................................................................104 4.1 COMITÊ DE CONTROLE DA CONFIGURAÇÃO .............................................................................................104 4.2 ESTABELECIMENTO DE CONFIGURAÇÕES-BASE........................................................................................104 4.3 ESCALONAMENTO E PROCEDIMENTOS PARA REVISÕES E AUDITAGENS DE GCS........................................104 Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 6 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 4.4 RETENÇÃO................................................................................................................................................104 5 RECURSOS ....................................................................................................................................................105 5.1 RECURSOS HUMANOS...............................................................................................................................105 5.2 FERRAMENTAS DE GERÊNCIA DE CONFIGURAÇÃO....................................................................................105 6 MANUTENÇÃO DO PLANO.......................................................................................................................107 Anexo 1: Requisição de Modificação de Sistema/Software -RMS ..................................................................108 Anexo 2: Autorização de Modificação de Software - AMS ..............................................................................109 Anexo 3: Procedimento para controle de modificações no software/documentação......................................110 APÊNDICE B - REFERÊNCIAS BIBLIOGRÁFICAS ...................................................................................111 Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 7 1 INTRODUÇÃO Este texto trata de mudanças. Mudanças acontecem praticamente em tudo: as coisas, as pessoas, o ambiente, tudo muda com maior ou menor freqüência. Particularmente, aqui, estamos interessados em focalizar as mudanças que ocorrem nos produtos de software durante todo o seu ciclo de vida. Nos produtos de software mudanças são intrínsecas, fundamentais e inevitáveis. Este é um fato que possui os seus aspectos positivos e negativos. É graças às modificações que o produto se concretiza e pode ser corrigido ou melhorado e é também devido às modificações que surgem muitos problemas do software: as mudanças, quando aplicadas sem critério, podem levar à perda de controle do produto e, como conseqüência, comprometer sua integridade e qualidade. Neste texto procurou-se: • realçar a necessidade de controlar sistematicamente as mudanças nos produtos de software; • mostrar como acomodar e facilitar a realização de mudanças nos produtos; • indicar como evitar que as mudanças não desviem os produtos de seus projetos originais; • apontar como fazer com que as mudanças não comprometam a qualidade do produto final. Em suma, disseminar práticas para o desenvolvimento de software de forma sistemática, segura e controlada objetivando sempre produtos da melhor qualidade. Gerência de Configuração de Software (GCS) é uma disciplina de natureza técnica e gerencial que objetiva facilitar o desenvolvimento de software e, ao mesmo tempo, garantir a sua integridade. Tais objetivos são perseguidos basicamente através de controle sistemático sobre as modificações pelas quais passa o produto desde a sua concepção até a sua desativação. Para que se aplique GCS é fundamental: • identificar aquilo que se pretende controlar; • definir o controle a ser estabelecido; • verificar que as modificações sejam implementadas de acordo com o especificado; • manter um registro que permita aos interessados a obtenção de informações do estado em que se encontrem os itens sob controle. Tais tópicos são examinados com detalhes no decorrer deste texto. Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 8 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 1.1 Público alvo e objetivos Este texto é destinado às pessoas que lidam com software em geral: profissionais de informática, desenvolvedores, gerentes, estudantes, interessados na aquisição de ferramentas de GCS, pretendentes à certificados de qualidade, etc. Os objetivos principais do texto são: • apresentar os conceitos básicos de GCS e difundir suas práticas; • fornecer subsídios para a elaboração de planos de GCS; • apresentar as principais características de algumas ferramentas de GCS encontradas no mercado. Dessa forma acredita-se estar contribuindo para que os interessados possam melhorar os seus processos de produção de software ou o de suas empresas. Ressalve-se que o desenvolvimento de software é, em geral, uma tarefa complexa e não existem fórmulas mágicas para resolver os vários problemas a ela relacionados. A solução apontada pela GCS implica em melhorar o processo de desenvolvimento, mesmo que para tanto tenha-se que estabelecer e respeitar regras e que haja um aumento no formalismo. GCS nem sempre é uma disciplina simpática. Seu objetivo é, antes de tudo, preservar a integridade e melhorar a qualidade dos produtos de software. 1.2 Visão geral do texto Este texto encontra-se dividido em capítulos numerados de 1 a 11 e dois apêndices. No capítulo 1 é apresentada uma introdução ao texto e à sua organização. No capítulo 2 é apresentado um breve histórico de GCS, sua origem dentro das engenharias, sua aplicação ao hardware e a conseqüente migração e adaptação para o software. No capítulo 3 são apresentados os motivos ou argumentos que justificam um estudo mais aprofundado do tema GCS, sua atualidade e relevância. No capítulo 4 são abordados os aspectos conceituais de GCS e detalhados os seus processos principais. No capítulo 5 são abordados alguns aspectos importantes da implementação prática de GCS: o controle de versões e a incorporação de alguns conceitos de GCS a projetos já desenvolvidos ou em desenvolvimento. No capítulo 6 é abordado o assunto “Ferramentas de GCS”: uma classificação segundo as suas características funcionais, alguns critérios para avaliação e estudos de caso de ferramentas atualmente encontradas no mercado, suas características e limitações. No capítulo 7 é feito um apanhado geral sobre o estado atual das Normas e Padrões de GCS. No capítulo 8 são feitas algumas considerações sobre planejamento de GCS. Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 9 Nos capítulos 9 e 10 são apresentados dois exemplos de aplicação de GCS, um mostrando GCS numa empresa de pequeno porte e outro mostrando o modelo de uma grande organização, a NASA. No capítulo 11 é feita a conclusão do texto, uma visão critica sobre o texto e o tema abordado. Permeando os capítulos do texto é utilizado como exemplo a implementação de GCS num projeto de software hipotético SW_CRIT. Procurou-se focalizar as situações mais comuns e que possam ser encontradas em projetos reais de software. O apêndice A apresenta o plano de gerência de configuração para esse projeto hipotético que é baseado no documento ANSI/IEEE Std 1042-1987. Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 11 2 HISTÓRICO A necessidade de uma disciplina para identificar e controlar o projeto de equipamentos complexos e a comunicação das informações relacionadas foi mais aparente na indústria de defesa dos EUA onde a alta qualidade do produto era um pressuposto. Assim, o histórico da disciplina gerência de configuração muito deve aos esforços dos organismos governamentais norte-americanos, especialmente os de defesa, e em particular aos esforços de padronização na área de engenharia. Até o final da 2a Guerra Mundial, os projetos de engenharia não eram muito complexos. Num projeto, as atividades de desenvolvimento, de acompanhamento e de suporte eram todas realizadas sem grandes problemas pelo mesmo grupo de pessoas, em geral um engenheiro e alguns técnicos que o auxiliavam. Após a Grande Guerra, a complexidade dos equipamentos aumentou de maneira espantosa, como também aumentou a velocidade com que estes equipamentos eram substituídos por outros ainda mais complexos. Como resultado, tanto a constituição das equipes de desenvolvimento como a forma como trabalhavam não conseguiam suportar as novas exigências dos desenvolvimentos. Equipes que costumavam ser compostas por um engenheiro experiente e cinco técnicos, passaram a ser integradas por cinco engenheiros e um bom técnico, todos os seis realizando o mesmo tipo de trabalho. Os produtos, por sua complexidade e rapidez de evolução, exigiam mais atenção quanto ao controle de sua evolução. Atividades de gerência de configuração (GC) principiaram nesta época no seio da indústria de defesa norte-americanaagrupadas em torno de técnicas gerenciais para resolver problemas de baixa qualidade. O termo Configuration Management (Gerência de Configuração) foi formalmente estabelecido neste contexto, assim como vários outros conceitos tecnológicos. O primeiro trabalho de sistematização da área aparece com a publicação, pela força aérea americana, da norma AFSCM 375-1 Configuration Management. Este trabalho significou um marco de mudança na forma como o desenvolvimento de projetos de engenharia eram conduzidos, pelo menos no contexto das forças armadas americanas, pois estabeleceu de forma clara a separação entre atividades de desenvolvimento de um produto e as atividades de controle deste produto. Esta norma disparou uma cascata de outros esforços de normalização nas organizações militares norte-americanas. Estes esforços deram origem a diversas normas na década de 1960. Em particular cinco documentos foram publicados em 1968 que definiam políticas e diretrizes de GC e formalizavam as atividades básicas de identificação, controle e administração de estado. Estes documentos foram: Directive 5010.19 Configuration Management, Instruction 5010.21 Configuration Mangement e as normas MIL STD 480 Engineering Changes, Deviations, and Waivers, para as atividades de controle de configuração, MIL STD 482 Standard for Status Accounting, para as atividades de administração de estado, e MIL STD 490 Specification Practices para as atividades de identificação de configuração. Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 12 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle Em todos os esforços, no entanto, o desenvolvimento de software não possuía tratamento específico. Software era considerado um apêndice do hardware. O primeiro documento a reconhecer gerência de configuração tanto de hardware como de software foi a norma MIL STD 483, Configuration Management Practices for Systems, Equipment, Munitions, and Computer Programs, publicada por volta de 1971. Também neste documento apareceu pela primeira vez um esboço de plano de GC. Entretanto, foi com o início do desenvolvimento de normas específicas para o desenvolvimento de software que a constituição da disciplina GCS realmente tomou impulso. No final da década de 70 surgiu a norma MIL STD 1679 Weapon System Software Development (Dezembro de 1978) e nos anos de 1979 e 1981 foram realizadas 2 conferências de software em Monterey/Califórnia (Monterey I e Monterey II). Uma das principais resoluções dessas conferências foi a determinação de se criar um padrão universal para desenvolvimento de software. Este projeto ambicioso consolidou-se na norma DOD STD 2167 Defense System Software Development publicada em 1985, após um período de desenvolvimento bastante turbulento. Sua publicação foi realizada já com provisão de início de trabalho de revisão para resolver questões abertas. Esta norma, por outro lado, significou um grande avanço nos conceitos de GCS principalmente com a introdução do conceito de configuração-base (baseline), que organizava GCS em termos das fases do ciclo de vida. Por volta de 1988, o governo americano anunciou sua intenção de sair da arena de elaboração ativa de normas e o interesse em fomentar os trabalhos de normalização das associações da indústria, tais como IEEE, ANSI e EIA. A partir desta época, a evolução de GCS passou para entidades ligadas a indústria e universidade, ainda que com uma grande participação de organismos governamentais norte- americanos, especialmente as organizações militares e de defesa. A IEEE em seus esforços de elaboração de normas para a área de engenharia de software, publicou duas normas enfocando especificamente a questão de elaboração de planos de GCS: as normas IEEE Std 828-1998 Software Configurations Management Plans e IEEE Std 1042- 1987 Guide to Software Configuration Management. Estas normas, principalmente a IEEE Std 828, são bastante adotadas no cenário internacional como referência para a elaboração de planos de GCS. Adicionalmente, o lançamento nos anos 90 do Capability Maturity Model (CMM), pelo Software Engineering Institute da Carnegie Mellon University, realçou ainda mais a importância da disciplina GCS ao identificá-la como um dos processos-chave de um processo de software de qualidade. Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 13 No cenário internacional, foi formado na década de 90 o comitê conjunto JTC1 (Joint Technical Committee 1) unificando os esforços de elaboração de normas na área de tecnologia da informação das duas maiores entidades internacionais de padronização a ISO (International Organization for Standardization) e a IEC (International Electrotechnical Commission). Sob a égide do JTC1 foi produzida a norma ISO/IEC 12207:1995 Information technology -- Software life cycle processes, que define uma estrutura de processos para o processo de software. Neste modelo, é estabelecido o processo de GCS como um dos processos de apoio ao desenvolvimento de software. A partir desta norma foi produzido o relatório técnico ISO/IEC TR 15846:1998 Information technology -- Software life cycle processes -- Configuration Management que procura desenvolver a caracterização resumida de GCS definida na ISO/IEC 12207. Atualmente percebe-se um interesse crescente por GCS. Este interesse pode ser atribuído em grande parte à busca por certificações de qualidade como ISO 9000 ou nível de maturidade de acordo com o CMM, mas é também devido às necessidades colocadas pela competição do mercado que, cada vez mais, exige qualidade. Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 15 3 MOTIVAÇÃO O desenvolvimento de software é uma das atividades mais criativas e também das mais desafiadoras para o profissional de informática. Aplicações de software são encontradas em todos os setores de atividade humana, desde as mais elementares até as mais complexas. De maneira geral, desenvolver software não é uma tarefa trivial mas os resultados compensam os esforços. A demanda continua crescente e um bom profissional de software tem seu lugar garantido no mercado de trabalho atual. O aumento da utilização e da demanda, no entanto, implica na necessidade de produtos mais confiáveis, mais fáceis de usar e de melhor qualidade. Desenvolver software deixou de ser uma tarefa de artesãos, de principiantes ou de amadores. Para atender o mercado é necessária uma produção em larga escala, eficiente e confiável. Hoje em dia, por trás do desenvolvimento de software, há todo um processo. É inquestionável a presença e a importância dos computadores no nosso dia a dia. Raros são os indivíduos cuja vida passe ao largo dessa máquina ou que não sejam influenciados pela mesma. O envolvimento na maioria das vezes é compulsório. Não se pede, impõe-se o uso. Assim, querendo ou não, fomos todos transformados em usuários de computador. Isso é um fato! Para uma grande parcela de usuários não interessa nada saber detalhes técnicos sobre o computador, o que é, como funciona. São assuntos sem relevância. O importante para esse tipo de usuário são as funcionalidades oferecidas pelo computador e a qualidade e eficiência dos serviços prestados. Existe, porém, uma parcela de usuários de computador para os quais são imprescindíveis conhecimentos técnicos sobre o assunto num grau de maior ou menor profundidade. ? GCS Controle de Versões ISO 9000 CMM Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 16 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 3.1O computador como uma máquina de uso geral O computador é uma máquina de uso geral especializada em processamento de dados. É, sem dúvida, um dos principais produtos tecnológicos do século XX. Surgida há cerca de 50 anos, evoluiu de forma extraordinária e aos poucos foi se entranhando no dia a dia das pessoas. Um sistema de computação é constituído por dois componentes principais: o hardware e o software. Um terceiro componente, o firmware, pode aparecer também e é um misto dos outros dois. A figura 3.1 ilustra um sistema de computação típico. Figura 3.1 - Sistemas de Computação Os computadores encontram-se, hoje em dia, nos mais diversos tipos e tamanhos com aplicações em praticamente todas as áreas de atividade humana. O hardware do computador envolve todos os componentes físicos do sistema: CPU, teclado, mouse, vídeo, fontes de alimentação, etc. Esse hardware possui algumas habilidades especiais tais como fazer operações lógicas e aritméticas de uma forma muito eficiente: sem errar e num tempo muito pequeno. Tais habilidades, quando manipuladas convenientemente, podem ser muito úteis na solução de alguns problemas. O hardware representa a capacidade de trabalho bruto da máquina. Também fazem parte do hardware os dispositivos periféricos utilizados na comunicação com os usuários: pessoas ou outras máquinas. Nesta categoria encontram-se as impressoras, modems, discos, etc. A gerência de configuração nos seus primórdios aplicava-se principalmente ao hardware. A parte inteligente do sistema, aquela que explora os recursos do hardware com uma finalidade prática e específica constitui o chamado software. Os primeiros computadores eram operados através de chaves e alavancas que dificultavam e limitavam muito o seu uso. No final da década de 40 John Von Neumann introduziu o conceito de programa armazenado e o computador passou a ser uma máquina controlada através de programas o que indiscutivelmente ampliou as suas possibilidades. O software é constituído por programas de computador e por estruturas de dados. Sistemas de ComputaçãoSistemas de Computação Hardware F i r m w a r e Software Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 17 Os programas são seqüências de instruções que a máquina executa com alguma finalidade determinada pelo autor do programa. As estruturas de dados representam as informações que devem ser processadas mapeando elementos do contexto da aplicação para o contexto da máquina. O terceiro componente de um sistema de computação, o firmware, é uma combinação de dispositivos de hardware e de software residente em ROM e que não pode ser modificado por programa. 3.2 O Software O software é, sem dúvida, o componente mais importante do computador. É principalmente devido ao software que o computador ganha o status de máquina de uso geral: um mesmo hardware desempenhando funções diversas. Durante o seu ciclo de vida o software apresenta-se sob diversos formatos ou representações. Iniciando um processo de desenvolvimento há sempre uma necessidade ou problema apresentado por uma pessoa ou organização e o analista ou programador propõe uma solução que envolve o desenvolvimento de um determinado software. Nesse ponto o software é um conceito e a partir daí evolui para diversas outras formas até tornar-se um código que, executado pela máquina, satisfaz as necessidades do usuário. A figura 3.2 ilustra o processo de desenvolvimento do software: Figura 3.2 - Evolução dos Sistemas de Software Convém notar que o software, partindo de uma idéia até chegar a um código que a máquina entenda e execute, necessariamente deve passar por diversas representações que se efetivam através de transformações. Uma característica das mais importantes do software é que ele é passível de modificações. As modificações são necessárias para o desenvolvimento propriamente dito: modificações para a correção de erros e modificações para a melhoria ou aprimoramento do software. Apenas quando um software é desativado ele não sofre mais modificações. Necessidade Idéia Formulação de Conceitos SISTEMA Construção Necessidade Satisfeita Projeto HW SW SW SISTEMA PabloHenrique Realce PabloHenrique Realce PabloHenrique Realce Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 18 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle Em muitas aplicações o software é um elemento crítico. Um erro ou defeito pode acarretar a perda de grandes quantidades de dinheiro e, pior, pode custar a vida de pessoas. Como exemplos desse tipo de software podemos citar programas de controle de aeronaves, monitoramento de pacientes, controle de metrôs e trens, radares, etc. É de vital importância que os projetistas e programadores tenham consciência do papel que desempenham. Se é incontestável a importância do software, é imprescindível que ele atenda a um mínimo padrão de qualidade. Diversas são as exigências do mercado atual no quesito qualidade. Com o aumento na oferta, o consumidor de software torna-se cada vez mais exigente e os certificados de qualidade já fazem parte dos requisitos para se adquirir, ou não, determinado produto de software. Isso leva os fornecedores a se preocuparem cada vez mais com tais certificados para os seus produtos. No desenvolvimento de um software de qualidade é fundamental não descuidar de nenhum dos seguintes aspectos: • Técnicos: Utilização de metodologias atualizadas, bons algoritmos, estruturas de dados adequadas, etc. • Gerenciais: Planejamento e acompanhamento das atividades de desenvolvimento, controle e administração dos recursos, etc. • Suporte ao desenvolvimento: Estabelecimento de processos de apoio adequados às atividades de desenvolvimento, tais como: documentação, gerência de configuração de software, verificação e validação, mecanismos de revisão e outros. No entanto, como tendência geral, observam-se uma grande ênfase nos aspectos técnicos e uma negligência, também grande com respeito aos aspectos gerenciais e de suporte. Uma expressão poderia resumir esta tendência: Tecnologia é tudo. Entretanto, após algumas décadas de grande esforço e elaboração em tecnologia, de novas linguagens de programação e de representação de conhecimento, de ambientes de desenvolvimento cada vez mais sofisticados, de ferramentas CASE, de tecnologia de bancos de dados cada vez mais avançada, de novos paradigmas, tais como orientação a objetos, entre outros, o que se vê são projetos que continuam com atrasos sistemáticos e estouros de orçamento. Continua sendo muito comum, quase a regra, a “Lei dos 90%” que pode ser enunciada da seguinte forma: “90% do desenvolvimento de um produto ou sistema de software é realizado nos 10% iniciais do tempo total. Os 10% restantes tomam os 90% finais do tempo” Além do fato de a engenharia de software ser uma área nova em que a abordagem metodológica ainda não está totalmente resolvida, como no caso das outras engenharias mais tradicionais e maduras, este resultado frustrante, identificado em [CMM 93] vem do fato de ser praticamente impossível obterem-se os benefícios de melhores métodos e tecnologia no turbilhão de projetos não disciplinados e impropriamente gerenciados. O problema fundamental é a inabilidade de se gerenciar o processo de software. PabloHenrique Realce PabloHenrique Realce PabloHenrique Realce PabloHenrique Realce PabloHenrique Realce PabloHenrique Realce Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 19 Outro ponto é que ainda hoje existem profissionais que vêem o desenvolvimentode software como sendo uma arte em vez de uma ciência. A complexidade das aplicações, a disponibilidade de ferramentas, os prazos estabelecidos para a entrega, a produção em larga escala, tudo isso exige uma abordagem profissional e sistemática para o processo de produção de software. Devido ao software ser de natureza intangível, complexa e muito sujeita a modificações o seu desenvolvimento não é tarefa trivial. Ela envolve riscos e a probalidade de um projeto de software ser abandonado antes de seu término é grande, principalmente nos projetos maiores a figura 3.3 ilustra essa afirmativa: Figura 3.3 - Projetos de software concluídos X Complexidade Os projetos considerados tiveram a sua complexidade medida em termos de pontos de função (FP) e o que pode ser observado é que quanto maior a complexidade do projeto maior a sua chance de ser concluído com atraso ou simplesmente abandonado. Levando-se em conta que o desenvolvimento de software é uma atividade cara para as empresas o abandono de grandes projetos acarretam grandes prejuízos. Das realizações do ser humano, o software se destaca por três características que o colocam num patamar de distinção: é intangível, é altamente complexo e é facilmente modificável. Adicionalmente, este conjunto de características acarreta um fenômeno bastante conhecido daqueles que lidam com software e que permeia todo o seu ciclo de vida: as modificações. 5 10 15 20 25 30 35 40 50 45 55 60 65 70 75 80 <100 >50001000-5000100-1000 CANCELADOS ATRASOU > 12 meses ATRASOU > 6 meses NO PRAZO ANTES DO PRAZO Tamanho de Software x PrazoTamanho de Software x Prazo Capers Jones Patterns of large software systems: Failure and success IEEE Computer - March 1995 PabloHenrique Realce PabloHenrique Realce Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 20 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle As modificações são intrínsecas ao software e diversas são suas origens: a identificação de novos requisitos, a evolução do ambiente operacional, os avanços tecnológicos, a identificação de novas maneiras de implementar funcionalidades, ou, ainda, uma das mais freqüentes, a correção de defeitos. As modificações ocorrem, enfim, porque o conhecimento completo do software, o que eqüivale a dizer do problema que ele deve resolver, raramente é obtido antes de seu desenvolvimento. E é exatamente o conhecimento adicional, adquirido durante o desenvolvimento, a grande força impulsionadora das mudanças no software. Esta facilidade de modificação, em contrapartida, traz embutida o verdadeiro perigo: a facilidade da perda de controle. Hoje em dia, com o crescimento da complexidade do software, mais e mais percebe-se a dificuldade crescente dos produtores de software em fornecer produtos íntegros em prazos razoáveis e com custos adequados. Se, por um lado, não se pode atribuir a responsabilidade por este problema a um único fator, por outro, é evidente que o controle inadequado das modificações é uma das causas mais cruciais. Todo desenvolvedor de software já experimentou as conseqüências da perda de controle do software: • Dificuldades imensas durante a integração dos diversos módulos para compor o produto, por problemas de interface; • Após uma modificação qualquer do produto de software, erros removidos anteriormente reaparecem, ou então, funcionalidades acrescentadas desaparecem, inexplicavelmente; • Dificuldades em se identificar a última versão do produto de software; • Incapacidade de se reproduzir, no ambiente de desenvolvimento, um problema informado pelo cliente; • Perda dos arquivos-fonte que compõem o sistema distribuído a cliente. Todas estas ocorrências, muito comuns, levam a altos custos de desenvolvimento, baixa qualidade de produto e à insatisfação do cliente ou usuário final. Tradicionalmente, as iniciativas de desenvolvimento de software preocupam-se quase exclusivamente com os problemas técnicos, dedicando poucos recursos e tempo ao lado gerencial e de suporte. Entretanto, tanto a demanda por produtos de software de complexidade cada vez maior, como o aumento de competitividade advinda da globalização, impõem ao desenvolvedor de software, especialmente o nacional, a necessidade de investir também nos aspectos de controle de seus processos e produtos. Diversos são os agentes interessados em mudanças no software: • Clientes: interessados em modificar requisitos; • Desenvolvedores: interessados em modificar detalhes técnicos; • Gerentes: interessados em modificar a condução do projeto. Ora, como quem compra, quem faz e quem administra têm interesse em modificações elas tornam-se praticamente inevitáveis. Este fato por si só não é bom nem ruim. As modificações são necessárias e se há alguma coisa de ruim é em decorrência da forma como as modificações são efetuadas no software. PabloHenrique Realce PabloHenrique Nota Conhecido também como BALBURDIA PabloHenrique Realce Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 21 3.3 Gerência de Configuração de Software Gerência de Configuração de Software (GCS) é uma disciplina de apoio integrante do processo de software que, de maneira sucinta, pode ser vista como uma abordagem sistemática ao problema de controlar um produto de software. Tal é a importância da gerência de configuração de software, que as principais iniciativas internacionais de certificação de qualidade de processo de software: ISO 9000, CMM (Capability Maturity Model) e SPICE (Software Process Improvement and Capability Determination), exigem a implantação de um processo de gerência de configuração como requisito indispensável para a obtenção de qualquer grau de certificação de qualidade. GCS é, em geral, relacionada a iniciativas de desenvolvimento de software em que o processo de desenvolvimento é bem definido, com atividades agrupadas em fases que possuem produtos bem definidos e documentados. Neste contexto, GCS é a espinha dorsal sobre a qual as fases do desenvolvimento são conduzidas e os produtos, tanto finais como intermediários, controlados. A realidade dos desenvolvedores nacionais de software, entretanto, é bem diferente. Boa parte do software em nosso país é desenvolvido por pequenas empresas, com no máximo 10 funcionários, que lutam contra a escassez de recursos e as deficiências tecnológicas para manter seus produtos no mercado. Por via de regra, o desenvolvimento de software é um processo nebuloso, sem fases bem definidas. Especificação, projeto e codificação são realizados de maneira entremeada. Testes, quando ocorrem, não são feitos de forma sistemática e racional. A documentação é deficiente e, em geral, está sempre desatualizada. O resultado final é um produto sempre em evolução, que passa por um processo contínuo de modificações tanto para a incorporação de novas funcionalidades como para a correção de defeitos. A Gerência de Configuração de Software propõe-se a minimizar os problemas surgidos durante o ciclo de vida do software através de um controle sistemático sobre as modificações. Não é objetivo da GCS coibir as modificações, pelo contrário, é facilitá-las. Procura-se apenas cuidar que elas ocorram de forma sistemática e controlada para evitar, ou minimizar, as suas decorrências negativas. Cabe ressaltar aqui que a GCS não é uma panacéia para todos os problemas do software. É uma disciplina de natureza técnica/gerencial que define responsabilidades e autoridades e é um processo chave num ambiente de desenvolvimento de software de qualidade. Um aspecto que gera uma certa confusão é estabelecer qual a diferença entre gerência de configuração e manutenção. Manutenção de software envolve atividadesde Engenharia de Software, desenvolvidas após a entrega de um produto de software. A Gerência de Configuração de Software envolve atividades de controle e de acompanhamento, desenvolvidas durante todo o ciclo de vida do produto de software. São atividades distintas. PabloHenrique Realce PabloHenrique Realce PabloHenrique Realce PabloHenrique Nota Podemos notar que, GCS trata também de acompanhar o processo (ciclo de vida) auxiliando no controle de modificações do projeto em andamento... exemplo: TCC1 para TCC2 exigindo o minimo de modificação possível. PabloHenrique Realce PabloHenrique Realce PabloHenrique Nota No entanto, como já discutido em sala, existe uma proposta não OFICIAL de integração da GCS a PMBOK para auxiliar o processo de continuação do software, mas isso sem ferir as 5 fases... para isso existe a ideia de criação de uma proposta de GCS onde pode ser acoplado ao projeto com proposito de diferencial Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 22 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 3.3.1 GCS: Custos & Benefícios A adoção de GCS por uma empresa envolve, naturalmente, custos e benefícios que devem ser considerados a priori. Os principais benefícios decorrentes da aplicação de GCS são: • facilidades para acomodar mudanças; • maior controle sobre os produtos; • economia de tempo de desenvolvimento; • facilidades na geração de versões diferentes de um mesmo produto de software; • manutenção de históricos de produtos; • facilidades de se voltar a situações anteriores. Quanto aos custos relacionados com a adoção de GCS por uma empresa serão necessários dois tipos de investimentos: • investimentos com a adoção, que envolvem capacitação (aquisição de informações, consultorias, etc.) e treinamento (custos com treinamento de pessoal envolvido com a adoção de GCS). • investimentos para a implementação, que englobam recursos humanos (custos com pessoal envolvido com a implementação de GCS), recursos computacionais (computadores e dispositivos a serem utilizados pela GCS) e ferramentas de GCS (ferramentas de software para automatizar o processo de GCS). Investir em GCS é semelhante a se investir em seguros: custos e benefícios devem ser avaliados criteriosamente. Não há solução ou fórmula prontas para resolver esta relação. O quanto deve-se investir em GCS dependerá do tipo e valor do software a ser controlado e, principalmente, de seu grau de criticalidade. Investimentos em GCS, em um software de metrô, por exemplo, cuja falha pode causar de maneira irreversível perda de vidas ou de alguns milhões de reais certamente será muito maior que investimento em GCS para um software de automação de loja, ou mesmo de gestão empresarial cuja falha, ainda que danosa, pode eventualmente ser reparada. 3.3.2 Impedimentos à adoção de GCS A adoção de GCS sempre enfrenta impedimentos que, de uma forma ou de outra, precisam ser superados. Dentre os motivos, podem-se destacar: • Custos: É o principal empecilho. GCS implica em diversos gastos: com pessoal, equipamentos, etc.; • Cultura da empresa: Resistência das pessoas às mudanças, a falta de costume de seguir regras ou padrões; PabloHenrique Realce Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 23 • Aumento na formalidade e burocracia: No geral, haverá procedimentos a serem seguidos que podem implicar em preenchimentos de formulários, obtenção de autorização, etc., coisas que em geral as pessoas não gostam muito de fazer; • Falta de conhecimento do assunto: A implantação de GCS envolve todas as pessoas da equipe do produto e nem todas possuem as mesmas informações sobre o assunto que ainda é desconhecido para a maioria. Entretanto, se, por um lado, fatores acima são importantes, por outro lado, o impedimento maior, que realmente pode significar o fracasso de um empreendimento de implantação de GCS, é ausência de comprometimento ou comprometimento insuficiente da gerência superior da empresa. Sem comprometimento real é impossível superar as barreiras colocadas pelos outros fatores. 3.3.3 GCS - Estado atual A prática de GCS varia muito no cenário mundial. Em alguns países, como os Estados Unidos, iniciativas a respeito foram tomadas principalmente por entidades governamentais (DoD, NASA e outras). Como essas entidades são grandes compradoras de software elas impõem aos seus fornecedores algumas regras ou normas que garantam uma certa qualidade aos produtos. É um caso típico onde o mercado dita as regras. Tais práticas vão sendo disseminadas, com maior ou menor rapidez para o restante do mundo. A globalização atual faz exigências sobre os produtos comercializáveis tais como: • facilidades para acomodar modificações; • maior competitividade; • maior controle de qualidade; • obediência a normas e padrões. Esforços consideráveis vem sendo feitos pelos países mais desenvolvidos em pesquisas e implementação de ferramentas de GCS. Existe disponível no mercado uma grande variedade de tais ferramentas as quais variam nos custos, potencialidades e complexidades. No Brasil, o assunto ainda é um tanto desconhecido e não se desenvolvem ferramentas de GCS para o mercado. Há um interesse crescente pelo assunto decorrente do aumento de competitividade no mercado e da busca de algum certificado de qualidade como ISO 9000, CMM, SPICE, etc. Verifica-se também uma maior incidência do uso de GCS em empresas multinacionais ou de grande porte. No contexto da Engenharia de Software, GCS assume um papel de relevância, por estar intimamente relacionada com a qualidade dos produtos de software e por facilitar: • a comunicação sobre o estado de programas e documentos; • a obtenção do estado das modificações; Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 24 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle • o gerenciamento corporativo em busca de uma maior produtividade por menor custo; • o suporte de manutenção. Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 25 4 CARACTERIZAÇÃO DE GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE O software durante o seu ciclo de vida passa por diversos estágios e representações. Quando da sua concepção o software é um simples conceito, uma idéia de como resolver um determinado problema. A partir daí a idéia toma forma: primeiro em especificações, projetos de estruturas, modelos e simulações; depois evolui para programas e dados que se desenvolvem e se modificam até um produto final que por sua vez também pode evoluir e evoluir até que seja desativado. O processo de desenvolvimento do software é contínuo no tempo, partindo de alguns conceitos e mais alguns componentes iniciais que evoluem continuamente. O número de componentes, via de regra, aumenta com o desenvolvimento. A figura 4.1 ilustra a evolução de um software. Figura 4.1 - Evolução de um software Na verdade, a figura acima é uma simplificação do processo, uma vez que, entre um estágio e outro há muitos outros passos intermediários e os elementos estão sujeitos a contínuas transformações de correção, aperfeiçoamento ou de evolução, como indica a figura 4.2. Figura 4.2 - Evolução contínua de um software Tempo Tempo Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 26 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle Durante o processo de desenvolvimento temos que a modificação é intrínseca, ou seja, faz parte integrante do processo. Semmodificações o software não passaria do terreno das idéias. Modificações são essenciais para o seu desenvolvimento. O inconveniente deste fato é que as modificações podem acarretar a perda de controle do objeto de desenvolvimento. Isso implica que as modificações devem ser aplicadas mediante certos critérios que permitam manter a integridade do software. Já que o processo de desenvolvimento de software evolui continuamente, o acompanhamento e controle de todas as modificações é um problema complexo e de solução difícil. A questão que se coloca é o que, quando e como controlar. Para resolver estas questões, utiliza-se o conceito de configuração-base. Entretanto, antes de introduzi-lo, vamos apresentar alguns conceitos fundamentais. 4.1 Conceitos Fundamentais A seguir são apresentados alguns conceitos básicos que foram adotados neste texto. Configuração de software: Características físicas e funcionais do software conforme especificadas na documentação técnica ou encontradas no produto. Itens de Configuração: Este é um dos conceitos mais importantes de GCS e também um dos que acabam introduzindo mais confusão no entendimento do assunto. Essencialmente existem duas definições para o termo. Numa visão simplificada de GCS, como a introduzida por Pressman em [PRE 92], item de configuração (IC) pode ser caracterizado como: “Cada um dos elementos de informação que são criados durante o desenvolvimento de um produto de software, ou que para este desenvolvimento sejam necessários, que são identificados de maneira única e cuja evolução é passível de rastreamento” Nesta definição, tanto os documentos como os arquivos-fonte que compõem um produto de software são ICs, assim como são ICs também as ferramentas de software necessárias para o desenvolvimento do produto em questão, tal como, compiladores, ligadores, arquivos de lote (batch), makefiles, etc. Neste conceito, configuração pode ser vista como o conjunto de todos os documentos, programas, itens de dados e componentes de suporte que compõem o software. A definição mais abrangente de item de configuração é encontrada nos trabalhos de normalização do governo norte-americano e em normas da indústria (IEEE, ANSI) que resultaram destes esforços. Nesta visão, item de configuração é caracterizado como: “Um agregado de hardware, software, ou ambos, que é designado para gerência de configuração e que é tratado como uma unidade dentro do processo de gerência de configuração.” Se o item de configuração for composto exclusivamente de software, ele é caracterizado como Item de Configuração de Software (ICSW). Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 27 Nesta definição, IC é uma unidade funcional que possui um ciclo de desenvolvimento e acompanhamento de GCS próprios. Nesta visão, o sistema em desenvolvimento é particionado em itens de configuração e o seu desenvolvimento é visto como o desenvolvimento de cada um dos ICs. Cada IC, por sua vez pode ser particionado em outro conjunto de ICs e assim sucessivamente, até que se resulte um conjunto de ICs não particionáveis, que são desenvolvidos segundo um ciclo de vida propriamente definido. Neste conceito, a configuração de um sistema de software é o conjunto das configurações dos ICSWs integrantes do sistema. É importante salientar que a divisão de um sistema ou produto de software em ICs e a definição do ciclo de vida de cada IC final é uma decisão de projeto e não de GCS. Neste curso, para simplificação da exposição, a sigla IC, exceto quando explicitamente indicado, referir-se-á à visão simplificada do conceito, enquanto que ICSW sempre implicará a visão mais abrangente de uma unidade funcional, integrante de um sistema maior, constituída exclusivamente de software. Configurações-Base (Baselines): Por configuração-base entendemos um conjunto bem definido de itens de configuração que representam um estágio do desenvolvimento e que é passível de modificações apenas mediante um mecanismo formal de alterações. A figura 4.3 ilustra a evolução da configuração do software. Figura 4.3 - Evolução da Configuração do Software 4.2 Desenvolvimento de Software com Configurações-Base Em princípio, configurações-base poderiam ser estabelecidas em qualquer ponto do desenvolvimento. Entretanto, a grande vantagem do conceito está em se fazer coincidir o estabelecimento de configurações-base com os finais de fase do ciclo de vida do produto. O desenvolvimento com configurações-base pode, então, ser resumido nos seguintes pontos: • Caracterização do ciclo de vida, identificando-se as fases por que o desenvolvimento do software irá passar e dentro delas as atividades a serem realizadas e os produtos a serem desenvolvidos; Configuração-base do Software Documentos Programas Dados Desenvolvimento de novos itens Documentos Programas Dados Nova Configuração-base do Software Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 28 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle • Definição do conjunto de configurações-base. Para cada configuração-base planejada, deve-se estabelecer quais serão os ICs que a irão compor e quais as condições impostas para seu estabelecimento; • Configurações-base representam marcos no processo de desenvolvimento: uma nova configuração-base é estabelecida no final de cada fase do ciclo de vida do software; • Durante cada fase, o desenvolvimento dos ICs a ela referentes está sob total controle de seus desenvolvedores e realiza-se com ampla liberdade, podendo os ICs serem criados e modificados com bastante facilidade; • Durante cada fase, entretanto, a modificação de uma configuração-base anteriormente estabelecida somente pode ser feita de forma controlada, mediante um processo bem definido; • Ao ser estabelecida, cada configuração-base incorpora integralmente a configuração-base anterior. Desta forma, em qualquer instante do desenvolvimento, a última configuração- base estabelecida representa o estado oficial da totalidade do desenvolvimento; • O estabelecimento de cada configuração-base somente é realizado após ser aprovada por procedimentos de consistência interna, verificação e validação. Como ilustração, vamos aplicar o esquema acima no desenvolvimento de um produto de software hipotético. Em primeiro lugar, define-se um ciclo de vida convencional para o produto (“cascata”), incluindo tanto o desenvolvimento como a manutenção, constituído das seguintes fases: Análise de Requisitos, Projeto de Software, Codificação, Teste e Integração e Manutenção. Este modelo será a base para a definição das configurações-base. A figura 4.4 ilustra a caracterização inicial do desenvolvimento. Figura 4.4 - Desenvolvimento do software & Estabelecimento de configurações-base Análise Projeto Codificação Teste/Integr. Manutenção Início Desativação Estabelecimento das Configurações-Base Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 29 Em seguida, com base neste ciclo de vida, definem-se as configurações-base, que serão: Configuração-Base de Requisitos, Configuração-Base de Projeto, Configuração-Base de Código. Estas configurações-base serão estabelecidas, respectivamente, ao final das fases Análise de Requisitos, Projeto de Software, Codificação e Teste e Integração. A figura 4.5 ilustra a situação do produto de software com as citadas configurações-base. Nesse ponto as configurações-base estão definidas, bem como estão definidos os elementos que as irão constituir e as respectivas condições para o seu estabelecimento. Figura 4.5 - O desenvolvimento do software no seuinício Os ICs que irão constituir a primeira configuração-base passam então a ser desenvolvidos. A figura 4.6 ilustra essa etapa do desenvolvimento durante a qual o desenvolvedor possui total liberdade com respeito aos ICs que estiver desenvolvendo, isto é, pode modificá-los à vontade uma vez que configuração-base ainda não foi estabelecida. Figura 4.6 – Desenvolvimento dos ICs da Configuração-Base de Requisitos Uma vez concluído o desenvolvimento dos ICs da Configuração-Base de Requisitos é efetuado o estabelecimento da mesma e, daí em diante, os seus ICs só poderão ser modificados mediante mecanismos formais estabelecidos pelo plano de GCS. A figura 4.7 ilustra o desenvolvimento logo após o estabelecimento da primeira configuração-base. Análise Projeto Codificação Teste/Integr. Manutenção Início Desativação Análise Projeto Codificação Teste/Integr. Manutenção Início Desativação Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 30 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle Figura 4.7 – Estabelecimento da Configuração-Base de Requisitos Uma vez estabelecida a Configuração-Base de Requisitos os ICs da Configuração-Base de Projeto passam a ser desenvolvidos conforma ilustra a figura 4.8. Figura 4.8- Desenvolvimento dos ICs da Configuração-Base de Projeto Concluídos os ICs da Configuração-Base de Projeto, a mesma é estabelecida segundo ilustra a figura 4.9. Figura 4.9 – Estabelecimento da Configuração-Base de Projeto Da mesma forma, as demais configurações-base são desenvolvidas e estabelecidas até que seja atingida a situação ilustrada pela figura 4.10 onde todas as Configurações-Base já se encontram desenvolvidas e estabelecidas. Análise Projeto Codificação Teste/Integr. Manutenção Início Desativação Análise Projeto Codificação Teste/Integr. Manutenção Início Desativação Análise Projeto Codificação Teste/Integr. Manutenção Início Desativação Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 31 Figura 4.10 - O Desenvolvimento de software concluído Entre uma configuração-base e a configuração-base seguinte normalmente acontece a criação de novos itens como conseqüência natural do desenvolvimento. Isso é o ilustrado nas figuras anteriores. Acontece que os ICs já concluídos também são passíveis de alteração, seja para aperfeiçoamento, seja para a correção de erros que forem detectados. Assim, a evolução das configurações-base é devidas a dois fatores: • Criação de novos itens; • Alteração em itens existentes. Nas figuras anteriores, relativas ao desenvolvimento com configurações-base, apenas o primeiro fator foi considerado. Na seqüência seguinte de figuras, temos um modelo mais real do desenvolvimento com configurações-base em que são consideradas as evoluções dos ICs que já fazem parte de uma configuração-base e que são modificados com algum objetivo. A figura 4.11, idêntica à figura 4.7, ilustra a situação onde a primeira configuração-base acaba de ser estabelecida. Figura 4.11 – Estabelecimento da Configuração-Base de Requisitos Uma vez estabelecida a Configuração-Base de Requisitos, inicia-se a fase de projeto e os ICs a ela referentes passam a ser desenvolvidos. Os projetistas realizam as atividades da fase tendo como referência os documentos (ICs) formalmente estabelecidos na CB de requisitos. Análise Projeto Codificação Teste/Integr. Manutenção Início Desativação Análise Projeto Codificação Teste/Integr. Manutenção Início Desativação Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 32 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle Durante a fase, entretanto, pode ocorrer a necessidade de alteração dos ICs consolidados na configuração-base de requisitos. Por exemplo, o cliente, após o estabelecimento da CB, percebe que há requisitos que não refletem exatamente suas necessidades e precisam ser alterados. Ou, alternativamente, os projetistas durante as atividades da fase de projeto, ao ganharem mais entendimento do software sendo desenvolvido, identificam inconsistências entre os requisitos. Em situações como esta, a realização da modificação deverá seguir passos bem definidos. Em primeiro lugar, alguém deverá solicitar, ou propor, as mudanças necessárias. Alguém deverá, então, analisar a solicitação, verificando sua relevância, oportunidade e abrangência, bem como o impacto que causa nos custos e no cronograma de desenvolvimento. A partir da análise da proposta, alguém com a autoridade necessária deverá decidir se a modificação será ou não realizada. Em caso de decisão positiva, alguém será destacado para implementar a modificação, a qual, um vez realizada, deverá ser verificada para a constatação de que foi corretamente elaborada e de que não cria inconsistências na configuração-base. Só então a modificação será consolidada na CB e estabelecida uma atualização ou nova versão da configuração-base de requisitos. Estabelecida a nova versão da CB, os projetistas prosseguirão as atividades da fase, agora tendo como referência a nova CB. Durante a continuação da fase, outras necessidades de modificação da CB de requisitos podem surgir e, como conseqüência, deverá ser aplicado novamente o procedimento detalhado nos parágrafos anteriores. As figuras 4.12 e 4.13 ilustram este fato. Figura 4.12 – Desenvolvimento da Configuração-Base de Projeto Análise Projeto Codificação Teste/Integr. Manutenção Início Desativação Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle 33 Figura 4.13 – Desenvolvimento da Configuração-Base de Projeto A figura 4.14 ilustra o estabelecimento da Configuração-Base de Projeto a partir dos ICs desenvolvidos na fase e dos ICs pertencentes à Configuração-Base de Requisitos. Figura 4.14 – Estabelecimento da Configuração-Base de Projeto E assim, de maneira similar, conforme as fases seguintes são executadas, as novas configurações-base vão sendo desenvolvidas, estabelecidas e eventualmente modificadas conforme sugere as figuras 4.15 e 4.16. Figura 4.15 – Desenvolvimento da Configuração-Base de Código Análise Projeto Codificação Teste/Integr. Manutenção Início Desativação Análise Projeto Codificação Teste/Integr. Manutenção Início Desativação Análise Projeto Codificação Teste/Integr. Manutenção Início Desativação Instituto Nacional de Tecnologia da Informação Laboratório de Avaliação e Melhoria de Processos de Software 34 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE Evolução de Software sob Controle Figura 4.16 – Desenvolvimento da Configuração-Base de Código Na figura 4.17 temos o desenvolvimento concluído. Figura 4.17 – Desenvolvimento Concluído Os procedimentos de consistência interna, verificação e validação são aplicados quando do estabelecimento de cada configuração-base e em cada atualização da mesma. 4.3 Distribuições Utilizamos a palavra distribuição para denominar o conjunto de itens, arquivos e ICs, que são entregues ao usuário ou cliente como resultado da liberação de uma dada configuração do produto para utilização em ambiente externo ao desenvolvimento. No final de um desenvolvimento, após o estabelecimento da última configuração-base, em geral a configuração base de produto, ocorre a entrega do produto ao cliente. Entretanto, nem sempre é entregue todo o conteúdo da configuração, ficando, por exemplo, os documentos de projeto em poder do desenvolvedor. Por outro lado, muitas vezes, no que tange ao código gerado, o controle de GCS se restringe aos arquivos-fonte, não sendo mantidos sob controle
Compartilhar