Complejidad en el Software

(Abstracto del Documento Property-based Software Engineering Measurement)

Indice

Representación de un sistema y de sus módulos

Definición general de complejidad

Definición formal de complejidad

Función Complejidad(S) aplicada a un sistema de telecomunicaciones públicas

Referencias mencionadas en esta página

En este trabajo se expone una propuesta de métricas de software basadas en propiedades mateáticas. su intención es el proporcionar una medida cuantitativa a varios conceptos de software, entre ellos la Complejidad.

Representación de un sistema y de sus módulos

En este trabajo la siguiente es la representación de un sistema computacional:

Un sistema S es representado como un par <E,R>, donde E representa el conjunto de elementos de S, y donde R representa el conjunto de las relaciones que existen entre los elementos de S

Dado un sistema S = , un sistema m = será un módulo de S si y solo si:

Em pertenece a E     y ademas:

Rm pertenece a R.

Por ejemplo: E puede ser definido como un conjunto de estatutos de un código y R el conjunto de flujos de control entre estos estatutos de código.

La siguiente figura define gráficamente lo que nosotros entendemos como un sistema y sus módulos

Comlejidad-sistema.jpg (32812 bytes)

Un Sistema S como el conjunto de sus elementos E y sus relaciones R. Organizado en subsistemas o Módulos M

Introducción a la complejidad de el software.

La Complejidad es un concepto que es considerado extremadamente relevante para un sistema computacional, el cual ha sido abordado por varios investigadores. Es importante hacer notar que la definición de complejidad usada en este trabajo es intencionalmente mas restrictiva que la usada por otros investigadores [CSM79]. Esto nos permite proporcionar una definición de la complejidad de un artefacto a travéz de un conjunto definido de propiedades.

La Complejidad se define como una propiedad intrínseca de los artefáctos y no toma en cuenta la percepción de un observador externo. Nuestra intencion es claramente diferente de la expuesta en Curtis et al [CSM79] en donde se mide la complejidad de el software por el impacto que este tenga en otros elementos (como por ejemplo en la Gente).

Definición general de complejidad

En nuestras definiciones esperamos que la complejidad sea:

No Negativa (Propiedad Complejidad.1)

Y Nula (Propiedad Complejidad.2) cuando no haya relaciones entre los elementos de un sistema.

Puede ser punto de discución que la complejidad no es nula cuando no hay relaciones entre los elementos de un sistema por que cada elemento tiene una complejidad propia. Sin embargo, el enfoque dado en este trabajo mide la complejidad de un sistema que depende de las relaciones entre sus elementos y no como una propiedad de un elemento aislado.

La Complejidad que un elemento aislado puede agregar a un sistema bien puede ser el resultado de las relaciones entre sus sub-elementos. Por ejemplo, en un sistema modular, cada módulo puede ser visto como un "componente de alto nivel" el cual encapsula "subelementos". Si queremos considerar el sistema como compuesto solamente de estos "componentes de alto nivel", no debemos "desempacar" estos elementos para medir su complejidad y solo tomar en cuenta las relaciones entre los componentes de alto nivel.

Pero si deseamos tomar en cuenta la complejidad que aporta cada componente al sistema entonces el sistema debe de ser visto como la suma de los componentes y subcomponentes. Así como las relaciones totales del sistema son la suma de las relaciones entre componentes de alto nivel mas la suma de las relaciones de los subcomponentes.

La Complejidad no debe de ser sensitiva a las convenciones para representar la dirección de los arcos que representan las relaciones entre sus componentes. (Propiedad Complejidad.3) Un sistema y las relaciones entre sus componentes no cambian si cambiamos la forma de representarlos. por lo tanto la complejidad tampoco debe cambiar con este respecto.

De igual manera:

La complejidad de un sistema S debe ser igual o mayor que la suma de las complejidades de cualquiera de sus modulos m aun cuando no hay relaciones entre estos modulos pero estos comparten componentes. (Propiedad Complejidad.4)

Esto se explica porque al juntar módulos implícitamente genera más relaciones entre las entidades de estos módulos. (Relaciones de "definición" o "Uso" de los componentes unidos son creadas al juntar dos módulos de un sistema). Como consecuencia la propiedad Complejidad.4 tiene tamien otra forma de enunciarse.

La complejidad de un sistema nunca disminuirá cuando las relaciones entre sus componentes aumenten. (Propiedad Complejidad.4)

