Pregunta

¿Qué buenas prácticas y estrategias están ahí para ejecutar las pruebas de regresión en sistemas empotrados o en otras situaciones en las que la posibilidad de automatizar las pruebas es muy limitado.

En mi experiencia de una gran cantidad de la prueba tiene que ser realizada manualmente es decir, un probador tiene que empujar una secuencia de botones y verificar que la máquina se comporta correctamente. Como desarrollador es muy duro para asegurarse que sus cambios no se rompen algo más.

Sin regresión adecuado pone a prueba la situación es aún peor durante grandes refactorizaciones y tal.

¿Alguien reconoce el problema? ¿Ha encontrado una buena solución o proceso para hacer frente a este tipo de problemas?

¿Fue útil?

Solución

En lo personal, soy un gran fan de tener mi código incrustado compilar tanto en el hardware de destino y mi propio ordenador. Por ejemplo, cuando la orientación de un 8086, que incluía tanto un punto de entrada que se asigna a restablecer en el 8086 hardware y un punto de entrada DOS. El hardware fue diseñado para que todos IO fue mapeado de memoria. Entonces condicionalmente compilado en un simulador de hardware y de forma condicionada cambiado las posiciones de memoria de hardware a la memoria del hardware simulado.

Si tuviera que trabajar en una plataforma no-x86, probablemente me escribo un emulador en su lugar.

Otro enfoque es la creación de un banco de pruebas donde todas las entradas y salidas para el hardware se controlan a través del software. Utilizamos esta mucho en las pruebas de fábrica.

Una vez que hemos construido un simulador en el hardware IO. De esta forma el resto del sistema podría ponerse a prueba mediante el envío de un par de comandos a través de la CAN para poner el hardware en modo simulado. Del mismo modo, el software bien factorizado-podría tener un "modo de simulación", donde el IO se simula en respuesta a los comandos de software.

Otros consejos

Para la prueba incrustado, sugeriría que el diseño de su manera de salir de esta muy temprano en el proceso de desarrollo. Sandboxing su código embebido para ejecutarse en una plataforma de PC ayuda mucho, y entonces no burlarse después :)

Esto asegurará integrety para la mayor parte de ella, pero todavía tendría que hacer sistema y pruebas de aceptación manualmente más adelante.

  

¿Alguien reconoce el problema?

Lo más definitivamente.

  

¿Ha encontrado una buena solución o   proceso para hacer frente a este tipo de   problema?

Una combinación de técnicas:

  • Las pruebas automatizadas;
  • pruebas
  • de fuerza bruta, los es decir, que no son tan inteligentes como pruebas automatizadas, pero que ponen a prueba repetidamente una característica durante un largo período (horas o días), y se pueden dejar para funcionar sin intervención humana;
  • pruebas manuales (a menudo difíciles de evitar);
  • Pruebas en un emulador de software en un PC (o, como último recurso, un emulador de hardware).

Con respecto a la compilación de un compilador PC:. Que sin duda tiene sentido para los módulos de alto nivel, y para los módulos de bajo nivel con un arnés adecuado de prueba

Cuando se trata de, por ejemplo, partes del código que tienen que hacer frente a las señales en tiempo real de múltiples fuentes, la emulación es un buen lugar para empezar, pero creo que no es suficiente. A menudo no hay sustituto para probar el código en el hardware real, en lo más realista posible de un entorno.

A diferencia de la mayoría de los que respondieron hasta el momento, trabajo con entornos integrados que no se parecen en absoluto los sistemas de escritorio, y por lo tanto no puede emular el sistema integrado en el escritorio.

Con el fin de escribir buenos sistemas de prueba, es necesario que su sistema de prueba para tener alimentación directa y retroalimentación. JTAG es el modo de alimentación hacia adelante más común para controlar el dispositivo. Puede establecer el estado completo del dispositivo (tal vez incluso todo el tablero, si tienes suerte) y luego ponga el código de prueba para funcionar. Momento en el cual se obtiene su regeneración. JTAG también puede servir como un dispositivo de retroalimentación. Sin embargo, un analizador lógico con un API de software es la mejor en esta situación. Puede buscar ciertos niveles en los pines, contar pulsos e incluso analizar los flujos de datos de transmisión de los periféricos.

Proporcionar prueba arneses / cajas de arena / maquetas para subsistemas individuales, y para todo el proyecto, que emulan el entorno de destino.

Esto no elimina la necesidad de pruebas en el entorno real, pero reduce en gran medida su número como la simulación detectará la mayoría de los problemas de manera que cuando todos ellos pasan y que realice la prueba humanos impulsada caros que son razonablemente seguros de que pasar esa primera vez.

