¿Hay una manera correcta de poner en práctica un proceso de mejora continua (También conocido como software de endurecimiento)?

StackOverflow https://stackoverflow.com/questions/1835622

Pregunta

Cada versión parece que nuestros clientes a encontrar algunos problemas antiguos con nuestro software. Esto hace que parezca que cada versión tiene varios errores, cuando en realidad nuestro nuevo código es generalmente sólidos.

Hemos tratado de poner en práctica algunas pruebas adicionales donde tenemos probadores hacer varias horas de pruebas de regresión mensual de una sola aplicación cada mes en un esfuerzo para mantenerse por delante de los pequeños problemas. Nos referimos a este proceso como nuestro proceso de endurecimiento del software, pero no parece que estamos cogiendo suficiente de los insectos y se siente como un proceso muy segundo plano ya que siempre es nuevo código para escribir.

¿Hay un truco para este tipo de pruebas? ¿Es necesario apuntar a una función específica en un momento?

¿Fue útil?

Solución

Al desarrollar sus procedimientos de prueba, es posible que desee poner en práctica este tipo de pruebas:

  • unidad de pruebas (pruebas de componentes invididual de su proyecto para probar su funcionalidad), estas pruebas son importantes porque permiten localizar con exactitud en qué parte del software el error puede venir de. Básicamente en estas pruebas que va a probar una sola funcionalidad y el uso de objetos simulados para simular el comportamiento, valor de retorno de otros objetos / entidades.

  • pruebas de regresión, que usted ha mencionado

  • pruebas de caracterización, un ejemplo podría estar ejecutando automáticamente el programa en la entrada generada automáticamente (simulando la entrada del usuario), el almacenamiento de los resultados y comparar los resultados de cada versión en contra de estos resultados.

Al principio esto será muy pesada para poner en su lugar, pero con más lanzamientos y que se añade a las pruebas de regresión automatizadas no más corrige errores, debe estar empezando a ahorrar tiempo.

Es muy importante que usted no cae en la trampa de diseñar un gran número de pruebas mudas. Las pruebas deben hacer su vida más fácil, si usted pasa mucho tiempo en la comprensión de las pruebas han roto debe rediseñar las pruebas, ya que le dan mejores mensajes / comprensión del problema para que pueda localizar el problema rápidamente.

En función de su entorno, estas pruebas pueden estar vinculadas al proceso de desarrollo.

En mi entorno, usamos SVN para el control de versiones, un robot ejecuta las pruebas contra cada revisión y devuelve las pruebas y mensajes en su defecto con el nombre de la revisión que se rompió y el contribuyente (su inicio de sesión).

EDIT:

En mi medio ambiente, utilizamos una combinación de C ++ y C # para proporcionar análisis utilizados en Finanzas, el código fue de C ++ y es bastante antiguo, mientras que estamos tratando de migrar las interfaces hacia C # y mantener el núcleo de la analítica en C ++ ( principalmente debido a los requisitos de velocidad)

La mayoría de las pruebas de la C ++ son pruebas de unidad escrita a mano y pruebas de regresión.

En el lado C # estamos utilizando NUnit para las pruebas unitarias. Tenemos un par de pruebas generales.

Tenemos una política de 0 advertencias, que explícitamente prohíben la gente se comprometa código que está generando advertencias a menos que puedan justificar por qué es útil para omitir la advertencia para esta parte del código. Tenemos así las convenciones sobre la seguridad de excepción, el uso de patrones de diseño y muchos otros aspectos.

Configuración explícitamente las convenciones y las mejores prácticas es otra manera de mejorar la calidad de su código.

Otros consejos

  

¿Hay un truco para este tipo de pruebas?

dicho, "tenemos probadores hacer varias horas de pruebas de regresión mensual de una sola aplicación cada mes en un esfuerzo para mantenerse por delante de los pequeños problemas."

supongo que por "pruebas de regresión" que quiere decir "ejercer manualmente características de edad".

