Introducción a la ingeniería del Software


Fundamentos de la ingeniería de software:

Unos de los objetivos más importante de un software es la satisfacción de los clientes o de los usuarios y también, que el problema que solucione aporte positivamente en el ámbito que sea. Esto porque el software hoy día está presente en la salud, en la industria, en el comercio, en fin, en todo. Si un software satisface al cliente, es porque cumple con todos los requerimientos, incluyendo una buena experiencia de usuarios, es seguro, es estable, aporta eficiencia y eficacia, en fin, eso debe ser lo que cada ingeniero logre en sus proyectos software.

Ahora bien, qué es el software? es el resultado de una series de fases, metodologías y técnicas que son plasmadas o programadas o desarrolladas por medio de herramientas, tales como los lenguajes de programación, y que apunta a distintas naturalezas. El software es creado por profesionales de las ingenierías: de software, de sistemas, o de informática, por tanto, es importante destacar, que si el software a construir es mediano o grande, se requiere de un equipo de trabajo de alto nivel. Otra forma de definir el software, es todo aquello que no se puede tocar, es el complemento de una computadora, es decir, una computadora está compuesta por hardware, que es la parte dura que se puede tocar, por ejemplo, el teclado, el monitor, el mouse, etc. y el software, por ejemplo, sistema operativo, aplicaciones, programas, entre otros y no pueden ser tocados.

Para construir un software es necesario completar varias fases, las cuales son: análisis, diseño, construcción, pruebas, implementación y mantenimiento.

Por su lado, la ingeniería, según la Real Academia Española, es el conjunto de conocimientos y técnicas científicas y empíricas aplicadas a la invención, el diseño, el desarrollo, la construcción, el mantenimiento y el perfeccionamiento de tecnologías, estructuras, máquinas, herramientas, sistemas, materiales y proceso para resolución de problemas prácticos. Vista está definición, es evidente entonces, que la ingeniería de software cumple con el concepto, y para ello, solo hay que ver sus fases, análisis, diseño, construcción (codificación), pruebas, implementación y mantenimiento. Cabe decir, que aunque el análisis, pruebas e implementación no está explícitamente, es obvio que para diseñar y construir hay que analizar, y si se construye se debe implementar o instalar. Adicionalmente, el conocimiento y técnicas que se deben emplear, y la necesidad de una infraestructura tecnológica para instalar el software.. Aclarado esto, no deben quedar dudas al respecto. No obstante, según el IEEE (Institute of Electrical and Electronic of Engineers), la ingeniería de software es un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento del software. La ingeniería del software viene a resolver problemas del mundo real mediante las herramientas, los métodos, las metodologías, el análisis, el diseño y técnicas que sirven de vía para la construcción, las pruebas y posteriormente el mantenimiento.

Por qué es importante el software? sin dudas que en sentido general, las tecnologías y más aún el software son impulsores de la eficiencia, eficacia y de las economías del mundo. No se imagina usted, el caos en los sectores financieros, de salud, comercio, eléctrico, tránsito, comunicación que existiera sin tecnologías.

En ese mismo orden, un programa de computadora, es un conjunto de instrucciones que se le dan al computador mediante un lenguaje de programación para que realice determinadas funciones. Esto quiere decir, que luego de instalar un lenguaje de programación, iniciamos a construir el software que es lo mismo que decir, programar.

Qué necesito cómo ingeniero de software?

  • La capacitación, lecturas, el entrenamiento, el conocimiento, es lo primero con que debe contar un ingeniero de software, y para ello existen plataforma como http://uninsoft.com; eso incluye dominio en gestión de proyecto, trabajo en equipo, orientado al cambio, empatía, orientado a los resultados, flexibilidad, respetuoso, comunicación asertiva, presto a enseñar y a aprender.
  • Capacidad de análisis, paciente, creativo.
  • Dominio en identificación y gestión de riesgos.
  • Una o más computadoras con el sistema operativo, según sea, para la plataforma que queramos construir el software.
  • Elegir uno o más lenguaje de programación para construir el software, entre los que se destacan lenguaje C/C++, Python, Java, PHP, HTML, CSS, JavaScript, GO, Delphi, entre otros.
  • Herramientas o aplicaciones como PSeInt, yEd Graph Editor, Enterprise Architect, Editor de Palabras, Editores de Textos, entre otras.

