La Ingeniería de La Ingeniería de
Software en el Software en el
modelo de modelo de
desarrollo del desarrollo del Software Libre Software Libre
http://www.eqsoft.net
Software :
Software : conjunto de programas y procedimientos conjunto de programas y procedimientos
necesarios para hacer posible la realización de una tarea necesarios para hacer posible la realización de una tarea
específica, en contraposición a los componentes físicos del específica, en contraposición a los componentes físicos del
sistema (hardware) sistema (hardware)
http://es.wikipedia.org/wiki/Software http://es.wikipedia.org/wiki/Software
Ingeniería :
Ingeniería : La ingeniería es la profesión en la que el La ingeniería es la profesión en la que el conocimiento de las matemáticas y ciencias naturales, conocimiento de las matemáticas y ciencias naturales,
obtenido mediante estudio, experiencia y práctica, se aplica obtenido mediante estudio, experiencia y práctica, se aplica
con juicio para desarrollar formas de utilizar, con juicio para desarrollar formas de utilizar,
económicamente, los materiales y las fuerzas de la económicamente, los materiales y las fuerzas de la
Algunas definiciones
¿ Porqué hablamos
¿ Porqué hablamos entonces de una entonces de una
ingeniería de software ? ingeniería de software ?
Pregunta fundamental
La ingeniería de software
La Ingeniería de software es la rama de la ingeniería que crea y mantiene las
aplicaciones de software aplicando tecnologías y prácticas de las ciencias
computacionales, manejo de
proyectos, ingeniería, el ámbito de la
aplicación, y otros campos.
De forma práctica
Se busca aplicar los conocimientos previamente estudiados y puestos en práctica en la ingeniería convencional dentro de los proyectos de desarrollo de
software con el fin de :
●Desarrollar software mas rápido
●Desarrollar software a menores costos
●Desarrollar software de mayor calidad
●etc. etc. etc.
Áreas de conocimiento de
la Ingeniería de Software
Áreas de conocimiento de
la Ingeniería de Software
El Software Libre
Software libre (en inglés free
software) es la denominación del software que, una vez obtenido,
puede ser usado, copiado,
estudiado, modificado y
redistribuido libremente.
El modelo de desarrollo del Software Libre
El modelo de desarrollo del SL es atípico y no convencional, se basa en un entorno
distribuido y colaborativo donde todos pueden colaborar programando porciones
del software ó en diferentes tareas
específicas (traducción, arte, etc.), no busca crear software en menor tiempo, a menores
costos y de una mayor calidad, surgio de
manera espontánea y natural.
Duda 1
¿El modelo de desarrollo del Software Libre encaja
dentro de la ingeniería de
software?
Duda 2
¿Existe una ingeniería de
software ... libre?
Duda 3
¿Aporta el modelo de desarrollo del Software
Libre algo a la ingeniería de
software?
La gran respuesta
Esto es muy complicado de responder, vamos a
intentarlo ahora.
Conozcamos la evolución del modelo de desarrollo
del Software Libre
Como va incorporando el modelo las practicas de la IS
●
Años 60-70
Necesidad no
atendida Programación Implementación
Voluntaria
●Necesidad de los mismos
“informáticos”.
●Programación en ASM y C
●El software se pone tal cual, si da problemas ellos mismos lo arreglan.
●1972 : TCP-IP (protocolo)
●1974 : PDP-11 (Unix de Berkley)
●1975 : Emacs (entorno completo)
Como va incorporando el modelo las practicas de la IS
●
Años 80
Requerimiento Programación Testing
permanente
●Requerimientos del movimiento, ●1981 : BSD 4.1 (OS)
1984 : Latex (procesador de
Reporte de Error o código solucionándolo
Nuevas Ideas
Como va incorporando el modelo las practicas de la IS
●
Años 90
●Integración de muchos paquetes independientes y despliege.
●Aplicaciones afinadas y
especializadas para laborar
●1993 : Debian y Slackware (distros de Linux)
●1997 : Doxygen (automatización de documentación a partir del código fuente)
Requerimiento Programación Testing
permanente
Reporte de Error o código solucionándolo
Nuevas Ideas
Diseño Formal o
informal
Documentación
Como va incorporando el modelo las practicas de la IS
●
Actualmente
●Software para diseno de software. ●1998 : Bugzilla (administración de errores y requerimientos)
Gestión de
Proyecto Programación
Publicación y Testing permanente
Reporte de Error o código solucionándolo
TO-DO
Diseño Formal
Documentación
Gestión de errores y requerimientos Testing
Interno y Adm. Releases
KA : Software Requirements
●Existen herramientas de apoyo para Gestión de Requerimientos
●Open Source Requirements Management Tool http://sourceforge.net/projects/osrmt/
●Los requerimientos son atendidos en base a los siguientes criterios:
●Es de interés común
●Alguien se ofrece a implementarlo
●Ya esta echo
●Es de necesidad técnica
KA : Software Design
●Existen herramientas de apoyo para diseno de software a varios niveles
●DIA http://www.gnome.org/projects/dia/
●Umbrello http://uml.sourceforge.net/index.php
●ArgoUML http://argouml.tigris.org/
●PgDesigner http://sourceforge.net/projects/pgdesigner/
●La mayoría de los proyectos ofrecen diagramas de clases o diagrama ER, pocos ofrece casos de uso, secuencia, etc.
KA : Software Construction
●El modelo de desarrollo del software libre se parece a esta metodología:
●Extreme Programming
http://www.extremeprogramming.org/
●Existe software para apoyo a proyectos de
KA : Software Testing
●Existen herramientas de apoyo para simulación de testing, batería de pruebas, administración de pruebas.
●Ejb3Unit http://sourceforge.net/projects/ejb3unit/
●Linux Test Project http://ltp.sourceforge.net/
●QaTraq http://sourceforge.net/projects/qatraq/
●Los proyectos mas grandes tienen sus propias herramientas de testing y diseño de pruebas.
●La mayoria de pruebas es de caja blanca y caja
KA : Software Maintenance
●Los proyectos de SL están en constante cambio, todos los días podrá ver una gran cantidad de software que tiene actualizaciones.
●Es difícil saber el costo del mantenimiento, existe mucho aporte fuera del proyecto.
●Como saber los tipos de cambios que sufre un software, por ejemplo :
Firefox X.Y.Z
X = Cambio de versión, nueva tecnología aplicada al producto.
Y = correcciones mayores o nuevas funcionalidades que se incorporan.
KA : Software Maintenance
●Existe software para el despliegue de actualizaciones de software.
●APT http://www.debian.org/doc/manuals/apt-howto/
●Portage
http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=3
KA : Software Configuration Managment
●La buena gestión de la configuración es una necesidad imperiosa en los proyectos de SL.
●Los procesos involucrados dentro de la SCM se han automatizado al máximo, existe mucho software de apoyo con todas las características deseables (registro, orden, trazabilidad, prioridades, gestión, cargas de trabajo, etc.) :
●Subversion http://subversion.tigris.org/
●TRAC http://trac.edgewall.org/
●CVS http://ximbiot.com/cvs/
●Bugzilla http://www.bugzilla.org/about/
KA : Software Engineering Management
1. La definición parte del proyecto mismo, no existe negociación inicial, el modelo de desarrollo indica que no existen limites bajo los cuales
parametrizarce.
2. En los proyectos nuevos la planificación es insipiente, no existe fechas de entregables, los proyectos mas grandes si ofrecen una planificación con entregables en fecha propuestas, mas no rígidas, en estos se
empieza a llevar una gestión de riesgos relativa a los eventos externos.
3. El plan de implantación toma en cuenta siempre la disponibilidad simultanea del producto, se procura dar al usuario toda la
documentación y soporte posible tomando en cuenta que el uso que hace del producto es voluntario.
4. Se implementan canales directos entre el usuario y el proyecto para recibir el “feedback” de ellos e iniciar la siguiente iteraccion en el
KA : Software Engineering Process
●Los procesos en los proyectos de SL no suelen estar documentados, son pasados de
“generación en generación” entre los involucrados.
●Los proyectos de SL no involucran una Software Factory, por lo tanto son muy flexibles en el tema de seguimiento y métricas, algunos proyectos implementan las buenas practicas del ISO15504 y CMMI.
●Los proyectos mas grandes si tienen procesos definidos y documentados que deben ser
KA : Software Engineering Process
●Existe software para el apoyo a la definición y métricas de los procesos :
● PMLite http://sourceforge.net/projects/pm-lite/
http://www.eqsoft.net
KA : Software Engineering Tools and Methods
●Software Requirements Tools
●Requirements modeling tools, Requirement traceability tools.
●Software Design Tools
●Software Construction Tools
●Program editors, Compilers and code generators, Interpreters, Debuggers, Frameworks.
●Software Testing Tools
●Test generators, Test execution frameworks, Test evaluation tools, Test management tools, Performance analysis tools.
●Software Maintenance Tools
●Comprehension tools, Reengineering tools.
●Software Configuration Management Tools
●Defect, enhancement, issue, and problem-tracking tools; Version management tools, Release and build tools.
●Software Engineering Management Tools
●Project planning and tracking tools, Risk management tools, Measurement tools.
●Software Engineering Process Tools
●Process modeling tools, Process management tools, Integrated CASE, Process-centered software engineering environments.
KA : Software Engineering Tools and Methods
●
Sobre los métodos Heuristicos son mas populares en uso los estructurados (ya casi dejado de lado) y los orientados a objetos.
●
Sobre los métodos formales son de muy raro uso en los proyectos, principalmente porque muchos desarrolladores no son informáticos o ingenieros.
●
Sobre los métodos de prototipeos no son usados,
KA : Software Quality
●“Calidad” en los proyectos de SL se asegura a traves de varios métodos naturales en el modelo (también denominado el método iterativo, congruente con XP) :
●Revisión de pares
●Test interno en el proyecto
●Test masivo de los usuarios
●Código abierto (miles de ojos revisando vuestro código)
●El proceso de “calidad” en un proyecto de SL solo se acaba cuando se retira el software del “mercado”, mientras este “vivo” estará sometido a una eterna Auditoria.
●En algunos proyectos se aplican las practicas de modelos como CMMI e ISO9000/ISO12207
KA : Software Quality
KA : Software Quality
Los
procesos
Auditoria
Ante factores externos extremos, aplique un FORK
Requiere una nueva
KA : Related Disciplines of Software
Engineering
KA : Related Disciplines of Software Engineering
● Algorithms
● Computer Architecture
● Digital Logic
● Discrete Structures
● Distributed Systems
● Embedded Systems
● Discrete Structures
● Programming Fundamentals
● Algorithms
● Operating Systems
● Programming Languages Graphics and
● Accounting
● Finance
● Marketing and Sales
● Operations Management
● Information Systems Management Law
● Linear Algebra
● Differential and Integral Calculus
● Differential Equations
● Probability
● Statistics Numerical
● Project Integration
● Project Scope
● Project Time
● Project Cost
● Project Quality
● Project Human Resource
● Project
Communicatio
● Quality Systems Developmen t,
● Implementa tion And Verification
● Planning Controlling, and
● Cognition
● Machine Learning and
Grammar Induction
● Formal Methods in
Cognitive
● Business Processes and Operational Assessment
● System/Solutio n/Test
Architecture
● Life Cycle Cost
& Cost-Benefit Analysis
KA : Related Disciplines of Software
Engineering
Respondiendo las dudas
1.¿El modelo de desarrollo del Software Libre
encaja dentro de la ingeniería de software? : SI, se fue adecuando de manera natural a traves
de los años.
2.¿Existe una ingeniería de software ... libre? : NO, la Ing. de Soft. es tan amplia que cubre fácilmente el software libre y privativo.
3.¿Aporta el modelo de desarrollo del Software Libre algo a la ingeniería de software? : SI,
nuevas practicas que antes no eran siquiera
Para leer mas
● http://www.itba.edu.ar/capis/rtis/rtis-7-2/Ingenieria-de-Software-Libre-y-Herramientas-Aplicadas.pdf
● http://swebok.org/ (Iniciativa de ACM y la IEEE sobre el conjunto de conocimientos necesarios para la Ingeniería de Software)
● http://www.ati.es/novatica/2000/145/luifer-145.pdf (El Futuro de la Ing, de Software, ó, ¿Es el Software un producto de ingeniería?)
● http://es.tldp.org/Presentaciones/200211hispalinux/robles/robles-ponencia-hispalinux-2002.pdf (Ing. del Software Libre una alternativa a la ing. de software tradicional)
● http://www.sourceforge.net / http://www.freshmeat.net (Miles de proyectos libres para diferentes necesidades)