Usted debe decidir si usted está buscando errores viejos que nunca han sido encontrados antes (que quiere decir, ensayos que nunca has ejecuta antes de ejecutar); o , ya sea que esté repitiendo las pruebas realizadas previamente para verificar que la funcionalidad probada previamente no se ha modificado. Estos son dos cosas opuestas.

"Las pruebas de regresión" implica para mí que usted está haciendo este último.

Si el problema es que "los clientes a encontrar algunos problemas antiguos con nuestro software", entonces ya sea que sus clientes están ejecutando tests que nunca has correr antes (en cuyo caso, para encontrar estos problemas se necesita para ejecutar nueva pruebas de software antiguo), o están encontrando errores que Tienes anterior probado y ha demostrado, pero que al parecer nunca fijo después has encontrado.

  

¿Es necesario apuntar a una función específica en un momento?

¿Qué está tratando de hacer, exactamente:

  • encontrar errores antes de los clientes a encontrar?
  • convencer a los clientes de que hay poco mal con el nueva el desarrollo?
  • pasar el menor tiempo posible en las pruebas?

Un consejo muy general es que los insectos viven en familias: lo que cuando se encuentra un error, busca sus padres y hermanos y primos, por ejemplo:

  • Usted podría tener este mismo error exacto en otros módulos
  • Este módulo podría ser buggier que otros módulos (escrito por somone en un día, tal vez), a fin de buscar cualquier otro tipo de error en este módulo
  • Tal vez este es uno de una clase de problemas (problemas de rendimiento o problemas de memoria baja) lo que sugiere un área entera (o tipo totalidad de requisitos), que necesita una mejor cobertura de la prueba

Otro consejo es que tiene que ver con la gestión de las expectativas del cliente: usted ha dicho, "Se hace parecerse cada versión tiene varios errores, cuando en realidad nuestro nuevo código es generalmente sólidos", como si el verdadero problema es la percepción errónea de que el error está recién escrito.

  

se siente como un proceso muy segundo plano ya que siempre es nuevo código para escribir

develoment software no sucede en el fondo, en un segundo plano: o alguien está trabajando en él, o no lo son. La administración debe decidir si asignar a nadie a esta tarea (es decir, buscar errores previamente-no encontrados existente o elimine el efecto de antes-encontrado-pero-no-todavía-reporte de errores), o si prefieren concentrarse en nuevos desarrollos y dejar que el clientes hacen el error de detección.


Editar Vale la pena mencionar que la prueba no es la única manera de encontrar errores. Hay también:

  • informales revisiones de diseño (35%)
  • inspecciones formales de diseño (55%)
  • informales revisiones de código (25%)
  • inspecciones de código formales (60%)
  • comprobación personal de escritorio de código (40%)
  • Unidad de prueba (30%)
  • prueba de componentes (30%)
  • test Integración (35%)
  • prueba de regresión (25%)
  • prueba del sistema (40%)
  • Low volumen de prueba beta (<10 sitios) (35%)
  • test beta-alto volumen (> 1000 sitios) (70%)

El porcentaje que puse al lado de uno es una medida de la tasa de defectos de eliminación para cada técnica (tomado de la página 243 de McConnel de estimación de software libro). Las dos técnicas más eficaces parecen ser la inspección código formal, y las pruebas beta de gran volumen.

Por lo que podría ser una buena idea introducir las revisiones de código formales:. Que podría ser mejor para detectar defectos que las pruebas de recuadro negro es

Tan pronto como termine su codificación, primero hay que ir por la unidad de pruebas. Allí, encontrará algunos errores que deben ser corregidos y se debe llevar a cabo otra ronda de pruebas unitarias para encontrar nuevos errores si llegaron o no. Después de terminar Prueba de la unidad que debe someterse a las pruebas funcionales.

Te ha mencionado aquí que su probador se realiza el análisis de regresión sobre una base mensual y todavía hay bichos que salen de edad. Así que es mejor que sentarse con el probador y revisar los casos de prueba ya que creo que necesitan ser actualizados periódicamente. También durante la revisión de poner la tensión en qué módulo o funcionalidad están llegando a los insectos. La tensión en esas zonas y añadir más casos de prueba en esas zonas y añadir aquellos en los casos de prueba rgression para que una vez nueva construcción viene los casos de prueba se debe ejecutar.

