Sei sulla pagina 1di 4

 

LECTURA SEMANAL  

LECTURA UNO: INGENIERÍA DE SOFTWARE: PRINCIPIOS Y DEFINICIONES


Los sistemas de software son entes supremamente complejos. Incluso los más simples desarrollos
requieren un nivel de abstracción y la coexistencia de un número tan alto de disciplinas, que
sobrepasan en términos de complejidad otras creaciones intelectuales de índole física y
lógica que los preceden. Y el crecimiento de la complejidad de los sistemas de software ha
sido exponencial desde el momento de los primeros desarrollos hasta el día de hoy y se
prevé que a futuro la tendencia continúe.
Sin embargo, cuando se comenzaron a hacer desarrollos de software no se consideró que su
importancia, dispersión y complejidad fueran a ser tan altas. Durante muchos años, incluso en
un momento en que el software se involucró de manera eficiente en muchas áreas del
conocimiento y operar humanos, no se prestó atención suficiente a los procesos que se
hacían necesarios para que los resultados entregados fueran de la calidad y confiabilidad
adecuadas. Durante mucho tiempo el desarrollo de software fue un proceso alquímico, cuyos
secretos y mejores prácticas eran transmitidos de manera directa por los practicantes del
oscuro arte a sus sucesores. La idea de estandarizar los procesos, de generar prácticas
comunes documentadas que permitieran garantizar los desarrollos y construir una base común
sobre la que se cimentaran futuros procesos de desarrollo era ajena a la mayor parte de las
personas vinculadas con procesos de desarrollo.
En la década de los años 60, cuando avances en la electrónica hicieron posibles
computadores cada vez más poderosos, en los que resultó posible abordar problemas y
proyectos de software de una complejidad antes imposible, el escenario cambió. Los
desarrollos del momento resultaron ser órdenes de magnitud más complejos que cualquier
cosa que se hubiera intentado hasta ese momento, y por tanto los equipos responsables de
dichos proyectos crecieron, se diversificaron en sus disciplinas, y generaron nuevos retos en
términos de planeación, seguimiento, control y calidad. Fue entonces cuando, en 1968, en el
seno de la Software Engineering Conference organizada por la OTAN, apareció por primera
vez el término Ingeniería de Software. La idea de la utilización del término y de la conferencia
en general era llamar la atención del mundo del desarrollo de software hacia la percibida
crisis en que se encontraba en ese momento.
Sin embargo y antes de adentrarnos en las definiciones y componentes de la ingeniería de
software, resulta apenas necesario definir qué es software. Durante mucho tiempo, y en la
mayor parte de las mentes (De hecho, el autor se atreve a pensar que en la mente de los
lectores el concepto existe bajo la forma en que se presentará a continuación), el software se
consideró como esa forma intangible de información e instrucciones que indican a un

