ti-enxame.com

O que você considera ser a principal causa de defeitos de software (e como minimizá-los)

Eu defino defeito como:

"Algo dentro do design ou código de aplicativos que impede a funcionamento conforme os requisitos."

Estou à procura de idéias sobre as causas dos defeitos, por exemplo, o fator humano, falta de testes, falta de prototipagem e possíveis idéias para mitigar estas.

14
Chris Buckett

A principal causa de defeitos de software é a interpretação.

A interpretação do cliente de um recurso difere da interpretação do designer.

A interpretação do designer difere da interpretação do programador.

A maioria das metodologias inventaram maneiras de combater esse efeito. Mas no final, somos apenas humanos e não somos impecáveis. Além disso, muitas vezes há uma pressão de tempo e a maioria das metodologias é muitas vezes ignorada sob pressão.

O teste só pode detectar os problemas precocemente. Mas mesmo os testadores são humanos, e é impossível testar 100%. Se você quiser liberar antes que o universo termine.

13
Toon Krijthe

Eu considero a principal causa de defeitos de software para ser programadores.

Não dizendo isso apenas para ser engraçado, mas porque um dos grandes problemas que eu observei no meu trabalho é um pobre requisitos coletando, acoplado com má compreensão do domínio do problema, causando grandes defeitos e problemas de usabilidade em o projeto.

Parte disso vem de não estar disposta a aprender/entender a terminologia do usuário final, causando mal-entendidos.

Parte disso vem de falar muito cedo no processo para pessoas que não têm idéia do que você está falando ou porque importa.

O melhor exemplo disso foi quando eu sobrecarrei um dos programadores tentando descobrir quanto tempo as perguntas/respostas estariam em personagens ... Eu sabia que ele estava tentando descobrir o campo de tamanho para usar no banco de dados, mas o Departamento solicitando que isso não tenha sido o mais fativo por que isso importava - ou que os espaços contavam. Para nós que parece óbvio, mas para eles, era uma verdadeira revelação.

8
AnonJr

A principal causa de defeitos é má administração;)

Sério, um desenvolvedor que funciona em boas condições, que não é solicitado a sobrecarregar, ter ferramentas adequadas, condições de trabalho silenciosas e assim por diante produzirão menos bugs do que alguém trabalhando sob pressão dura.

Também gerenciamento que contratou que os desenvolvedores ruins também ajudam a aumentar o número de bugs.

má administração.

(Disclaimer: Eu deveria contratar e gerenciar desenvolvedores)

8
user2567

Eu não vejo nenhuma causa primária - mas uma causa que não foi mencionada é acoplamento não intencional com outro código. Código de escrita que tem efeitos colaterais invisíveis, quebras por meio de camadas de abstração, faz suposições sobre dados (as variáveis ​​não são, as constantes não são, e nenhuma entrada de um usuário é segura), mucks com coisas que não precisa se preocupar em si, e assim por diante.

A maioria das práticas de desenvolvimento que eu estudo resumindo para reduzir N, porque a complexidade de um programa é pelo menos O(N^2) e possivelmente O(k^N). Definindo N é deixado como um exercício para o leitor, mas estou pensando em coisas como complexidade ciclomática aqui. Encapsulando a lógica e os dados têm o efeito da redução de N por compartimentalizando o problema.

5
Alex Feinman

Sendo incompleto

4
Wonko the Sane

Lacuna de comunicação. Em coleta de requisitos. No horário. No documento de design. Em especificação funcional. No código (lacuna entre o programador quer e o que ele diz ao compilador).

Etiqueta social. É socialmente inaceitável chamar alguém incapaz.

4
aufather

A incapacidade de pensar em tudo.

4
JeffO

Correndo em coisas sem entender totalmente. Começando a escrever código sem entender totalmente os requisitos funcionais ou a arquitetura técnica.

A programação deve ser quase automática, apenas escrevendo o que é auto-evidente e já foi resolvido na mente. Na prática, vejo um monte de agitar o código para tentar obter uma alça exatamente sobre o que o código deve fazer. Eu fui culpado disso muitas vezes.

