X
BLOG

Preparación para la portabilidad a plataformas de 64 bits

Preparación para la portabilidad a plataformas de 64 bits Tiempo de leer: 3 minutos
Al encontrar y corregir errores de memoria C / C ++ antes de realizar la migración a 64 bits, puede reducir el riesgo de fallas en la nueva plataforma y arquitectura, optimizar el proceso de transferencia y hacer que la aplicación original sea más sólida y confiable.

Este es un proceso que puede aplicar para preparar su solicitud para el proceso de transferencia de 64 bits:

  1. Realizar prueba de mutación a través de la detección de errores de memoria en tiempo de ejecución
  2. Utilización de análisis estático para identificar código propenso a errores y no portátil
  3. Repita la detección de errores de memoria en tiempo de ejecución
  4. Realizar examen de la unidad (Opcional)

Paso 1: realizar pruebas de mutación mediante la detección de errores de memoria en tiempo de ejecución

Antes de comenzar a realizar la migración, debe eliminar de su código original los problemas que lo acosarán en el procesador de 64 bits; por ejemplo, corrupción de memoria y pérdidas de memoria. Una de las formas más efectivas de exponer los tipos de problemas de punteros y enteros que causarán problemas en los procesadores de 64 bits es aprovechar las pruebas de mutación para la detección de errores de memoria en tiempo de ejecución.

Tecnologías de detección de errores de memoria en tiempo de ejecución como Parasoft Insure ++ le permiten aprovechar las técnicas de las pruebas de mutación tradicionales para descubrir ambigüedades que son difíciles de detectar a través de otros métodos o herramientas. Mientras que las pruebas de mutación tradicionales intentan crear mutantes "defectuosos" para crear un conjunto de pruebas más efectivo, las pruebas de mutación para la detección de errores de memoria en tiempo de ejecución crean y ejecutan lo que deberían ser mutantes funcionalmente equivalentes del código fuente bajo prueba.

Cuando uno de estos mutantes funciona de manera diferente al programa original, indica que la funcionalidad del código se basa en suposiciones implícitas que no siempre se pueden satisfacer durante la ejecución. Si un mutante hace que el programa se bloquee o encuentre otros problemas graves, es una señal de que cuando no se cumplen las suposiciones, se producirán errores graves en el tiempo de ejecución.

En C ++, este proceso de creación y ejecución de mutantes equivalentes puede descubrir:

  • Falta de constructores de copias o constructores de copias incorrectos.
  • Constructores faltantes o incorrectos.
  • Orden incorrecto de inicialización del código.
  • Problemas con el funcionamiento de los punteros.
  • Dependencia de un comportamiento indefinido como el orden de evaluación.

Paso 2: utilice el análisis estático para identificar código propenso a errores y no portátil

Después de limpiar los errores más críticos expuestos por las pruebas de mutación, use un herramienta de análisis estático para identificar el código que probablemente cause problemas cuando se transfiera a la nueva plataforma / arquitectura. Los analizadores de código estático utilizan una interfaz similar a un compilador para construir un modelo sintáctico y semántico del software. Luego, el modelo sintáctico se analiza contra un conjunto de reglas o "verificadores" para ver si el código está en violación. Estos verificadores utilizan algoritmos de coincidencia de patrones para detectar errores como el uso deficiente de construcciones del lenguaje, el uso de funciones inseguras y detectar prácticas de codificación deficientes que dificultan la portabilidad (que se tratará en mi próximo post) y otras violaciones de las pautas de codificación.

Los verificadores más sofisticados emplean análisis semántico que utilizan datos y flujo de control para detectar errores complejos y vulnerabilidades de seguridad. Para hacer esto, el analizador estático construye un modelo de ejecución del software, considera las posibles rutas a través del código y evalúa el uso de los datos a medida que fluyen desde la fuente (por ejemplo, la entrada del usuario) hasta su destino (por ejemplo, una llamada a la API, como una llamada al sistema ). El análisis de cada una de las posibles condiciones y rutas llevaría demasiado tiempo, por lo que el analizador utiliza heurística para detectar las rutas más probables de evaluación. Los tipos de errores detectados por estos verificadores incluyen deferencia de puntero nulo, desbordamientos de búfer y vulnerabilidades de seguridad como comandos e inyecciones de SQL.

Hay dos tareas principales en las que centrarse al realizar un análisis estático:

  1. Identifique y corrija el código que probablemente resulte en un error en cualquier plataforma o arquitectura.
  2. Identifique y corrija el código que podría no portarse bien.

Primero, verifique los estándares de codificación C / C ++ respetados por la industria que identifican las construcciones de codificación, que probablemente causen problemas en cualquier plataforma o arquitectura. Al asegurarse de que el código cumpla con estos estándares de codificación, evita errores. Esto se traduce en menos depuración en la nueva plataforma o arquitectura y reduce la posibilidad de tener errores que eluden las pruebas y se abren camino en la versión.

Paso 3: Repita la detección de errores de memoria en tiempo de ejecución

Repita la detección de errores de memoria en tiempo de ejecución para verificar que las modificaciones que realizó al corregir análisis estático las infracciones no introdujeron ningún error de tiempo de ejecución.

Paso 4: realizar pruebas unitarias (opcional)

En este punto, es posible que desee realizar un paso más para asegurarse de que su código esté lo más libre de errores posible antes de transferirlo. Este paso adicional es examen de la unidad. Las pruebas unitarias se utilizan tradicionalmente para encontrar errores tan pronto como se completa cada unidad de aplicación. También puede ser beneficioso más adelante en el proceso de desarrollo porque, a nivel de unidad, es más fácil diseñar entradas que alcancen todas las funciones. A su vez, esto le ayuda a encontrar errores más rápidamente y a exponer errores que quizás no descubra con pruebas a nivel de aplicación.

En la revista próximo post Cubro el uso del análisis estático para ayudar a preparar el código para la migración a plataformas de 64 bits.

Obtenga el depurador de memoria definitivo para C y C ++

Escrito por

Parasoft

Las herramientas de prueba de software automatizadas líderes en la industria de Parasoft respaldan todo el proceso de desarrollo de software, desde que el desarrollador escribe la primera línea de código hasta las pruebas unitarias y funcionales, hasta las pruebas de rendimiento y seguridad, aprovechando los entornos de prueba simulados en el camino.

Reciba las últimas noticias y recursos sobre pruebas de software en su bandeja de entrada.

Prueba Parasoft