Neste material nós vamos abordar elementos conceituais associados com métricas de software utilizadas para mensuração de aplicações corporativas.
Introdução
Vamos entender o que são as métricas de software. Imagine o seguinte cenário: uma equipe de cinco pessoas precisa desenvolver um aplicativo para sua empresa. Essa necessidade concreta por si só não é suficiente para que os gerentes (de projeto e funcionais) da empresa realizem o estudo de viabilidade e orçamentário envolvido no projeto. O simples fato da necessidade não é capaz de responder a perguntas como: em quanto tempo o software poderá ser desenvolvido? Quanto custa o desenvolvimento deste software? Como estimar o desenvolvimento do projeto? Como vamos controlar e monitorar o desenvolvimento a partir de uma estimativa? Existem casos em que a medição do software é realizada por especialistas no desenvolvimento ou especificamente na aplicação a ser desenvolvida, como também por gerentes de projetos da área que conhecem bem a experiência e o potencial de sua equipe. Porém, este método é incapaz de estabelecer segurança nas estimativas e sustentabilidade nas mensurações futuras. Segundo Fábio Martinho Campos, em seu artigo disponibilizado no site Linha de Código,
Mas por maior que seja a experiência do profissional atuando como Gerente de Projetos de Software, ele fatalmente irá deparar-se com projetos de software que ainda não trabalhou, mesmo com algo similar, e pior ainda, iniciar trabalhos com uma equipe, onde ele não conhece os seus membros e nem suas capacidades.
Enfim, o desenvolvimento de software envolve métricas, muitas vezes subjetivas, que precisam ser estabelecidas e controladas para o bom andamento do projeto. Segundo o artigo disponibilizado na Wikipédia,
A métrica de software é a relação estabelecida entre medias de alguma propriedade do software ou da sua especificação.
Ou seja, são os elementos pelos quais podemos (teoricamente) mensurar o desenvolvimento de softwares.
Objetivos da medição de software
A medição do software pode ser aplicada em Processo de Software, que permite o melhoramento contínuo do mesmo, ou em Projeto de Software, que visa favorecer a estimativa do desenvolvimento, no controle da qualidade, na qualidade e no gerenciamento do projeto. Tendo em vista estes preceitos, a medição de software tem como os principais objetivos:
- Entender: Permite entender o funcionamento do software, tornando tangível seu comportamento para estabelecer marcos e critérios para o mesmo.
- Avaliar: Estabelecer critérios de aceitação ou metas a serem conquistadas. Também é possível monitorar o escopo e andamento do projeto.
- Controlar: Orientar o andamento do projeto do software para o caminho estabelecido no planejamento. Controlar seus processos e serviços.
- Prever: Permite o planejamento sustentável de acordo com as tendências mensuradas e previstas do software.
Certamente estes itens devem assegurar fatores essenciais como qualidade, avaliar a produtividade, aperfeiçoamento e escolha de ferramentas e métodos, compor base para estimativas, entre outros.
Tipos de medidas de software
Existem dois grupos de métricas de software:
Medidas diretas:
Com intuito de avaliar o esforço da manutenção e desenvolvimento do software, as medidas diretas são itens de fácil contabilização e devem trabalhar de acordo com padrões pré-estabelecidos. Têm-se como exemplo destas medidas: Velocidade de Execução, Quantidade de Memória utilizada, total de linhas de código geradas, número de erros por hora (ou outro período pré-definido). De certo, essas medidas são plausíveis e úteis, mas devem ser estudas com cautela, devido ao forte acoplamento (dependência) das ferramentas de programação e linguagem utilizada. Como exemplo, do item “linhas de código geradas”, é considerado inviável realizar uma comparação com códigos de COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
*
PROCEDURE DIVISION.
PARA-1.
DISPLAY "mundo, alo.".
*
STOP RUN.
que aliás, é extensamente utilizado no mundo, com códigos de Ruby on Rails
class FilmesController < ApplicationController
def index
render_text "Alô Mundo!"
end
end
também muito utilizada e intitulada como “código bonito”. Não poderíamos medir a eficiência/eficácia de dois programados apenas com as linhas que produzem “Alô mundo” de duas linguagens distintas.
Outro critério, como o “número de erros” seria completamente influenciado pelo tipo da linguagem e ferramenta utilizada. Ao programar em Eclipse ou Netbeans, o Java-mam teria, na grande maioria, erros de execução – devido à influência na qual tais aplicativos de desenvolvimento têm sobre a codificação. Já o programador de C/C++, desenvolvedor de Drivers para o Linux, teria diversos erros de sintaxe (além dos possíveis erros de execução) no seu aperfeiçoado editor de códigos “Vi”. Não seria justo comparar o desempenho destes dois elementos apenas pelos erros. Estas são apenas situações de reflexão, não necessariamente aplicáveis no mundo real.
Medidas indiretas:
Mais subjetivas, as medidas indiretas tentam estabelecer aspectos de muita importância no desenvolvimento, porém de difícil mensuração. Através destas medidas tenta-se encontrar pontos para Eficiência, Complexidade do software, Manutenibilidade, Funcionalidade, Qualidade e Confiabilidade.
Como exemplo de mensuração de métricas indiretas, temos a medição da qualidade. De acordo com o texto exposto no Devmedia, que faz referência à PRESSMAN (2001), qualidade de software é a conformidade a:
- Requisitos funcionais e não funcionais que têm sido explicitamente declarados
- Padrões de desenvolvimento que tenham sido claramente documentados
- Características implicitamente esperadas de todo software a ser desenvolvido.
De forma resumida, qualidade consiste de um conjunto de requisitos e de um produto ou serviço que esteja em conformidade com estes requisitos e, por esta razão, atenda completamente às necessidades dos clientes.
Pode-se entender que o controle deste item é subjetivo, além de trazer certa dificuldade de padronização e confiabilidade. A literatura sugere algumas atividades que podem ser utilizadas para analisar a qualidade do software. Veja uma relação a seguir:
- Manutenibilidade: grau de facilidade no qual o software pode ser corrigido, alterado e aperfeiçoado
- Correção: grau em que o programa opera de acordo com a especificação, ou seja, nível em que o software desempenha sua função necessária
- Integridade: capacidade de manter os dados e processos de forma íntegra, mesmo quando a utilização do mesmo for realizada de forma incorreta, propositalmente ou não, ou seja, grau em que o programa é capaz de se proteger de ataques externos
- Utilização: facilidade e praticidade na utilização do sistema, como também nível necessário para o uso e tempo necessário para adquirir eficiência no processo automatizado pelo software
Como se pôde perceber, critérios indiretos são subjetivos e necessitam de ferramentas e programas de gerência especializados para sua mensuração. Uma técnica utilizada para a qualidade, por exemplo, é a eficiência na remoção dos defeitos (DRE), que é obtida através do cálculo DRE = E / (E + D), onde E indica a quantidade de erros encontrados antes da entrega e a letra D, indica a quantidade de defeitos encontrados depois da entrega. Este tipo de estratégia oferece benefícios diretos tanto para o projeto quanto para o processo. Deve ser aplicado ao longo do projeto de engenharia do software.
Conclusões
Como conclusão desta básica referência ao estudo das métricas de software, tomei como base um texto disponibilizado no site scribd, que mostra uma reflexão breve sobre a importância e o impacto associado à mensuração dos softwares desenvolvidos para a equipe de desenvolvimento e para os gerentes de projeto – e conseqüentemente para a empresa.
A maioria dos desenvolvedores de software ainda não mede seu trabalho. Se isto ocorrer, não há forma real de determinar e verificar se existem melhoramentos no processo. O melhoramento deve existir sempre, caso contrário, o processo estará comprometido. Através da solicitação e avaliação de medidas de produtividade e qualidade, os gerentes devem estabelecer metas significativas para o aperfeiçoamento do processo de engenharia de software.
Referências:
PRESSMAN, R.S., 2001, Software Engineering: A Practitioner´s Approach, Fifth Edition, McGraw Hill.
"A Medição é uma atividade que faz parte de qualquer disciplina de engenharia", Roger Pressman
Obrigado pela leitura!
Guilherme Pontes
Nenhum comentário:
Postar um comentário