Además de las sugerencias hasta ahora acerca de asegurar su aplicación puede construir y al menos parcialmente a prueba en el PC del normal (que también es útil para usando herramientas como Valgrind) Me gustaría pensar en su diseño de software.

Uno de los proyectos que trabajé tenía un componente para conducir el hardware, una para hacer frente a las tareas de gestión y otro de gestión de red. La gestión de red SNMP fue manejado por lo que era fácil de escribir scripts que corrían de forma remota para conducir el hardware para hacer algo.

Para ejecutar las pruebas de hardware de bajo nivel que escribí un lector simple script Analizada que scripts de prueba y se inyectó comandos en el IPC de mi conductor. A medida que se basó la salida de vídeo que era difícil de automatizar el verificación de una manipulación distinta a simple vista, pero sin duda salvó Me RSI. También fue muy útil en la generación de secuencias de comandos que el estrés probado o simulado condiciones de fallo conocidas para asegurar bichos no lo hicieron volver a ocurrir.

Si I en la que hacerlo todo de nuevo, probablemente implementar un compartidas biblioteca usada por el instrumento de prueba y el código real para enviar el núcleo mensajes. Quisiera entonces concluir la lib en Python (o algo similar) por lo que mi prueba podría ser un poco más "scripts".

Estoy de acuerdo con todo el que dice hardware automatizado es una necesidad - que estamos utilizando este enfoque para probar el software incorporado con algunas de nuestras unidades. Hemos construido grandes estaciones de prueba de dos estante lleno de simuladores de hardware y usar NI TestStand con una mezcla de VIs de LabVIEW, código C #, DLL de proveedores, etc para gestionar todos de la misma. Tenemos que probar una gran cantidad de hardware - es por eso que tenemos todas esas estupideces. Si acaba de pruebas de software, entonces puede escalar de nuevo a lo esencial. Prueba de una interfaz en serie? Sólo construir un dispositivo para simular el tráfico de serie y ejercer todos los mensajes (y algunos mensajes no válidos) para asegurar que el software responde correctamente. Las pruebas DIO? Eso es fácil, hay un montón de periféricos USB o dispositivos embebidos para simular DIO. Si el tiempo es importante que tendrá que utilizar otro dispositivo incorporado para obtener las estrechas tolerancias que está buscando, de lo contrario un PC lo hará muy bien.

La parte importante es saber siempre lo que se está probando y no probar nada más que eso. Si se trata de software, asegúrese de que la prueba es independiente del hardware para el mayor grado posible. Si está probando la generación de forma de onda o algo con un convertidor D / A, separar las tareas - probar el convertidor D / A de hardware con una construcción especial de software en el dispositivo incorporado que no hace nada de fantasía, excepto escupir una secuencia preestablecida de niveles de voltaje. A continuación, puede ver si sus referencias están apagados, si los filtros se establecen en la frecuencia equivocada, etc A continuación, debería ser capaz de probar el software independiente del hardware - utiliza una placa de desarrollo para probar el software y verificar el comportamiento en el procesador pines es correcta.

Una solución en uso donde trabajo está automatizado nocturno construir y procedimiento de prueba.

  1. Salida Código de la cabeza del tronco de control de código fuente.
  2. Crear proyecto y cargar en blanco.
  3. controlados PC Ejecutar scripts de prueba automatizados.

Los scripts de prueba son fáciles de ejecutar si está utilizando algún tipo de protocolo de comunicación. Eso es bueno para las pruebas de unidad interna. Lo que hace la situación más interesante (y completa) es hacer un arnés de cableado que se conecta a la placa para simular IO externo.

Emulating es bueno para el desarrollo y la prueba inicial básica, pero el tiempo de funcionamiento físico real es el único método fiable para la validación del sistema. operación física puede descubrir a cuestiones no relacionadas con código (causada por los métodos de codificación), tales como los huecos de tensión, ruido, problemas técnicos, problemas de rebote, las condiciones de carrera, etc.

pruebas del sistema prolongada es importante también. La creación de una prueba automatizada de abusar de un sistema de forma continua durante días / semanas recta es una buena manera de forzar la salida de los problemas que pueden no surgir hasta varios meses después en el campo. Diciendo que un cliente acaba de ciclo cuando las cosas empiezan a actuar divertido no es un lujo que todas las industrias pueden entretener.

En mi experiencia, las pruebas de hardware automatizado ha sido crítico. - Invertir en la compilación de doble tanto en la PC y el objetivo es una función de "bueno tener", pero puestos a elegir, yo preferiría invertir en hardware de prueba automatizado. Va a ser una solución más rentable en el extremo puesto que los brazos de fabricación va a querer / necesitar la capacidad de todos modos para el análisis de fallos.

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