i
i
i
i
Universidad de Buenos Aires
Facultad De Ingenier´ıa
Introducci´
on a la calidad de c´
odigo
[75.40] Algoritmos y Programaci´
on I
2do Cuatrimestre 2010
C´atedra: Ing. Pablo Guarna
´
Indice
1. Introducci´on 2
2. ¿Qu´e es la calidad de software? 2
3. Calidad de C´odigo 3
3.1. Legibilidad del c´odigo . . . 3
3.2. Nombres de variables . . . 4
3.3. Nombres de funciones/procedimientos . . . 5
3.3.1. Cantidad de par´ametros . . . 5
i
i
i
i
1.
Introducci´
on
Este documento est´a orientado para que los alumnos de [75.40] Algoritmos y Programaci´on I, C´atedra: Ing. Pablo Guarna, comprendan el concepto de la calidad del c´odigo al momento de dise˜nar un software.
Lo cual les permitir´a generar c´odigos con mayor claridad, mas eficientes y mas adaptados para una futura mejora.
2.
¿Qu´
e es la calidad de software?
Quiz´as uno puede estar pensando que la calidad de el software es pr´acticamente el desempe˜no del mismo al momento de resolver cierto problema, o quiz´as la interfaz que tiene con el usuario. Si bien estos dos conceptos son correctos para definir la calidad de software, no quiere decir que sean los ´unicos.
Existen otros factores que definen la calidad de software. Estos factores son: Confiabilidad Facilidad de uso Seguridad Funcionalidad Oportunidad Costo Eficiencia en el desempe˜no Interoperabilidad Extensibilidad Reutilizaci´on Portabilidad Escalabilidad
En este documento no me voy a centrar en explicar todos los conceptos de calidad de software, sino mas bien me voy a centrar en la calidad de el c´odigo de un software.
Antes que nada quiero dejarles citado una frase: ((El c´odigo es el ´unico artefacto del desarrollo de software que siempre se va a construir))1
1Ing. Carlos Fontela. Profesor de las materias [75.07] Algoritmos y Programaci´on III y [75.47] Taller de Desarrollo de Proyectos II
3.
Calidad de C´
odigo
Vamos a ver algunos puntos importantes para la calidad de c´odigo
3.1.
Legibilidad del c´
odigo
La legibilidad del c´odigo es sumamente importante, ya que esto nos facilita en la b´usqueda de errores del mismo y una posible refactorizaci´on (o mejora).
Veamos el siguiente ejemplo:
Codigo1:Ingreso de notas a 10 alumnos
1 Program n o t a s a l u m ; 2 Uses c r t ; 3 Const ALUM=10; 4 Type t V e c t o r = a r r a y [ 1 . .ALUM] o f i n t e g e r; 5 Var Notas : t V e c t o r ; 6 P r o c e d u r e t o m a d a t o s (v a r v e c t o r : t V e c t o r ) ; 7 Var i : i n t e g e r; 8 Begin 9 For i :=1 t o ALUM do 10 Begin 11 W r i t e l n ( ’ I n g r e s e l a n o t a d e l alumno ’ , i , ’ de l a l i s t a ’ ) ; 12 Readln ( v e c t o r [ i ] ) ; 13 End; 14 W r i t e l n ( ’ Carga de d a t o s f i n a l i z a d a ’ ) ; 15 End; 16 P r o c e d u r e m u e s t r a d a t o s (v a r v e c t o r : t V e c t o r ) ; 17 Var i :i n t e g e r; 18 Begin 19 W r i t e l n( ’ Notas de l o s alumnos : ’ ) ; 20 For i :=1 t o ALUM do 21 W r i t e l n ( i : 3 , ’ : ’ , v e c t o r [ i ] ) ; 22 End; 23 Begin 24 C l r s c r ; 25 t o m a d a t o s ( Notas ) ; 26 w r i t e l n; 27 m u e s t r a d a t o s ( Notas ) ; 28 End.
Podemos apreciar que es muy desprolijo y ademas es muy poco claro, lo cual le quita legibilidad al mismo. Ahora veamos el mismo c´odigo, pero utilizando la tabulaci´on correspondiente:
Codigo1:Ingreso de notas a 10 alumnos
1 Program n o t a s a l u m ; 2 Uses c r t ; 3 Const ALUM=10; 4 Type t V e c t o r = a r r a y [ 1 . .ALUM] o f i n t e g e r; 5 Var Notas : t V e c t o r ; 6 7 P r o c e d u r e t o m a d a t o s (v a r v e c t o r : t V e c t o r ) ; 8 Var i : i n t e g e r; 9 Begin 10 For i :=1 t o ALUM do 11 Begin 12 W r i t e l n ( ’ I n g r e s e l a n o t a d e l alumno ’ , i , ’ de l a l i s t a ’ ) ; 13 Readln ( v e c t o r [ i ] ) ; 14 End; 15 W r i t e l n ( ’ Carga de d a t o s f i n a l i z a d a ’ ) ; 16 End; 17 18 P r o c e d u r e m u e s t r a d a t o s (v a r v e c t o r : t V e c t o r ) ; 19 Var i :i n t e g e r;
i i i i 20 Begin 21 W r i t e l n( ’ Notas de l o s alumnos : ’ ) ; 22 For i :=1 t o ALUM do 23 W r i t e l n ( i : 3 , ’ : ’ , v e c t o r [ i ] ) ; 24 End; 25 26 Begin {Programa P r i n c i p a l} 27 C l r s c r ; 28 t o m a d a t o s ( Notas ) ; 29 w r i t e l n; 30 m u e s t r a d a t o s ( Notas ) ; 31 End.
Se puede apreciar que el ´ultimo c´odigo es much´ısimo mas claro y much´ısimo mas f´acil para realizar un seguimiento en el caso de una mejora.
Tengan en mente esto siempre:El c´odigo se escribe una vez y se lee muchas veces.
3.2.
Nombres de variables
Los nombres de las variables tienen que ser claros y entendibles, ya que los mismos son utilizados para realizar infinitas operaciones. Pasemos a mostrar un ejemplo de lo que se dice:
Codigo2:Malos nombres de variables
1 Var
2 l p p : I n t e g e r; 3 d i s t a n c i a : R e a l; 4 T o t a l 1 : Long ; 5 T o t a l 2 : Byte;
Codigo2:Buenos Nombres de variables
1 Var
2 l i n e a s p o r p a g i n a : I n t e g e r; 3 D i s t a n c i a E n M e t r o s : R e a l; 4 Maximo : Long ;
5 Minimo : Byte;
Existe la excepci´on a las variables de iteraci´on en los ciclos:For, While y Repeat Until, como por ejemplo:
Codigo3:Buenos Nombres de variables para iteraci´on
1 Var
2 i , j , k : I n t e g e r; {v a r i a b l e s de i t e r a c i ´o n p a r a v a r i o s c i c l o s}
Tambi´en hay un standard para las variables booleanas, por ejemplo, si sabemos que las variables booleanas solo pueden almacenar 2 valores distintosTrue y False. Entonces el standard para elegir el nombre en una variable booleana es no darles un nombre negativo, o nombres pocos claros, ya que los mismos pueden prestar confusi´on al momento de la codificaci´on. Veamos un ejemplo:
Codigo4:Malos Nombres para variables booleanas
1 Var
2 No Encontrado : B o o l e a n; 3 N o E r r o r : B o o l e a n; 4 No Terminado : B o o l e a n; 5 Sexo : B o o l e a n;
3.3.
Nombres de funciones/procedimientos
Los nombres de las funciones/procedimientos son muy importantes, ya que el mismo siempre describe que es lo que hace dicha funci´on/procedimiento, pero de una forma tal, que s´olo expresa la intenci´on (o el qu´e) y no detalles de imple-mentaci´on (el c´omo). Otro buen punto es no mezclar idiomas en los nombres de las funciones/procedimientos, es decir, mezclar el ingl´es con el espa˜nol.
Veamos algunos ejemplos de malos nombres para funciones/procedimientos:
Codigo5:Malos Nombres para funciones/procedimientos
1 F u n c t i o n b u s c a r E l i m i n a r ( p o s i c i o n : I n t e g e r) : I n t e g e r; 2 P r o c e d u r e f i n d E m p l e a d o D e l e t e ( p o s i c i o n : I n t e g e r) ; 3 P r o c e d u r e b e e ( ) ;
4 P r o c e d u r e buscEmpEl ( ) ;
Codigo5:Buenos Nombres para funciones/procedimientos
1 F u n c t i o n busquedaRapida ( p o s i c i o n : I n t e g e r) : I n t e g e r; 2 P r o c e d u r e e l i m i n a r E m p l e a d o ( p o s i c i o n : I n t e g e r) ;
3 F u n c t i o n o b t e n e r S a l d o ( una Cuent aBanc aria : t r C u e n t a B a n c a r i a ) : R e a l; 4 F u n c t i o n o b t e n e r P r o m e d i o ( unVector : t a V e c t o r ) : R e a l;
3.3.1. Cantidad de par´ametros
La cantidad de par´ametros en las funciones/procedimientos tiene que ser como m´aximo 7, ya que qued´o demostrado que al haber demasiados par´ametros se presta a la confusi´on al momento de codificar dicha funci´on/procedimiento y ademas es una muestra de la falla de modularizaci´on del programa
4.
Comentarios en el c´
odigo
Los comentarios en el c´odigo son de vital importancia, al momento de explicar ciertas partes del c´odigo que creemos que es necesario explicar. Pero no todo es color de rosa en la vida de un inform´atico, si bien los comentarios sirven para explicar lineas, tambi´en son un arma de doble filo, ya que un c´odigo extremadamente comentado, significa que dicho c´odigo es extremadamente complejo de entender y que su dise˜no es extremadamente retorcido. Lo cual implica una revisi´on y un re-dise˜no del mismo.
NUNCAse debe comentar lo obvio, es decir repetir en el comentario lo que se dice en el c´odigo, como por ejemplo:
Codigo6:Mal uso de los comentarios
1 VAR
2 edad : I n t e g e r; 3
4 BEGIN {Cuerpo P r i n c i p a l d e l programa}
5 {Le a s i g n o e l v a l o r 21 a l a v a r i a b l e edad}
6 edad := 21