El costo de las pruebas unitarias

La prueba de unidad es un tema recurrente para mí estas últimas semanas; entre hablando stackoverflow y otros foros y en los ensayos que yo le escribo dos proyectos en curso, Le pregunté a algunas preguntas sobre el costo real de las pruebas unitarias.

Esto es especialmente un artículo de Thomas Brandt (Alemán: “TDD in der (mi) Prácticas - deseo y la realidad”) que me hizo pensar seriamente. Brandt describe en su artículo muy bien hecho, este abismo entre la teoría y la práctica de Test Driven Development. Punto blanco, Más bien, se adhiere a los principios de TDD;

En primer lugar hay que decir que Test Driven Development, especialmente el principio de "primera prueba", es un lugar “sexy” desarrollar. Ciertamente, puede mejorar la arquitectura de software y nos impide hacer ciertas (pequeños) errores.
— traducción relativamente libre de cerca de T. Brandt

Por lo tanto, considera TDD como una poderosa herramienta – al menos desde el puramente académico. Pero el resultado inmediato es una duda;

La cuestión es simplemente: ¿a qué precio?

Como se ha mencionado, excepto T. Brandt y yo, muchas otras personas parecen pedir, y la pregunta más frecuente es el siguiente: Es que el uso de pruebas unitarias de software que hace realmente mejor, y es que los esfuerzos para invertir son realistas?

Condensada, la cuestión se reduce a una simple:

Me costó la cantidad de las pruebas unitarias?

A menudo, la cuestión consiste en, que el que plantea que las pruebas unitarias son demasiado caros para aplicar de forma coherente. Recuerdo una discusión que tenía sobre el valor de una cobertura total de la prueba más allá del ideal teórico. los esfuerzos se informa de que proporcionan dije “no” en el momento.

Al día de hoy creo que todas estas preguntas se les pide simplemente el mal, porque no se conoce el costo de las pruebas unitarias es importante, más:

¿Cómo puedo pagar la omisión de pruebas unitarias?

Y aquí está mi respuesta, se ilustra con un ejemplo concreto;

Uno de mis proyectos actuales incluyen un gran número de componentes distribuidos. He descubierto un error en el proyecto de, que me obligó a refactorizar ambas clases. Todos me tomó alrededor de 1 horas. Lanzamiento de pruebas unitarias? Acerca de 30 segundo. 30 segundo, descubrí que algunos comportamientos no fueron como estaba previsto. Me tomó unos 20 minutos para las correcciones. Escribir las pruebas me costó alrededor de 45 minutos.
El balance es de dos horas.

Sin pruebas unitarias, Probablemente no se daría cuenta de algunos de los errores de inmediato. Habría tenido 1 tiempo refactorización, más de un más o menos determinable, sin duda, repartidas en varios días, para corregir los problemas que pasan desapercibidos cuando se cambia. La probabilidad de que esta vez va más allá de una hora es relativamente alta (depuración “mano”, recrear las condiciones en las aplicaciones de subprocesos múltiples, etc…).

Por mi parte, Me parece que para calcular un tiempo definido (pruebas con que cubra una parte realista del software – no 100%) más interesante es que la navegación en la oscuridad, tal como se practica.

Experimento! ;)

Un NoSQL pocas MariaDB

Logo de MariaDB

MariaDB un tenedor de MySQL

Un mensaje me llegó muy contento de MariaDB, el tenedor muy prometedor MySQL. Con una muy reciente comprometerse en su repositorio, MariaDB se deja descansar un modelo relacional clásica puede. Con la introducción de columnas dinámicas (Traducción libre “Dinámica de la columna”) la próxima versión (5.3) Así que al parecer MariaDB para contener una pista de NoSQL!

Un objetivo primordial en el desarrollo se utilizó para hacer estas columnas a través de la sintaxis SQL Clásico. Internamente columnas dinámicas se almacenan como BLOB (Objeto grande binario).

Para ilustrar la operación puede este nuevo tipo, un pequeño ejemplo:

