Análisis de Código. Asegurar la calidad del código, un primer paso hacía la mejora de la calidad global del software



Documentos relacionados
GESTIÓN DE LA FACTURACIÓN TELEFÓNICA GERENCIA DE INFORMÁTICA DE LA SEGURIDAD SOCIAL

TERMOGRAFIA. INTRODUCCIÓN

Módulo: ENTORNOS DE DESARROLLO C.F.G.S. : DESARROLLO DE APLICACIONES WEB. Marca el profesor que tengas asignado: Fran [ ] José Luis [ ]

9/9/2009. Introducción. Introducción. Introducción. Métodos Secuenciales. Métodos Secuenciales. Pruebas y La Vida del Ciclo de Desarrollo del Software

Fundamentos de programación JAVA

Figure 12-1: Phase D: Technology Architecture

Descubra el poder de sus datos Novedades de IDEA 10. Descubra Visualice Asesore

El primer módulo del curso. Esperamos que te guste.

PLIEGO DE CONDICIONES TÉCNICAS QUE HAN DE REGIR EL CONTRATO DE ADECUACIÓN A LA LEY ORGÁNICA DE PROTECCIÓN DE DATOS DE CARÁCTER PERSONAL DE LOS

ACTIVIDAD PRÁCTICA: LAS FRACCIONES, LOS DECIMALES Y LOS PORCENTAJES Y SU PAPEL EN UN CONSUMO RESPONSABLE

Pruebas de Software. Agenda. Pruebas de Programas Los Niveles de Prueba Diseño de Casos de Prueba

Fundamentos de Programación Visual Basic

Proceso de Desarrollo de SW

Fundamentos de programación C++

Fundamentos de Pruebas de Software

06. GESTIÓN DE PROCESOS Y RECURSOS

Información General. Al finalizar el curso el alumno será capaz de:

Bahía Software; innovación y desarrollo al servicio de la gestión sanitaria

[Informes Activos-Manual de Usuario]

UNT INGENIERIA INDUSTRIAL INGENIERIA DE SOFTWARE

UNIDAD 5. calc OPCIONES AVANZADAS. CURSO: LibreOffice

PLANIFICACION DE UN PROYECTO DE SOFTWARE

Consultoría y Servicios en Tecnología de la Información

ALGORITMO. Podemos encontrar muchas definiciones de algoritmo en los textos de programación, todas ellas muy similares:

Análisis de Robustez. UNIDAD 7 Análisis y Diseño de Sistemas de Información

Tema 20: La importancia de realizar pruebas

ANEXO F Metodología de análisis de riesgos

Procesamiento de documentos XML.

GRADO EN INGENIERÍA INFORMÁTICA

Modelos de calidad. Técnicas de prueba del software Estrategias de prueba del software. Calidad del software. Factores de Calidad. producto.

Pruebas de Software. Escuela de Ingeniería de Sistemas y Computación Desarrollo de Software II Agosto Diciembre 2008

Arquitectura e Integración de Sistemas Software. Proyecto: Gestión de Almacenes de Libros

ESDUDIO DE CASO. Eficiencia Energética Buaiz Alimentos 1 CARACTERÍSTICAS DE LA EMPRESA

Verificación de sistemas

CA Clarity PPM para la automatización de servicios profesionales

XML Bien Formado. <nombre> José </nombre> y también puede ser un elemento el siguiente:

Calidad: Grado en que un conjunto de características inherentes cumple con los requisitos

DIAGRAMA CAUSA-EFECTO: herramienta de control y mejora de procesos

Ingeniería de Software: Y eso qué es?

Toda nuestra Experiencia a tu alcance

ID technological solutions

Informe de Seguimiento. Graduado o Graduada en Ingeniería Eléctrica. Universidad de Córdoba

Los arrancadores suaves SIRIUS 3RW30 son compactos, tienen un cableado sencillo y una rápida puesta en marcha

Implantación de Administración de Personal y Nómina con SAP HCM

TEMA 4. PROCESO UNIFICADO

LEVANTAMIENTO DE PROCEDIMIENTOS. Nombre del proceso origen: MEJORA CONTINUA Nombre del procedimiento: ACCIONES CORRECTIVAS, PREVENTIVAS Y DE MEJORA

Su especialista para almacenes frigoríficos

Este proyecto se sitúa dentro del marco de los sistemas avanzados de tratamiento de imágenes aplicados para la seguridad.

SEGUIMIENTO, MEDICION, ANALISIS Y EVALUACION

CLASE # 6 PRUEBAS FUNCIONALES USANDO TÉCNICAS DE CAJA NEGRA PARTE I


