You are on page 1of 118

Ingeniera de

Software

Ingeniera del Software es la aplicacin


practica del conocimiento cientfico en el diseo
y construccin de programas de computadora y
la documentacin asociada requerida para
desarrollar, operar(funcionar) y mantenerlos. Se
conoce tambin como desarrollo de software o
produccin de software Bohem 1976.

Se entendi?
Busquemos una definicin

Pues bien,
vamos a conocer un poco de eso.

Ha pensado alguna vez,

Donde hay software?

Parece que son ms


responsabilidades de las que
esperbamos no?

Ira en un viaje
alrededor de la tierra
en globo, sabiendo
que este esta
controlado por una
computadora?

Viajara usted en un avin cuyo


software ha sido construido por usted?

Dudan los enfermos


del corazn de sus
mdicos cirujanos?

Dudan los empresarios


de los ingenieros civiles y
arquitectos que
construyen sus edificios?

Como no se es desarrollador de
software por saber programar.

Ha visto el gracioso video de

Que pasara si los programadores


hicieran aviones?
Si, no lo invito a verlo antes de continuar
https://www.youtube.com/watch?v=9bMx_GyDwa0

Gracioso, no?
Pues no!
No es gracioso que siendo un profesional tu
trabajo sea tomado en broma

El problema es, que pasa si nosotros mismos


nos tomamos nuestro trabajo en broma?

Pues bien, si no se toma su trabajo en serio, lo que


pasar es
que usted mismo no ser tomado en serio.
Si usted sabe programar pero desconoce las motivaciones
asociadas a su trabajo, las responsabilidades que implica y las
consecuencias que acarrea su mal desempeo es decir, si
no sabe ingeniera de software o le importa poco lo que
significa, pues usted

no sabe hacer software, solo sabe


programar.

Si comparamos saber hacer


software, con saber hacer
edificios, lo que usted sabe
hacer bsicamente es
pegar ladrillos

Y si bien los ladrillos y dems estructuras, conforman el


producto final; existen una serie de roles asociados a la
construccin, sin los cuales las admirables construcciones
modernas no podran ser construidos.

Es el caso de los maestros de obra, arquitectos,


ingenieros civiles
Solo por mencionar algunos de los ms obvios.

Un programador es
solo un rol del
conjunto de roles
implicados en el
proceso de desarrollo
de software

Pues bien, para desarrollar software existen


una serie de roles asociados, encargados de
analizar, planificar y establecer, que es lo
que va a desarrollarse, como, con cuantos
recursos, en cuanto tiempo e incluso a que
nivel de calidad

Y es que, si tuviera dinero para enviar a construir su


propia casa.

No le gustara que quien va a construirla le


garantizara la calidad del trabajo que va a
realizar y le demostrara que cuenta con el
conocimiento, materiales y equipo
necesarios para hacer un trabajo perfecto?

Si?
Pues bien, los clientes y usuarios de
los proyectos de software, esperan
exactamente lo mismo!

La ingeniera de software es
una idea casi tica sobre como
hacer el software de forma
correcta

El problema radica en que


como casi todas las cosas en
la vida, existen visiones
diferentes de cmo hacer las
cosas de forma correcta

No obstante, existen unos principios generales

Reemplacemos entonces la frase


hacer software de forma correcta por
hacer software de calidad

Si calidad!!,

La calidad determina el camino a seguir de todas las


disciplinas asociadas a la ingeniera de software, aunque
para algunos resultan
excesivas y engorrosas

Yo dira que, hacer las cosas bien, siempre va


a requerir un poco ms de esfuerzo, que
hacerlas de cualquier otro modo

pues bien, la mayora de los crticos


acerca del por que la ingeniera de
software aade ms cantidad de
trabajo, resultan ser personas que
desconocen las motivaciones y el
propsito de la labor que realizan

En que parte de las


definiciones formales nuestro
que hacer como personas?

La ingeniera es el
conjunto de
conocimientos y
tcnicas cientficas
aplicadas, que se
dedica a la resolucin
u optimizacin de los
problemas que
afectan directamente
a la humanidad
Wikipedia

