Podría entender esta preocupación con fuerza en las áreas en las que está cubriendo cada pulgada del hardware, como un motor de juegos AAA multiproceso de próxima generación que utiliza cada núcleo de CPU, SIMD intrínseco, GPU, GPGPU, etc. mientras ofrece una plataforma cruzada producto.
En esos casos, su peor pesadilla a menudo serán aquellos en los que sus pruebas (unidad e integración) pasarán por las primeras 5.000 máquinas / plataformas dispares probadas, pero fallarán en la 5.001 debido a un error de controlador para un modelo de GPU oscuro. sobre esto me da escalofríos; no es posible probarlos ni preverlos con anticipación.
Especialmente si escribe sombreadores de GPU, puede terminar jugando una lotería inversa donde la mitad del código que escriba invocará un comportamiento indefinido, ya que hay pocas garantías estándar portátiles aplicadas por todos los modelos / controladores de GPU involucrados. Si bien se está volviendo cada vez menos como jugar al buscaminas en estos días, esto debería darles a las personas una idea: http://theorangeduck.com/page/writing-portable-opengl . Probar esto a fines de los 90 y principios de los 2000 fue realmente horrible, y fue un buscaminas todo el tiempo.
Para este tipo de casos, a menudo necesita equipos de más de 10,000 probadores con una gama muy amplia de hardware y sistemas operativos para solidificar realmente el producto y sentirse seguro de ello antes de un lanzamiento estable. No todas las empresas pueden permitirse el lujo de tener una base de pruebas tan amplia, y no todas tienen la disciplina para hacerlo bien (todas las cuestiones ampliamente notables deben solucionarse antes de tener tantos evaluadores en alguna etapa interna pre-alfa / alfa o de lo contrario la avalancha de informes redundantes puede llevar a los desarrolladores a un pánico de parche y oración).
Lo que recomiendo en este caso es lo que otros sugirieron, enfóquese en un conjunto distribuido de pruebas de integración. Puede agruparlo con el instalador, lo que requiere que los usuarios pasen una verificación de diagnóstico básica con atención cuidadosa para proporcionar detalles sobre por qué falló la instalación que pueden pasarles a ustedes, los desarrolladores.
Otra cosa (si puede convencer al jefe) es tener una amplia gama de hardware disponible para realizar una integración contigua. A mayor variedad en combinaciones de hardware / SO, mejor. Desea incluso una variedad de hardware basura que modele los requisitos mínimos de hardware mínimos para sus servidores CI: nunca se sabe.
Pero hay una cosa más que sugeriría:
Inicio sesión
Si está lidiando con algo como el escenario que describí anteriormente, entonces a menudo no puede probar estas cosas que tienden a ser las más problemáticas (esas peores trampas posibles que aparecen en el peor momento posible y no pueden aparecer incluso en el conjunto de pruebas más exhaustivo ya que es un problema limitado a un combo de hardware / sistema operativo muy específico).
Sin embargo, la mayoría de esos tipos de problemas, como las incompatibilidades oscuras del hardware o los fallos directos del controlador o la vinculación contra el dylib incorrecto (nunca he enfrentado esta preocupación) no lo llevarán lejos de iniciar el software. Por lo general, se estrellará y arderá muy pronto, hablando groseramente.
Recomiendo, por el bien de la cordura, abrazar lo inevitable. No puede hacer nada sobre estas cosas que no puede probar exhaustivamente. No intentes evitar el huracán (imposible), pero cierra esas ventanas.
Por lo general, aquí, lo mejor que podemos hacer es descubrir el problema lo antes posible, donde se produce lo más detallado posible (para reducir nuestra lista de sospechosos), y solucionar el problema lo antes posible después de que se informe.
En este caso, el registro puede ser un salvavidas. Para este tipo de campos, puede crear estos registros técnicos de spam que nadie leería nunca. A menudo relevante es solo la última línea registrada en el registro antes de que el usuario se enfrentara a un bloqueo debido a una falla del controlador, por ejemplo, puede escribir un proceso externo o enganchar que supervisa los bloqueos y luego muestra la última línea del registro que los usuarios pueden copiar y pegarle, por ejemplo, además de un volcado por caída.
Dado que esto a menudo necesita información granular y muchas de las áreas más susceptibles en el código a estos problemas de hardware / plataforma / controlador son críticos para el rendimiento, existe este problema incómodo en el que el registro puede estar ocurriendo a una frecuencia tan frecuente que en realidad se ralentizará abajo el software
Un truco útil en este caso es confiar en el supuesto de que algo ejecutado una vez se ejecutará con éxito la segunda, tercera vez, etc. Esta no es la suposición más sólida, pero a menudo es "lo suficientemente buena" (e infinitamente mejor que nada) . Con eso, puede usar un poco de estado externo para realizar un seguimiento de cuándo ya se ha registrado algo y omitir los intentos posteriores de registro para aquellos casos realmente granulares en los que el código se invocará repetidamente en un bucle.
De todos modos, espero que esto ayude. Me he encontrado con este tipo de tentación en el pasado y tengo un poco de paranoia en torno a la codificación de GPU (GPGPU y sombreadores) como resultado de algunas experiencias pasadas entre mí y mi equipo (a veces solo ver a otros miembros del equipo lidiar con esto realmente tarde y después del lanzamiento me dieron escalofríos, como algunos problemas técnicos de ATI en un modelo específico de Radeon que se bloqueaba al generar líneas antialias, que luego se informaron y se marcaron como un problema conocido con solo una solución alternativa disponible).
El registro fue lo que nos salvó el trasero allí, permitiéndonos ver a menudo el problema en esa máquina prototipo oscura 10,001 con una GPU incorporada de la que nunca habíamos oído hablar, con la última línea de código que inmediatamente nos permitió detectar exactamente dónde estaba la falla a 2 o 3 líneas de código como sospechosas, por ejemplo, si está dentro de un sombreador elaborado, somos una especie de SOL ya que no podemos iniciar sesión dentro de un sombreador GPU, pero al menos podemos usar el registro para ver qué sombreador tuvo el problema de inmediato para comenzar la investigación.