Tema 1: PROCESADORES SEGMENTADOS

Desarrollo ágil basado en pruebas de aceptación

Boletín de Asesoría Gerencial* Análisis y gestión de riesgos laborales

Auditores Internos en ISO/TS 16949: 2009

INFORME DE SEGUIMIENTO DEL CURSO DEL GRADO EN FISIOTERAPIA DE LA UNIVERSIDAD DE ZARAGOZA

Clase de auditoría Informática

Especialista TIC en Programación con Microsoft Visual Basic 2010 (Online)

Informe final de evaluación del seguimiento de la implantación de títulos oficiales GRADO EN PERIODISMO. Facultad de Ciencias de la Comunicación UCJC

Guía rápida de B-kin CRM

Planificación, Administración n de Bases de Datos. Bases de Datos. Ciclo de Vida de los Sistemas de Información. Crisis del Software.

Aspectos avanzados de arquitectura de computadoras Multiprocesadores (I) Facultad de Ingeniería - Universidad de la República Curso 2017

5.-CONCEPTOS FUNDAMENTALES EN LA SIMULACIÓN CON ARENA 7.01

CUADRO DE MANDO PARA LA GESTIÓN INTEGRADA

PROCEDIMIENTO PARA LA DESCARGA Y USO DE LA APLICACIÓN API - MOVIL

TEMA 6. SISTEMAS DE GESTIÓN DE LA CALIDAD: NORMAS ISO 9000

PRUEBAS FUNCIONALES USANDO TÉCNICAS DE CAJA NEGRA PARTE I

CONTRATO DE SERVICIOS

Verificación. Taller de Programación

SaciLab / SaciWeb CARACTERÍSTICAS TÉCNICAS Y FUNCIONALES

ekon Platform 2015 La plataforma de desarrollo totalmente adaptable In business for people.

5S físicas y digitales para la mejora de la productividad y la seguridad en todos los ámbitos 22 SEMANA EUROPEA DE LA GESTIÓN AVANZADA

CAPÍTULO III CASE INTEGRADOS

Oscar Martínez Álvaro

Modelo de Desarrollo en Capas para VB. NET

PLIEGO DE CONDICIONES DEL SUMINISTRO DE LICENCIAS, MANTENIMIENTO Y SOPORTE DE LA PLATAFORMA DE VIRTUALIZACIÓN.

Trabajo final de carrera Sistema de gestión de información de jugadores de baloncesto

Multimedia Educativo

Microsoft Word. Microsoft Word 2013 SALOMÓN CCANCE. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Desarrollo de editores textuales con Xtext

Premios CONTRATOS Y PROYECTOS SMART CITIES 2014

GE Healthcare. Sistema de análisis de ECG MAC 2000 Optimizado para su hospital

Cap.2. Kernel Sistemas Operativos - Viña del Mar.

Experto en Desarrollo de Aplicaciones Java con Spring

Este curso explora las oportunidades de desarrollo con el producto de Microsoft SharePoint Server 2013.

Programación de la lógica: Se programa el funcionamiento de la aplicación, haciendo uso de los diagramas de clases y de actividad.

Normas ISO 9000 en el proceso de certificación de aeródromos

Julio Hoja de novedades. Paquete 707 / Julio 2017 * * PANDORA FMS 7.0 NG 707. pandorafms.com

Lección 1. Estructura de las Tablas Bases de Datos para la creación de informes de Tabla Dinámica.

Capítulo 6. Pruebas. Aunque no hay una clasificación oficial o formal acerca de los diversos tipos de pruebas de

MODELO DE IMPLEMENTACIÒN DE SISTEMA DE ADMINISTRACIÒN DE RIESGO EPS SOS S.A.

Sage CRM Más cerca de tus clientes

Utilización de casos de uso en el. Víctor Merino Tool

Los principios de la política de riesgos de las actividades del Banco se basan en

MAGIC DRAW UML. Índice. José Ignacio Colmenero González Carlos Pérez Herrero José Luis Bravo Sánchez

Mejora de la gestión de la Incapacidad Temporal

Suministro e instalación de una nueva Plataforma AntiSpam en la DSTI de ADIF.

Integridad de datos 24 DE AGOSTO DEL 2016

EXPERTO EN MICROSOFT EXCEL 2013, VBA, BUSINESS INTELLIGENCE, KPI, DAX Y CUADROS DE MANDO

Transcripción:

Análisis de Código Asegurar la calidad del código, un primer paso hacía la mejora de la calidad global del software

Indice Por qué el análisis de código? Errores comunes en Ingeniería de Software Tipos de análisis de código Análisis Estático Análisis Dinámico Análisis desde el punto de vista de: Calidad Capacidad Seguridad Herramientas Casos Prácticos