En ella, el conocimiento, manejo y dominio de las


matemticas y fsica, obtenido mediante estudio,
experiencia y prctica, se aplica con juicio para
desarrollar formas eficientes de utilizar los materiales
y las fuerzas de la naturaleza para beneficio de la
humanidad y del ambiente.
Wikipedia

Ah coincidimos

Ser ingeniero tiene


que ver con
ser humanamente
responsable

No hablo de personas con ttulo de ingeniero, si no de personas que se dediquen a ejercer


la ingeniera de software

En resumen

Ingeniera de software es la disciplina o


rea de la informtica que ofrece
mtodos y tcnicas para desarrollar y
mantener software de calidad.
Wikipedia

http://es.wikipedia.org/wiki/Ingenier%C3%ADa_del_software

Pero, y qu importa la calidad?

Acaso en software no importa es


bsicamente que funcione?
Veamos algunas respuestas a esa pregunta
(Ojo, las siguientes imagenes son meramente ilustrativa, no todas
pertenecen al hecho descrito)

Therac-25
(1985 1987)
Era una mquina empleada en terapia de
radiacin, producida por Atomic Energy of
Canada Limited, notoria por haber sido
objeto del error de software, causando al
menos seis accidentes y que le cost la
vida al menos a cinco personas

Mariner 1
(28 de Julio de 1962)
Un guin en las
instrucciones del
programa de guiado
del cohete provoc la
desviacin del Atlas y
tuvo que enviarse un
comando para su
autodestruccin a los
4 minutos y 53
segundos de su
lanzamiento

Vuelo 501 del


ARIANE-5
(4 de Junio de 1996)
Otro ejemplo documentado sobre
el dao ocasionado por software mal
diseado es el de la explosin de la
lanzadera Ariane-5, cuando a 40
segundos despus de la iniciacin de
la secuencia de vuelo, la lanzadera se
desvi de su ruta, se parti y explot.
En el proyecto global se invirtieron
10 aos de construccin y 7 mil
millones de euros, lo que supuso un
duro golpe para la Agencia Espacial
Europea (ESA)
http://www.youtube.com/watch?v=ION
cgYzVFlg

A-320 de Air
France

(26 de junio de 1988)


Durante una presentacin en
el meeting de Habsheim, cerca de
Mulhouse (Francia), un A-320 de Air
France se estrella en el bosque, al
final de la pista. Habr tres muertos y
una centena de heridos.
Justo despus, el mundo se
pregunta las causas del accidente
del avin anunciado como "el ms
seguro del mundo".
Una de las causas se le atribuye a un
error en el software de navegacin
http://www.youtube.com/watch?v=_
E
M0hDchVlY

Nada
agradables si
me permiten
decirles!

Pues bien, aunque actualmente existen


muchas personas que construyen software
con conocimiento emprico, tal como si fuera
arte, lo que debe diferenciar un trabajo bien
hecho (profesional o emprico), es los
mtodos y la evidente forma de hacer el
trabajo teniendo en mente la calidad de los
procesos ejecutados y de los productos
desarrollados.

Bueno, y si es que
parece que la
ingeniera de
software establece
tan claramente lo que
hay que hacer
Cual es el problema?
Acaso no todos lo
hacemos as?
Pues no, a veces pasa que

Y quien dice
que
siempre
sale mal?
A pues no,
no siempre sale
mal
Solo algunas
veces
Veamos

CHAOS Report

(Estudio de Resultado de Ejecucin de los Proyectos de Software)

Exitoso

33
53
40

31

Fallido

Cancelado

46

49

51

53

28

23

15

18

16

27

26

28

34

29

1994

199
6

1998

2000

2002

2004

CHAOS Report 1995: http://net.educause.edu/ir/library/pdf/NCP08083B.pdf

Pues bien,
muchos de estos errores son aducidos
principalmente a falta de planeacin y buen
anlisis, cosa que tiene mucho sentido pero
que sin embargo, no es la nica razn
Como seres humanos involucrados en el
proceso de desarrollo, cometemos errores
que de no ser corregidos a tiempo, van
aumentando su costo y consecuencias

