2010-10-30 20 views
5

Podría dar una idea de las técnicas que se utilizan para garantizar la calidad de sus soluciones. Por ejemplo, a veces, me gusta probar mi resultado usando stopifnot() para asegurarme de que no recibo resultados ridículos. ¿Hay alguna otra técnica o función que utilice en el procesamiento de datos para asegurarse de estar recibiendo la solución que deseaba?Técnicas de aseguramiento de la calidad R

Nota: Me doy cuenta de que esta es una pregunta amplia y tal vez un candidato para wiki comunitario o incluso cierre, pero en lugar de votar para cerrar, tal vez me ayude agregando comentarios para dirigir la conversación.

+0

¿Quiere decir al desarrollar un paquete en R o solo * soluciones ad hoc * a problemas de análisis de datos. En un paquete puede tener un directorio './Tests' que contenga pruebas que prueben su código actual contra los resultados esperados -' stopifnot() 'se usa extensamente allí. –

+0

@ucfagls ad hoc, en general. No necesariamente hago paquetes, sino que creo scripts para resolver mis problemas/responder mis preguntas. –

Respuesta

3

sólo algunas cosas que vienen a la mente (en orden aleatorio)

  • This page tiene enlace muy interesante para la depuración en R (bien esto es durante la producción, pero todavía relacionado con su problema creo)

  • puede utilizar excepciones, como se explica in this discussions (y enlaces en el mismo)

  • puede escribir pruebas con resultados conocidos (tanto para el éxito y el fracaso) y ver que hacen en realidad lo que se supone que deben hacer. Asegúrese de pasar datos extraños a las funciones y ver cómo se comportan en una situación "no tan normal".

  • No confíe solamente en pruebas automatizadas: dele sus funciones a una persona medianamente analfabeta en el trabajo (¡pero no lo suficiente para que no pueda usar R) y permita que haga algunas pruebas beta. ¡Te sorprenderá la cantidad de errores que se le ocurrirán! :)

3

Quality in software engineering es una zona bastante masiva, y la mayor parte se aplica a código escrito en I tanto como código escrito en COBOL o C#, así que mi primera respuesta sería 'depende'.

Para mí, vengo de la industria farmacéutica, donde lo que hacemos está regulado por agencias gubernamentales como la FDA y la MHRA.Para nosotros, la calidad es algo en lo que pensamos durante todo el proceso, por lo que enumeraría los siguientes como artefactos visibles de calidad;

  • tenemos un proceso de desarrollo de software, que está escrito y repetible (tradicionalmente en este tipo de industria se trata de una waterfall style, pero se están utilizando cada vez más agile/prototyping style metodologías)
  • Tenemos un sistema que asegura que cada la persona involucrada sabe lo que debería hacer (descripciones de trabajo) y está adecuadamente calificada para hacer ese trabajo (entrenamiento)
  • Comenzamos definiendo lo que se requiere de alguna manera, con suerte de alguna manera que se puede probar
  • Tenemos alguna forma de documentar nuestro proceso de desarrollo, donde hemos estado y cómo (una combinación de una buena documentación y Source Control)
  • Nosotros pruebas siempre que sea posible, y tan pronto como sea posible (por lo que, automated si es posible)
  • Tenemos people que son responsables de la supervisión de la calidad, que son independientes de las personas que están haciendo para evitar conflictos
  • Controlamos el entorno de software que se utiliza para el desarrollo, las pruebas y la producción (leer; change control)
  • Nos controlar y gestionar el software una vez que está en uso, el seguimiento de los problemas y gestionarlos (Issue Tracking)
  • llevamos registros, por lo que incluso si todas las personas involucradas se fue debajo de un autobús/ganado la lotería el nuevo pueblo podía Todavía defiendo y prueba todo lo de arriba a un inspector del gobierno.

Sin embargo, esa es una gran lista, y me imagino que hay muchas industrias que no hacen todas (finanzas, educación) y probablemente algunas que hacen más (construir reactores nucleares, salvar vidas, NASA) .

más específicamente a lo que supongo que quieres decir, antes de código que debe ser capaz de definir algunos a partir de entrada de y las respuestas específicas que debe salir, y le recomiendo que utilice algo como RUnit o Testthat para construir estos en.