it-swarm-es.com

¿Cuál consideras que es la causa principal de los defectos de software (y cómo minimizarlos)

Defino defecto como:

"Algo dentro del diseño de la aplicación o el código que impide que funcione según los requisitos".

Estoy buscando ideas sobre las causas de los defectos, por ejemplo, el factor humano, la falta de pruebas, la falta de prototipos y las posibles ideas para mitigarlos.

14
Chris Buckett

La principal causa de defectos de software es la interpretación.

La interpretación del cliente de una característica difiere de la interpretación del diseñador.

La interpretación del diseñador difiere de la interpretación del programador.

La mayoría de las metodologías han inventado formas de contrarrestar este efecto. Pero al final, somos solo humanos y no somos impecables. Además, a menudo hay una presión de tiempo y la mayoría de la Metodología, la magia a menudo se salta mientras está bajo presión.

Las pruebas solo pueden detectar los problemas con anticipación. Pero incluso los probadores son humanos, y es imposible probar el 100%. Si quieres liberarte antes de que termine el universo.

13
Toon Krijthe

Considero que la causa principal de los defectos de software son programadores.

Sin decir que justo para ser gracioso, pero porque uno de los grandes problemas que he observado en mi trabajo es un mal compuesto, junto con una comprensión deficiente del dominio problemático, causando problemas importantes de defectos y usabilidad en el proyecto.

Parte de eso proviene de no estar dispuesto a aprender/entender la terminología del usuario final, causando malentendidos.

Parte de eso proviene de hablar de tecnología demasiado pronto en el proceso a las personas que no tienen ni idea de lo que está hablando o por qué importa.

El mejor ejemplo de eso fue cuando escuché a uno de los programadores que intentaban averiguar cuánto tiempo iban a estar en los personajes de las preguntas/respuestas ... Sabía que estaba tratando de averiguar qué campo de tamaño usar en la base de datos, pero el El departamento solicitando esto no tenía el niebla por lo que le importaba, o que contaban los espacios. Para nosotros eso parece obvio, pero para ellos fue una verdadera revelación.

8
AnonJr

La causa principal de los defectos es mala administración;)

En serio, un desarrollador que funciona en buenas condiciones, que no se le pide demasiado en exceso de trabajo, para reducir la calidad, tener herramientas adecuadas, las condiciones de trabajo silenciosas, etc. producirán menos errores que a alguien que trabaja bajo una presión dura.

También la contratación de la administración, los malos desarrolladores también ayudan a aumentar el número de errores.

mala gestión.

(Descargo de responsabilidad: se supone que debo contratar y administrar desarrolladores)

8
user2567

No veo ninguna causa principal, pero una causa que no se ha mencionado es :acoplamiento no intencional con otro código. El código de escritura que tiene efectos secundarios invisibles, se rompe a través de capas de abstracción, hace suposiciones sobre los datos (las variables no, las constantes no son, y ninguna entrada de un usuario es segura), Mucks con cosas que no necesita preocuparse Con, y así sucesivamente.

La mayoría de las prácticas de desarrollo que estudié, hervor hasta la reducción de N, porque la complejidad de un programa es al menos O(N^2) y posiblemente O(k^N). Definir N se deja como un ejercicio para el lector, pero estoy pensando en cosas como la complejidad ciclomática aquí. La lógica de encapsulación y los datos tienen el efecto de reducir la N al compartimentar el problema.

5
Alex Feinman

Estar incompleto

4
Wonko the Sane

Brecha de comunicación. En la colección de requisitos. En horario. En el documento de diseño. En la especificación funcional. En Código (GAP entre lo que quiere el programador y lo que le dice al compilador).

Etiqueta social. Es socialmente inaceptable llamar a alguien incapaz.

4
aufather

La incapacidad de pensar en todo.

4
JeffO

Erare Humanum EST

2
mouviciel

Presión de horario es certinamente una fuente fuerte.

Los desarrolladores apresurados no se toman el tiempo de especificar completamente los requisitos, o comprender completamente la intención detrás de los requisitos, o investigar completamente las alternativas para encontrar la mejor solución, o pensar completamente a través de todos los casos de borde e interacciones de los cambios que están haciendo, o Desarrolle un conjunto completo de casos de prueba, o realice completamente toda la prueba de la unidad, o realice una prueba de integración completa, o considere completamente las dependencias de la plataforma, o probar completamente el instalador, o documentar completamente lo que han hecho para que el próximo desarrollador pueda entender ....

2
AShelly

Otra cosa que se debe mencionar no es tener una prueba externa. Cuando el desarrollador escribe las pruebas y las ejecuta, solo prueba su interpretación, no el requisito real. Si bien la prueba de la unidad escrita por los desarrolladores es útil para capturar algunos errores, la mayoría de los errores habrán pasado estas pruebas, pero no serán lo que el usuario quiera o necesita. Cualquier software que no sea probado por alguien que no sea el desarrollador no se prueba (y no quiero decir que solo ejecute las pruebas del desarrollador).

2
HLGEM

Es porque la ingeniería de software es intrínsecamente compleja. El ensayo "No Silver Bullet" discute esto.

Irónicamente, muchas de las otras respuestas se toquen de temas que son "complejos accidentalmente", en el idioma de ese ensayo, mientras que en realidad, la mayor parte de lo que hacen los desarrolladores de software es "esencialmente complejo", por lo que es solo en la naturaleza de eso que crea El software es difícil, el software tendrá errores, y nuestro trabajo es tratar con él.

2
Peter Eisentraut

La falta de verificación de las cosas que "no pueden suceder" o es poco probable que suceda es una grande. A veces el perfecto es el enemigo del bien. Si no vale la pena una jerarquía de excepción bien pensada, un manejo rápido y sucio siempre es mejor que nada. Soy un enorme Fan de Fallando rápido, de afirmaciones y de dejar afirmaciones que tienen un impacto insignificante en el desempeño en las compilaciones de lanzamiento. Incluso en los scripts rápidos y sucios de la ONE-OFF donde controlo todos los datos de entrada, pongo un manejo de errores rápido/sucio, generalmente solo con una función equivalente a afirmar, pero permanece en todo el tiempo. Mi regla de pulgar es que, si no es probable que ocurra o cree que no puede suceder, no necesita fallar con gracia con un mensaje de error fácil de usar, pero al menos debería fallar rápidamente con un mensaje de error que le da a un programador algunos consejos sobre lo que salió mal.

Editar: Una táctica útil relacionada es usar afirmaciones como una herramienta de depuración importante y Déjalos allí después de que la sesión de depuración haya terminado. A partir de ese momento, su base de código tendrá algunas verificaciones de cordura integradas que lo hagan muy difícil para que los errores relacionados vuelvan a ocurrir. Esto es especialmente útil para el código que es difícil de incanstar.

1
dsimcha

La principal causa de defectos de software es escribir código.

Escribe menos código y tendrás menos errores ;-)

1
nlawalker

Escribir código que falla en silencio vs. Código que informa todos los errores.

1
bjornl

La falta de entender el software como una red de máquinas estatales, los principios subyacentes a su operación (estados, su determinación y transiciones), y las interacciones de las máquinas estatales.

1
Huperniketes

En un nivel, gestión. Pero no es solo el PHB. Es la gestión del propio código, que puede o no ser un reflejo de la gestión corporativa.

Los participantes en todo el "ciclo de vida" deben invertirse completamente en calidad y hacer un producto que solo no muere . El software en sí tiene la promesa de nunca romper, dado la confiabilidad de la abstracción adecuada. Es solo una cuestión de si los constructores de software están interesados ​​en tener esa operación perfecta.

0
Paul Nathan