3
Joeri Sebrechts

errão humanum est

2
mouviciel

Norma de pressão é certientemente uma fonte forte.

Os desenvolvedores apressados ​​não assumem o tempo para especificar completamente os requisitos, ou entender completamente a intenção por trás dos requisitos, ou investigar totalmente as alternativas para encontrar a melhor solução, ou pensar totalmente em todos os casos de borda e interações das alterações que estão fazendo, ou Desenvolva um conjunto completo de casos de teste, ou execute totalmente todo o teste de unidade ou execute um teste de integração total, ou considere totalmente as dependências da plataforma ou teste totalmente o instalador, ou documentem totalmente o que o próximo desenvolvedor pode entender ....

2
AShelly

Outra coisa que deve ser mencionada não está tendo um teste de fora. Quando o desenvolvedor escreve os testes e os executa, ele só testa sua interpretação e não o requisito real. Enquanto o teste de unidade escrito pelos devs é útil para pegar alguns bugs, a maioria dos bugs terá passado esses testes, mas não é o que o usuário quer ou precisa. Qualquer software não testado por alguém que não o desenvolvedor não é testado (e eu não quero dizer apenas executando os testes do desenvolvedor).

2
HLGEM

É porque a engenharia de software é inerentemente complexa. O ensaio "sem bala de prata" discute isso.

Ironicamente, muitos dos outros respostas aqui tocam em tópicos que são "acidentalmente complexos", na linguagem desse ensaio, enquanto na realidade a maior parte do que os desenvolvedores de software são "essencialmente complexos", então é apenas na natureza que criando O software é difícil, o software terá bugs, e nosso trabalho é lidar com isso.

2
Peter Eisentraut

Falta de verificação para coisas que "não podem acontecer" ou são improváveis ​​que aconteçam é uma grande. Às vezes o perfeito é o inimigo do bem. Se não vale a pena uma hierarquia de exceção bem pensada, algum manejo rápido e sujo é sempre melhor que nada. Eu sou um enorme fã de falhar rápido, de afirmações e de deixar afirmações que têm impacto insignificante no desempenho nas construções de lançamento. Mesmo em scripts one-off rápidos e sujos, onde controlo todos os dados de entrada, coloco um erro rápido/sujo de manuseio de erro, geralmente apenas com uma função equivalente a afirmar, mas permanece no tempo todo. Minha regra é que, se não for provável que ocorra ou acha que não pode acontecer, não precisa falhar graciosamente com uma mensagem de erro amigável, mas deve pelo menos falhar rapidamente com uma mensagem de erro que Dá um programador algumas dicas sobre o que deu errado.

EDIT: Uma tática útil relacionada é usar declarações como uma importante ferramenta de depuração e deixá-los lá após a sessão de depuração terminar. A partir desse ponto, seu Código do Código terá algumas verificações de sanidade construídas que tornam muito difícil para os insetos relacionados a acontecer novamente. Isso é especialmente útil para o código que é difícil de se unir.

1
dsimcha

A principal causa de defeitos de software é escrever código.

Escreva menos código e você terá menos bugs ;-)

1
nlawalker

Escrever código que falha silenciosamente vs. código que relata todos os erros.

1
bjornl

A falta de compreensão de software como uma rede de máquinas estaduais, os princípios subjacentes à sua operação (estados, sua determinação e transições) e as interações das máquinas do estado.

1
Huperniketes

Em um nível, gerenciamento. Mas não é apenas o PHB. É a gestão do próprio código, que pode ou não ser um reflexo da gestão corporativa.

Os participantes em todo o "ciclo de vida" precisam ser totalmente investidos em qualidade e produzir um produto que apenas não morrer. O próprio software tem a promessa de nunca quebrar, dado a confiabilidade adequada de abstração. É apenas uma questão de se os construtores de software estão interessados ​​em ter essa operação perfeita.

0
Paul Nathan