Tipos de Software

    1. Software de sistemas. conjunto de programas escritos para dar servicios a otros programas, algunos ejemplos son: compiladores, editores, sistemas operativos, entre otros. Procesa estructuras de información complejas, pero no deterministas, procesan sobre todo datos indeterminados, sus principales características son: interacción con el hardware de la computadora, uso intensivo por parte de usuarios múltiples, operación concurrente que requiere la secuenciación, recursos compartidos y administración de un procesos sofisticado, estructuras complejas de datos e interfaces externas múltiples.
    2. Software de aplicación. Programas aislados que resuelven una necesidad específica de negocios. Las aplicaciones en esta área procesan datos comerciales o técnicos en una forma que facilita las operaciones de negocios o la toma de decisiones administrativas o técnicas. Además, se usan para controlar funciones de negocios en tiempo real. Algunos ejemplos son: procesamiento en transacciones en un punto de ventas, control de proceso de manufactura en tiempo real. Ejemplos más cercano a usted, cuando usted va a una farmacia, o cuando va a una tienda o a una ferretería, esos son sistemas de aplicaciones.
    3. Software de Ingeniería y ciencia. Las aplicaciones van de la astronomía a la vulcanología, del análisis de tensiones en automóviles a la dinámica orbital del transbordador espacial, y de la biología molecular a la manufactura automatizada, éstas basadas en números. Sin embargo, las aplicaciones modernas dentro del área de la ingeniería y las ciencias están abandonados los algoritmos numéricos convencionales. El diseño asistido por computadora, la simulación de sistemas y otras aplicaciones interactivas han comenzado a hacerse en tiempo real e incluso han tomado características el software de sistemas.
    4. Software incrustado. Reside dentro de un producto o sistema y se usa para implementar y controlar características y funciones para el usuario final y para el sistema en sí. Ejecuta funciones limitadas y particulares, por ejemplo. El control del tablero de un horno de microondas. O provee una capacidad significativa de funcionamiento y control. Ejemplo, funciones digitales en un automóvil, como el control de combustible, del tablero de control y de los sistemas de frenado.
    5. Software de línea de productos. Es diseñado para proporcionar una capacidad específica para uso de muchos consumidores diferentes. Este se centra en algún mercado limitado y particular. Por ejemplo, control de inventario de productos, o se dirige a mercados masivos de consumidores. Por ejemplo, procesadores de textos, hojas de cálculos, gráficas por computadora, multimedios, entretenimientos, administración de base de datos y aplicaciones para finanzas personales o de negocios.
    6. Aplicaciones Web. También llamadas «webapps», esta categoría de software centrados en redes agrupa una amplia gama de aplicaciones. En su forma más sencilla, las webapps son un poco más que un conjunto de archivos de hipertextos vinculados que presentan información con uso de texto y gráficas limitadas. Sin embargo, desde que surgió la web 2.0, las webapps están evolucionando hacia ambientes de cómputos sofisticados, que no solo proveen características aisladas, funciones de cómputo y contenido para el usuario final, sino que también están involucradas con bases de datos corporativas y aplicaciones de negocios. Pressman (2010), indica que, las webapps deben presentar los siguientes atributos:
      • Uso intensivo de redes.
      • Concurrencia.
      • Rendimiento.
      • Disponibilidad.
      • Orientadas a los datos.
      • Contenido sensible.
      • Evolución continua.
      • Inmediatez.
      • Seguridad.
      • Estética.
    7. Software de Inteligencia artificial. Hace uso de algoritmos no numéricos para resolver problemas complejos que no son fáciles de tratar computacionalmente o con el análisis directo. Las aplicaciones en está área incluyen robótica, sistemas expertos, reconocimientos de patrones (imagen y voz), redes neurales artificiales, demostración de teoremas y juegos.

Existe otro concepto, que no se puede dejar pasar por alto en esta introducción, ya que al principio trae confusión sobre todos a estudiantes y a ingenieros principiantes. Este concepto se conoce como software heredado, el cual, se refiere a software más antiguos, Dayani-Fard lo describe de la siguiente manera:

Fueron desarrollados hace varias décadas y han sido modificado de manera continua para que satisfagan los cambios en los requerimientos de los negocios y plataformas de computación. Estos sistemas son muy costosos mantenerlos y riesgosos, a tal punto, que muchas veces conviene más implementar un sistema nuevo, no obstante, muchas veces por la falta de compatibilidad o de ingenieros que dominen esa tecnología se hace más complicado al migrar los datos y procesos previamente definidos.

Pressman (2010) establece que los sistemas evolucionan por una o varias razones, tales como:

  • El software debe adaptarse para que cumpla las necesidades de los nuevos ambientes de cómputo y de las tecnologías.
  • El software debe ser mejorado para implementar nuevos requerimientos del negocio.
  • El software debe ampliarse para que sea operable con otros sistemas o bases de datos modernos.
  • La arquitectura del software debe rediseñarse para hacerla viable dentro de un ambiente de redes de telecomunicación.

Visto lo anterior, el mismo autor expresa que la meta de la ingeniería de software moderna es desarrollar metodologías que se basen en el concepto de evolución, es decir, el concepto de que los sistemas continuamente, de que los sistema de construyen a partir de sistemas antiguos, que todo debe operar entre sí y cooperar con cada uno de los demás.

