Diagrama para mostrar la responsabilidad del código

7

¿Alguien sabe cómo hacer un diagrama visual de las formas en que el flujo de control en el código pasa entre el código producido por diferentes grupos y cómo eso afecta la cantidad de código que debe escribirse / revisarse / probarse cuidadosamente para que las propiedades del sistema se mantengan? ?

Lo que estoy tratando de ayudar a las personas a visualizar son argumentos de la forma:

  1. Para que se mantenga la propiedad P, n d los desarrolladores tienen que escribir el código de la aplicación, C a , sin ciertos tipos de errores, y n m los mantenedores deben asegurarse de que el código continúe sin tener este tipo de errores durante la vida útil del proyecto.
  2. Podríamos reducir la tasa de error educando a n d desarrolladores y n m mantenedores.
  3. Para que estemos seguros de que la propiedad es válida, n s los especialistas todavía necesitan probar o verificar | C a | líneas de código y continúe probando / verificando los cambios por n m mantenedores.
  4. Alternativamente, podríamos estar seguros de que P se mantiene si todas las rutas de código que podrían violar P pasaron por el código de la herramienta, C t , escrito por nuestros especialistas.
  5. En nuestro caso,
    • las suites de prueba por sí solas no pueden dar confianza de que P se mantenga
    • n d ≫ n s
    • n m > n s
    • | C a | ≫ | C t |
    por lo que escribir y mantener C t es económico, libera a nuestros desarrolladores para preocuparse por otras cosas y reduce el compromiso de educación continua de nuestros especialistas.

o esas condiciones no se cumplen, por lo que es preferible centrarse en la educación y las pruebas.

Ejemplo 1

Como ejemplo concreto, supongamos que queremos asegurarnos de que nuestro servicio web solo produzca resultados JSON válidos.

Nuestro servicio web proporciona varios operadores de consulta y mutación que se pueden componer de formas interesantes.

Podríamos tratar de educar a todos los que mantienen esas operaciones sobre la sintaxis de JSON, la importancia de la conformidad y las bibliotecas disponibles para que cuando escriban en un búfer de salida, cada secuencia posible de apéndices resulte en JSON sintácticamente válido.

Como alternativa, no exponemos un controlador de flujo de salida al código de la aplicación, y en cambio exponemos un sumidero JSON para que cada ruta de código que escribe una respuesta se canalice a través de un sumidero JSON escrito y mantenido por un especialista que sabe JSON sintaxis y puede usar bibliotecas bien escritas para producir solo resultados válidos.

Ejemplo 2

Debemos asegurarnos de que un servicio que recibe una URL de una fuente no confiable e intente recuperar su contenido no termine revelando archivos confidenciales del sistema de archivos, como file:///etc/passwd .

Si existe una única forma estándar que un desarrollador familiarizado con las bibliotecas de lenguaje de la aplicación usaría para obtener las URL, que tiene el acceso al sistema de archivos desactivado de forma predeterminada, simplemente informará a los desarrolladores sobre el mecanismo estándar y probará el sondeo de archivos. falla para algunas entradas, probablemente será suficiente.

    
pregunta Mike Samuel 12.06.2014 - 20:02

1 respuesta

1

Puede haber mejores formas de hacer esto, pero mi primera toma sería usar algunos diagramas de secuencia y coloque límites (como alt o opt) alrededor de las llamadas en diferentes fuentes de código. La mayoría de las herramientas UML que he usado te permitirán crear límites arbitrarios como alt, opt, loop. Así que puedes tener "oss" "lib1" "lib2" etc

Una vez que tenga la pila de llamadas segregada en diferentes grupos, puede anotar las secciones con métricas de código como el número de líneas de código, o la complejidad ciclomática en ppt, de modo que pueda mostrar a quien necesite mostrar dónde está la asignación del código.

    
respondido por el uscmule 12.07.2017 - 22:54

Lea otras preguntas en las etiquetas