Razones para el análisis de código El análisis de código es un medio que nos permite mejorar, no es un fin en si mismo. Permite validar las reglas metodológicas aplicadas en el proyecto. La detección de incidencias, permiten la adecuada localización de errores que pasan desapercibidos en el ciclo de desarrollo. Partiendo de una metodología adecuada, y usando el análisis de código como un apoyo a la calidad. El análisis de código, facilita con una minima inversión de tiempo, la localización de "defectos" permitiendo un alto grado de retorno de inversión. El análisis manual, por su coste deberá ser abordado en fases críticas de proyectos de desarrollo de software o en proyectos críticos. El análisis automático, puede ser realizado con una mayor periodicidad ya que no requiere de intervención y puede ser programado y repetido tantas veces como sea necesario, dotando el proyecto de un mecanismo ágil de validación y certificación.

Errores comunes en Ingeniería de Software Existen algunos errores, comunes en ingeniería de software, que sugieren abordar el análisis de código: Existe la creencia de que cualquier persona que pueda escribir software puede escribir buen software. También existe una creencia errónea de que la ejecución de algunos casos de prueba representativos indica que el software es "correcto" o adecuado. No valorar el impacto de los cambios al software y, en particular permitir cambios innecesarios, sin control. No valor el impacto del cambio en su futuro y validez, no valorar su correcto funcionamiento. No entender que la realización de un buen diseño es más importante que la producción de grandes cantidades de código. Que el objetivo de la ingeniería de software es no sólo para producir el código, sino también para producir soluciones fiables.

Tipos de análisis de código Se han establecido dos categorías: Analisis Estático El análisis estático de código consiste en el análisis de un sistema informático mediante la inspección directa de la fuente u objeto codificada que describe el sistema con respecto a la semántica del código (sin ejecución del/los programa/s, como en el análisis dinámico). La experiencia demuestra que muchos de los planteamientos que la industria considera demasiado costoso (como la especificación formal y el análisis estático de código) en realidad puede reducir y reducen el coste total. Análisis Dinámico Consiste en el análisis de las aplicaciones informáticas, mediante la ejecución de los programas en un procesador real o virtual. Para el análisis dinámico pueda ser eficaz, deberá ser ejecutado con un conjunto de entradas de prueba suficientes para producir un comportamiento interesante. Permite la obtención de métricas tales, como cobertura de código, niveles de ejecución.

Análisis desde diferentes puntos de vista Calidad Asegurar el cumplimiento de los estándares del proyecto. Asegurar el cumplimiento de los estándares de desarrollo, que permiten asegurar el correcto cumplimiento de las métricas del proyecto. Identificación de áreas problemáticas Identificación de problemas de gestión Capacidad Dimensionamiento de sistemas Rendimiento de sistemas bajo desarrollo Rendimiento de capacidades humanas Código de terceros Seguridad Es el método más adecuado de encontrar los defectos de seguridad, siendo el primer beneficio del análisis del código. Permite identificar necesidades de análisis detallados, justificando las inversiones. Debería realizarse como auditoria, de forma periódica. Permite validar la adhesión a los estándares.

Como proceder con el Análisis de Código Existen diferentes mecanismos y técnicas, algunas de las cuales vamos a comentar en esta presentación. Principalmente independientemente de la técnica debemos centrarnos en: Reducir los falsos positivos Identificar y parametrizar en base al ámbito de aplicación Realimentar las herramientas, procesos con los resultados Proceso de cambio continuo, evolución.

Ámbito de aplicación Áreas de análisis, en revisión manual de código: Aspectos del diseño de la API Otros aspectos de la arquitectura (como la elección de enlaces de cliente y la herencia ) La elección de estructuras de datos y algoritmos Estilo de Programación Comentarios y documentación La adherencia a prácticas de codificación oficial

Ámbito de aplicación La elección de las abstracciones es una cuestión clave en la programación con diseño orientado a objetos. Los desarrolladores deben discutir si una cierta clase está realmente justificada o deba pasar sus funcionalidades a otra, o, por el contrario, si una potencial clase se ha perdido. El diseño de las API o interfaces del software es esencial para su uso por otros elementos de software y permitir su reutilización. Debemos velar por el cumplimiento del DISEÑO del API y de forma sistemática hacer un fuerte énfasis en la coherencia del software como un todo.

