¿Qué hace para que su software o aplicación web tenga la menor cantidad de errores posible y sea confiable y estable?

  • Pruebas unitarias: para verificar la lógica dentro de la capa empresarial y la capa del controlador de interfaz de usuario (o ‘ViewModel’)
  • Pruebas de integración: para verificar la capa de acceso a datos y el repositorio y la funcionalidad de extremo a extremo.
  • Pruebas de IU: para verificar su lógica de interacción con el usuario. Esto es probablemente lo más difícil ya que las tecnologías no son lo suficientemente maduras; Selenium para aplicaciones web y Ranorex para aplicaciones de escritorio, por ejemplo, son imposibles de mantener a largo plazo. Pero es fundamental asegurarse de que, por ejemplo, las pestañas sobre celdas deshabilitadas funcionen (he tenido que codificar a mano un arnés para esta parte antes de que fuera en una forma que pudiera mantenerse en el futuro).
  • Principios de codificación sólidos (¡no @SOLID (diseño orientado a objetos)!), Contratos entre subsistemas y soporte de metadatos. Por ejemplo, el equipo debe tener principios sobre cuándo se devuelve un valor nulo o una colección vacía, si un parámetro es opcional, un buen toque es tener una convención mediante la cual el sufijo si el parámetro tiene ‘Opt’ (cf. Roslyn), identifique dónde ¡Debe haber garantías de que los métodos nunca arrojan y afirman lo mismo en el contrato / documentación !, acuerde en su equipo dónde copiar y pegar es y no es aceptable y esté absolutamente seguro de que se elimina la duplicidad en la lógica o los datos y donde no es posible, emplee code-gen o (por duplicidad en sproc-logic y serveride-logic) use construcciones integradas en el lenguaje / plataforma o, como mínimo, tenga pruebas de integración que garanticen que la lógica permanezca sincronizada.
  • Code Gen. Familiarízate con él y úsalo si las herramientas están ahí.
  • Uso juicioso de patrones de diseño. Por ejemplo, Memento es excelente para preservar el estado cuando se requiere una manipulación y recuperación de objetos complejos cuando se produce una falla en el proceso y se requiere una limpieza. IoC es bastante común ahora, pero podría arruinar su proyecto: tenga cuidado de que cuando esté a punto de ejecutar alguna acción, ¿sabe cuáles son las dependencias y de dónde se extraerán en ese punto del código?
  • Piense en las características de su idioma, su aplicación y su proceso general. Si está escribiendo un motor de procesamiento / FIX de alto volumen que no puede permitirse retrasarse y su (des) asignación de memoria es lenta, preasigne la mayor parte de su memoria por adelantado y limpie manualmente a intervalos predefinidos o cargue equilibrio entre procesos, etc. Si se trata de un gran proyecto (buena suerte en primer lugar), la pieza crítica es la interacción de los componentes y el proceso se vuelve crítico. CI está bien, pero cuando estas piezas pasan a producción juntas, ¿tiene el 100% de confianza de que interactuarán de la misma manera que lo hicieron en el desarrollo, tiene un servicio de HA que garantiza que todos los componentes se ejecutan en el mismo entorno y usted tener una manera de VERIFICAR esto como un paso posterior a la compilación. Si tiene que interactuar con una aplicación heredada, realice algunas pruebas y escriba su código ‘nuevo’ en las mismas condiciones que esas pruebas.
  • Contrata programadores orientados al detalle que conozcan bien su plataforma / idioma y sus limitaciones. Las revisiones por pares pueden ayudar, si son del tipo correcto @http: //smartbear.com/SmartBear/m….
  • Toma medidas preventivas. El ejemplo de preasignación se da arriba. Otro También al implementar el manejo de excepciones, tome medidas preventivas para que su manejo de excepciones falle e idealmente asegúrese completamente de que el manejo de excepciones en sí mismo no se produzca. Si es una restricción de memoria, no tome una captura de pantalla, si se trata de un error de red, no envíe un correo electrónico en su lugar escriba en el archivo de registro elegido, si eso falla, escriba en el registro de eventos del sistema y si eso falla, escriba en un archivo temporal. Las condiciones previas, las condiciones posteriores y las invariantes son críticas aquí: afirmar, afirmar, afirmar para asegurarse de que sus suposiciones sean correctas. Al principio puede lastimarte la cabeza tener que pensar en esto, pero se convertirá en una segunda naturaleza.
  • Manejo de excepciones bien definido. En CUALQUIER etapa de su aplicación, desde hacer clic en el botón hasta insertar datos, debe saber dónde se encuentra el manejo de excepciones para esa etapa. Cómo se maneja un tiempo de espera de php, qué sucede si su servicio de Windows se queda sin memoria, qué pasa con el controlador infame para un clic de botón WinForms, qué pasa con la falla en subprocesos o temporizadores de fondo. No es suficiente conectarse a un controlador global como App.UnhandledException o al archivo asax global solo y luego tomar medidas. Si desea que sea confiable, piense en el contexto y si su componente cargado necesita ser derribado, si la integridad de los datos está comprometida, si el usuario necesita saber al respecto, qué alerta debe enviarse. También debajo de este banner, ¿qué mensaje debe devolver al usuario? El usuario (o la aplicación que consume) debe recibir suficiente información si está disponible para ayudarlo; si la línea 10 de un CSV estaba en el formato incorrecto, dígales que una manta 500 simplemente no es genial. Pero tenga cuidado, no demasiado para regalar la estructura del sistema de archivos / db / etc. Una forma económica de hacerlo es tener una excepción personalizada que se puede lanzar en varios puntos conocidos de su aplicación y que el controlador global podría utilizar para devolver un mensaje específico.