Usemos ms analogas para entender


De que estamos hablando

Y si este fuera nuestro proyecto?

Herramientas
Personas
Tiempo
Dinero
Recursos

Parece
Intuitivo no?

Sin embargo sabemos que en realidad, es


un poco ms difcil de lo que imaginamos

Sin
embargo

Seguimos
cayendo en los
mismos
errores una y
otra vez

Pues bien,
muchos de estos errores son aducidos
principalmente a falta de planeacin y buen
anlisis, cosa que tiene mucho sentido pero
que sin embargo, no es la nica razn
Como seres humanos involucrados en el
proceso de desarrollo, cometemos errores
que de no ser corregidos a tiempo, van
aumentando su costo y consecuencias

Qu errores se comenten?

Falta de
comunicacin

Ausencia de objetivos y
metas claras durante la
ejecucin
del proyecto

Mala estimacin
de tiempos

Falta de
planificacin

Requisitos poco claros y falta de


acceso a la informacin

Carencia de
habilidades en la
ejecucin de un rol

Falta de seguimiento al
avance del proyecto

Falta de control del


presupuesto

Falta de conocimiento e inters


en la aplicacin de mejores
prcticas

En la mayora de
proyectos de desarrollo,
los costes de
mantenimiento, superan
por un amplio margen los
costos de desarrollo, se
habla de un 30% en
Desarrollo y un 70% en
Mantenimiento.

Veamos que tal estamos ahora

Ahora bien, de acuerdo a lo que hemos


hablado entonces, los Ingenieros de
software no solo deben considerar aspectos
tcnicos: Deben tener una visin ms amplia,
en lo tico, social y profesional.

Y como
se hace?

Bueno, una primera forma de pensar en las


actividades que se involucra el proceso de
desarrollo de software es preguntarse acerca
de Que se construir? Como se har? Y De
que forma evolucionar?
O bien, como veamos en la grfica anterior,
La Definicin, El Desarrollo y El
Mantenimiento

Los cambios en las primeras etapas son


ms costosos que en las ltimas

Son las actividades que se realizan para


la construccin, liberacin y evolucin
de un producto de software,
comenzando con el estudio de una idea
y finalizando con el implementacin
final del sistema.

Requisitos
nuevos o
modificados

Sistema
nuevo o
modificado
Proceso de
desarrollo
de software

En ocasiones la Informtica se considera en ocasiones como una


ciencia de segunda clase, lo que provoca que cualquier persona
se considere capaz de hacer un programa.
Ello implica que programadores con poca cualificacin son a veces los
encargados de colaborar o desarrollar importantes aplicaciones informticas,
cuya eficiencia y seguridad en absoluto est garantizada.
Saber Programar, NO ES saber Desarrollar Software
Jos Manuel Garca Carrasco

Ensayo -Es necesario un cdigo de tica en la informtica?

Enfoque a la
calidad
. La gestin total de
la calidad y las
filosofas similares
fomentan una
cultura continua de
mejoras de procesos
que conduce al
desarrollo de
enfoques cada vez
ms robustos para la
ingeniera del
software

Procesos
El proceso define un
marco de trabajo
para un conjunto de
reas clave, las cuales
forman la base del
control de gestin de
proyectos de
software y establecen
el contexto en el cual:
se aplican los
mtodos tcnicos, se
producen resultados
de trabajo, se
establecen hitos, se
asegura la calidad y el
cambio se gestiona
adecuadamente.

Mtodos
Los mtodos de la
ingeniera de software
indican cmo construir
tcnicamente el
software. Los mtodos
abarcan una gran
gama de tareas que
incluyen anlisis de
requisitos, diseo,
construccin de
programas, pruebas y
mantenimiento. Estos
mtodos dependen de
un conjunto de
principios bsicos que
gobiernan cada rea
de la tecnologa e
incluyen actividades de
modelado y otras
tcnicas descriptivas

Herramientas
Las herramientas
de la ingeniera del
software
proporcionan un
soporte automtico
o semi-automtico
para el proceso y
los mtodos, a
estas herramientas
se les llama
herramientas
CASE (ComputerAided Software
Engineering).

