Está en la página 1de 10

Calidad de

software
14-2-2023

Sesion No. 3

Manolo
ING. DE SISTEMAS
Clases o Sesion No

Caso Practico No.1:


Dado un fragmento de código en lenguaje Python, identifica posibles
problemas de calidad y da sugerencias para mejorarlo.

def calculate_average(numbers):
total = 0
count = 0
for num in numbers:
total += num
count += 1
average = total / count
return average

respuesta
Solución: En este código, puedes observar que se puede mejorar la calidad
haciendo lo siguiente:

Utilizar el operador sum() en lugar de un bucle para calcular la suma de


los números.
Utilizar la función len() para obtener la longitud de la lista en lugar de
mantener un contador separado.
Agregar comentarios para explicar el propósito de la función y cómo se
calcula el promedio.

def calculate_average(numbers):
"""
Calculates the average of a list of numbers.
"""
if not numbers:
return 0 # Return 0 if the list is empty

total = sum(numbers)
average = total / len(numbers)
return average

Página 2 de 12
Ejercicio 2: Pruebas de Unidad

Enunciado: Escribe pruebas de unidad para la función calculate_average()


que verifiquen su comportamiento en diferentes escenarios.

Solución: Utilizando una biblioteca de pruebas como unittest en Python,


podrías escribir pruebas para la función:

python
Copy code
import unittest

class TestCalculateAverage(unittest.TestCase):
def test_empty_list(self):
self.assertEqual(calculate_average([]), 0)

def test_positive_numbers(self):
self.assertEqual(calculate_average([1, 2, 3, 4, 5]), 3.0)

def test_negative_numbers(self):
self.assertEqual(calculate_average([-1, -2, -3]), -2.0)

def test_mixed_numbers(self):
self.assertEqual(calculate_average([10, -5, 20]), 8.3333, places=4)

if __name__ == '__main__':
unittest.main()
Detección de Duplicación de Código:
Enunciado: Utiliza una herramienta de análisis de código para identificar
fragmentos duplicados en diferentes partes del proyecto.
Solución: Puedes usar la herramienta cpd de PMD en Java para detectar
duplicaciones.

Código de ejemplo:

java
Copy code
// Fragmento duplicado
for (int i = 0; i < 10; i++) {
// ...
}

// Fragmento duplicado
for (int j = 0; j < 10; j++) {
// ...
}
Verificación de Cumplimiento de Estilo de Codificación:
Enunciado: Utiliza una herramienta de análisis estático para verificar si el
código sigue un estilo de codificación específico.
Solución: Puedes usar pylint en Python para verificar el estilo de
codificación.

Código de ejemplo:

def calculate_average(numbers):
total = 0
count = 0
for num in numbers:
total += num
count += 1
average = total / count
return average
Análisis de Complejidad Ciclomática:
Enunciado: Utiliza una herramienta para calcular la complejidad
ciclomática de las funciones en el código.
Solución: Puedes usar la herramienta radon en Python para calcular la
complejidad ciclomática.

Código de ejemplo:

def calculate_average(numbers):
total = sum(numbers)
average = total / len(numbers)
return average

Detección de Vulnerabilidades Conocidas:


Enunciado: Utiliza una herramienta de análisis de seguridad para buscar
vulnerabilidades de seguridad conocidas en el código.
Solución: Puedes utilizar Snyk para buscar vulnerabilidades en
dependencias.

Código de ejemplo:

javascript
Copy code
// Dependencia vulnerable
const lodash = require('lodash'); // Versión vulnerable

Análisis de Dependencias:
Enunciado: Realiza un análisis estático para identificar las dependencias
del proyecto y sus versiones.
Solución: Puedes usar npm audit en proyectos de Node.js para identificar
vulnerabilidades en las dependencias.

Código de ejemplo (consola):

sh
Copy code
$ npm Audit
Pruebas de Unidad:

Prueba de Suma de Números:


Código de ejemplo usando unittest en Python:
import unittest

def sum_numbers(numbers):
return sum(numbers)

class TestSumNumbers(unittest.TestCase):
def test_empty_list(self):
self.assertEqual(sum_numbers([]), 0)

def test_positive_numbers(self):
self.assertEqual(sum_numbers([1, 2, 3, 4, 5]), 15)

def test_negative_numbers(self):
self.assertEqual(sum_numbers([-1, -2, -3]), -6)

if __name__ == '__main__':
unittest.main()

Prueba de Ordenación de Lista:


Código de ejemplo usando unittest en Python:

import unittest

def sort_numbers(numbers):
return sorted(numbers)

class TestSortNumbers(unittest.TestCase):
def test_empty_list(self):
self.assertEqual(sort_numbers([]), [])

def test_positive_numbers(self):
self.assertEqual(sort_numbers([5, 3, 1, 4, 2]), [1, 2, 3, 4, 5])

if __name__ == '__main__':
unittest.main()

Prueba de Cálculo de Descuento:


Código de ejemplo usando unittest en Python:
import unittest

def calculate_discount(amount, percentage):


return amount * percentage / 100

class TestCalculateDiscount(unittest.TestCase):
def test_discount_calculation(self):
self.assertEqual(calculate_discount(100, 10), 10.0)

if __name__ == '__main__':
unittest.main()

Prueba de Función de Validación de Correo Electrónico:


Código de ejemplo usando unittest en Python:

import unittest

def is_valid_email(email):
# Verificación simplificada
return '@' in email and '.' in email

class TestIsValidEmail(unittest.TestCase):
def test_valid_email(self):
self.assertTrue(is_valid_email('test@example.com'))

def test_invalid_email(self):
self.assertFalse(is_valid_email('invalid-email'))

if __name__ == '__main__':
unittest.main()
Prueba de Función de Conversión de Temperatura:
Código de ejemplo usando unittest en Python:

python
Copy code
import unittest

def celsius_to_fahrenheit(celsius):
return (celsius * 9/5) + 32

class TestCelsiusToFahrenheit(unittest.TestCase):
def test_positive_conversion(self):
self.assertEqual(celsius_to_fahrenheit(0), 32)

def test_negative_conversion(self):
self.assertEqual(celsius_to_fahrenheit(-40), -40)

if __name__ == '__main__':
unittest.main()
Espero que estos ejemplos te sean útiles para entender cómo realizar
pruebas de análisis de código y pruebas de unidad. Ten en cuenta que estos
ejemplos son solo ilustrativos y que las implementaciones reales pueden
variar según el contexto y el lenguaje de programación que estés utilizando.
Bibliografía

También podría gustarte