Si puede obtener un código que simplemente funcione año tras año con ~ 0 llamadas de soporte, pero los únicos ‘errores’ realmente son requisitos que no se definieron por adelantado, bueno, eso es genial.

Otras respuestas cubren la mayoría de las buenas prácticas y enfoques.

No importa lo que haga, siempre tendrá algunos errores que ocurrirán en la producción que se han perdido por nuestra prueba automatizada y los muchachos de control de calidad. Esto significa que tendrá que usar las herramientas adecuadas para poder encontrar problemas en su aplicación web en producción.

Para su back-end , puede usar una herramienta como Sentry que supervisará los errores en tiempo real y le proporcionará información técnica que lo ayudará a descubrir qué salió mal.

Para su front-end, puede usar una herramienta como SessionStack que recopilará datos sobre cómo los usuarios interactúan con su aplicación web. Cuando algo se rompe, se produce un error, la solicitud de red falla, etc., SessionStack recrea los datos recopilados como un video y le muestra cuáles fueron los pasos realizados por el usuario para causarlos. Esto lo ayudará a reproducir el problema e ir directamente a solucionarlo.

El uso de tales herramientas es crítico porque habrá problemas en su entorno de producción y necesitará tanta información como sea posible para solucionarlos rápidamente y hacer que su producto sea más estable y confiable.

No puede confiar únicamente en la información de sus usuarios sobre los problemas, porque muchas veces los usuarios no se comprometen a proporcionarle dichos detalles. Esto dejará problemas existentes para sus próximos usuarios.

Divulgación: soy cofundador de SessionStack.

Cree un entorno UAT que duplique lo que tiene en producción.

Pruebe todas las funciones en condiciones reales. Hay ciertas condiciones que pueden funcionar durante las pruebas, pero pueden fallar en la producción cuando el número de usuarios concurrentes excede un cierto número. Existen productos de software que pueden simular la cantidad de actividad que tiene o espera tener en producción que le permiten realizar pruebas en condiciones reales.

Cree un plan de prueba que enumere todas las pruebas requeridas para que la aplicación pase de UAT a producción. Esto garantiza que, sin importar quién haga los cambios, se aplica el mismo plan de pruebas.

Desarrollo impulsado por pruebas, pruebas unitarias para cada característica y error reproducible, e inyección de fallas para que pueda aplicarse a las rutas de error.

Creo en Test, Test y Test, independientemente de la metodología que sigas. Intente adaptar la última metodología para que las pruebas sean más precisas. Crear y entregar un producto perfecto debe ser el objetivo final. Debido a que el error detectado durante la prueba podría ser fácil de corregir en lugar de encontrarlo después de la implementación.

More Interesting

En la ejecución de JSP, ¿por qué deberíamos colocar un archivo JSP solo en aplicaciones web?

¿Cuál es la mejor pista de idioma, si quiero aprender cómo crear soluciones para mi empresa como una aplicación web para que mi personal la use?

Cómo mostrar imágenes sin conexión con Angular 2

¿Deberíamos usar alguna solución de hosting de pago ya que hay una gran cantidad de proveedores y soluciones gratuitas (nicho) que parecen profesionales y cuestan menos (que el hosting tradicional) o son gratuitas y vienen con muchas características de la nueva era?

¿Por qué no puedo reproducir una canción en Pandora? O si puedo, ¿cómo lo hago?

¿Qué lado del cliente JS será el mejor para una aplicación web a gran escala, en términos de rendimiento y usabilidad?

¿Cuáles son algunos ejemplos de buen diseño de UI / UX para una aplicación web b2b?

¿Por qué los desarrolladores de aplicaciones web tienen que incluir tokens de falsificación de solicitudes entre sitios en sus formularios web?

¿Cómo se logra un terminal interactivo en línea?

¿Cuál es el mejor método para crear aplicaciones web basadas en Python, web2py o Django?

¿Cuál es la mejor pila de JavaScript moderna para el desarrollo de aplicaciones web?

Cómo desarrollar una aplicación web con Python

¿Es posible un cambio importante en la forma en que las páginas web se escriben y se hacen posibles en el futuro?

¿Cuál es la práctica estándar para que un servidor notifique a un equilibrador de carga que no está disponible?

¿Existe alguna aplicación web para planificar un Eurotrip, donde pueda comparar el costo / tiempo de viaje para diferentes opciones de ruta?