Select All Code:
1
2
3
4
INSERT INTO exemple (nom, classe, prix, attributs) VALUES
("HTC Desire Z", "telephone", 420, COLUMN_CREATE(1.5, "Gris")),
("Nokia E7", "telephone", 509, COLUMN_CREATE(32, "noir", 2, "Clavier")),
("Lenovo Thinkpad E420", "ordinateur", 1019, COLUMN_CREATE(1, "noir", 3, "Win7 Pro", "500Go"));

Como se puede ver, todo se ve como una consulta totalmente convencionales, columna al por menor “attributs” cerrar. En el ejemplo, cada entrada tiene datos tanto convencionales, sobre un campo “attributs&#los atributos contiene un número variable de los datos (NB: a diferencia de los campos clásicos, matriz de entrada dinámica tiene un solo número de abordar, pero al parecer los desarrolladores aún no han sido el cambio que).

Para crear una entrada para la columna por tanto se utilizaCOLUMN_CREATE(), Para actualizar o eliminar una entrada debe utilizar el COLUMN_ADD() en una llamada normal UPDATE:

Select All Code:
1
2
UPDATE exemple SET attributs=COLUMN_ADD(attributs, 1, "jaune")
  WHERE COLUMN_GET(attributs, 1 AS CHAR(10)) = "noir";

El ejemplo también ilustra bastante bien el uso de COLUMN_GET() que proporciona acceso a un atributo de la columna. También hay Column_list() que devuelve la lista de columnas dinámica actual.

Si alguna vez quieres probar esta nueva característica ya, jettez en su compilador y repositorio de MariaDB; binarios estarán disponibles con la versión 5.3 El MariaDB.

En tercer lugar los componentes del partido y las pruebas unitarias

Pruebas de Software - Ser una ciencia

Acabo de leer el estudioIntegridad de software Informe de Riesgo que se llevó a cabo a petición deCoverity. En términos generales el estudio resume bastante bien la sensación de que hace mucho tiempo; El desarrollador promedio es mucho menos preocupado por la calidad de software de terceros que se integra en un proyecto que la calidad de su propio código.

En los ejemplos de, dice el estudio 90% de (330) Los desarrolladores utilizan las fuentes de terceros (éstos se encuentran libres de los propietarios de derechos de autor o) en su software. Contras sólo en torno al 40% Los desarrolladores dicen que estos hacen pruebas automatizadas en estas fuentes (más contras 75% para las fuentes “casa”). Es lo mismo (un pequeño porcentaje) para el ensayo manual y la integridad (stress-testing/functional-testing).

Un cierto consenso existe con respecto a los retrasos debido a la mala calidad del código de terceros; más 140 Los desarrolladores han respondido que la mayor parte de los retrasos en el lanzamiento o las retiradas se debieron a problemas con las fuentes de terceros.

La última palabra: TESTEZ! TESTEZ! PRUEBA!

Linux en un navegador

Durante mucho tiempo, todos sabíamos que JavaScript no estaba allí para validar formularios (X)HTML y hacer algún efecto en los sitios web. Pero ahora M. Fabrice Bellard ha golpeado de nuevo con una demostración de’escala!

Este genio ha hecho alcanzado un emulador x86 en javascript puro! Les ahorraré los detalles técnicos aquí (que se pueden leer en Fabrice Bellard Sitio). Venta al por mayor, JSLinux es un emulador 486, sin FPU y MMX, pero con una unidad de gestión de memoria (MMU)compléta!

Una característica de diseño (que hizo posible la explotación de este) es el amplio uso de matrices con tipo (especificación por) que se han convertido recientemente disponible en navegadores recientes (Chrome 11 y en la actualidad Firefox4, Opera está animado a ponerse al día si mi información es correcta).

En cuanto a “distro” Linux instalado en la demo, que es bastante completa; del núcleo 2.6.20, BusyBox, que, qemacs y un compilador de C (TinyCC, He tenido la alegría de intentar por primera vez =)

En esta, Te dejaré descubrir por sí mismo la maravilla: JSLinux (la página tarda unos segundos para cargar)

Instalar Mono 2.10 CentOS con YUM