Combinar Análisis Estático y Dinámico La solidez y la integridad son dos de las principales preocupaciones de una herramienta de análisis estático para encontrar defectos en el software. Un análisis comparativo estático del programa a través de todos los caminos no siempre es posible, especialmente para un software complejo. Además, unas pruebas exhaustivas para detectar todos los errores son imposibles de realizar. A continuación se describen una técnica que utiliza los datos de cobertura de las pruebas para eliminar rutas de prueba y luego analiza la forma estática el resto del código. Mediante la reducción de los caminos de análisis se permite realizar un análisis completo mediante prueba estática, de esa forma podemos realizar un análisis más detallado de un conjuto reducido de código, mejorando así la eficacia.

Combinar Análisis Estático y Dinámico Una aproximación interesante al análisis de código parte de la combinación de ambos métodos, permitiendo una reducción de los tiempos de análisis y mejorando: Los falsos negativos El foco del análisis en las áreas de riesgo Partiendo de un análisis dinámico establecemos un valor mínimo de cobertura (umbral), que nos indique que por debajo de ese umbral nos encontramos en un área de riesgo. Identificadas las partes del programa con áreas de riesgo procedemos a realizar un análisis estático de las mismas. El foco del análisis se centra en las áreas del código que no se han cubierto con el análisis dinámico, y con el conjunto de entradas del mismo.

Combinar Análisis Estático y Dinámico Se pueden analizar mejor los caminos con poca posibilidad de test. El esfuerzo de la prueba es aprovechado para un mejor análisis estático. El tiempo de ejecución de análisis estático se reduce. El número de alertas emitidas, así como el ruido se reduce permitiendo detectar mejor errores graves, Esto redunda en que el esfuerzo de test sea más útil, práctico y focalizado.

Detección mediante patrones de Error Esta técnica en términos generales, consiste en crear patrones para cada tipo de defecto, que se pueden agrupar en las siguientes categorías: La corrección de un único thread La correcta sincronización entre threads Problemas de rendimiento Problemas de Seguridad Problemas de vulnerabilidad Definiendo y cargando patrones de error, podemos identificar estos errores en grandes conjuntos de código, donde participan múltiples desarrolladores.

Herramientas Análisis Estático Data Flow Metrics Análisis Dinámico Test automation, test cases interaction and evaluation Peer code Review process automation preparation, notification, and tracking Unit testing unit test creation, execution, optimization, and maintenance Runtime error detection memory access errors, leaks, corruptions, and more

Herramientas Fundamentos básicos de las herramientas de análisis Diseño inicial partiendo de experiencia en campo Adaptación de las herramientas mediante parametrización Énfasis en el análisis de alarmas Estructura de los analizadores Fase de preprocesado Fase de análisis Interacción en la estructura general Interacción en las primitivas Aproximación a las reglas. Dominios Dominio basado en Memoria Dominio basado en Aritmética Dominio basado en Algorítmica

Herramientas LLVM - CLANG: Partiendo de las herramientas LLVM y CLANG en su versión 2.0 (trunk 104xxx) Permiten análisis estático de código en tiempo de compilación. CCCC-Prime Versión modificada que permite la generación de tabla de dependencias para: análisis gráficas trazabilidad API-sanity-autotest Versión modificada que permite la generación de test automáticos partiendo de las librerías, generando las pruebas de validación y entrada. Creación de pruebas unitarias automáticas. OSEE Versión modificada, permite la gestión de pruebas, generación y seguimiento de pruebas, análisis estático.

Casos prácticos Ejemplo de análisis estático Un análisis con una versión personalizada de llvm-clang nos remite el siguiente problema: myapertura(remoteipaddress); warning invalid conversion from char to bool El valor de remoteipaddress ("197.12.1.1") es tomado como bool ( "1" ) en vez de como una cadena. Este error ha motivado que se dedique una semana/hombre a identificar por que un sistema no se comportaba correctamente al realizar un cambio de rango de direcciones. Coste 300 día *5 días= 1500.

Casos prácticos En un gran proyecto, la funcionalidad del módulo de informes, imprescindible para el usuario, se retrasaba por que el acceso al módulo se hacia muy lento. En Desarrollo y pruebas este problema no se detectaba. Un análisis visual del código, peer-review, identifico el problema, el acceso se realizaba validando los usuarios de forma secuencial, en pruebas el listado de usuarios contenía 10 filas, en producción 20.000. El diseño no contemplaba esta circunstancia y el acceso se realizaba de forma secuencial en un fichero de texto plano. El análisis visual llevó una hora de trabajo, el tiempo invertido anteriormente fue el equivalente a 12 meses/hombre.

Contacto Roberto Cruz Pérez roberto.cruz@sogeti.com Parque Empresarial Las Mercedes Campezo, 2 Edif. 7 2ª Planta 28022 MADRID