final

durante su elaboracin

forma

Elementos del Proceso - Roger Pressman

Practicas y Principios
Actividades

Herramientas

Personas

Proceso de
Software

Roles

Notacin
Artefactos

En la Grafica anterior se muestran los elementos de un proceso de desarrollo de software y sus


relaciones. As las interrogantes se responden de la siguiente forma:
Quin: Las Personas participantes en el proyecto de desarrollo desempeando uno o ms
Roles especficos.
Qu: Un Artefacto es producido por un Rol en una de sus Actividades. Los Artefactos se
especifican utilizando Notaciones especficas. Las Herramientas apoyan la elaboracin de
Artefactos soportando ciertas Notaciones (Preferiblemente que sean estndares).
Cmo y Cundo: Las Actividades son una serie de pasos que lleva a cabo un Rol durante el
proceso de desarrollo. El avance del proyecto est controlado mediante hitos que establecen
un determinado estado de terminacin de ciertos Artefactos.

El ciclo de vida describe los


estados por los que pasa un
producto de software, desde
su concepcin hasta su
muerte.
El ciclo de vida clsico define
las etapas principales del
proceso de desarrollo, y
cuando es ejecutado en
forma secuencial se conoce
como Modelo en Cascada

Anlisis
Diseo
Construccin

Pruebas
Operacin y
Mantenimiento

No existe un proceso de desarrollo de software universal que


sea efectivo para todos los contextos de proyectos de desarrollo.

Debido a esta diversidad, es difcil por ejemplo, automatizar todo


un proceso de desarrollo de software y aun ms unificar a los
profesionales del rea sobre la ejecucin de algn tipo de
proceso en particular.
Esto hace que existan diferentes metodologas que satisfacen las
visiones principales de como debera asumirse el proceso de
desarrollo de software

Individuos e Interacciones

sobre

Procesos y herramientas

Software que funciona

sobre

Documentacin exhaustiva

Colaboracin con el cliente

sobre

Negociacin de contratos

Responder ante el cambio

sobre

Seguimiento de un plan

Mala

Precaucin

Buena

SW funcionando != Documentation
Propiedad colectiva
Mejora de la calidad iterativamente
Colaboracin != Contrato

Nightly Builds (too early to tell)


Refactor (when time appropriate)
Ever-Present Customers (unlikely to work in real world)
Continuous Integration (unlikely for non-trivial)
Dont Create Things to Discard (moderation!)

Historias de usuario
Programacin en parejas
Releases frecuentes
Reunin Stand-up cada da
Crear buenas arquitecturas

Metodologa gil

Metodologa No gil

Pocos Artefactos

Ms Artefactos

Pocos Roles

Ms Roles

No existe un contrato tradicional o al Existe un contrato prefijado


menos es bastante flexible

Cliente es parte del equipo de


desarrollo (adems in-situ)

El cliente interacta con el equipo


de desarrollo mediante reuniones

Grupos pequeos (< 10 integrantes)


y trabajando en el mismo sitio

Grupos grandes

Menos nfasis en la arquitectura

La arquitectura es esencial

http://vidanp.wordpress.com/2010/02/01/estandares-de-medida/

Complejidad

Costo beneficio
Robustez del software
Conocimiento disponible

El desarrollo de software es una actividad que, dada su complejidad,


debe desarrollarse en grupo.
Adems, esta actividad requiere de distintas capacidades, las que no se
encuentran todas en una sola persona. Por ello, se hace necesario
formar el grupo de desarrollo con las personas que cubran todas las
capacidades requeridas.

Cada una de esas personas aportar al grupo parte del total de las
capacidades necesarias para llevar a cabo con xito el desarrollo.

Las personas vinculadas a


estos roles en un proyecto,
son conocidos como los
participantes.

Administrador o Gerente de Proyectos


Analista Funcional
Analista Diseador
Arquitecto
Programador
Tester o Ingeniero de Pruebas
Asegurador de Calidad
Ingeniero de Verificacin y Validacin
Administrador de la Configuracin
Documentador
Ingeniero de Manutencin
Cliente
Usuario

You might also like