existe alguma maneira elegante de analisar o processo de um engenheiro?

12

Existe muita opinião de que a medição de confirmações é inadequada.

Foi realizado algum estudo que tente atrair mais fontes do que confirma - como:

  • padrões de navegação
  • Trabalho IDE (pré-confirmação)
  • tempo ocioso
  • multitarefa

Não consigo pensar em uma maneira fácil de fazer essas medidas, mas me pergunto se algum estudo foi feito.


Em uma observação pessoal, acredito que a reflexão sobre as próprias 'métricas' pode ser valiosa, independentemente de (ou na ausência de) usá-las para avaliar o desempenho. Ou seja, uma maneira imparcial de refletir sobre seus hábitos. Mas esse é um assunto de discussão além das perguntas e respostas.

New Alexandria
fonte

Respostas:

6

Não tenho certeza se você o consideraria elegante, mas Watts Humphrey escreveu um livro inteiro chamado Personal Software Process que tratava de medir sua própria produtividade. Ele descreveu métricas para entradas como tempo em sua mesa versus interrupções, tempo gasto trabalhando em vários tipos de atividades do ciclo de vida de software, defeitos por quantidade de código. Há um relatório técnico que fornece a versão curta em:

http://www.sei.cmu.edu/library/abstracts/reports/00tr022.cfm

Se você quiser ver algo como a qualidade de um código de desenvolvedor, a Chidamber & Kemerer propôs várias métricas para o código orientado a objetos.

Métricas para código orientado a objetos

  • profundidade da árvore de herança,
  • número ponderado de métodos,
  • número de funções membro,
  • número de filhos e
  • acoplamento entre objetos.

Usando uma base de código, eles tentaram correlacionar essas métricas com a densidade de defeitos e o esforço de manutenção usando análise covariante. Estudos posteriores fizeram análises semelhantes em centenas de projetos Java do Source Forge para determinar suas características em relação às CK Metrics e algumas métricas adicionais propostas posteriormente.

Métricas surgidas no contexto das Revisões de Código

Os defeitos podem ser classificados por vários critérios:

  • gravidade: (maior, menor, cosmética, investigar / desconhecido),
  • tipo (lógica, erro de digitação, ortografia, violação padrão de codificação etc.),
  • origem / contenção de fase (requisitos, design, código etc.).

Também existem taxas de preparação e inspeção (tempo por revisor, tempo por linha de código) e densidades de defeitos (por KLOC (mil linhas de código), por minuto de tempo do inspetor / revisor).

A plotagem desses valores nos gráficos de controle pode nos mostrar se estamos dentro dos limites do processo (por exemplo, uma equipe que inspeciona 200 linhas de código que não encontra defeitos em um grupo com média de vinte e cinco defeitos por KLOC pode não funcionar corretamente).

Outras métricas

Outras métricas que podem ajudar a incluir aquelas para

Limitações da análise

Existem enormes limites no valor das métricas. Bugs corrigidos por desenvolvedor podem significar quase tudo, e quando você começar a punir ou recompensar essa medição, aposto que os bugs ficarão mais numerosos e granulares, e a mistura de bugs difíceis de fáceis corrigidos também mudará conforme a cereja do time escolhe. correr para ter o máximo.

Há também uma certa distração e, potencialmente, uma perda de foco e prazer que pode ocorrer com medidas intrusivas. Você não pode ficar muito mais elegante (e emocionalmente sobrecarregado) do que um poeta do lago como Wordsworth, que disse:

      Sweet is the lore which Nature brings;
      Our meddling intellect
      Mis-shapes the beauteous forms of things:--
      We murder to dissect.

Embora o software não seja exatamente a natureza, me dê um pouco de latitude, porque pensei que nunca usaria nada da aula de literatura inglesa do ensino médio.

O Agile pode ser considerado uma reação ao grande processo centralizado. Às vezes, esse modo de trabalho pode exigir tanto esforço analítico que a capacidade de atingir o fluxo enquanto cria software desaparece.

DesenvolvedorDon
fonte
Gosto dessa resposta, independentemente de alguém obter informações melhores - por isso editei-a para obter conteúdo secional.
New Alexandria
Não entendo seu comentário sobre o valor agregado para "desenvolvedores que não fizeram a transição para o Agile". Apenas a pesquisa de "valor agregado em ágil" e "valor ágil ganhou" trazer muitas pessoas que aplicaram técnicas EVM tradicionais para ambientes ágeis ...
Thomas Owens
O valor agregado parece ser uma boa técnica adaptativa em relação à estimativa. Imaginei que a estimativa do Agile tivesse abordagens próprias, principalmente relacionadas a pontos. Vou ver se consigo reformular as coisas para serem inclusivas.
DeveloperDon
Existem livros inteiros sobre estimativa ágil, por isso é bastante abrangente. No entanto, trabalhei em ambientes ágeis que, por natureza dos relatórios completos, exigiam a aplicação do EVMS.
Thomas Owens
2

Quero acrescentar uma resposta alternativa que afaste a prática padrão de engenharia de software em direção a outro campo, com o objetivo de roubar ferramentas básicas que podemos adaptar conforme necessário. O pessoal da garantia de qualidade se preocupa com a produção, o rendimento e a detecção e prevenção de defeitos, assim como os desenvolvedores de software.

http://en.wikipedia.org/wiki/Seven_Basic_Tools_of_Quality

Eu gosto da tabela de controle.

http://en.wikipedia.org/wiki/Control_chart

Faça uma atividade, plote uma métrica, faça outra, plote sua métrica e assim por diante. Por exemplo, a plotagem é confirmada por dia. O gráfico espalhará dados que variam de um mínimo a outro máximo. Talvez mais tarde você possa caracterizar os resultados para determinar que, quando o valor é baixo, algo está impedindo o progresso e quando é muito alto, o trabalho é iniciado de maneira rápida, mas desleixada. A maneira como você encoraja os trabalhadores a acelerar ou desacelerar é sua.

Métricas pessoais podem ser algo que você pode correlacionar para si mesmo, começando com uma pergunta como "Sinto-me mais produtivo quando ..."

  • Escreva um caso de uso completo antes de começar a codificar.
  • Escreva meus testes de unidade antes do meu código.
  • Verifique frequentemente as partes interessadas para garantir que os requisitos não mudem e crie retrabalho maciço no trabalho realizado em direção a um plano obsoleto.
  • Mude o máximo de código possível.
  • Delegue mudanças bem definidas aos membros da equipe que são mais especialistas nas partes que pedi para que eles mudassem.
    • Dê a minha equipe uma visão geral completa, mas com prioridades, podemos terminar no sprint atual.
    • Inicie meu passe de refatoração com uma lista hierárquica de diretórios, arquivos, classes, métodos, equações, variáveis, documentação, etc. que eu alterarei.
    • Pesquise um problema de alto nível para encontrar soluções da arte anterior, estimando o escopo e as principais melhorias necessárias para criar uma solução melhor.

A antiga visão de que medimos é o que é feito pode levar você a atacar o problema com base no que você determina ser o fator limitante

ou vários fatores em ordem de prioridade com base em um diagrama de Pareto.

http://en.wikipedia.org/wiki/Pareto_chart

DesenvolvedorDon
fonte