Tecnologías
emergentes de la información y desarrollo de software
En la
actualidad se viven constantes cambios en el ámbito de las Tecnologías de la
Información; una de las ramas que más cambios tiene es la Ingeniería de
Software. Como describe Román (2011) la Web ha evolucionado de manera
significativa pasando por 3 etapas hasta ahora. La primera fue la Web 1.0 las
cuales estaban accesibles a personas especializadas que eran las encargadas de
crear y mantener el contenido para ser consultado en la Web. Cuando se
desarrollaron plataformas para que cualquier persona creara contenido Web sin
conocimientos especializados o técnicos y se crearon las primeras redes
sociales se hablaba de la evolución de la Web 1.0 a la denominada Web 2.0.
Actualmente se habla de una nueva evolución llamada Web 3.0 o Web Semántica que
trata de dotar de significado a los recursos existentes en la Web.
Para
llevar a cabo los desarrollos tecnológicos que se requieren en esta evolución e
innovación constante la Ingeniería en Tecnologías de la Información y
Desarrollo de Software se apoyan de otras áreas derivadas como son los Sistemas
Embebidos, Cómputo Móvil y Ubicuo, Interfaces Humano-Computadora, Sistemas
Distribuidos y Bases de Datos No Relacionales, Redes de Próxima Generación,
Arquitectura de Software, Patrones de diseño, Calidad en el Desarrollo de
Software y Desarrollo Dirigido por Pruebas, Desarrollo de Software Orientado a
Servicios, Modelos y Metodologías de Desarrollo de Software como base para
converger y crear las aplicaciones y dispositivos electrónicos necesarios para
responder a la constante demanda de información y conocimiento que las personas
requieren. A continuación se abordan las tecnologías más relevantes que se
enfocan en el área de Tecnología de la Información y Desarrollo de Software.
1. Sistemas Embebidos
Según
Calva et. al. (2012) los sistemas embebidos son aquellos sistemas informáticos
que forman parte de sistemas más grandes y que llevan a cabo algunos de los
requisitos necesarios para la operatividad de estos sistemas. Los sistemas
integrados cubren una amplia gama de sistemas informáticos de pequeños
dispositivos basados en computadoras de ultra a grandes sistemas de vigilancia
y control de procesos complejos.
La inmensa
mayoría de los sistemas informáticos pertenece a los sistemas integrados. La
mayoría de estos sistemas integrados se caracterizan también como sistemas de
tiempo real, lo que significa que las propiedades de tiempo real, tales como el
tiempo de respuesta, tiempo de ejecución son importantes problemas de diseño.
El aumento de la complejidad de los sistemas embebidos de tiempo real conduce a
la creciente demanda en relación con la ingeniería de requisitos, diseño de
alto nivel, la detección temprana de errores, la productividad, la integración,
verificación y mantenimiento, lo que aumenta la importancia de una gestión
eficiente de las propiedades del ciclo de vida tales como la mantenibilidad,
portabilidad y capacidad de adaptación así como la calidad implementada en los
procesos de desarrollo de software.
De acuerdo
con Toro y Cardona (2010) se han considerado un sin número de procesos para ser
automatizados, en su mayoría mediante el control de un software o en su defecto
por dispositivos que integren software embebido para su manipulación. Es por
ello que cada vez más la Ingeniería de software está trabajando en mejorar la
calidad de los productos y procesos para hacer que dichos sistemas de control y
automatización no contengan errores.
2. Cómputo Móvil y Ubicuo
Hoy en día
tiene una relevancia cada vez mayor el uso de dispositivos electrónicos
inmersos en nuestras vidas. Esto se debe en parte a los diferentes dispositivos
que se interconectan en nuestro entorno ya sea en la oficina, escuela, hogar, o
en el transporte público. Según Zapata (2012), La tecnología ubícua permite a
los individuos aprender allí donde estén, y contar para ello con los
componentes de su entorno social. En entornos de aprendizaje en línea es
importante acceder a los recursos de manera tal que los individuos no tengan
que preocuparse por la forma o dispositivos que se requieren para conectarse y
consumir los objetos de aprendizaje de las plataformas en línea.
Una de las
principales características del cómputo móvil y ubicuo es acceder a los
recursos a los que se tienen acceso mediante los dispositivos conectados a
internet sin siquiera pensar de qué manera estamos logrando la comunicación
entre los equipos o dispositivos. Esta área de conocimiento de las Tecnologías
de la Información está cobrando cada vez más importancia ya que continuamente
se están mejorando las plataformas y tecnologías de interconexión o redes de
próxima generación.
La
computación móvil y ubicua está usándose junto a los sistemas distribuidos,
sistemas embebidos entre otros para hacer realidad un nuevo concepto
tecnológico denominado: Internet de las Cosas (del Ingles Internet of Things)
donde Haller (2010) la cual define como una red de datos que permite la
consulta de la información acerca de los objetos del mundo real por medio de un
identificador único llamado Código Electrónico de Producto y un mecanismo de
resolución. El internet de las cosas utiliza técnicas de la web semántica para
dotar de significado a los objetos y datos obtenidos de ellos y al hablar de
objetos se entiende que son dispositivos electrónicos.
3. Redes de próxima Generación
La
sociedad en la que actualmente vivimos demanda cada vez más conectividad de los
dispositivos electrónicos para acceder a los medios de información, recursos
disponibles en internet así como la interconectividad entre sus pares. Es por
ello que ahora se habla de la sociedad de la información y del conocimiento de
acuerdo con Quiroz (2005) es el proceso que se realimenta a si mismo donde las
nuevas tecnologías facultan a la sociedad en el manejo de grandes volúmenes de
información, las cuales a su vez, generan más conocimiento en un círculo
virtuoso ascendente de progreso.
La
organización UIT-T Y (2014) define a estas redes en una red basada en paquetes
que permite prestar servicios de telecomunicación y en la que se pueden
utilizar múltiples tecnologías de transporte de banda ancha propiciadas por la
QoS (Quality of Service), y en la que las funciones relacionadas con los
servicios son independientes de las tecnologías subyacentes relacionadas con el
transporte. Permite a los usuarios el acceso sin trabas a redes y a proveedores
de servicios y/o servicios de su elección.
De acuerdo
con IHS (2006) la diferencia de las redes especializadas en proveer un servicio
específico como las actuales, las NGN son una red multiservicio. Las redes de
la próxima generación (NGN) anuncian el paso al enfoque de muchos servicios a
través de una sola red, es básicamente una red que unifica voz, datos y video
bajo la plataforma IP convirtiéndola en una red en la cual es posible prestar
diferentes servicios, Restrepo (2009).
4. Interfaces Humano Computadora
La
interacción Humano-Computadora se encarga de estudiar la relación de la
interacción entre el Hombre y las computadoras, buscando hacerla entendible y
fácil de usar según Abud (2006). Con esta definición se infiere que cualquier
dispositivo electrónico que interactúe con un humano ya sea mediante Hardware o
Software. Para Pérez (2014) el objetivo primordial de la interacción de
usuarios de dispositivos electrónicos sea eficiente debe de minimizar los
errores, incrementar la satisfacción del usuario, disminuir la frustración
referente al uso del dispositivo. En resumen debe hacer más eficientes y
productivas las tareas rutinarias y de trabajo de las personas con los
dispositivos electrónicos.
Para el
desarrollo de nuevas tecnologías o plataformas, lenguajes de programación o
software es importante tomar en cuenta la Interfaces que estarán en contacto
con los usuarios finales ya que de ello depende en gran medida el éxito o
fracaso del sistema de software o hardware que interactúa con el usuario final.
Cada vez más las empresas de software se están fijando en dos conceptos que se
relacionan entre si los cuales son la usabilidad y accesibilidad. La usabilidad
se refiere al alcance en el que un producto puede ser utilizado por usuarios
específicos para alcanzar metas específicas y la accesibilidad es la
posibilidad de que un producto o servicio pueda ser accedido y usado de forma
independiente de las limitaciones propias del individuo o de las derivadas del
contexto de uso Martínez (2014). La usabilidad en una aplicación cumple con su
función principal siempre que se utilice con efectividad, eficiencia y
satisfacción en un contexto específico de uso y la accesibilidad debe de hacer
posible usar esa aplicación sin importar las capacidades diferentes del
individuo ya sea visual, motriz o alguna otra.
5. Sistemas Distribuidos y Bases de Datos No Relacionales
Las
aplicaciones tienen que almacenar una vasta cantidad de información, esto se
debe a la evolución constante de la Web. Al comenzar las redes sociales y la
Web 2.0 se comenzaron a diseñar aplicaciones basadas en sistemas Distribuidos
ya que la velocidad de respuesta debe ser mayor a la que ofrece un servidor
central de aplicaciones. Los sistemas distribuidos ahora son muy utilizados
sobre todo por el nuevo concepto BigData el cual según Barranco (2012) es la
tendencia en el avance de la tecnología que ha abierto las puertas hacia un
nuevo enfoque de entendimiento y toma de decisiones, la cual es utilizada para
describir enormes cantidades de datos (estructurados, no estructurados y
semiestructurados) que tomaría demasiado tiempo y sería muy costoso cargarlos a
un base de datos relacional para su análisis.
De tal
manera el concepto de Big Data aplica para toda aquella información que no
puede ser procesada o analizada utilizando procesos o herramientas
tradicionales es por ello que muchas aplicaciones utilizan Bases de Datos No
Relacionales para almacenar la información.
Existen
plataformas como Hadoop (2009), es un marco de referencia que permite el
procesamiento distribuido de grandes conjuntos de datos a través de grupos de
computadoras que utilizan modelos de programación simples. Es decir que no
requiere que la arquitectura o hardware sea muy costosa o de última generación.
En cuanto a las bases de datos no relacionales Hadoop se integra perfectamente
con Cassandra (2008) la cual es una distribución de un almacén de datos
clave-valor altamente escalable y estructurada. Entre las dos aplicaciones dan
soporte y crecimiento horizontal a las necesidades de las aplicaciones
distribuidas como es el BigData para tener disponible la información a
diferentes empresas tales como Facebook entre otras.
6. Arquitectura de Software
De acuerdo
con Cervantes (2010) la Arquitectura de Software se refiere a la forma de cómo
se estructura el diseño de un sistema, este se crea en etapas tempranas del
desarrollo. La finalidad de estructurar los componentes o módulos así como el
diseño del sistema tiene los propósitos de: satisfacer atributos de calidad en
cuanto a desempeño, seguridad, mantenibilidad, y servir como guía en el
desarrollo del proyecto. El objetivo de la arquitectura de Software consiste en
desarrollar sistemas de software grandes de forma eficiente, estructurada y con
capacidad de reutilización.
La
Arquitectura de Software es una de las áreas los Ingenieros de Software
integran en los diseños de software que realizan. Esto se debe a que la
experiencia y el tiempo que tienen desarrollado proyectos les demandan tener un
diseño arquitectónico de referencia. En la figura 1 se observa los pasos a
seguir para definir una Arquitectura de Software:
Etapas del diseño de una arquitectura
de Software
Figura 1.
Etapas del diseño de una arquitectura de Software, Barraza (2014).
Determinar
los requerimientos de la Arquitectura de Software: involucra crear un modelo
desde el levantamiento de requerimientos que guiaran el diseño de la
arquitectura basado en atributos de calidad esperado.
Diseño de
la Arquitectura de Software: definir la estructura y las responsabilidades de
los componentes que comprenderán la Arquitectura.
Validación
de la Arquitectura de Software: básicamente se prueba la arquitectura pasando a
través del diseño contra los requerimientos actuales y cualquier requerimiento
futuro.
En Camacho
et al. (2004), dice que en la medida que los sistemas de software crecen en
complejidad, bien sea por número de requerimientos o por el impacto de los mismos,
se hace necesario establecer medios para el manejo de esta complejidad. Las
Arquitecturas de Software más comunes van desde Aplicaciones Monolíticas,
Arquitectura Cliente-Servidor, Arquitectura Cliente-Servidor Mejorada,
Arquitectura de 3 niveles, Arquitectura de N-niveles y Arquitectura Orientada a
Servicios (SOA).
Los
Ingenieros de Software que comienzan a desarrollar plataformas tecnológicas
robustas y escalables necesitan implementar diferentes técnicas para mejorar su
codificación. Una de ellas es la identificación de problemas repetitivos en la
programación por lo que se emplean patrones de diseño de software para dar
solución a los problemas que se necesitan solventar.
7. Patrones de Diseño
Los
patrones de diseño de software son una parte importante en el diseño de la
Arquitectura y en el Desarrollo de software en específico de la codificación de
las aplicaciones. Estos patrones tienen su origen en el diseño de sistemas con
el paradigma de la Programación Orientada a Objetos y a problemas que estos no
pueden resolver y que son muy recurrentes en la programación de software. De
acuerdo con Gamma et al. (1995) un patrón de diseño es una descripción de
clases y objetos comunicándose entre sí, adaptada para resolver un problema de
diseño general en un contexto particular.
Los
patrones de diseño ayudan a mantener un código reutilizable y tener mayor
control sobre los problemas que son recurrentes, de ahí que sean una solución
factible para su implementación en múltiples aplicaciones.
Estos
patrones son parte fundamental para el desarrollo de soluciones modulares,
mantenibles y escalables. Los patrones de diseño se integran junto al modelado
de sistemas con UML para identificar claramente los patrones empleados en cada
componente, módulo o clase del sistema que se desarrolle. Este modelado forma
parte de la Arquitectura de Software.
Se tienen
3 categorías de patrones de diseño que se aplican dependiendo de los problemas
identificados en el desarrollo de software: patrones creacionales, patrones
estructurales y patrones de comportamiento.
8. Desarrollo de Software Orientado a Servicios
Este tipo
de Arquitectura de Software, es una de las arquitecturas más usadas para el
desarrollo de soluciones de software robustas, escalables y de alto desempeño.
De acuerdo con Torre et al. (2010) las aplicaciones orientadas a servicios
permiten a una aplicación ofrecer su funcionalidad como un conjunto de
servicios para que sean consumidos por clientes y se especializan en
proporcionar un esquema basado en mensajes de nivel de aplicación. Las
características principales de este tipo de aplicaciones es su alta
disponibilidad debido en parte a que cada servicio es autónomo y no afecta a la
aplicación en su totalidad si llegará a fallar. Los clientes y servicios son
autónomos y pueden ser consumidos de manera remota a través de la red. El
mantenimiento de sistemas robustos no es complicado ya que se actualizan los
servicios o se crean nuevos sin afectar directamente a los demás o la
aplicación cliente que los consuma. Según Somerville (2005) existen 3
estándares fundamentales para la comunicación o publicación de servicios Web
los cuales son:
SOAP (del
Ingles Simple Object Access Protocol): este estándar define una organización
para el intercambio de datos estructurados entre servicios Web.
WSDL (del
Ingles Web Services Description Language): este protocolo define cómo
representar las interfaces de servicios Web.
UDDI(del
Ingles Universal Description, Discovery and Integration): este estándar de
búsqueda define como se puede organizar la información de descripción de
servicios, usada por los solicitantes de los servicios para encontrar
servicios.
Para los
Ingenieros de Software es importante tener las habilidades necesarias para
desarrollar plataformas tecnológicas que implementen la Arquitectura Orientada
a Servicios (SOA) que tiene una gran penetración en el mercado de las
aplicaciones empresariales, por sus bondades y características de alta
disponibilidad.
9. Calidad en el Desarrollo de Software y Desarrollo Orientado a Pruebas
Uno de los
propósitos de la Ingeniería de Software según Kendall y Kendall (2005) son el
aseguramiento de la calidad de los productos Software diseñando los sistemas en
un enfoque modular; documentar el software con las herramientas adecuadas y por
último probar, mantener y auditar el Software.
Una de las
técnicas más utilizadas e implementadas en los últimos años es el desarrollo de
Software dirigido a pruebas (del inglés TDD) donde Blé et al. (2010) propone
toda una técnica para disminuir los problemas relacionados con el desarrollo de
software tradicional en especial a los métodos tradicionales como el de
cascada. Esta técnica se enfoca en 3 puntos principales:
·
Implementación de funciones justas
que el cliente necesita y no más.
·
Minimización de número de defectos
que llegan al Software en fase de producción.
·
Desarrollar Software modular,
altamente reutilizable y preparado para las adecuaciones.
El
desarrollo de Software Dirigido por Pruebas es un nuevo paradigma que ofrece la
facilidad de pensar en las Pruebas de Software antes que en la codificación,
logrando con minimizar lo más posible los errores generados en etapas de
desarrollo.
La calidad
en el Desarrollo de Software esta intrínsecamente relacionado con la calidad en
el proceso de Software para crearlo. A través de la implantación de procesos de
desarrollo probados, bien documentados e institucionalizados, una compañía es
capaz de incrementar la precisión de sus planificaciones, dando la posibilidad
de establecer compromisos con sus clientes que antes no podía o no era capaz de
asumir Jiménez (2012).
10. Modelos y Metodologías de Desarrollo de Software
Al hablar
de la implementación de un modelo o una metodología para el desarrollo de
software estamos haciendo referencia a la calidad de los productos de software.
La obtención de un Software con calidad según Fernández, García, & Beltrán
(1995), implica la utilización de metodologías o procedimientos estándares para
el análisis, diseño, programación y prueba del software que permitan unificar
el trabajo, tanto para la labor de desarrollo como para el control de la
calidad del software. Esto se debe a que los modelos tienen definidas las áreas
de proceso a realizar para llevar a cabo la gestión de proyectos de software
con los diferentes roles que intervienen. Existen multitud de modelos para la
gestión de la calidad del software y otros sistemas y normas de gestión que se
han aplicado sobre estos procesos para su evaluación Martín-Avil (2010).
En este
apartado se hablará de la metodología ágil para la administración de proyectos
de Software SCRUM y el modelo mexicano para el desarrollo de Software MoProSoft
y el modelo internacional CMMI.
La
metodología ágil SCRUM de acuerdo con Palacio & Ruata (2011) es aplicado al
desarrollo de Software donde se emplea el principio ágil del desarrollo
iterativo e incremental llamado comúnmente sprint a cada una de las iteraciones
de desarrollo. En la figura 2 se observa el modelo de SCRUM así como los
componentes que lo integran.
Metodología SCRUM
Figura 2.
Metodología SCRUM.
Ventura
& Peñaloza (2006) define a MoProSoft como un modelo de procesos para la
industria de software nacional (México), que fomenta la estandarización de su
operación a través de la incorporación de las mejores prácticas en gestión e
ingeniería de software.
Los beneficios de MoProSoft son los siguientes:
·
Las empresas logran un mayor control
sobre su desempeño en el mercado al cubrir el modelo desde áreas de dirección
hasta la operación.
·
El costo de personal se reduciría si
se enfoca a la educación y a la capacitación sobre un modelo.
·
Las empresas pequeñas, al seguir
procesos similares, podrían asociarse con mayor facilidad para afrontar
proyectos de mayor envergadura.
·
La exportación de servicios de
software de las empresas mexicanas gracias a que MoProSoft considera las
prácticas reconocidas en el ámbito internacional.
Cabe
señalar que la norma MoProSoft ha ayudado a la industria de software en México
a estandarizar procesos y madurar en cada uno de los niveles que tiene los
cuales son 5 si no se cuenta el nivel 0.
El modelo
Internacional (del Inglés Capability Maturity Model Integration) se ha
convertido mundialmente en un requisito para acceder a la exportación de servicios
de Software. La norma CMMI-DEV (2010) provee una guía para implementar una
estrategia de calidad y mejorar los procesos de una organización que se dedica
al desarrollo y/o mantenimiento de software. Dispone de un esquema de
certificación creado sobre organismos privados donde el SEI (del Ingles
Software Engineering Institute) creo la norma para la estandarización de áreas
y procesos para lograr una mejor integración de los desarrollos de las empresas
que lo manejan. Al ser una norma Internacional hace más fácil la integración de
procesos de una empresa a otra aunque se encuentren en diferentes países o
continentes. CMMI tiene 5 niveles los cuales certifica a 4 de ellos.
Conclusión
En este
artículo se abordan diferentes tecnologías de la información, metodologías y
paradigmas de desarrollo de software y como se complementan entre sí para
beneficio de las necesidades que tiene constantemente la sociedad de la
información y el conocimiento.
La
evolución de nuevas plataformas tecnológicas brinda una oportunidad importante
para que diferentes áreas de las Tecnologías de la Información converjan para
un fin común que es desarrollar una solución tecnológica robusta, escalable,
mantenibles y sobre todo empleando calidad en su proceso desarrollo que se
manifiesta en la calidad del producto desarrollado.
Es por
ello que los ingenieros, desarrolladores y especialistas en Tecnologías de la
Información y Desarrollo de Software deben estar en constante actualización
para solventar las necesidades de las empresas, organizaciones o entidades que
lo soliciten.



No hay comentarios.:
Publicar un comentario