Se ha argumentado que no siempre es cierto que entre mas relaciones mayor la copmplejidad de el sistema. En algunos casos, el agregar relaciones entre componentes puede ayudar a entender mas al sistema. esto es desde luego cierto, pero lo que se mejora es el entendimiento de el sistema (esto es, la percepción de el sistema hecha por un agente externo, como la gente), y no la complejidad. La complejidad es solo un factor a aplicar para determinar el entendimiento de el sistema y puede ayudar a pronosticarlo, pero no es el único elemento que se deba de usar para medir el entendimiento de el sistema.

Por último:

La Complejidad de un sistema que se conforma de módulos disjuntos (que no comparten ni relacion ni componentes uno con otro) será igual a la suma de las complejidades de dichos módulos (propiedad Complejidad.5). Consistente con la propiedad Complejidad.4 si un sistema es conformado por dos módulos pero estos no son unidos (esto es que aun sean disjuntos) entonces, ninguna nueva relación es generada entre los modulos disjuntos.

Estas propiedades que se definen para la medición de la complejidad son, hasta cierto punto, una generalización de las propiedades que varios autores han ya proveido en la literatura. (Ref [LJS91, TZ92, W88] para la complejidad en el software, usualmente usadas para graficas de flujo de control. Nosotros las hemos generalizado porque de esta manera podremos usarlas en artefactos diferentes al código de software o a otras abstracciones diferentes a los flujos de control.

Definición formal de complejidad

La Complejidad de un sistema S está dada por la función COMPLEJIDAD(S) la cual está caracterizada por las siguientes propiedades.

Propiedad Complejidad.1: No Negatividad

La Complejidad de un sistema S = es no-negativa

comple-prop1.gif (1284 bytes)                                                                                                    

Propiedad Complejidad.2: Valor Nulo

La Complejidad de un sistema S = es nulo si R esta vacia.

comple-prop2.gif (1314 bytes)                                                                                                                    

Propiedad Complejidad.3: Symetría

La Complejidad de un sistema S = no depende de la convencion selecionada para representar las relaciones entre sus elementos

comple-prop3.gif (1825 bytes)

Propiedad Complejidad.4  Monotonicidad de los módulos

La Complejidad de un sistema S =   Nunca será menor que la suma de las complejidades de cualquiera de dos de sus módulos con ninguna relación entre ellos (aunque éstos compartan elementos).

comple-prop4.gif (3023 bytes)

Por ejemplo: la complejidad de el sistema S mostrado en la figura siguiente es mayor que la complejidad de los modulos m1 y m2

comple-prop4-fig.gif (7918 bytes)

Ilustración de la propiedad complejidad.4

Propiedad Complejidad.5: Aditividad de modulos disjuntos

La Complejidad de un sistema S = Compuesta por los módulos disjuntos m1 y m2 es igual a la suma de las complejidades de dicos módulos

comple-prop5.gif (2547 bytes)

Función Complejidad(S) aplicada a un sistema de telecomunicaciones públicas

El MSC de el sistema de telecomunicaciones móvil descrito en este trabajo  consta en promedio de 900 Módulos. estos Módulos tienen en promedio 100 relaciones con otros módulos. Así que el cálculo superficial de la complejidad de el MSC es:

 

COMPLEJIDAD (S) = (900,(100*900)) = 90000

 

El resultado de 90000 es un indicativo de que la complejidad en un nodo de telecomunicaciones móvil es bastante alta.  

 

Referencias mencionadas en esta página

 

[CSM79]

B. Curtis, S. Sheppard, P. Milliman, M. Borst, T. Love, "Measuring the
Psychological Complexity of Software Maintenance Task with the Halstead and
McCabe Metrics," IEEE Trans. Software Eng., vol. 5, no. 2, pp. 96-104, March
1979.

[LJS91]

K. B. Lakshmanian, S. Jayaprakash, and P. K. Sinha, "Properties of Control-Flow
Complexity Measures," IEEE Trans. Software Eng., vol. 17, no. 12, pp. 1289-1295,
Dec. 1991.

[TZ92]

J. Tian and M. V. Zelkowitz, "A Formal Program Complexity Model and Its
Application," J. Syst. Software, vol. 17, pp. 253-266, 1992.

[W88]

E. J. Weyuker, "Evaluating Software Complexity Measures," IEEE Trans. Software
Eng., vol. 14, no. 9, pp. 1357-1365, Sept. 1988.

title.jpg (99270 bytes)

 

 

 

 

 

 

 

   

 

 

 

 

 

 

 

 

 

 

 

1