|
Qualidade em Software |
Você,
desenvolvedor Cobol, que já trabalha há tanto tempo com uma
linguagem tão rica, poderosa e confiável, já se perguntou se
sua aplicação, o software desenvolvido por você, tem qualidade?
Mas afinal, o que é qualidade em software? Será que é ter uma cara bonitinha, ser um software "for Windows", ter uma caixa de embalagem, manual de instalação e outros reclames comerciais?
Antes de responder a esta pergunta, vamos tentar responder algumas outras, relativas à aplicação e aos módulos (programas fontes e executáveis):
ü onde estão armazenados todos os módulos da aplicação referentes à última versão, aquela que está em produção (no usuário ou cliente)? E os referentes à penúltima?
ü o quanto a aplicação é simples de ser gerenciada, principalmente na manutenção?
ü acontece às vezes a perda de um fonte ou o mesmo estar desatualizado?
ü onde está a versão correta da minha DLL?
ü qual o grau de dificuldade para saber qual é o fonte correto que precisa ser recuperado?
ü quanto tempo tem sido perdido para se criar/manter um controle manual dos módulos?
ü será que existe realmente um controle dos fontes e das manutenções executadas?
ü acontecem situações de dois desenvolvedores alterarem o mesmo fonte e um apagar as alterações do outro?
Complementando, vamos tentar responder questões relativas à documentação:
ü temos o registro dos "bugs" encontrados pelos usuários?
ü quais são as solicitações de implementação já feitas pelos usuários?
ü quais os "bugs" e implementações já executados? Qual a dificuldade de documentar e publicar essas implementações? Em qual versão essas implementações foram lançadas?
No final, antes de colocar em produção e distribuir uma nova versão:
ü as implementações passaram pelo ciclo de desenvolvimento montado pela gerência?
ü qual o grau de dificuldade para atualizar a versão nos usuários?
ü qual é o ambiente operacional de cada usuário? O que cada usuário utiliza da aplicação?
ü Nesse momento, se você está "pelos cabelos", achando que tem em mãos um caos completo, isto pode significar que o seu software NÃO TEM QUALIDADE e seus usuários/clientes já devem estar cobrando isto. Pior ainda para as empresas de informática que desejam conquistar a Certificação ISO 9000.
Felizmente este problema pode ter solução, baseada em uma infra-estrutura para projeto, desenvolvimento e distribuição de software, denominada SCM - Software Configuration Management ou, traduzindo, Gerenciamento de Configuração de Software. O SCM foi proposto inicialmente como Modelo de Maturidade de Capacidade, pelo Instituto de Engenharia de Software dos Estados Unidos.
O SCM é um conjunto de ferramentas que pode aumentar a produtividade e a eficiência na criação de aplicações, sendo as mais comuns aquelas de controle de versão, ferramentas de criação e ferramentas de gerenciamento de solicitações, "bugs" e implementações.
Controle de Versão (1)
As ferramentas SCM inicialmente tratavam apenas de controle de versão. Nesse conceito, entre outras funções destacam-se:
ü permitem que equipes de desenvolvedores trabalhem em um conjunto de códigos simultaneamente, garantindo que não haja colisões entre eles e que não haja conflito de versões
ü normalmente atualizam os repositórios fora do expediente normal de trabalho, e permitem que as equipes "retornem" a conjuntos de alterações ou revisões anteriores
ü permitem que se defina um conjunto de revisões através de vários arquivos, para criar um "release" ou uma "versão" do aplicativo.
ü Com isso, criam a condição necessária para formalizar pedidos de acesso com o objetivo de evitar desastres, ou para tornar as "versões" e "releases" reproduzíveis.
Funções adicionais têm sido incluídas nestas ferramentas, tornando-as uma grande fonte de informações sobre projetos, fases de desenvolvimento, organização de dados e controle de processos do desenvolvimento:
ü integração com ambientes integrados de desenvolvimento (IDE) (2)
ü documentação das modificações implementadas em cada alteração
ü mecanismos de comparação de modificações entre alterações
ü relatórios sobre alterações por "versão" ou "release"
ü geração de informações em formatos de bancos de dados para "querys".
Ferramentas de Criação (2)
Ferramentas de Criação são também utilitários tradicionais do SCM. Hoje suas funções fazem parte dos chamados ambientes IDE. Controlam outras ferramentas, para definir o processo de junção das partes de uma aplicação. Uma ferramenta de criação deve verificar uma revisão de um arquivo da ferramenta de controle de versão, compilar este arquivo e outros, e encerrar o processo com a criação de um executável, ligando os objetos. Mais importante, as ferramentas de criação apenas recriam as partes de uma aplicação que foram alteradas. Apenas ferramentas especializadas fazem isto automaticamente; arquivos "batch" ou "shell script" não fornecem esta funcionalidade. Como fica junto de arquivos de objetos compilados, um "script" de criação pode gerar uma nova criação, recompilando apenas os arquivos que foram alterados depois da última compilação. Isto economiza tempo dos desenvolvedores e reduz o número de erros que poderiam ocorrer se um desenvolvedor tivesse que lembrar os módulos que foram modificados e recompilá-los manualmente.
Gerenciamento de Solicitações, Bugs e Implementações (3)
Mais recentemente, o gerenciamento de problemas e pedidos de alteração juntaram-se ao controle de versão e às ferramentas de criação como uma parte padrão do SCM. Suas principais funções são:
ü acompanhamento de erros ("bugs"). Este item tem representado um desafio para organizações de desenvolvimento desde que o software adotou os números de release.
ü suporte a metodologia para acompanhar pedidos de alteração, seja para correção de erros ou para implementar novas funções.
ü gerenciamento de pedidos de alteração, com método para registrar pedidos, distribuí-los para os desenvolvedores, acompanhar o andamento e comunicar alterações de status desses pedidos
ü fornecer um mecanismo de comunicação para toda a equipe de desenvolvimento.
Considerações adicionais ao SCM, apresentadas por Greg Horton, gerente de produtos da Intersolv, uma das empresas americanas fornecedoras de software para SCM.
Greg Horton apresentou um artigo no qual faz considerações que ampliam os conceitos iniciais do SCM. Ele escreveu:
"Além destas ferramentas "núcleo", eu gostaria de ampliar a definição de SCM, incluindo outras ferramentas que ajudam a criar uma infra-estrutura de desenvolvimento de software. Ferramentas de gerenciamento de releases, gerenciamento da distribuição e instalação não são usualmente entendidas como componentes SCM.
Gerenciamento de Releases (4)
Gerenciamento de releases representa uma nova categoria de funções que muitas empresas estão tentando implementar atualmente. O gerenciamento de releases vai um passo além da concepção de um ambiente de criação consistente, fornecendo uma maneira flexível de se definir novos releases. Um bom exemplo é a capacidade de se definir um novo release, baseado em um release anterior, mas incluindo recursos ou correções para preencher um conjunto de pedidos de alteração. O gerenciamento de releases é muito importante para equipes de desenvolvimento que criam releases "turnaround" com apenas uma ou duas "correções". O gerenciamento de releases pode também juntar todas as peças em uma localidade ou forma que possa ser distribuída. Isto é cada vez mais importante, à medida em que grandes empresas investem em sistemas de distribuição de software, os quais requerem que os pacotes de alterações sejam preparados antes que a distribuição seja efetuada. O gerenciamento de releases incorpora a habilidade de definir e preparar pacotes de distribuição automaticamente.
Gerenciamento da Distribuição
Gerenciamento de releases conduz ao gerenciamento da distribuição. Isto inclui sistemas eletrônicos de distribuição de software, bem como a capacidade de distribuir software através da Internet e de criar discos ou CD-ROMs para distribuição. O gerenciamento da distribuição é necessário se a sua empresa produz software para facilitar a realização de negócios. As ferramentas de gerenciamento da distribuição ajudam você a levar o software até o cliente.
Instalação (5)
Depois que o cliente obtém o software, este deve ser instalado. A instalação é um componente do gerenciamento de configuração de software, pois o cliente não pode usar o software que foi distribuído até que ele esteja instalado no computador e até que este seja configurado para trabalhar com aquele software. Felizmente, os fornecedores de ferramentas de desenvolvimento estão reconhecendo esta etapa vital na preparação de software e estão começando a incluir em suas ferramentas programas que auxiliam a criar programas de instalação.
As funções destas seis ferramentas SCM são necessárias para todo o tipo de desenvolvimento de software, mesmo que a equipe tenha apenas um ou dois membros. Este conjunto de ferramentas compreende as funções essenciais do SCM. Existem atualmente ferramentas disponíveis para controle de versão, criação, acompanhamento de pedidos de alteração, distribuição de software e instalação. Muitas empresas estão começando a implementar suas próprias funções de gerenciamento de releases, criadas freqüentemente a partir de ferramentas SCM existentes.
Recursos Adicionais do SCM
Os recursos adicionais de um conjunto de ferramentas SCM para uma empresa inteira podem incluir gerenciamento de requisitos, ferramentas de "help desk", teste automatizado, análise de impacto e gerenciamento de processos. Esses recursos são úteis para organizações de médio e pequeno porte e estão se tornando obrigatórios para grandes organizações. Eles fazem com que o SCM avance além da organização de desenvolvimento e incluem grupos que definem aplicações e necessidades do usuário, e fornecem "feedback" de suporte e usuários.
Gerenciamento de Requisitos (3)
Gerenciamento de requisitos é um recurso emergente, cujos benefícios vêm sendo descobertos por várias organizações. Os usuários estão exigindo recursos de forma constante, geralmente definindo uma solução sem entender suas próprias necessidades. As ferramentas de gerenciamento de requisitos ajudam a definir e gerenciar requisitos do usuário. Quando estes requisitos são reunidos, uma equipe que entende os usuários e suas necessidades terá uma probabilidade muito maior de criar um produto bem sucedido, seja ele para venda ou para uso interno. As ferramentas de gerenciamento de requisitos também ajudam a acompanhar os requisitos e rastreá-los em relação a planos de projetos e testes. As ferramentas de gerenciamento de requisitos formam a base para a rastreabilidade de ponta a ponta em um sistema de software.
Gerenciamento de "Help Desk" (3)
Ferramentas de rastreamento de chamadas, ou de "help desk", representam outro ingrediente importante em um SCM a nível de empresa. Ferramentas de "help desk" acompanham ligações feitas para o pessoal de suporte. Algumas ligações necessitam de uma explicação ou dica sobre como realizar uma determinada tarefa. Algumas ligações ajudam a identificar erros no software. Outras requerem uma nova função ou uma alteração na forma que a aplicação realiza alguma tarefa. Essas ligações representam os relatórios de problemas e pedidos de alteração que precisam ser comunicados à organização de desenvolvimento. "Feedbacks" são também necessários, para que o pessoal de suporte possa informar aos clientes o status do seu pedido de alteração.
Teste Automatizado (6)
Ferramentas de teste automatizados ajustam-se muito bem ao conceito de uma infra-estrutura de desenvolvimento. Os testes vêm sendo realizados desde que o software foi projetado pela primeira vez. Não é necessário possuir ferramentas de teste automatizado mas, à medida que os ciclos de desenvolvimento são diminuídos, as expectativas do cliente aumentam e o software torna-se mais complexo, as ferramenta de teste automatizados podem economizar tempo e melhorar a qualidade.
Análise de Impacto (6)
Nos ambientes em que se compartilha código entre vários projetos, a análise de impacto representa uma ferramenta SCM eficiente. As ferramentas de análise de impacto disponíveis atualmente criam um banco de dados de informações referentes ao código, ou meta-dados. Estes meta-dados podem conter informações relativas a projetos, e quais arquivos ou objetos integram cada projeto. O banco de dados pode ser consultado para descobrir se uma alteração em um determinado arquivo afetará outros projetos. Ferramentas mais avançada de análise de impacto varrem o código para gravar informações tais como variáveis e definições de objetos. Estas ferramentas ajudam na manutenção do código, permitindo que um desenvolvedor encontre todas as ocorrências de um objeto sem varrer a base do código.
Gerenciamento de Processos
A última parte do SCM fornece gerenciamento de alto nível de todo o sistema SCM. Ferramentas de gerenciamento de projetos e processos unem os processos de gerenciamento que usam essas ferramentas. Muitas empresas estão desenvolvendo práticas padrão para desenvolvimento de software, de forma a amadurecer seus processos. O gerenciamento de processos permite a definição de processos específicos, tais como aprovações, e força a entrada desses processos no ciclo de desenvolvimento.
Fazendo com que as peças trabalhem integradas
Existem ferramentas comerciais para quase todos os componentes SCM descritos acima (Notas). Como nenhuma empresa fornece todos esses recursos, as próprias empresas estão desenvolvendo ferramentas SCM internamente para preencher os vazios. Essas ferramentas ajudam a amadurecer o processo de desenvolvimento, tornando-o passível de repetição e gerenciamento. Entretanto, o que pode agregar valor ao que foi descrito acima é a integração entre as ferramentas. Esta é realmente uma situação em que o todo será maior que a soma das partes. Um cenário que descreve os resultados da integração mostra isto melhor:
Um objeto liberou sua primeira versão e uma aplicação. O "help desk" começa a receber ligações, que são registradas no sistema. Algumas ligações pedem uma nova função, outras comunicam erros na operação. Uma ligação ao sistema de acompanhamento de pedidos de alteração gera pedidos de alteração - para cada novo recurso pedido e para cada erro na operação. O gerente do projeto de software marca os novos recursos como pedido de melhoria, o que dispara uma atualização no banco de dados de gerenciamento de requisitos. Os recursos pedidos tornam-se parte da definição de requisitos do novo release. Os erros na operação são dirigidos a um desenvolvedor, que faz a correção dos problemas. A integração entre o acompanhamento do pedido de alteração e o controle da versão permite que o desenvolvedor verifique o código de dentro da ferramenta de rastreamento e permanentemente associe o problema com a revisão do código no qual ele ocorre. A efetivação da correção exige que o pedido de alteração seja registrado como atendido, associando permanentemente a correção à revisão apropriada.
É gerada uma nova criação da aplicação, com base no release anterior, mas incluindo as alterações específicas feitas para atender a uma série de pedidos de alteração. O grupo de "Quality Assurance" faz uma verificação da rastreabilidade, determinando os testes automatizados que devem ser executados, para obter um melhor aproveitamento de tempo e para garantir que as correções funcionam sem afetar outras partes do sistema. As partes necessárias para distribuir o release são transformadas em uma correção ("patch"), que pode ser colocada em um único disquete. O sistema de distribuição pode pesquisar o sistema, para descobrir os nomes dos clientes que comunicaram os problemas ora corrigidos. São emitidas cartas para esses clientes, explicando a correção e quais problemas foram corrigidos. Disquetes são produzidos e enviados aos clientes. Os clientes instalam a correção em seus sistemas.
Este cenário mostra uma integração de ponta e ponta entre a maior parte das ferramentas listadas acima. A automação desses processos pode resultar em uma grande economia de tempo para as equipes de desenvolvimento e garantir que os processos padrão não são restritos. Os fornecedores de ferramentas devem trabalhar em conjunto para integrar suas ferramentas SCM, de forma a fornecer este tipo de automação e ajudar os clientes a utilizar seu tempo com marketing, comunicação da equipe e com qualidade do produto.
Existe pressão vinda de todas as direções, para que as aplicações sejam desenvolvidas mais rapidamente e com menos erros. Embora os processos SCM não possam garantir que não ocorrerão erros, uma infra-estrutura criada usando ferramentas SCM integradas pode aumentar a produtividade, reduzir erros que não sejam de programação e reduzir o tempo de colocação do produto no mercado."
1 - A ferramenta líder de mercado, que atende a esses requisitos de controle de versão é o PVCS Version Manager da Merant.
2 - Um bom exemplo é a integração no IDE do NetExpress da Merant.
3 - A ferramenta líder de mercado, que atende a requisitos de Gerenciamento de Solicitações, Bugs e Implementações, Help Desk, é o PVCS Tracker da Merant.
4 - Um bom exemplo é o PVCS Configuration Builder da Merant.
5 - Um bom exemplo é o InstallShield.
6 - Um bom exemplo é o Mainframe Express da Merant.