¿Qué es la ingeniería de Software?
¿Qué es la ingeniería de software? ¿Existe alguna visión alternativa que resuelva su desafío? Fundamentalmente, estas son las dos preguntas que intenta responderse en esta página web que originalmente fue un ensayo como parte de mi tesis de Maestría en Ciencia de la Computación ([Zavala 2000]), sin embargo, nunca la defendí. Con los años, ese ensayo se ha convertido muy popular y ello me obligó a profundizar mis investigaciones al respecto. En 2011, finalmente presenté mi tesis de grado que se centra en este tema, del cual muestro algunos detalles.
En la primera parte se aborda la concepción técnica o tradicional de lo que se le atribuye a la definición de ingeniería de software. Información complementaria pueden obtenerla en Wikipedia y en la Guide to Software Engineering Body of Knowledge (SWEBoK).
En la segunda parte se remite al lector a un ensayo que se publicó en el libro de H. Oktaba y M. Piattini (Eds.) Software Process Improvement for Small and Medium Enterprises: Techniques and Case Studies, en 2008.
En la tercera parte se expone brevemente una concepción ecléctica de lo que es la ingeniería de software a partir de mis últimas investigaciones, condensadas en la tesis de maestría con la cual obtuve el grado en 2011. En este ensayo se desnudan los mitos que se han generado en torno a la ingeniería de software a partir de investigar sus fundamentos. La tesis estará en línea próximamente en la biblioteca de la Universidad Autónoma Metropolitana - Unidad Azcapotzalco.
El Paradigma de lo Orientado a Objetos La Programación Orientada a Objetos Fundamentos de lo Orientado a Objetos Proceso
Unificado y MSF; complementos tecnológicos El
ciclo de vida del software en el Proceso Unificado Figura 1.
Estructura del Proceso Unificado Figura 2.
Arquitectura lógica de tres capas de una aplicación
cliente/servidor Figura 3.
Arquitectura física de tres capas de la aplicación
cliente/servidor Comentario Final... para
reflexionar Según la definición del IEEE, citada por
[Lewis 1994] "software es la suma total de los
programas de computadora, procedimientos, reglas, la
documentación asociada y los datos que pertenecen a un sistema
de cómputo". Según el mismo autor, "un producto de
software es un producto diseñado para un usuario". En este
contexto, la Ingeniería de Software (SE del inglés Software
Engineering) es un enfoque sistemático del desarrollo,
operación, mantenimiento y retiro del software", que en
palabras más llanas, se considera que "la Ingeniería de
Software es la rama de la ingeniería que aplica los
principios de la ciencia de la computación y las matemáticas
para lograr soluciones costo-efectivas (eficaces en costo o
económicas) a los problemas de desarrollo de software", es
decir, "permite elaborar consistentemente productos
correctos, utilizables y costo-efectivos" [Cota 1994]. El proceso de ingeniería de software
se define como "un conjunto de etapas parcialmente ordenadas
con la intención de logra un objetivo, en este caso, la
obtención de un producto de software de calidad" [Jacobson 1998].El proceso de desarrollo de software
"es aquel en que las necesidades del usuario son traducidas
en requerimientos de software, estos requerimientos transformados
en diseño y el diseño implementado en código, el código es
probado, documentado y certificado para su uso operativo".
Concretamente "define quién está haciendo qué, cuándo
hacerlo y cómo alcanzar un cierto objetivo" [Jacobson 1998]. El proceso de desarrollo de software
requiere por un lado 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 cuatro grandes fases:
concepción, elaboración, construcción y transición. La
concepción define le alcance del proyecto y desarrolla un caso
de negocio. La elaboración define un plan del proyecto,
especifica las características y fundamenta la arquitectura. La
construcción crea el producto y la transición transfiere el
producto a los usuarios. Actualmente se encuentra en una etapa de
madurez el enfoque Orientado a Objetos (OO) como paradigma del
desarrollo de sistemas de información. El Object Management
Group (OMG) es un consorcio a nivel internacional que integra
a los principales representantes de la industria de la
tecnología de información OO. El OMG tiene como objetivo
central la promoción, fortalecimiento e impulso de la industria
OO. El OMG propone y adopta por consenso especificaciones
entorno a la tecnología OO. Una de las especificaciones más
importantes es la adopción en 1998 del Lenguaje de Modelado
Unificado o UML (del inglés Unified Modeling Language) como
un estándar, que junto con el Proceso Unificado están
consolidando la tecnología OO. Para mayor información consulta las siguientes
direcciones electrónicas: El
Paradigma de lo Orientado a Objetos Antes de analizar los pasos del proceso de
desarrollo de software se expondrán los conceptos fundamentales
del paradigma que guía la tecnología OO. Existen conceptos ligados en torno a la
tecnología orientada a objetos: el paradigma, los principios, el
análisis y el diseño, mismos que a continuación se comentan. La
Programación Orientada a Objetos La Programación Orientada a Objetos
(OOP por sus siglas en inglés de Object Oriented Programming)
como paradigma, "es una forma de pensar, una filosofía, de
la cual surge una cultura nueva que incorpora técnicas y
metodologías diferentes. Pero estas técnicas y metodologías, y
la cultura misma, provienen del paradigma, no lo hacen. La OOP
como paradigma es una postura ontológica: el universo
computacional está poblado por objetos, cada uno
responsabilizándose por sí mismo, y comunicándose con los
demás por medio de mensajes" [Greiff 1994]. Se debe distinguir que la OOP como
paradigma (enfoque o manera de visualizar la realidad) y como
metodología (colección de características para la ingeniería
de software) no son la misma cosa. Sin embargo, la publicidad nos
confunde asociando la OOP más a una metodología, que al
paradigma. De aquí que "el interés en la OOP radica más
en los mecanismos que aporta para la construcción de programas
que en aprovechar un esquema alterno para el modelado de procesos
computacionales" [Greiff 1994]. La Programación Orientada a Objetos desde
el punto de vista computacional "es un método de
implementación en el cuál los programas son organizados como
grupos cooperativos de objetos, cada uno de los cuales representa
una instancia de alguna clase, y estas clases, todas son miembros
de una jerarquía de clases unidas vía relaciones de
herencia" [Greiff
1994]. Fundamentos
de lo Orientado a Objetos El paradigma OO se basa en el concepto de
objeto. Un objeto es aquello que tiene estado (propiedades
más valores), comportamiento (acciones y reacciones a mensajes)
e identidad (propiedad que lo distingue de los demás objetos).
La estructura y comportamiento de objetos similares están
definidos en su clase común; los términos instancia y objeto
son intercambiables. Una clase es un conjunto de objetos
que comparten una estructura y comportamiento común. La diferencia entre un objeto y una clase
es que un objeto es una entidad concreta que existe en tiempo y
espacio, mientras que una clase representa una abstracción, la
"esencia" de un objeto, tal como son. De aquí que un
objeto no es una clase, sin embargo, una clase puede ser un
objeto. En el enfoque OO las propiedades del objeto
son claves. Los principios del modelo OO son:
abstracción, encapsulación, modularidad y jerarquía,
fundamentalmente, y en menor grado tipificación (typing),
concurrencia, persistencia. [Booch 1986] dice que si un
modelo que se dice OO no contiene alguno de los primeros cuatro
elementos, entonces no es OO. Según [Booch 1986], los beneficios
del enfoque OO son: El mismo autor considera que el principal
beneficio del OOD es que da un mecanismo para formalizar el
modelo de la realidad. Las relaciones entre objetos definen el
comportamiento del sistema. Se dice que un objeto es un actor,
si su única función es operar sobre otros objetos. El objeto es
un servidor si solo es manejado por otros objetos y es un agente
si tiene ambas propiedades. Se dice que los objetos actúan entre
sí mediante mensajes, es decir, acciones que pide el
objeto transmisor que ejecute el objeto receptor. Dependiendo del
comportamiento definido para un objeto, éste tomará las
acciones para ejecutar o no el mensaje, de manera apropiada. [Greiff 1994] comenta que
el Análisis Orientado a Objetos (OOA por sus siglas en
inglés de Object Oriented Analysis) "es un método de
análisis que examina los requerimientos desde la perspectiva
de las clases y objetos encontrados en el vocabulario de del
dominio del problema". Según [Booch 1986], el Diseño
Orientado a Objetos "es un método de diseño abarcando
el proceso de descomposición orientado a objetos y una
notación para representar ambos modelos lógico y físico
tal como los modelos estáticos y dinámicos del sistema bajo
diseño". En cuanto a las metodologías OO, diremos
que hay un gran número de métodos orientado a objetos
actualmente. Muchos de los métodos pueden ser clasificados como
orientados a objetos porque soportan de manera central los
conceptos de la orientación a objetos. Algunos de las
metodología más conocidas y estudiadas hasta antes del UML
según [Jacobson
1992] son: Actualmente las metodologías más
importantes de análisis y diseño de sistemas han confluido en
lo que se es el UML, bajo el respaldo del Object Management Group. El Proceso Unificado "es un
proceso de desarrollo de software configurable que se adapta a
través de los proyectos variados en tamaños y complejidad. Se
basa en muchos años de experiencia en el uso de la tecnología
orientada a objetos en el desarrollo de software de misión
crítica en una variedad de industrias por la compañía
Rational", donde confluyen 'los tres amigos' como se llaman
a sí mismos o los tres grandes OO: Grady Booch, James Rumbaugh e
Ivar Jacobson [M&R
1998]. El Proceso Unificado guía a los equipos de
proyecto en cómo administrar el desarrollo iterativo de un modo
controlado mientras se balancean los requerimientos del negocio,
el tiempo al mercado y los riesgos del proyecto. El proceso
describe los diversos pasos involucrados en la captura de los
requerimientos y en el establecimiento de una guía
arquitectónica lo más pronto, para diseñar y probar el sistema
hecho de acuerdo a los requerimientos y a la arquitectura. El
proceso describe qué entregables producir, cómo desarrollarlos
y también provee patrones. El proceso unificado es soportado por
herramientas que automatizan entre otras cosas, el modelado
visual, la administración de cambios y las pruebas. Proceso
Unificado y MSF; complementos tecnológicos Según [M&R 1998], "más
que una metodología, Microsoft Solutions Framework (MSF) es una serie de modelos flexibles
interrelacionados que guían a una organización sobre como
ensamblar los recursos, el personal y las técnicas necesaria
para asegurar que su infraestructura tecnológica y sus
soluciones cumplan los objetivos de negocio. MSF mantiene una
relación clara entre los objetivos de negocio y las
implementaciones tecnológicas". "MSF se puede utilizar por sí mismo o
con otras herramientas y técnicas como el Proceso Rational
[Proceso Unificado] para planear, construir y administrar el
desarrollo de soluciones de negocio a la medida" [M&R 1998]. "El proceso Unificado es un proceso de
desarrollo de software configurable que se adapta a proyectos que
varían en tamaño y complejidad. Se basa en muchos años de
experiencia en el uso de la tecnología de objetos en el
desarrollo de software de misión crítica en una variedad de
industrias. Uno de los componentes clave es el UML"
[M&R 1998]. MSF proporciona las técnicas ligadas a la
tecnología y el Proceso Unificado la guía detallada para el
desarrollo de software minimizando los riesgos. El Proceso Unificado ha adoptado un enfoque
que se caracteriza por: El Proceso Unificado y MSF se enfocan en la
arquitectura como el centro del desarrollo para asegurar que el
desarrollo basado en componentes sea clave para un alto nivel de
reuso. MSF considera que hay cuatro perspectivas de
arquitectura que cumplen los requerimientos de una empresa [M&R 1998]: El Modelo de Equipo de MSF muestra como
estructurar equipos de alto desempeño para crear soluciones más
rápido, mejor y más baratas. El Modelo de Equipo de MSF se basa
en las formas de organizar equipos para crear los propios
productos de Microsoft. Hace énfasis en las comunicaciones
claras y en un equipo de iguales con papeles y responsabilidades
claras en todo el proyecto. La calidad del producto se asegura
por cada miembro del equipo. El Proceso Unificado proporciona
más detalle y guía para algunos de los roles en el proyecto. Una vista arquitectónica es
"una descripción simplificada (una abstracción) de un
sistema desde una perspectiva particular o punto de vista, que
cubre particularidades y omite entidades que no son relevantes a
esta perspectiva" [Booch 1998]. Según el mismo autor, las características
primordiales del Proceso Unificado son: El Proceso Unificado es un proceso porque
"define quién está haciendo qué, cuándo lo hacer y cómo
alcanzar cierto objetivo, en este caso el desarrollo de
software" [Jacobson
1998]. Según [Booch 1998], los conceptos clave del Proceso Unificado
son: El ciclo de
vida del software en el Proceso Unificado Las fases del ciclo de vida del software
son: concepción, elaboración, construcción y transición. La
concepción es definir el alcance del proyecto y definir el caso
de uso. La elaboración es proyectar un plan, definir las
características y cimentar la arquitectura. La construcción es
crear el producto y la transición es transferir el producto a
sus usuarios [Booch
1998]. Figura 1. Estructura del
Proceso Unificado Según [Microsoft 1997], el
diseño de software se realiza a tres niveles: conceptual,
lógico y físico. Figura 2. Arquitectura
lógica de tres capas de una aplicación cliente/servidor Para mayor información consulta las siguiente dirección
electrónica: Un ingeniero de software necesita de herramientas, entre
ellas las herramientas de Rational son las más avanzadas, pero son muy
costosas. También puede utilizar las herramientas de oficina como un editor de
textos, un modelador de datos, etc., muchas de ellas son de código abierto y
aún están de desarrollo. Utiliza las que más te sean de utilidad. El diseño conceptual se considera
como un análisis de actividades y consiste en la solución de
negocios para el usuario y se expresa con los casos de uso. El
diseño lógico es la solución del equipo de proyecto del
negocio y consiste de las siguientes tareas: Una forma de obtener estos requerimientos
es construir una matriz usuarios-actividades de negocios,
realizar entrevistas, encuestas y/o visitas a los usuarios, de
tal manera que se obtenga quién, qué, cuándo, dónde y por
qué de la solución. El diseño lógico traduce los
escenarios de uso creados en el diseño conceptual en un conjunto
de objetos de negocio y sus servicios. El diseño lógico se
convierte en parte en la especificación funcional que se usa en
el diseño físico. El diseño lógico es independiente de la
tecnología. El diseño lógico refina, organiza y detalla la
solución de negocios y define formalmente las reglas y
políticas específicas de negocios. Un objeto de negocios es la
encapsulación de un servicio que abstrae las cualidades
esenciales de algo de interés. Un servicio es una unidad con
capacidad de cómputo. Un servicio debe satisfacer lo siguiente: Los objetos de negocio deben verificarse y
probarse de tal manera que asegure que los módulos operen como
unidades completas de trabajo. Las tareas de verificación
incluyen: El diseño lógico comprende las siguientes
tareas: Para definir los objetos de negocios y sus
servicios se puede usar la técnica de análisis nombre-verbo de
los escenarios de uso. También se puede emplear la técnica
sujeto-verbo-objeto directo. En estas técnicas los sujetos y el
objeto directo son los candidatos a objetos de negocio y los
verbos activos son los candidatos a servicios. Una interfase tiene las siguientes
partes: La tarea de identificar las dependencias
entre objetos permite identificar eventos, sucesos o
condiciones que permitan la realización de tareas de negocios
coordinadamente o transaccionalmente. Para ello se debe
considerar lo siguiente: La validación del modelo lógico debe
ser tal que éste sea: En el diseño lógico conceptualmente se
divide en tres niveles de servicios con el fin de que la
aplicación resulte flexible ante los cambios de requerimientos
y/o de tecnología cambiando únicamente la capa o capas
necesarias. Los tres niveles son: servicios de usuario, servicios
de negocio y servicios de datos. Los servicios de usuario (user
services) controlan la interacción. Un servicio de usuario
son personas, aplicaciones, otros servicios o la combinación de
éstos. Generalmente involucra una interfase gráfica de usuario
(GUI) o pude ser no visual (mensajes o funciones), maneja todos
los aspectos de la interacción con la aplicación. El objetivo
central es minimizar el esfuerzo de conocimiento requerido para
interpretar la información. Un servicio de usuario incluye un
contenido (qué se necesita comunicar al usuario) y una forma
(cómo se comunica el contenido) cuando es necesaria la
comunicación. Los servicios de negocio (bussines
services) convierten datos recibidos de los servicios de
datos y de usuario en información (datos + regla de negocio) y
pueden usar otros servicios de negocio para completar su tarea. Las tareas de los servicios de negocio son: Los servicios de datos (data
services) son los servicios de bajo nivel que apoyan los
servicios de negocio y son de una amplia gama de categorías como
las siguientes: El diseño físico traduce el
diseño lógico en una solución implementable y costo-efectiva o
económica. El componente es la unidad de construcción
elemental del diseño físico. Las características de un
componente son: En el diseño físico se debe cuidar el
nivel de granularidad (un componente puede ser tan grande o tan
pequeño según su funcionalidad, es decir, del tamaño tal que
pueda proveer de una funcionalidad compleja pero de control
genérico) y la agregación y contención (un componente puede
reusar utilizando técnicas de agregación y contención, sin
duplicar código). El diseño físico debe involucrar: Figura 3. Arquitectura
física de tres capas de la aplicación cliente/servidor El diseño físico comprende las siguientes
tareas: De las tareas anteriores la más importante
es la distribución de los datos que pueden ser centralizados,
una partición, un extracto o una réplica. Los datos centralizados equivalen a
una base de datos maestra ubicada en un lugar central. No hay
copias de los datos. Una partición de datos es una
segmentación de la base de datos maestra. Es útil cuando los
datos se pueden fragmentar fácilmente y actualizarse en un sitio
local con cambios frecuentes. No hay sobreposición entre
particiones. En una partición horizontal cada hilera existe en
una sola base de datos. En una partición vertical cada columna
es contenida en una y solo una base de datos. Un extracto de datos es una copia de
toda o una porción de la base de datos maestra. No se permite la
actualización. Se usa un timestamp o etiqueta de tiempo
para indicar qué tan viejos son los datos. Una réplica de datos es un
fragmento de la bases de datos maestra que se puede actualizar.
Una réplica de datos es cuando el sitio de actualización cambia
a un sitio local. No se permiten actualizaciones en la base de
datos réplica y en la base de datos maestra a la vez, por lo que
debe de haber sincronización entre ambas. El diseño físico está íntimamente
ligado a una alternativa tecnológica. Ante la acelerada
evolución tecnológica es importante considerar los estándares
del momento y las tendencias ya que una mala decisión implicará
un costo enorme (en dinero y en tiempo) al actualizarse a otra
plataforma distinta. La tendencia actual en la arquitectura
cliente/servidor es crear el back-end como un servidor robusto
multitareas y multithreading y el front-end como un
cliente muy delgado que no acapare al servidor comunicándose
entre sí en una plataforma internet con protocolos estándar en
redes heterogéneas. Comentario final ... para reflexionar Todo lo que se expresó en este artículo, muestra tal
como la teoría aconseja que se deben hacer las cosas. En la práctica, en la
ingeniería de software comúnmente se menosprecia el valor de una metodología
para crear el software. Esto, a mi juicio, está demeritando la incipiente
profesión de Ingeniero de Software en particular, la del especialista en
Tecnología de Información, en general y a las empresas de consultoría en
software, ya que generalmente se cede al "chantaje" profesional del
jefe o del cliente quien ordena la construcción del software, con argumentos
como "no hay tiempo para eso, pónte a programar". Para reflexionar, pregunto, lo siguiente: ¿Qué pasaría, si el ingeniero
civil o el arquitecto construye una casa o un edificio sin hacer sus planos,
proyectos o maquetas? ¿Crees que la obra pueda concluirse
cubriendo las necesidades, con la calidad necesaria y a tiempo? Simplemente observa la calidad de
las viviendas "en obra negra perpetua" en la mayoría de las calles de México.
Y todavía más
allá, ¿Permitirías que tu propio cirujano te interviniera sin hacer los
estudios respectivos para obtener las evidencias del problema de salud que te
aqueja? O ¿permitirías a tu abogado que te defendiera sin conocer las pruebas y sin un
plan para tu defensa? Entonces, ¿por qué los ingenieros en software a veces
cedemos al "chantaje de la falta de tiempo" y construimos software sin el
análisis y diseño expresado en un proyecto, más allá de las ideas existentes
"en nuestra cabeza"? ¿Por qué lo intentamos hacer sobre la marcha,
pero nunca lo concluimos pues ya no hay tiempo? ¿Dónde quedó la ética
profesional?...
Sugiero que consultes, como referencia, el Código de Etica del
Ingeniero en Software y de la Práctica Profesional en el site de la Association for
Computing Machinery aquí: http://www.acm.org/serving/ethics.html.
Zavala-Ruiz, J. (2008) "Organizational Analysis of Small Software Organizations: Framework and Case Study" en H. Oktaba y M. Piattini (Eds.)
Software Process Improvement for Small and Medium Enterprises: Techniques and Case Studies
.
Abstract
The intention of this chapter is twofold. On the one hand, I illustrate the complexity of the small software
organization, because it is not a reduced version of a large company. Rather, it has very important advantages
and challenges. Then, I use organization studies as a multi-disciplinary and multi-paradigmatic link between disciplines, able to reconcile those distinct visions. On the other hand, I open the discussion on the state of crisis affecting software engineering as a discipline. For that, I try to sensitize the reader to the facts surrounding this crisis, but also to the most promising alternative, which is the redefinition of
software engineering as a discipline. One of the possible options for that paradigmatic shift requires
a multi-disciplinary orientation because their positivist roots and the adoption of a constructivist ontology and epistemology facilitating the inclusion of visions non-qualified for a systematic, disciplined
and quantitative approach. My position is that only by opening up this discussion is it possible to begin
transforming and consolidating software engineering as a strengthened and more terrain-attached discipline because of its powerful theoretical and practical explanatory capacity.
Disponible como "Free Sample Chapter" en
la Editorial IGI-Global
o aquí
En mis investigaciones, de campo y bibliográficas, llevadas a cabo desde 2005 a la fecha, me han llevado a concluir que la Ingeniería de Software no es lo que uno supone que es, o en otras palabras, no es lo que institucionalmente se nos ha hecho creer. A pesar del nombre de ingeniería, ésta dista mucho de ser tal.
La ingeniería de software, no es una disciplina de ingeniería sino más bien una disciplina técnica y de administración (o management) impulsada desde sus orígenes por el Departamento de Defensa de los Estados Unidos (DoD), como lo demuestra la investigación histórica.
La esencia del objeto de estudio de la Ingeniería de Software como disciplina teórico-práctica, es decir, su ontología es de naturaleza más organizacional que ingenieril, aunque tiene un componente tecnológico muy importante.
Descarga la presentación de la ponencia "La Ingeniería de Software: Su filosofía y su desafío" presentada por mí y por la M.C.C. Rafaela Blanca Silva López de la Universidad Autónoma Metropolitana - Unidad Azcapotzalco, en el XXIV Congreso de la ANIEI en Colima, Colima, México, el 26 de octubre de 2011.
Tesis de maestría en ciencias de la computación, Universidad Autónoma Metropolitana, Unidad Azcapotzalco, México. 2011.
Descarga las primeras páginas aquí:aquí
Resumen
La Ingeniería de Software se encuentra en una crisis disciplinaria por la
falta de fundamentos bien establecidos. El impulso de la iniciativa Software
Engineering Method And Theory (SEMAT) ignorando la Guide to Software
Engineering Body of Knowledge (SWEBoK) confirma esa situación que se
prolonga ya por más de 40 años. Partiendo de una propuesta epistemológica
interdisciplinaria, esta investigación propuso la creación de la Ciencia del
Software.
Despues de una profunda revisón histórica y del contexto, se propuso
un marco conceptual de cuatro niveles ontológicos complementarios. El primer
nivel aborda el “software” como lenguaje de programación, algoritmo, cálculo y
como sistema de software acotado por el hardware; es la dimesión técnica. El
segundo nivel ontológico abordó el “proceso de producción” o “desarrollo de
software” como un proceso de organización del trabajo, un tema central en la
teoría de la organización. El tercer nivel se centró en el “proyecto de software”
como proceso social y organización temporal, dominio de la teoría de la
administración de proyectos. Y el cuarto nivel abordó la “fábrica de software”
como una empresa de naturaleza organizacionl y empresarial.
Se propusieron dos modelos en complemento, el primero originado en la psicología social para
delinear una estrategia de cambio paradigmático y el segundo, un modelo
filosófico originado en la administración, para integrar todos los elementos en
una propuesta integral. Así, las “mejores prácticas” estarán basadas en
fundamentos ontológicos y epistemológicos sólidos y en un comportamiento
ético, que lleve al establecimeinto de la filosofía de la ciencia del software.
Palabras clave: ciencias de la computación, ingeniería de software,
ciencia del software, filosofía de la ciencia, crisis desciplinaria, filosofía del
software, cambio paradigmático.
Descarga las primeras páginas del capítulo 3 aquí.
Parte 1: ¿Qué es la Ingeniería de Software?: La visión tradicional
Contenido
Fase e
iteraciones
¿Cuándo
se hace?
Flujos de
trabajo de procesos (actividades y pasos)
¿Qué se
está haciendo?
Artefactos
(modelos, reportes, documentos)
¿Qué se
produjo?
Trabajador:
un arquitecto
¿Quién
lo hace?)



