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


Lenguajes de programación



 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.



                                                           Software libre



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.


En el resto del apartado vamos a ver los conceptos de calidad a nivel de empresa; en el resto del tema profundizaremos en la calidad a nivel de proyecto.


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:

1.Entradas de usuario.
2.Salidas de usuario.
3.Peticiones.
4.Archivos.
5.Interfaces externas.



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