Introducción a la Ingeniería del software
El software como tal es un conjunto de instrucciones lógicas que
le permite al usuario interactuar con el computador a través de una interfaz,
es lo que comúnmente se conoce como los programas del computador y van desde un
editor de texto hasta aplicaciones que gestionan a otras.
La industria del software avanza a pasos agigantados, un claro
ejemplo de eso es la computación en la nube, que si bien antes teníamos que
instalar un programa en nuestra computadora para poder acceder a todas las
funcionabilidades que tenía ahora se lo puede hacer mediante un navegador donde
el programa se encuentra alojado en un servidor a varios kilómetros de
distancia, dejando así disponible el hardware que se utilizaría para correr esta
aplicación (memoria, disto, procesador).
A continuación se analiza más detalladamente que es el software,
sus características y las diferentes metodologías que utilizan los
desarrolladores para crear este producto, ya que la elaboración del software a
medida(es decir con una función en específico), requiere de mucho esfuerzo por
parte del programador como del cliente para que el producto pueda tener éxito.
OBJETIVO DE LA CLASE
Conocer las diferentes características
que tiene el software y las metodologías que utilizan los programadores para
crearlo.
MARCO TEORICO
¿Qué es el software?
Según Pressman, R. 2010 “El
software de computadora es el producto que construyen los programadores
profesionales y al que después le dan mantenimiento durante un largo tiempo.
Incluye programas que se ejecutan en una computadora de cualquier tamaño y
arquitectura, contenido que se presenta a medida de que se ejecutan los
programas de cómputo e información descriptiva tanto en una copia dura
como en formatos virtuales que engloban virtualmente a cualesquiera medios
electrónicos. La ingeniería de software está formada por un proceso, un
conjunto de métodos (prácticas) y un arreglo de herramientas que permite a los
profesionales elaborar software de cómputo de alta calidad.”
Ciclo de vida del
software
El término ciclo de vida del software describe el desarrollo de software, desde la fase inicial hasta la fase final. El ciclo de vida básico de un software consta de los siguientes procedimientos:
Ciclo de vida del software |
Características del software:
El
software de sistema es todo
aquello que se denomina “sistema operativo”. Entre ellos se
encuentran Windows, Mac OS, Ubuntu (entre otras
distribuciones de Linux), Unix, Fedora y Solaris, entre otros.
El software de sistema es el software principal de un sistema informático y se encarga de gestionar
tanto los recursos de hardware como los programas de aplicación. Su ejecución
se encuentra privilegiada sobre la del resto del software, ya que todo depende
del sistema operativo.
Además de
los sistemas operativos, se incluye en el software de sistema a los
controladores de dispositivo, las
herramientas de diagnóstico, corrección y optimización, los servidores y
las utilidades.
Software de programación
El
software de programación son aquellas aplicaciones y herramientas que utilizan los programadores para
desarrollar nuevo software. Entre ellos se encuentran editores de texto,
compiladores, intérpretes, enlazadores, depuradores y entornos de desarrollo
integrados. Cada una de estas herramientas de programación puede ser utilizada
con uno o más lenguajes de programación.
Software de aplicación
Se trata
de los programas que utilizamos habitualmente para realizar todo tipo de tarea en una computadora. Su función es
mucho más específica que la del software de sistema.
Entre
ellos se encuentran los
procesadores de texto (como Word o Bloc de Notas) los editores
(como Photoshop o Gimp), las hojas de cálculo (como Excel), los programas de
comunicaciones (como Messenger o Whatsapp) y los programas de diseño (como
AutoCAD) entre otros
Cada lenguaje de programación está formado por determinados símbolos y reglas sintácticas y semánticas, es decir que para cada lenguaje los símbolos tienen su propia estructura y significado.
Un
lenguaje de software está formado por
- Variable
y vectores. Las
variables son espacios de memoria, es decir, contenedores de datos. Los
vectores son un tipo específico de variables compuestas.
- Condicionales. Son las premisas
necesarias para que se ejecute el programa.
- Blucles. Ejecutan un código
constantemente siempre que se cumpla una premisa.
- Funciones. Son variables que encierran
un código en sí mismas.
Interacción con hardware múltiple
El
software permite interactuar con
objetos, es decir, con hardware. Actualmente una parte importante de
todos los productos de uso habitual incluyen algún tipo de software, no sólo
las computadores y los teléfonos, sino también microondas, automóviles,
aviones, refrigeradores, televisores, reproductores de música, entre otros.
Actualizaciones
El
software es intrínsecamente evolutivo ya que su uso permite descubrir no sólo
fallas sino también potencialidades que requieren un mayor desarrollo. Por eso, todos los programas y sistemas
operativos suelen ofrecer upgrades o actualizaciones poco después
de haber sido lanzados al mercado.
Instalación
sistema operativo de una computadora. La instalación requiere
un tipo específico de configuración que le permita interactuar adecuadamente
con otros programas y con el hardware. Existen también instalaciones
distribuidas, es decir, el mismo software se instala en varias computadoras al
mismo tiempo.
Se denomina libre al tipo de software que permite acceso a su código, es decir, a su matriz de funcionamiento y que por lo tanto cualquier usuario puede instalarlo, utilizarlo e incluso modificarlo.
El
software libre es promovido por un
movimiento que se consolidó en 1985 con la fundación de Free
Software Foundation, que señala la libertad del usuario informático como un
objetivo ético.
Mantenimiento
Algunos tipos de software requieren un proceso
periódico de control, mejora y optimización. Entre estos procesos se incluye la
depuración de errores y en algunos casos también las actualizaciones ofrecidas
por el desarrollador. En algunos casos, el mantenimiento incluye el envío de un
informe al desarrollador, de forma tal de colaborar con la evolución del software.
necesidad de la ingeneria del software.
Objetivos:
La ingeniería de software aplica diferentes normas y métodos que permiten
obtener mejores resultados, en cuanto al desarrollo y uso del software, mediante la aplicación
correcta de estos procedimientos se puede llegar a cumplir de manera
satisfactoria con los objetivos fundamentales de la ingeniería de software.
Entre los objetivos de la ingeniería de software están:
Mejorar el diseño de aplicaciones o software de tal modo que se
adapten de mejor manera a las necesidades de las organizaciones o finalidades
para las cuales fueron creadas.
·
Promover
mayor calidad al desarrollar aplicaciones complejas.
·
Brindar
mayor exactitud en los costos de proyectos y tiempo de desarrollo de los
mismos.
·
Aumentar
la eficiencia de los sistemas al introducir procesos que permitan medir
mediante normas específicas, la calidad del software desarrollado, buscando siempre la mejor calidad
posible según las necesidades y resultados que se quieren generar.
·
Una mejor
organización de equipos de trabajo, en el área de desarrollo y mantenimiento
de software.
·
Detectar
a través de pruebas, posibles mejoras para un mejor funcionamiento del software desarrollado.13
·
El
desarrollo de software se ha convertido en una de las disciplinas más
importantes en la actualidad, y se encuentra avanzando a pasos agigantados, ya
que el consumo de productos software por parte de la sociedad es cada vez mayor
y la necesidad de dar soluciones a problemas cotidianos con la tecnología se
vuelve imprescindible.
Está
claro que las personas no podemos vivir sin el software debido a que nos ayuda
con nuestras tareas, a optimizar tiempos y hacer la vida más fácil. En ese
sentido muchos se pueden preguntar ¿cómo se hace el software?
Pues
bien, sabemos que el software es aquel ente lógico que hace funcionar a los
dispositivos electrónicos, es decir, aquellas secuencias de instrucciones que
le dicen a los dispositivos qué hacer, cómo y cuándo. El desarrollo de software
es realizado por personas amantes de la tecnología, comúnmente llamados
programadores. Aunque si bien es cierto que cualquier persona con tiempo y que
le guste programar podría construir software, lo más seguro es que el producto
final sería mucho menos eficiente y mucho menos seguro que un software
desarrollado con procedimientos adecuados y bien estudiados. Es aquí en donde
quiero mencionar el papel de la ingeniería de software, la cual comprende todos
los aspectos de la producción del software, desde las etapas iniciales de la
especificación del producto, hasta el mantenimiento de éste, después de que se
utiliza. Es además un conjunto de métodos, la aplicación de un enfoque
sistemático, disciplinado y cuantificable al desarrollo, además ofrece
herramientas y técnicas que trascienden más allá de sólo la codificación del
software y que es sumamente importante para construir o mantener un software de
calidad.
La
ingeniería de software es un conjunto de etapas parcialmente ordenadas. En el
que las necesidades del usuario son traducidas en requerimientos de software,
estos requerimientos son transformados en diseño, el diseño implementado en
código, el código es probado y documentado para su uso operativo con la intención
de obtener un producto de software de calidad. El desarrollo de software
requiere un conjunto de conceptos, una metodología y un lenguaje propio. A este
proceso también se le llama el ciclo de vida del software, que comprende las
etapas por las que pasa un proyecto de software desde que es concebido hasta
que está listo para usarse. En cuanto a las metodologías de ingeniería de
software, estas consisten en el uso de métodos, técnicas, herramientas y
modelos para el desarrollo las cuales deben estar muy bien documentadas para
que los programadores las ejecuten correctamente.
Actualmente
existen muchas metodologías y la selección de una de ellas para el desarrollo
del software depende del tipo de proyecto que se quiera realizar. Están las
llamadas tradicionales, que fueron propuestas con anterioridad a los años 90 y
que pretendían ayudar indicando los pasos a realizar y documentando cada una de
las tareas del desarrollo de software; sin embargo tienen un problema, asumen
que un proyecto de software es casi una extensión de un proyecto burocrático
tradicional y no reflejan la naturaleza compleja del desarrollo de software
actual, además de que suelen ser metodologías inflexibles al cambio. Es así que
las metodologías modernas contemplan características como el desarrollo de
software de manera iterativa, manejo de requerimientos, modelado de software
visual, arquitecturas basadas en componentes, control de cambios, entre otros y
sus objetivos se centran en ser escalables, flexibles y adaptables.
Todo esto
nos puede llevar a pensar que el desarrollo de software es una tarea sumamente
compleja y no apta para cualquiera, ya que los retos que tenemos como
programadores son cada vez mayores. Por ejemplo debemos desarrollar técnicas
para construir software confiable y que sea lo suficientemente flexible para
adaptarse a los cambios, debemos reducir los tiempos de entrega para sistemas
grandes y complejos sin comprometer la calidad del producto y además debemos
diseñar técnicas que demuestren a los usuarios que pueden confiar en el
software.
calidad del software
La calidad del software es, según
Pressman, la “concordancia con los requisitos funcionales y de rendimiento, con
los estándares de desarrollo y con las características implícitas que se espera
del software desarrollado profesionalmente”
No existe
una definición única de calidad, ya que:
- Es
un concepto relativo (es una compleja mezcla de factores que varía para
las diferentes aplicaciones y los clientes que las solicitan).
- Es
un concepto multidimensional, referido a muchas cualidades.
- Está
ligada a restricciones (por ejemplo, el presupuesto).
- Está
ligada a compromisos aceptables (por ejemplo, plazos de fabricación).
- No
es ni totalmente subjetiva ni objetiva.
Puede resultar transparente
cuando está presente y reconocible cuando está ausente.
Actualmente,
la calidad del SW debe tenerse en cuenta a dos niveles:
- A
nivel de empresa: para conseguir software de calidad, las organizaciones
deben tener una estructura organizativa apropiada para fomentar el trabajo
por la calidad de todas las personas y departamentos de la empresa, además
de fomentar procesos específicos para asegurar la calidad.
- A
nivel de proyecto: se trata de llevar a la práctica en las actividades
cotidianas las disposiciones fijadas en el sistema de calidad. Se aplica
durante todo el proceso de ingeniería del software, es decir, en Análisis,
Diseño, Codificación y Prueba.
Calidad del software a
nivel de empresa
La
calidad del software a nivel de empresa se refiere a las acciones que se tomas
de forma común para asegurar que se desarrolla software de calidad en todos los
proyectos. Se divide en dos tipos de procesos:
- Gestión de la Calidad del SW: aspecto de la función
general de la gestión que determina y aplica la política de calidad
(objetivos y directrices generales de calidad de una empresa). Incluye
planificación estratégica, asignación de recursos, etc.
- Aseguramiento o garantía de la Calidad del SW: conjunto de actividades
planificadas y sistemáticas necesarias para aportar la confianza en que el
producto satisfará los requisitos dados de calidad. Incluye evaluaciones,
auditorías, revisiones, etc.
Factores de calidad del
software.
Los factores de calidad del software sirven para descomponer el
concepto genérico de “calidad” en otros más sencillos, para facilitar su
control y su medición.
Dado que
la división en factores es una división subjetiva, existen varias
clasificaciones de los factores de calidad. Veremos la de McCall, que los
agrupa en tres perspectivas: operativa, de mantenimiento y evolutiva.
Factores operativos de la
calidad del software.
Los
factores operativos son aquellos que afectan al uso del software:
- Corrección:
el software cumple las especificaciones
- Fiabilidad:
grado en el que el software es confiable, es decir, no tiene fallos
- Eficiencia:
necesidad de recursos software y hardware del producto
- Seguridad:
grado en el que puede controlarse el acceso al software y a los datos
- Facilidad
de uso: grado de esfuerzo necesario para utilizar el software
Factores de mantenimiento
de la calidad del software.
Los
factores de mantenimiento son aquellos que se aplican a la capacidad de
modificación del software:
- Flexibilidad:
esfuerzo necesario para modificar un programa
- Facilidad
de prueba: esfuerzo requerido para realizar las pruebas de un programa
- Facilidad
de mantenimiento: esfuerzo requerido para localizar y reparar un error
Factores evolutivos
Los
factores evolutivos son aquellos que indican si el software se puede trasladar
con facilidad a otra máquina o a otro producto de base (SO, SGBD, etc.), o
incrementar sus prestaciones:
- Portabilidad:
facilidad para migrar el software de un entorno de operación a otro
- Capacidad
de reutilización: grado en el que un programa o parte del mismo se puede
utilizar en otras aplicaciones.
- Capacidad
de interoperación: esfuerzo necesario para que un software opere
conjuntamente con otros sistemas
Métricas para medir la
calidad del software.
Las
métricas del software se aplican para valorar cualitativamente algún factor relativo
al mismo. No existen métricas generales y únicas, aún menos para la calidad, ya
que se puede examinar el software a través de múltiples perspectivas y con
diferentes objetivos.
En lo que
sí que hay acuerdo es en las características que debe tener una buena métrica :
- Simple
y fácil de calcular
- Empírica
- Consistente
y objetiva
- Independiente
del lenguaje de programación
- Que
proporcione información útil
Veremos
las más representativas en cada fase del ciclo de vida.
Fase de análisis
No
existen demasiadas métricas en esta etapa debido a que se están tratando temas
de muy alto nivel conceptual, difíciles de cuantificar. Las más representativas
miden el tamaño del software a desarrollar:
Punto función
Sirve
para cuantificar la cantidad de funcionalidad que tiene un sistema a partir de
la descripción del mismo. Se basa en la ponderación de cinco elementos clave:
Técnicas de calidad de software para proyectos ágiles y tradicionales
En este curso se presentan temas
de calidad de software y técnicas asociadas que se utilizan tanto en proyectos
ágiles como tradicionales. Se tratan los siguientes temas: conceptos de calidad
de software, técnicas de calidad de software, mejora de procesos de software
como una forma de abordar la mejora continua de la calidad, prevención de
defectos, e implantación (y adaptación) de procesos de desarrollo de software
para lograr cambios organizacionales. En particular, se aborda con un buen
nivel de detalle el proceso de Inspección de software por ser esta una técnica
probada de bajo costo y alto beneficio en el desarrollo de software y porque, a
partir de la misma, se puede razonar sobre el resto de las técnicas del curso.
Durante el curso se realizarán ejercicios prácticos y se desarrolla un
laboratorio para que el profesional que asista al mismo pueda aplicar o
proponer la aplicación de estas técnicas en su ambiente laboral.
Comentarios
Publicar un comentario