Los errores graves más comunes que veo en las aplicaciones web son vulnerabilidades de ataque de inyección, generalmente SQL y shell:
Inyección de código
Estos a menudo no se corrigen hasta que se explotan en la naturaleza.
Además, tanto en el código web como en el código de aplicación normal, las convenciones de nomenclatura deficientes hacen que recordar variables / funciones / clases / espacios de nombres / etc. nombres difíciles
En aplicaciones “gordas” supongo que tendría que decir:
- ¿Cuántos hackers distinguidos han llamado a Quora User hacker?
- Hackers: ¿Es posible hackear un sistema escolar y cambiar sus calificaciones?
- ¿Aprender demasiados lenguajes de programación es contraproducente?
- ¿Qué hace que un buen creador de espacio?
- ¿Puede un programa de computadora o código apagar Internet?
- Punteros nulos: el programador no garantiza que las variables se inicialicen en todos los casos.
- Otras excepciones no detectadas: el programador ingenuamente piensa que “eso nunca podría suceder”.
- Fugas de memoria: esto solo se aplica a C / C ++ y es más preocupante cuanto más tiempo se supone que se ejecuta la aplicación. Los programadores novatos son excelentes para asignar memoria, simplemente no son tan buenos en el seguimiento, liberando esa memoria.
- “Errores” estilísticos, es decir, repetición de código en lugar de creación de funciones. Además, crear objetos “Super” que intentan hacer demasiado.
- Asignación en lugar de comparación, es decir, usar “=” en lugar de “==” en lógica booleana. Además, otros errores similares, como no usar “break” adecuadamente en una declaración de cambio.
- Código hinchado: a menudo hay una forma más simple de escribir lo mismo. Por ejemplo:
si (a == b) { volver verdadero; } más { falso retorno; }
Puede ser escrito:
retorno (a == b);
Además, algunos programadores llegan bastante lejos sin aprender a usar correctamente un depurador, un generador de perfiles, etc. El uso adecuado de este tipo de herramientas puede reducir en gran medida el tiempo de codificación, pero algunos novatos retrasan su aprendizaje pensando que en cada caso posible aprender a usar la herramienta adecuada tomará más tiempo que solucionar el problema sin él. Si bien esto puede ser cierto para un caso dado, la pérdida total de productividad de cada caso se suma. Aprenda a usar un depurador temprano en su carrera ; mejorará enormemente su productividad, así como también acelerará su aprendizaje, reducirá su estrés y le permitirá disfrutar más de la codificación. Vea mi respuesta a ¿Cuál es la única cosa que aprendió más adelante en su carrera y que desearía haber aprendido antes?
Algunas herramientas para ayudarte:
Valgrind Home
pelusa (software)
Lista de herramientas para el análisis de código estático.