En alianza con

 
Colombia
computador qué hacer. Y nada más. Y a pesar de que en ciertos contextos esta definición
puede resultar adecuada y suficiente, a medida que las soluciones de software se hacen más
y más complejas y se encuentran en más y más áreas de conocimiento y escenarios de
acción, resulta necesario incluir otros términos que amplíen y hagan más precisa la definición
antes presentada.
¿QUÉ ES SOFTWARE?
En línea con lo dicho en el párrafo anterior, hoy en día resulta importante considerar
diferentes aspectos y componentes que forman parte de un producto de software (Porque
entiéndase esto: en la actualidad, el software es un producto, que comparte muchas de las
características, limitaciones y ventajas de aquellos elementos - usualmente físicos- que son
considerados dentro de la categoría de producto). En primera instancia y de manera
natural, el código fuente, resultado del proceso de escritura de código–el programa, si se
quiere-, es un elemento central de un producto de software. Sin embargo, de manera
paralela y con una importancia muy alta se encuentran los elementos de datos que son
necesarios para su funcionamiento (téngase en cuenta que la manipulación de datos
complejos sigue siendo uno de los principales objetivos de desarrollar una solución de
software, y las estructuras, herramientas, convenciones y procesos existentes para llevar a
cabo el almacenamiento, tránsito, presentación y replicación de dichos datos son cada vez
más sofisticados). En tercer lugar, se encuentran además los documentos asociados con el
producto, y con el proceso de generación de dicho producto.
●En la primera categoría se encuentran los manuales de uso, instalación y mantenimiento de
la aplicación
●Y en la segunda están, por ejemplo, los documentos pertinentes a los procesos de análisis y
diseño del sistema, sus estructuras de datos, y los procesos esperados de operación.
En este momento histórico entonces, resulta bastante más complejo que antes definir
exactamente qué es software. Y a pesar de que no se pretende tener la última palabra en
ese sentido (para más visiones y enfoques de la definición se recomienda revisar la
bibliografía del módulo), para fines prácticos y dentro del contexto de este módulo, se
trabajará con base en la siguiente definición: se entiende como producto de software no
solo al conjunto de programas ejecutables, sino también a los archivos anexos, estructuras de
datos y documentos adicionales que permiten que dichos programas operen de manera
adecuada, desarrollados todos siguiendo un proceso determinado, con el fin de solucionar
una necesidad de una persona o compañía.
Con esta definición es posible abarcar un conjunto mucho más amplio y sobre todo acertado
de componentes de lo que generalmente se conoce simplemente como software. De la misma
manera es posible hacerse a una idea más clara de su complejidad y de la diversidad de
participantes y procesos que son requeridos para su correcta implementación. Con base en
esto, es posible pasar a la siguiente parte, la definición de proceso de software.
PROCESOS DE SOFTWARE
Si entendemos el software como un ente cada vez más complejo y con una creciente
participación en muchos aspectos de la vida cotidiana (hoy en día, la mayor parte de los
procesos de transporte, compra, comunicaciones e incluso ley y gobierno tienen en el centro
de su operación componentes complejos de software), resulta evidente que un resultado de
tal complejidad no resulta bien de manera consistente si no está apoyado en un proceso
ordenado. Este tipo de procesos, de manera evidente, se conocen como procesos de
software.
Sin embargo, no existe una única aproximación a un proceso de software que dé buenos
resultados. En general y dependiendo de un conjunto de características tales como el tipo
En alianza con

 
Colombia
de proyecto, el tipo de cliente, las restricciones de tiempo, dinero o tecnología y las
capacidades e intereses mismos de la compañía de desarrollo, es posible abordar un
proyecto de software desde varias perspectivas. De hecho, en la siguiente semana del
módulo hablaremos con un mayor nivel de detalle de algunos enfoques utilizados por
procesos de software conocidos. Por ahora sin embargo y con el fin de poseer una
terminología común, se dará una definición de proceso de software que simplifica y
comprende los aspectos más importantes que lo describen: se entiende como proceso de
software, o proceso de desarrollo de software a la estructura que rige el desarrollo de un
proyecto de software. Esta estructura está compuesta por un conjunto de actividades cuyo
objetivo es asegurar el desarrollo de un producto de calidad dentro de las restricciones
establecidas.
Resulta claro de esta definición, que pueden existir un número enorme de posibles variaciones
en la implementación de un proceso de software. Esto es cierto y a pesar de que comparten
un número de características básicas (existen cuatro actividades comunes a todos los
procesos de software:
●Especificación
●Desarrollo
●Pruebas y
●Evolución del software, hay muchos enfoques alrededor del tema.
Sin embargo, por el momento basta con comprender la definición presentada, para poder
seguir con la presentación de los conceptos básicos relacionados con la ingeniería de
software, abordando el concepto central de la cuestión.

¿QUÉ ES LA INGENIERÍA DE SOFTWARE?


La construcción de productos de software de alta calidad que satisfagan a los clientes que
los utilizarán es un objetivo qué, a pesar de ser claro y comprensible presenta un número
importante de retos. Con el fin de enfrentar dichos retos se desarrolló una disciplina de la
ingeniería concentrada en encontrar las mejores prácticas, procesos y estándares para
construir software dentro de las restricciones dadas por la tecnología, el tiempo y el
presupuesto de los que se dispone. Esta disciplina es, desde luego, la ingeniería de software.
El término ingeniería dentro de la denominación responde al interés por encontrar soluciones
prácticas y aplicables a los problemas que se presentan en un escenario determinado y al
enfoque organizado y sistemático que se adopta durante este proceso. El concepto de
software, a pesar de que es auto explicativo dentro del contexto en que se encuentra, hace
referencia a la definición de software que se hizo previamente, puesto que la ingeniería de
software se interesa por todos los aspectos y componentes del software en cuestión.
Mediante la utilización de conceptos relacionados con la generación de modelos para
enfrentar las situaciones reales que debe manejar, la ingeniería de software provee una
aproximación sistemática, repetible, verificable y efectiva al desarrollo de soluciones
complejas de software. Con base en lo enunciado hasta ahora, es posible sintetizar una
definición de la siguiente manera: se define como ingeniería de software a la disciplina de la
ingeniería que se ocupa del conjunto de procesos, prácticas y estándares necesarios para
abordar todos los aspectos del proceso de construcción de un producto de software de
calidad, dentro de las restricciones de tiempo y presupuesto que existan.
Esta definición plantea un escenario en el que la ingeniería de software es diferente de
manera fundamental de conceptos tales como las ciencias de la computación y la ingeniería
de sistemas. Mientras que las ciencias de la computación se ocupan de los fundamentos
teóricos de los sistemas de software y la ingeniería de sistemas se refiere a los aspectos
En alianza con

 
Colombia
generales de un sistema complejo (incluyendo hardware y restricciones de tipo administrativo),
la ingeniería de software aborda la resolución de los problemas prácticos relacionados de
manera fundamental con los componentes de software de un sistema determinado. Ahora
bien, con base en la definición presentada, resulta evidente que el conjunto completo de
actividades relacionadas con la ingeniería de software es grande. En este módulo, sin
embargo, el foco está en un subconjunto de las actividades de tipo técnico. Vistas de
manera general, las actividades técnicas que se abordarán son:
●Levantamiento de requerimientos. Durante el levantamiento de requerimientos la idea es
determinar de manera inequívoca y concertada las funcionalidades que el producto de
software debe tener para satisfacer las necesidades del cliente. De esta manera, el trabajo
en este punto está estrechamente vinculado con el diálogo entre el desarrollador y el cliente
y la utilización de herramientas y procesos que faciliten la comunicación para poder
determinar el mejor curso de acción y diseño a tomar.
●Análisis y diseño del sistema. Durante el análisis, se pretende generar, con base en los
resultados del levantamiento de requerimientos, un modelo del sistema que sea completo,
correcto y posible de implementar. La representación de este modelo usualmente se apega a
estándares tales como los definidos por UML (Unified Modeling Language), que serán
discutidos en la tercera unidad de este módulo.
A lo largo del proceso de diseño, se determinan los objetivos que debe cumplir el diseño de
la aplicación que implemente el modelo definido por el análisis, así como los componentes
que se utilizarán, las restricciones de hardware presentes en el proyecto y la manera como el
resultado final de la implementación será desplegado en el ambiente de instalación y
funcionamiento.
Una vez terminados estos procesos, el proyecto de software está listo para entrar en el
proceso de implementación, en el que los resultados previamente obtenidos serán
concretados en el código, de tal manera que se pueda contar al final con un producto
tangible que cumpla con las necesidades y restricciones especificadas por el cliente y
refinadas en conjunto con el desarrollador a lo largo del proceso de desarrollo de software.
Se espera que con las definiciones y planteamientos presentados en este documento resulte
clara la importancia y pertinencia de comprender y aplicar los conceptos relacionados con
la ingeniería de software a un proyecto de desarrollo si se espera que éste genere un
producto que no solamente cumpla con los requerimientos mínimos definidos, sino que
satisfaga las necesidades de crecimiento, adaptabilidad y cumpla con las crecientes
exigencias de calidad presentes en los mercados de software de la actualidad. Sobre la
base de esta comprensión y compromiso, es posible continuar abordando aspectos más
técnicos y procedimentales de la ingeniería de software en las siguientes lecturas y secciones
del módulo.

En alianza con

 
Colombia

Potrebbero piacerti anche