Y estoy de vuelta con un poco de bricolaje Linux: Instalar Mono 2.10 en CentOS (5.6 por una vez).

A pocas horas de buscar por la red me han traído siempre al mismo resultado; construir desde el código fuente… y con la buena lista de dependencias, nada muy divertido… la solución: romper un poco la cabeza pequeña!

Leer

Restaurar las claves privada SSL perdido!

El experimento’ Que estoy describiendo es hoy muy fuerte, especialmente teniendo en cuenta el tema!

Primera historia: Me borren por accidente, o mejor dicho, sustituye la clave privada utilizada para el cifrado SSL en uno de mis servidores. A sabiendas de que sin esta clave el servidor hace caminar de nuevo una vez reiniciado!

Lo que me salvó? El hecho de que las cargas de Apache el archivo completo en la memoria! Yo podría haber hecho un volcado de la pila / pila de proceso de búsqueda de apache2…. o buscar durante 2 horas en Google para encontrar la herramienta poco después de

Leer

HP Color LaserJet 2600n por W7

Hola a todos; esa es la gran noticia; Ahora estoy entre los usuarios de Windows 7 (3semanas) y más bien satisfecho,. Aparte de los dos cortes de piloto a pequeña (resuelto) nada de malo, salvo que la impresora láser HP (CLJ2600n) que es mi madre me preguntó esta mañana un pequeño conejo cuando quise usarlo:

Enfait je pensais que tout allais bien fonctionner du premier coup – funcionó en Vista – mais apparemment les pilotes pour cette imprimante réseau ne sont plus sur Windows Update pour W7, y HP ofrece una sola versión “Plug and Play” sur leurs site (de tal modo: Apoyo a la página de la HP 2600n) que se destina a la función a través de USB – al menos oficialmente.

Leer

7 Google trucos que pueden salvarte la vida!

Todo el mundo utiliza Google (con algunas excepciones…) como un motor de búsqueda, pero que sabía que uno puede usar Google para encontrar la definición de una palabra, convertir los euros en levas búlgaras, o limitar la búsqueda a la información entre determinadas fechas?

Algunos “Trucos” Google, que bien puede ser útil para!

Leer

jQuery: Transformaciones CSS animada Ópera 10.50

Descubrí hace algún tiempo las transformaciones CSS disponible a partir del WebKit (el motor de renderizado detrás de Safari y Google Chrome), A continuación se añadió Firefox, y más recientemente con la versión de Opera 10.50.

Como siempre, las implementaciones son diferentes (por no hablar de Internet Explorer que no los soporta a todos los…) pero el guión Zachstronaut (una “hotpatch” Infact jQuery, la adición de la propiedad transformar la función $.css() y girar y escala para $.Animado()) funcionado bien en Firefox y WebKit…

Por desgracia, la aplicación de la CSS Transformaciones Opera no devuelve ningún valor “legibles” pero una matriz de datos, para los que no he encontrado documentación. Así que tomé algunos desvíos, ya través de la función getComputedStyle() Tuve la oportunidad de recuperar los necesarios para ejecutar la animación en la Ópera.

La versión modificada del script es de tal modo (También encontrará un ejemplo para aquellos que no conocen las transformaciones CSS).

LMGTFY.com, o “cómo buscar ayuda?”

Si usted tiene la desgracia de pasar todo el “geek” (o un experto “Nuevas Tecnologías” – para ser políticamente correcto)a menudo nos encontramos jugando a la línea directa para los amigos y otros conocidos. La mayoría de las veces nos han dejado ha puesto en marcha un motor de búsqueda.

La science "Google"

Ciencia Google"

Para ayudarnos a, personas que están detrás LMGTFY, de Déjame Google que para usted, han creado su sitio; entrar en una búsqueda, y el sitio va a generar una “animación” que muestra cómo se debe buscar en Google. Envía el enlace a su amigo y lo dejas saber…

He encontrado una buena idea – Que se diviertan ;)

P.S.: Pour les fans du logos Google: les Google Doodles (es la recopilación oficial de todos los logotipos temáticos :P )