Dentro de las realidad que los ingenieros de software deben conocer y tener claras según Pressman (2010), y que por tanto, deben profundizar en el conocimiento, prácticas, metodologías, estándares y experiencia. Las realidades son:

  • El software se ha incrustado profundamente en casi todos los aspectos de nuestras vidas y, como consecuencia, el número de personas que tienen interés en las características y funciones que brinda una aplicación específica ha crecido en forma notable. Cuando ha
    de construirse una aplicación nueva o sistema incrustado, deben escucharse muchas opiniones. Y en ocasiones parece que cada una de ellas tiene una idea un poco distinta de cuáles características y funciones debiera tener el software. Se concluye que debe hacerse un esfuerzo concertado para entender el problema antes de desarrollar una aplicación de software.
  • Los requerimientos de la tecnología de la información que demandan los individuos, negocios y gobiernos se hacen más complejos con cada año que pasa. En la actualidad, grandes equipos de personas crean programas de cómputo que antes eran elaborados por un solo individuo. El software sofisticado, que alguna vez se implementó en un ambiente de cómputo predecible y autocontenido, hoy en día se halla incrustado en el interior de todo, desde la electrónica de consumo hasta dispositivos médicos o sistemas de armamento. La complejidad de estos nuevos sistemas y productos basados en computadora demanda atención cuidadosa a las interacciones de todos los elementos del sistema. Se concluye que el diseño se ha vuelto una actividad crucial.
  • Los individuos, negocios y gobiernos dependen cada vez más del software para tomar decisiones estratégicas y tácticas, así como para sus operaciones y control cotidianos. Si el software falla, las personas y empresas grandes pueden experimentar desde un inconveniente
    menor hasta fallas catastróficas. Se concluye que el software debe tener alta calidad.
  • A medida que aumenta el valor percibido de una aplicación específica se incrementa la probabilidad de que su base de usuarios y longevidad también crezcan. Conforme se extienda su base de usuarios y el tiempo de uso, las demandas para adaptarla y mejorarla también crecerán. Se concluye que el software debe tener facilidad para recibir mantenimiento.

Estas realidades simples llevan a las siguientes conclusiones:

  1. Debe hacerse ingeniería con el software en todas sus formas y a través de todos sus dominios de aplicación, es decir, la ingeniería de software.

  2. Un proyecto de ingeniería de software comprende varias fases, no algunas, es decir, que el éxito de un proyecto de software depende de la ejecución de todas sus fases (análisis, diseño, construcción (codificación), pruebas, mantenimiento), utilizando las herramientas, técnicas y metodologías que cada proyecto demanda.

  3. Las metodologías no se adoptan, se adaptan. Es decir, que cada proyecto tiene sus propias características y condiciones.

  4. Los ingenieros deben en primer lugar entender el problema, y asegurarse de que el cliente comprende lo que se le entregará antes de iniciar con la ejecución del proyecto para evitar atrasos y mal entendido o insatisfacción por parte de usuarios y clientes.
  5. Los Ingenieros de software y de sistemas deben completar los estudios necesarios que le permitan tener una amplia visión y tomar mejores decisiones. 
  6. Contar con experiencia sin dudas da una visión amplia, y una mayor garantía de un producto de calidad.
  7. La mejor garantía de que el producto cumple con los requerimientos es que el cliente o usuarios estén satisfecho de lo recibido.
  8. Cuando el software se realiza cumpliendo con todas las recomendaciones y con la calidad deseada, el mantenimiento es menos costoso y menos traumático.
  9. Los cambios son contantes en un mundo que marcha a una velocidad enorme.
  10. La importancia de que los ingenieros conozcan de las herramientas de trabajo, tales como: yEd Graphics Editor, editores de textos, PseInt, REM, Enterprise Architect, o sus equivalentes, entre otras. Y técnicas como: entrevistas, cuestionarios, lluvia de ideas, mapas mentales, observación, entre otras; y metodologías como: las tradicionales (espiral, en cascada, incremental, prototipado, RAD), ágiles (SCRUM, KANBAN , XP) entre otras.
  11. Los ingenieros deben trabajar con los estándares, modelos de desarrollo y de calidad que le permitan productos de calidad.
  12. La afiliación o certificación de los ingenieros en entidades como el IEEE, ISACA,  o cualquier otra, los ayudará a mantenerse actualizados, así como a aplicar las mejores prácticas en sus proyectos de software o sistemas.

En términos generales, si usted como ingeniero conoce y aplica todos los puntos anteriores, sus proyectos software tienen un alto porcentaje de concluir con éxito, de lo contrario este porcentaje baja mucho.

Referencias Bibliográficas:

Roger S. Pressman. (2010). EL SOFTWARE Y LA INGENIERÍA DE SOFTWARE. En Ingeniería de Software. Un enfoque práctico. 7ma Edición(1-11). New York – México: McGraw Hill.

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Close Bitnami banner
Bitnami