[Booch 1998]
Booch G.
1998. Software Architecture and the UML. Presentación
disponible en: http://www.rational.com/uml como arch.zip.
[Booch 1986]
Booch, G. 1988. Object Oriented
Development. Trans. of Soft. Eng. Vol. SE-12. Num. 2.
Feb. 1986. pp. 211-221.
[Conallen 1999A]
Conallen,
J. "Modeling Web Applications with UML"
Conallen, Inc. 9-Mar-1999 Disponible en: http://www.conallen.com/whitepapers/webapps/ModelingWebApplications.htm
[Conallen 1999B]
Conallen,
J. "UML Extension for Web Applications 0.91"
Drafted Conallen, Inc. 22-Mar-1999 Disponible en: http://www.conallen.com/technologyCorner/webextension/WebExtension091.htm
[Cota 1994]
Cota A. 1994 "Ingeniería
de Software". Soluciones Avanzadas. Julio de 1994.
pp. 5-13.
[Greiff 1994]
Greiff W. R. Paradigma vs
Metodología; El Caso de la POO (Parte II). Soluciones
Avanzadas. Ene-Feb 1994. pp. 31-39.
[Jacobson 1998]
Jacobson,
I. 1998. "Applying UML in The Unified Process"
Presentación. Rational Software. Presentación
disponible en http://www.rational.com/uml como UMLconf.zip
[Jacobson 1992]
Jacobson,
I. et. al. 1992. Object-Oriented Software
Engineering; A Use Case Driven Aproach. ACM Press.
Adison-Wesley Publishing. Co. U.S.A. 524 p. Ilus. pp.
465-493.
[Lewis 1994]
Lewis G. 1994. "What is
Software Engineering?" DataPro (4015). Feb 1994. pp.
1-10.
[Microsoft 1997]
Microsoft
1997. Microsoft Solutions Framework 1.0. Microsoft
Corporation. USA.
[M&R 1998]
Microsoft
y Rational 1998. A White Paper on the Benefits of
Integrating Microsoft Solutions Framework and The
Rational Process. Rational Software Corporation y Microsoft Corporation.
Documento msfratprocs.doc Disponible en
http://www.rational.com/uml/papers.
[OMG 1999]
Object
Management Group. 1999. OMG Unified Modeling Language
Specification (Draft). Versión 1.3. alfa R5, marzo de
1999. Disponible en: http://www.rational.com/uml
[Zavala 2000]
Zavala R.
2000. Diseño de un Sistema de Información
Geográfica sobre internet. Tesis de Maestría en
Ciencias de la Computación. Universidad Autónoma
Metropolitana-Azcapotzalco. México, D.F. En prensa.
Parte 2: Análisis organizacional de empresas de software. Una primera aproximación a una visión alterna de la Ingeniería de Software
Parte 3. ¿Qué es la ingeniería de software?: Una visión alterna
La Ingeniería de Software: Su filosofía y su desafío
La Ingeniería de Software: Una Discusión Epistemológica
Software Engineering: An Interdisciplinary Epistemological Discussion
Master's dissertation in Computer Science, Universidad Autónoma Metropolitana, Unidad Azcapotzalco, México.
Download first pages:here.
Abstract
Software Engineering, as discipline, is on a profound crisis because it has
not a clear-cut definition on its fundamentals for a better theory and practice
fitting. The Software Engineering Method And Theory (SEMAT) Initiative that
overrides the Guide to Software Engineering Body of Knowledge (SWEBoK),
confirms this status which extends over more than 40 years.
First, after a deep
historical review and context discussion, using an interdisciplinary
epistemological framework, founded on a basic element set, this research
proposed to create the Science of Software. For that, an ontological four-level
framework is propossed. The first ontological level, is organized nearby software
as programming language, algorithm, calculus (computation) in a broad sense,
and software system but constrained by hardware. The second level focuses on
“software development” as a work organization process, a core subject in
organization theory. The third level is “software project” as a social process and
a temporary organization, a core domain in project management theory. And,
fourth level addesses the “software factory” as a wide organizational and
entrepreneurial enterprise, more magerial and administrative in nature. But,
only the first one level is a computer domain in essence and the best choice for
the core or essence on the proposed Science of Software.
As an alternative, if the
Science of Software pretends to be all-inclusive, then it requires be a
multidisciplinary umbrella and approach. Next, two model-set has suggested,
first to define the strategy for the paradigmatic change, and second, to integrate
all these items in a well-defined and complimentary framework. Therefore, ‘best
practices’ are best fitted with knowledge, ethical behaviorbut, and rooted on its
ontology.
Keywords: computer science, software engineering, science of software,
philosophy of science, philosophy of software, paradigm shift.
Download first pages of this chapter here.
Última actualización: 16 de diciembre de 2011 14:15 CST
Eres el visitante
(Finalmente, un contador, después de muchos años, a partir del 7 de noviembre de 2008.!!!! ;) que se colapsó en 2010 después de alcanzar más de 220,000 hits). Este contador, se reinició en noviembre de 2010 y esperamos lograr, por lo menos, otras 100 mil visitas por año...
Envíame tus comentarios. Email: jzavalar@yahoo.com Copyright. 2000-2011. Todos los derechos reservados. Se prohibe la copia y distribución de este material para fines de lucro. Se autoriza la copia para fines personales siempre y cuando se cite la fuente íntegramente.