Escolar Documentos
Profissional Documentos
Cultura Documentos
"Para ajudar a FIFA a avaliar os melhores jogadores, será necessário adicionar as marcas de
afinação. A intervalos de dez metros, haverá linhas em ambos os lados do campo. Isso
permitirá uma passagem justa, uma passagem lateral, uma jarda de drible e encaminhando a
jarda para cada jogador ".
É fácil ver paralelos na engenharia de software. Em muitos casos, queremos uma pontuação
geral que combine várias medidas em uma "grande imagem" do que está acontecendo
durante o desenvolvimento ou a manutenção. Queremos saber se um produto de software é
bom ou ruim, com base em um conjunto de medidas, cada uma das quais capta uma faceta de
"bens". Da mesma forma, queremos poder medir a capacidade de uma organização para
produzir um bom software ou a capacidade de um modelo de fazer boas previsões sobre o
processo de desenvolvimento de software. As medidas compostas podem ser controversas,
não só por causa das medidas individuais que a compõem, mas também por causa dos pesos
atribuídos. Da mesma forma, a polêmica entra em erupção quando tentamos capturar
informações qualitativas sobre algum aspecto da engenharia de software. Diferentes
especialistas têm opiniões diferentes, e às vezes é impossível obter consenso.
Finalmente, às vezes é necessário modificar nosso ambiente ou nossas práticas para medir
algo novo ou de uma maneira nova. Pode significar o uso de uma nova ferramenta (para
contar linhas de código ou avaliar estrutura de código), adicionando uma nova etapa em um
processo (para informar sobre o esforço), ou usando um novo método (para tornar a medida
mais simples). Em muitos casos, a mudança é difícil para as pessoas aceitarem; Como veremos
em capítulos posteriores, há questões de gerenciamento a serem consideradas sempre que
um programa de medição é implementado ou alterado.
Vimos que a medição é essencial para nossas vidas diárias, e a medição tornou-se comum e
bem aceita. Nesta seção, examinamos o domínio da engenharia de software para ver por que a
medição é necessária. A engenharia de software descreve a coleta de técnicas que aplicam
uma abordagem de engenharia para construção e suporte de produtos de software. As
atividades de engenharia de software incluem gerenciar, custear, planejar, modelar, analisar,
especificar, projetar, implementar, testar e manter. Por "abordagem de engenharia",
queremos dizer que cada atividade é compreendida e controlada, de modo que há poucas
surpresas à medida que o software é especificado, projetado, construído e mantido. Enquanto
a ciência da computação fornece os fundamentos teóricos para a construção de software, a
engenharia de software se concentra na implementação do software de forma controlada e
científica. A importância da engenharia de software não pode ser subestimada, já que o
software permeia nossas vidas. Desde controles de forno a airbags, de transações bancárias ao
controle de tráfego aéreo, e de plantas de energia sofisticadas a armas sofisticadas, nossas
vidas e a qualidade de vida dependem de software. Para uma profissão tão jovem, a
engenharia de software geralmente fez um trabalho admirável de proporcionar uma fidelidade
segura, útil e confiável. Mas há espaço para uma grande melhoria. A literatura está repleta de
exemplos de projetos que superaram seus orçamentos e horários. Pior, há muitas histórias
sobre software que colocou vidas e empresas em risco. Os engenheiros de software
abordaram esses problemas buscando continuamente novas técnicas e ferramentas para
melhorar o processo e o produto. O treinamento suporta essas mudanças, de modo que os
engenheiros de software estão melhor preparados para aplicar as novas abordagens para
desenvolvimento e manutenção. Mas as melhorias metodológicas por si só não fazem uma
disciplina de engenharia.
1. Nós não conseguimos estabelecer metas mensuráveis para nossos produtos de software.
Por exemplo, prometemos que o produto será fácil de usar, confiável e sustentável sem
especificar de forma clara e objetiva o significado desses termos. Como resultado, quando o
projeto estiver completo, não podemos dizer se cumprimos nossos objetivos. Esta situação
levou a Tom Gilb a declarar (Gilb, 1988) o Princípio dos Objetivos Difusos de Gilb: projetos sem
metas claras não alcançarão seus objetivos com clareza.
3. Não quantificamos nem prevemos a qualidade dos produtos que produzimos. Assim, não
podemos dizer a um usuário potencial qual a confiança de um produto em termos de
probabilidade de falha em um determinado período de uso, ou quanto trabalho será
necessário para a entrega do produto para um ambiente de máquina diferente.
4. Permitimos evidências anedóticas para convencer-nos a tentar mais uma nova tecnologia
revolucionária de desenvolvimento, sem fazer um estudo cuidadosamente controlado para
determinar se a tecnologia é eficiente e eficaz. Figura 1 . 1 mostra exemplos típicos de
materiais promocionais para ferramentas e técnicas de desenvolvimento automatizado de
software. Mas na maioria das vezes, esses materiais não são acompanhados por relatórios da
base científica das reivindicações.
Quando as medições são feitas, muitas vezes são feitas com pouca frequência, de forma
inconsistente e incompleta. A incompletude pode ser frustrante para aqueles que desejam
fazer uso dos resultados. Por exemplo, um desenvolvedor pode afirmar que 80% de todos os
custos de software envolvem manutenção, ou que há, em média, 55 falhas em cada 1000
linhas de código de software. Mas nem sempre nós contamos como esses resultados foram
obtidos, como os experimentos foram projetados e executados, quais entidades foram
medidas e como, e quais foram as margens de erro realistas. Sem essa informação adicional,
permanecemos cético e incapaz de decidir se aplicar os resultados e a nossa Situações. Além
disso, não podemos fazer um estudo objetivo para repetir as medidas em nossos próprios
ambientes. Assim, a falta de medição na engenharia de software é agravada pela falta de uma
abordagem rigorosa. É claro a partir de outras disciplinas de engenharia que a medição pode
ser eficaz, se não essencial, para tornar visíveis as características e os relacionamentos, avaliar
a magnitude dos problemas e criar uma solução para os problemas. À medida que o ritmo da
inovação de hardware aumentou, o mundo do software tentou relaxar ou abandonar seus
fundamentos de engenharia e esperar conquistas revolucionárias. Mas agora esse software,
que desempenha um papel fundamental, envolve enorme investimento de energia e dinheiro,
é hora de engenharia de software abraçar a disciplina de engenharia que tem tido tanto
sucesso em outras áreas.
Mesmo quando um projeto não está em apuros, a medição não é apenas útil, mas necessária.
Afinal, como você pode dizer se o seu projeto é saudável se você não tem medidas de saúde?
Portanto, é necessário medir, pelo menos, para avaliar o status de seus projetos, produtos,
processos e recursos. Porque nem sempre sabemos o que descarta um projeto, é essencial
que medimos e gravamos características de bons projetos, bem como de maus. Precisamos
documentar as tendências, a magnitude da ação corretiva e as mudanças resultantes. Em
outras palavras, devemos controlar nossos projetos, não apenas executá-los. Tom DeMarco,
um forte defensor da necessidade de medição no desenvolvimento de software, afirma isso.
Gerentes
• O que cada processo custa? Podemos medir o tempo eo esforço envolvidos nos vários
processos que compõem a produção de software. Por exemplo, podemos identificar o custo da
obtenção de requisitos, o custo de especificar o sistema, o custo de projetar o sistema eo
custo de codificação e teste do sistema. Desta forma, entendemos não só o custo total do
projeto, mas também a contribuição de cada atividade para o todo.
• Quão produtivo é o pessoal? Podemos medir o tempo necessário para a equipe especificar o
sistema, projetá-lo, codificá-lo e testá-lo. Em seguida, usando medidas do tamanho das
especificações, design, código e planos de teste, por exemplo, podemos determinar a
produtividade da equipe em cada atividade. Esta informação é útil quando as alterações são
propostas; O gerente pode usar as figuras de produtividade para estimar o custo ea duração
da mudança.
• Quão bom o código está sendo desenvolvido? Ao registrar cuidadosamente falhas, falhas e
mudanças à medida que ocorrem, podemos medir a qualidade do software, permitindo-nos
comparar diferentes produtos, prever os efeitos da troca, avaliar os efeitos de novas práticas e
definir metas para o processo e a melhoria do produto.
• Como podemos melhorar? Podemos medir o tempo necessário para realizar cada grande
atividade de desenvolvimento e calcular o efeito sobre qualidade e produtividade. Então
podemos pesar os custos e os benefícios de cada prática para determinar se o benefício vale o
custo. Alternativamente, podemos tentar várias variações de uma prática e medir os
resultados para decidir qual é o melhor; Por exemplo, podemos comparar dois métodos de
design para ver qual deles produz o código de maior qualidade.
Engenheiros
• Os requisitos são testáveis? Podemos analisar cada requisito para determinar se a sua
satisfação é expressa de forma mensurável e objetiva. Por exemplo, suponha que um requisito
afirma que um sistema deve ser confiável; O requisito pode ser substituído por um que declare
que o tempo médio para falha deve ser superior a 15 horas decorridas de tempo de CPU.
• O que vai acontecer no futuro? Podemos medir os atributos dos produtos existentes e dos
processos atuais para fazer previsões sobre os ajustes. Por exemplo, as medidas de tamanho
das especificações podem ser usadas para prever o tamanho do sistema alvo, as previsões
sobre futuros problemas de manutenção podem ser feitas a partir de medidas das
propriedades estruturais dos documentos de projeto e as previsões sobre a confiabilidade do
software em uso operacional podem ser feitas medindo a confiabilidade durante o teste.
As listas acima nos mostram que a medição é importante para três atividades básicas.
Primeiro, existem medidas que nos ajudam a entender o que está acontecendo durante o
desenvolvimento e a manutenção. Nós avaliamos a situação atual, estabelecendo linhas de
base que nos ajudam a estabelecer metas para o comportamento futuro. Nesse sentido, as
medidas tornam visíveis os aspectos do processo e do produto, dando-nos uma melhor
compreensão das relações entre as atividades e as entidades que elas afetam.
Em segundo lugar, a medida nos permite controlar o que está acontecendo em nossos
projetos. Usando nossas linhas de base, metas e compreensão de relacionamentos, nós
prevemos o que é provável que aconteça e faça mudanças em processos e produtos que nos
ajudem a atingir nossos objetivos. Por exemplo, podemos monitorar a complexidade dos
módulos de código, dando uma revisão completa apenas para aqueles que excedem os limites
aceitáveis. Em terceiro lugar, a medida nos encoraja a melhorar nossos processos e produtos.
Por exemplo, podemos aumentar o número ou tipo de revisões de design que fazemos, com
base em medidas de qualidade de especificação e previsões de qualidade de projeto provável.
Não importa como as medidas são usadas, é importante gerenciar as expectativas daqueles
que tomarão decisões baseadas em medição. Os usuários dos dados devem sempre estar
cientes da precisão limitada da predição e da margem de erro nas medições. Tal como
acontece com qualquer outra disciplina de engenharia, há espaço na engenharia de software
para abuso e mau uso da medida. A Figura 1 .2 mostra irreversivelmente como a gerência
pode pressionar os desenvolvedores a produzir medidas precisas com modelos, ferramentas e
técnicas inadequadas. Se você está esperando que a medição forneça soluções instantâneas e
fáceis aos seus problemas de engenharia de software, esteja ciente de nosso corolário da regra
de DeMarco:
Você não pode prever nem controlar o que você não pode medir.
As métricas de software são um termo que engloba muitas atividades, que envolvem algum
grau de medição de software:
• modelos de confiabilidade
• avaliação capacidade-maturidade
Cada uma dessas atividades será abordada em detalhes em capítulos posteriores. Nossas
bases teóricas, que serão descritas nos capítulos 2 e 3, nos permitirão considerar as atividades
de forma unificada, e não como temas diversos e não relacionados.
A breve introdução a seguir lhe dará uma sensação das técnicas atualmente em uso para cada
faceta de medida. Fornece indicadores para onde o material é abordado em detalhes em
capítulos posteriores.
Os gerentes forneceram a motivação original para derivar e usar medidas de software. Eles
queriam poder prever os custos do projeto durante fases iniciais no ciclo de vida do software.
Como resultado, foram propostos e utilizados vários modelos de estimativa de custo e esforço
de software. Exemplos incluem o modelo COCOMO da Boehm (Boehm, 1981), o modelo SLIM
da Putnam (Putnam, 1978) e o modelo de pontos de função da Albrecht (Albrecht, 1979). Estes
e outros modelos geralmente compartilham uma abordagem comum: o esforço é expresso
como uma função (pré-definida) de uma ou mais variáveis (como tamanho do produto,
capacidade dos desenvolvedores e nível de reutilização). O tamanho geralmente é definido
como linhas (preditas) de código ou número de pontos de função (que podem ser derivadas da
especificação do produto). Os modelos de custo e a previsão do esforço são discutidos no
Capítulo 12.
A Figura 1 .4 contém vários exemplos de como os dados coletados podem ser destilados em
gráficos e gráficos simples que mostram os gerentes o progresso e os problemas de
desenvolvimento. Basili e Weiss descreveram uma metodologia geral para a coleta de dados
válida (Basili e Weiss, 1984), enquanto Mellor descreve a coleta de dados necessária para
avaliação de confiabilidade (Mellor, 1992). Este material é abordado nos Capítulos 5, 6, 10 e
11. A coleta de dados também é essencial para a investigação científica de relacionamentos e
tendências. Veremos no Capítulo 4 quão boas experiências, pesquisas e estudos de caso
exigem uma coleta de dados cuidadosamente planejada, bem como uma análise minuciosa e
relatórios dos resultados.
A produtividade não pode ser vista isoladamente. Sem uma avaliação acompanhada da
qualidade do produto, a velocidade de produção não tem sentido. Esta observação levou os
engenheiros de software a desenvolver modelos de qualidade cujas medidas podem ser
combinadas com as dos modelos de produtividade. Por exemplo, o modelo avançado de
estimativa COCOMO da Boehm está vinculado a um modelo de qualidade (Boehm et ai, 1978).
Da mesma forma, o modelo de qualidade McCall (McCall et al., 1 977), comumente chamado
de modelo FCM (Factor Criteria Metric), está relacionado à produtividade. Esses modelos
geralmente são construídos de forma semelhante a uma árvore, semelhante à Figura 1.5. Os
ramos superiores possuem importantes fatores de qualidade de alto nível de produtos de
software, como confiabilidade e usabilidade, que gostaríamos de quantificar. Cada fator de
qualidade é composto por critérios de nível mais baixo, como a estruturação e a
rastreabilidade. Os critérios são mais fáceis de entender e medir do que os fatores; Assim, as
medidas reais (métricas) são propostas para os critérios. A árvore descreve as relações
pertinentes entre os fatores e seus critérios dependentes, para que possamos medir os fatores
em termos de medidas de critérios dependentes. Essa noção de divisão e conquista foi
implementada como uma abordagem padrão para medir a qualidade do software (ISO 9126).
Os modelos de qualidade são descritos detalhadamente no Capítulo 9.
Atributos de qualidade desejáveis como confiabilidade e manutenção não podem ser medidos
até que alguma versão operacional do código esteja disponível. No entanto, desejamos poder
prever quais partes do sistema de software provavelmente serão menos confiáveis, mais
difíceis de testar ou requerer mais manutenção do que outras, mesmo antes do sistema estar
completo. Como resultado, medimos os atributos estruturais das representações do software
que estão disponíveis com antecedência (ou sem necessidade) de execução; Então, tentamos
estabelecer teorias empíricamente preditivas para apoiar a garantia de qualidade, controle de
qualidade e previsão de qualidade. Halstead (1977) e McCabe (1976) são dois exemplos
clássicos desta abordagem; Cada um define medidas derivadas de representações adequadas
do código-fonte. Este material e desenvolvimentos mais recentes estão descritos no Capítulo
8.
Muitos artigos e livros descrevem novos métodos e ferramentas que podem tornar sua
organização ou projeto mais produtivo e seus produtos melhores e mais baratos. Mas é difícil
separar as reivindicações da realidade. Muitas organizações realizam experimentos, executam
estudos de caso ou administram pesquisas para ajudá-los a decidir se um método ou
ferramenta é susceptível de fazer uma diferença positiva em suas situações particulares. Essas
investigações não podem ser feitas sem medições e análises cuidadas e controladas. Como
veremos no Capítulo 4, o sucesso de uma avaliação depende de um bom projeto experimental,
identificação adequada dos fatores susceptíveis de afetar o resultado e medição apropriada
dos atributos do fator.
1.4 Resumo
Este capítulo introdutório descreveu como a medição permeia nossa vida cotidiana.
Argumentamos que a medição é essencial para a boa engenharia em outras disciplinas;
Deveria também tornar-se parte integrante da prática de engenharia de software. Em
particular:
• Devemos ser ousados em nossas tentativas de medição. Só porque ninguém mediu algum
atributo de interesse não significa que não pode ser medido satisfatoriamente. Criamos a cena
para uma nova perspectiva sobre métricas de software. Para ancorar um programa de
métricas em uma base sólida da teoria das medições, passamos para o próximo capítulo. Esta
base rigorosa nos permitirá implementar uma abordagem científica e efetiva para a
construção, cálculo e adequação das métricas que derivamos.