Usted puede intentar una cosa más si su proyecto es a largo plazo, entonces usted debe hablar con el probador para automatizar los casos de prueba de regresión. Le ayudará a ejecutar los casos de prueba en el tiempo libre como la noche y al día siguiente obtendrá los resultados. También los casos de prueba de regresión deben ser actualizados como el principal problema viene cuando los casos de prueba de regresión no se actualizan periódicamente y mediante la ejecución de casos de prueba de regresión viejos y nuevos casos de prueba progresión se echa en falta algunos módulos que no se ponen a prueba.

Hay un montón de hablar aquí de las pruebas unitarias y no podría estar más de acuerdo. Espero que Josh entiende que la unidad de pruebas es un proceso mecanizado. No estoy de acuerdo con el PJ en que las pruebas de unidad debe ser escrito antes de la codificación de la aplicación y no después. Esto se conoce como TDD o Test Driven Development.

Algunas personas escriben pruebas unitarias que ejercen el código de nivel medio pero se olvidan probar el código de interfaz gráfica de usuario. Esa es una imprudencia. Usted debe escribir pruebas unitarias para todos los niveles de la aplicación.

Dado que las pruebas unitarias son también el código, está la cuestión del control de calidad para su serie de pruebas. Es la buena cobertura de código? ¿Hay falsos positivos / negativos errores en las pruebas unitarias? ¿Está realizando una prueba de lo correcto? ¿Cómo asegura la calidad de su proceso de aseguramiento de la calidad? Básicamente, la respuesta a eso se reduce a la revisión por pares y los valores culturales. Todo el mundo en el equipo tiene que estar comprometido con una buena higiene de prueba.

Mientras más temprano un error se introduce en el sistema, más tiempo permanece en el sistema, más difícil y más costoso que es para eliminarlo. Es por eso que usted debe buscar en lo que se conoce como integración continua. Cuando se ajusta correctamente, integración continua significa que el proyecto se compila y ejecuta con el conjunto completo de pruebas de unidad poco después de facturar sus cambios para el día.

Si las pruebas fallan construir o unidad, entonces el codificador infractor y el maestro de construcción para crear una notificación. Trabajan con el líder del equipo para determinar cuál debería ser la corrección de curso más adecuado. A veces es tan simple como arreglar el problema y comprobar la solución. Un maestro de construcción y líder del equipo tiene que involucrarse para identificar patrones globales que requieren una intervención adicional. Por ejemplo, una crisis familiar puede causar la calidad de codificación de un desarrollador a tocar fondo. Sin CI y un poco de supervisión de la gestión, que podría tomar seis meses de errores antes de darse cuenta de lo que está pasando y tomar acciones correctivas.

no mencionó lo que su entorno de desarrollo es. Si el suyo eran una tienda de J2EE, entonces yo sugeriría que se mira en la siguiente.

  • CruiseControl para la integración continua
  • Subversion para el control de versiones de código fuente, ya que se integra bien con climatizador
  • Primavera porque DI hace que sea más fácil de mecanizar la unidad de pruebas con fines de integración continua
  • JUnit para la unidad de prueba de la capa media
  • HttpUnit para la unidad de prueba de la GUI
  • jmeter para las pruebas de estrés

Volviendo e implementar una estrategia de ensayo para (todos) cosas existente es un dolor. Es largo, es difícil, y nadie va a querer hacerlo. Sin embargo, recomiendo encarecidamente que como un nuevo error entra, se desarrolló una prueba en torno a ese fallo. Si usted no recibe un informe de error en él, entonces o es (a) trabaja o (b) el usuario no le importa que no funciona. De cualquier manera, una prueba es una pérdida de tiempo.

Tan pronto como su identificó, escribir una prueba que va rojo . Ahora mismo. A continuación, corregir el error. Confirmar que se haya fijado. Confirman que la prueba es ahora verde . Repita como nuevos errores vienen en.

Lo siento decir que pero tal vez simplemente no estás prueba suficiente, o demasiado tarde, o ambas cosas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top