Está en la página 1de 12

En ingeniera del software, el mantenimiento de software es la modificacin de

un producto de software despus de la entrega, para corregir errores, mejorar el


rendimiento, u otros atributos. 1 El mantenimiento del software es una de las
actividades ms comunes en la ingeniera de software.

El mantenimiento de software es tambin una de las fases en el ciclo de vida de


desarrollo de sistemas (SDLC, sigla en ingls de system development life cycle),
que se aplica al desarrollo de software. La fase de mantenimiento es la fase que
viene despus del despliegue (implementacin) del software en el campo.

Una percepcin comn del mantenimiento es que se trata meramente de la


correccin de defectos. Sin embargo, un estudio indic que la mayora, ms del
80%, del esfuerzo de mantenimiento es usado para acciones no correctivas
(Pigosky 1997). Esta percepcin es perpetuada por usuarios enviando informes de
problemas que en realidad son mejoras de funcionalidad al sistema [cita requerida].

El mantenimiento del software y la evolucin de los sistemas fue abordada por


primera vez por Meir M. Lehman en 1969. Durante un perodo de veinte aos, su
investigacin condujo a la formulacin de las leyes de Lehman (Lehman 1997).
Principales conclusiones de su investigacin incluyen que el mantenimiento es
realmente un desarrollo evolutivo y que las decisiones de mantenimiento son
ayudadas por entender lo que sucede a los sistemas (y al software) con el tiempo.
Lehman demostr que los sistemas continan evolucionando con el tiempo. A
medida que evolucionan, ellos crecen ms complejos a menos que se toman
algunas medidas como refactorizacin de cdigo para reducir la complejidad.

Los problemas claves de mantenimiento de software son administrativos y


tcnicos. Problemas clave de administracin son: alineacin con las prioridades
del cliente, dotacin de personal, cul organizacin hace mantenimiento,
estimacin de costos. Son cuestiones tcnicas claves: limitado
entendimiento, anlisis de impacto, pruebas (testing), medicin de mantenibilidad.

El mantenimiento de software es una actividad muy amplia que incluye la


correccin de errores, mejoras de las capacidades, eliminacin de funciones
obsoletas y optimizacin. Debido a que el cambio es inevitable, se debe
desarrollar mecanismos para la evaluacin, controlar y hacer modificaciones.

As que cualquier trabajo realizado para cambiar el software despus de que est
en operacin es considerado trabajo de mantenimiento. El propsito es preservar
el valor del software sobre el tiempo. El valor puede ser mejorado ampliando la
base de clientes, cumpliendo requisitos adicionales, siendo cada vez ms fcil de
usar, ms eficiente y empleando ms nuevas tecnologa. El mantenimiento puede
abarcar 20 aos, mientras que el desarrollo puede estar entre 1 y 2 aos.
Importancia:

A finales de los aos 1970, una famosa y ampliamente citada estudio de encuesta
por Gabriela castillo, expuso la muy alta fraccin de los costos del ciclo de
vida que estaban siendo gastados en mantenimiento. Clasificaron las actividades
de mantenimiento en cuatro clases:

Adaptable modificar el sistema para hacer frente a cambios en el


ambiente del software (DBMS, OS)2

Perfectivo implementar nuevos, o cambiar requerimientos de usuario


referentes a mejoras funcionales para el software

Correctivo, diagnosticar y corregir errores, posiblemente los encontrados


por los usuarios2

Preventiva aumentar la capacidad de mantenimiento de software o


fiabilidad para evitar problemas en el futuro 2
La encuesta mostr que alrededor del 75% del esfuerzo de mantenimiento fue en
los dos primeros dos tipos, y la correccin de errores consuma aproximadamente
el 21%. Muchos estudios posteriores sugieren una magnitud similar del problema.
Los estudios muestran que la contribucin del usuario final es crucial durante el
anlisis y recopilacin de nuevos datos de requerimiento. Y sta es la causa
principal de cualquier problema durante el mantenimiento y evolucin del software.
As que el mantenimiento de software es importante porque consume gran parte
de los costos del ciclo de vida y tambin la imposibilidad de cambiar el software de
forma rpida y fiable significa que las oportunidades de negocio se pierden. 3 4 5
Impacto de los factores clave de ajuste en el mantenimiento (por orden de mximo
impacto positivo)
Factores de mantenimiento Rango ms
Especialistas de mantenimiento 35%
Experiencia alta del personal 34%
Variables y datos manejados por tablas 33%
Baja complejidad de la base de cdigo 32%
Y2K y motores especiales de bsqueda 30%
Herramientas de reestructuracin de cdigo 29%
Herramientas de reingeniera 27%
Lenguajes de programacin de alto nivel 25%
Herramientas de ingeniera inversa 23%
Herramientas de anlisis de complejidad 20%
Herramientas de seguimiento de defectos 20%
Especialistas en "actualizacin masiva" Y2K 20%
Herramientas de control de cambio automtico 18%
Horas extras no pagadas 18%
Mediciones de calidad 16%
Inspecciones formales de la base de cdigo 15%
Bibliotecas de pruebas de regresin 15%
Tiempo de respuesta excelente 12%
Formacin anual de > 10 das 12%
Experiencia de la alta gerencia 12%
Automatizacin del HELP desk 12%
No mdulos propensos a errores 10%
Reporte de defectos en-lnea 10%
Medidas de productividad 8%
Excellent ease of use 7%
Medidas de satisfaccin de usuarios 5%
Alta moral del equipo 5%
Suma 603%
No slo son problemticos los mdulos propensos a errores, tambin muchos
otros factores pueden disminuir el rendimiento. Por ejemplo, muy complejo "cdigo
espagueti" es bastante difcil de mantener con seguridad. Una situacin muy
comn que a menudo degrada el rendimiento es la falta de herramientas de
mantenimiento adecuadas, como software de seguimiento de defectos, software
de gestin de cambio y software de biblioteca de pruebas. A continuacin se
describen algunos de los factores y la gama de impacto en el mantenimiento de
software.
Impacto de los factores clave de ajuste en el mantenimiento (por orden de mximo
impacto negativo)
Factores de mantenimiento Rango menos
Mdulos propensos a errores -50%
Datos y variables incrustados -45%
Inexperiencia del personal -40%
Alta complejidad del cdigo -30%
No Y2K de motores de bsqueda especiales -28%
Mtodos manuales de control de cambio -27%
Lenguajes de programacin de bajo nivel -25%
Ninguna herramienta de seguimiento de defectos -24%
No hay especialistas en "actualizacin masiva" Y2K -22%
Pobre facilidad de uso -18%
No hay mediciones de calidad -18%
No hay especialistas de mantenimiento -18%
Tiempo de respuesta pobre -16%
No hay inspecciones de cdigo -15%
No hay bibliotecas de pruebas de regresin -15%
No hay automatizacin del help desk -15%
No hay reportes de defecto en lnea -12%
Falta de experiencia de gestin -15%
No hay herramientas de reestructuracin -10%
No hay entrenamiento anual -10%
Ningunas herramientas de reingeniera -10%
No hay herramientas de ingeniera inversa -10%
No hay herramientas de anlisis de la complejidad -10%
No hay medidas de productividad -7%
Moral pobre del equipo -6%
No hay medidas de satisfaccin del usuario -4%
Horas extras no pagadas 0%
Suma -500%

Fases del mantenimiento:


La fase de mantenimiento de software involucra cambios al software para corregir
defectos encontrados durante su uso o la adicin de nueva funcionalidad
mejorando la usabilidad y aplicabilidad del software.
El mantenimiento del software involucra diferentes tcnicas especficas. Una
tcnica es el rebanamiento esttico, la cual es usada para identificar todo el cdigo
de programa que puede modificar alguna variable. Es generalmente til en
la refabricacin del cdigo del programa y fue especficamente til en asegurar
conformidad para el problema del ao 2000.
La fase de mantenimiento de software es una parte explcita del modelo en
cascada del proceso de desarrollo de software el cual fue desarrollado durante el
movimiento de programacin estructurada en computadores. El otro gran modelo,
el Desarrollo en espiral desarrollado durante el movimiento de ingeniera de
software orientada a objeto no hace una mencin explcita de la fase de
mantenimiento. Sin embargo, esta actividad es notable, considerando el hecho de
que dos tercios del coste del tiempo de vida de un sistema de software involucran
mantenimiento (Page-Jones pg 31).
En un ambiente formal de desarrollo de software, la organizacin o equipo de
desarrollo tendrn algn mecanismo para documentar y rastrear defectos y
deficiencias. El Software tan igual como la mayora de otros productos, es
tpicamente lanzado con un conjunto conocido de defectos y deficiencias. El
software es lanzado con esos defectos conocidos porque la organizacin de
desarrollo en las utilidades y el valor del software en un determinado nivel de
calidad compensa el impacto de los defectos y deficiencias conocidas.
Las deficiencias conocidas son normalmente documentadas en una carta de
consideraciones operacionales o notas de publicacin (release notes) es as que
los usuarios del software sern capaces de trabajar evitando las deficiencias
conocidas y conocern cundo el uso del software sera inadecuado para tareas
especficas.
Con el lanzamiento del software (software release), otros defectos y deficiencias
no documentados sern descubiertas por los usuarios del software. Tan pronto
como estos defectos sean reportados a la organizacin de desarrollo, sern
ingresados en el sistema de rastreo de defectos.
Las personas involucradas en la fase de mantenimiento de software esperan
trabajar en estos defectos conocidos, ubicarlos y preparar un nuevo lanzamiento
del software, conocido como un lanzamiento de mantenimiento, el cual resolver
los temas pendientes.

Mantenimiento Preventivo del Software:


El mantenimiento preventivo consiste en una atencin constante de limpieza,
revisin y afinacin de los distintos elementos integrantes de un equipo de
cmputo. Es importante saber que la mayora de los problemas que se presentan
en el trabajo cotidiano, se debe a la falta de un programa especfico de
mantenimiento de los equipos, de tal manera que la mayora de los problemas se
resuelven con el mismo procedimiento del mantenimiento preventivo. El
mantenimiento tiene tcnicas para darle un periodo de vida til ms largo y libre de
fallas. Debemos de tener en cuenta que es necesario darle mantenimiento al
software ya que el continuo uso genera una serie de cambios en la configuracin
original del sistema, causando bajas en el rendimiento que al acumularse con el
tiempo pueden generar problemas serios. Actualmente es indispensable mantener
actualizada la proteccin contra virus informticos.

Por supuesto es muy recomendable usar su equipo responsablemente, ya que


esto le podr causar un gasto mayor a futuro.
Las recomendaciones son: Cuidar las pginas a las que accesa, las de msica,
videos o juegos regularmente traen enlaces que pueden filtrarse directamente al
equipo de cmputo, tener un antivirus actualizado, hacer cada cierto tiempo un
escaneado y limpieza de su PC, evitar los mensajes SPAM que llegan en los
correos electrnicos, estos mensajes llegan normalmente con remitente
desconocido y se almacenan en la carpeta Correo no deseado, generalmente son
solo virus que no hacen mucho dao, pero tambin puede costar hasta el formateo
del equipo y con esto, la prdida de archivos importantes.

Usos de los lenguajes de programacin:


Los lenguajes de programacin hoy en da tienen una infinidad de aplicaciones,
basicamente cualquier objeto electrnico tiene cierto grado de programacin.
Algunos de los ms comunes son C++ y JAVA, tambien existe HTML, HTTP, XML,
XAML y C#, este ultimo actualmente es el ms utilizado en todos los dispositivos y
redes basados en MICROSOFT (Xbox 350, Windows Mobile, Windows Phone,
Windows Cloud, Zune, etc.). Ya que los lenguajes de programacin son
informaticamente un puente entre el Hardware y el Software estos permiten que
las computadoras puedan establecer conexion con un celular, una camara o una
consola portatil de videojuego. Otra de las aplicaciones de los lenguajes de
programacin son las matemticas como las calculadoras, cajas registradoras,
cajeros automticos, por solo mencionar algunos ejemplos sencillos. Existen
tambien niveles de programacin mucho mas complejos como los videojuegos o
los pilotos automticos de los aviones comerciales o las mquinas de juego de los
casinos que siguen un patrn de probabilidad a partir de un arreglo de nmeros al
azar establecido por una programacin numrica. La robtica es la combinacin
de mecnica, electrnica y programacin, la cual en base a sensores y
mecanismos sigue una serie de instrucciones algoritmicas las cuales le permiten
por ejemplo a un brazo robtico montar una rueda, ajustar un tornillo o cortar un
rectngulo de 3 cm cuadrados en una placa de acero. Con el avance de la
tecnologa los lmites de la programacin se vuelven cada vez ms distantes.

1. Lenguajes de programacin de bajo nivel. Son aquellos utilizados para controlar


el hardware (partes tangibles) del aparato y dependen directamente de la
mquina, es decir, que no pueden ser usados en aparatos diferentes para los que
fueron creados. Estos lenguajes son los que ordenan las operaciones esenciales
para el funcionamiento del dispositivo. Tambin es conocido como cdigo
mquina. Su funcionamiento es complejo, por lo que lo utilizan principalmente los
fabricantes de hardware. Con ellos se pueden programar tareas como
reproduccin de audio o video, mostrar imgenes, realizar operaciones
matemticas, movimiento del puntero, asignacin, liberacin de memoria, entre
otras.

2. Lenguajes de programacin de alto nivel. Estos lenguajes son ms parecidos al


humano. No dependen de la mquina y sirven principalmente para crear
programas informticos que puedan solucionar distintos tipos de necesidades.

Ahora bien, algunos de los lenguajes de programacin ms utilizados son SQL,


PHP, C y Java.

SQL: son las siglas de Structured Query Language (Lenguaje Estructurado de


Consulta). Su funcin principal es actuar sobre una base de datos y extraer su
contenido para almacenar, introducir, actualizar, eliminar y consultar informacin.
Suele ser usado en la construccin de pginas web y aplicaciones de escritorio.
PHP: es un acrnimo recursivo que significa PHP Hypertext Pre-processor. Es
utilizado para el desarrollo de sitios online, ya que es posible combinarlo con
HTML. Es un lenguaje de lado del servidor, es decir, que primero se ejecuta en
ste y posteriormente regeresa al navegador del usuario como resultado una
pgina web.

C: lenguaje orientado principalmente a los sistemas operativos. Se puede crear


un software para sistemas operativos como Windows o Linux, tambin es muy
usado en robtica para crear simuladores o para experimentos informticos,
fsicos, matemticos, etc.

Java: es uno de los lenguajes favoritos ya que permite construir programas que
gestionan la memoria del dispositivo donde reside la aplicacin, como por ejemplo
herramientas, juegos y apps. Es utilizado en dispositivos mviles, aparatos de
televisin y computadores personales. Suele ser asociado a Java Script, que es
otro tipo de lenguaje para crear pequeos programas encargados de realizar
acciones dentro de pginas webs, como por ejemplo crear efectos especiales o
para definir la interactividad con los usuarios.

Calidad del software:

La calidad del software es una preocupacin a la que se dedican muchos


esfuerzos. Sin embargo, el software casi nunca es perfecto. Todo proyecto tiene
como objetivo producir software de la mejor calidad posible, que cumpla, y si
puede supere las expectativas de los usuarios.

Calidad
Es la aptitud de un producto o servicio para satisfacer las necesidades del usuario.
Es la cualidad de todos los productos, no solamente de equipos sino tambin de
programas.
En el desarrollo de software, la calidad de diseo acompaa a la calidad de los
requisitos, especificaciones y diseo del sistema. La calidad de concordancia es
un aspecto centrado principalmente en la implementacin; Si la implementacin
sigue al diseo, y el sistema resultante cumple con los objetivos de requisitos y de
rendimiento, la calidad de concordancia es alta.

Calidad de software
Caractersticas propias del software aquellas que tu quieres controlar y asegurar,
el software es un producto inmaterial que no se fabrica, tampoco se degradan
fsicamente, sino que se desarrolla. El software puede tener errores, incidencias
pero no son similares a lo que cualquier equipo de carcter fsico.

La calidad del software se encuentra casi a la par de la calidad tradicional,


ligeramente detrs debido a que la calidad tradicional tiene varias dcadas de
historia, mientras que la calidad de software tiene entre 50 y 30 aos de haber
surgido.

El software necesita ser actualizado.

Certificacin del software


Consecuencia de un proceso que es asegurar la calidad pero nunca es el objetivo
final. La calidad de software no se certifica, lo que se certifica son los
procedimientos para construir un software de calidad, los procedimientos deben
ser correctos y estar en funcin de la normalizacin (ISO 9000, CMMI, Moprosoft,
etc.).

Normativa ISO 9000


Pone a disposicin de un auditor o certificador los procesos internos, de forma que
este indique si cumple o no la normativa al 100%, audita el sistema. Si los
resultados son positivos se emite la certificacin y cada cierto tiempo se tiene que
renovar. La certificacin es costosa, a consecuencia de costes que ocasionan la
lejana y el tiempo de duracin de proceso (aprox. 6 meses). Se certifica la
empresa y la metodologa para el desarrollo de la aplicacin.

Medicin del software


En el software lo que se mide son atributos propios del mismo, se descompone un
atributo general en otros ms simples de medir, a veces se mide bien o mal ya que
la descomposicin del atributo genrico de calidad en otros sub-atributos se torna
irreal, se mide con datos estadsticos no avalados, es imposible decir que la
medicin se hace en forma correcta.

El concepto de medida va de ms a menos, va de lo general a lo concreto y lo


concreto es asociado a la mtrica, cuya combinacin te dara el nivel de calidad o
seguridad de tu producto. Las ciencias bien estructuradas se basan en medidas
bien hechas, se basan en la matemtica.

Tipos de medidas
Nmero de errores durante un periodo determinado.
Fallo en la codificacin o diseo de un sistema que causa que el programa
no funcione correctamente o falle.
o Tamao de un producto informtico (lneas de cdigo)
Mtrica de punto funcin (IBM): relaciona funcionalidades que
ofreca.
o Estimacin de costes y esfuerzos.
COCOMO

Utilidad de la medida del software


Normativa ISO 9126, medida de la calidad de software descomponiendo atributos,
para no tener mrgenes de error e interpretacin.
Atributo de funcionalidad.
Atributo de capacidad de respuesta frente a errores externos.
Atributo de nivel de seguridad. La calidad no puede existir sin seguridad, un
producto sin seguridad seria un producto sin calidad. El observador o usuario final
indica que atributos ms o menos importantes de seguridad.

Sistema Gestor de Base de Datos:


Un sistema gestor de base de datos (SGBD) es un conjunto de programas que
permiten el almacenamiento, modificacin y extraccin de la informacin en
una base de datos, adems de proporcionar herramientas para aadir, borrar,
modificar y analizar los datos. Los usuarios pueden acceder a la informacin
usando herramientas especficas de consulta y de generacin de informes, o bien
mediante aplicaciones al efecto.
Estos sistemas tambin proporcionan mtodos para mantener la integridad de los
datos, para administrar el acceso de usuarios a los datos y para recuperar la
informacin si el sistema se corrompe. Permiten presentar la informacin de la
base de datos en variados formatos. La mayora incluyen un generador de
informes. Tambin pueden incluir un mdulo grfico que permita presentar la
informacin con grficos y tablas.
Generalmente se accede a los datos mediante lenguajes de consulta, lenguajes
de alto nivel que simplifican la tarea de construir las aplicaciones. Tambin
simplifican las consultas y la presentacin de la informacin. Un SGBD permite
controlar el acceso a los datos, asegurar su integridad, gestionar el acceso
concurrente a ellos, recuperar los datos tras un fallo del sistema y hacer copias de
seguridad. Las bases de datos y los sistemas para su gestin son esenciales para
cualquier rea de negocio, y deben ser gestionados con esmero.
Sistemas SQL (finales de dcada de 1970)
IBM comenz a trabajar a principios de 1970 en un prototipo lejanamente basado
en los conceptos de Codd llamndolo System R. La primera versin estuvo lista en
1974 o 1975, y comenz as el trabajo en sistemas multitabla, en los que los datos
podan disgregarse de modo que toda la informacin de un registro (alguna de la
cual es opcional) no tiene que estar almacenada en un nico trozo grande. Las
versiones multiusuario siguientes fueron probadas por los usuarios en 1978 y
1979, tiempo por el que un lenguaje SQL haba sido estandarizado. Las ideas de
Codd se revelaron como operativas y superiores a las de CODASYL, lanzando a
IBM al desarrollo de una verdadera versin de produccin de System R, conocido
como SQL/DS, y posteriormente como Database 2 (DB2).

Muchos de los tcnicos de INGRES estaban seguros del xito comercial del
sistema, y formaron sus propias compaas para comercializar el desarrollo pero
con una interfaz SQL. Sybase, Informix, NonStop SQL y la misma INGRES se
vendan como derivados del INGRES original en los aos 1980. Incluso el SQL
Server de Microsoft est basado en Sybase, y por consiguiente en INGRES. Slo
Larry Ellison el fundador de Oracle comenz un nuevo camino basado en el
artculo de IBM sobre System R, y aventaj a IBM sacando al mercado su primera
versin en 1978.

Stonebraker aplic las lecciones de INGRES al desarrollo de una nueva base de


datos Postgres conocida ahora como PostgreSQL. PostgreSQL se utiliza para
muchas aplicaciones crticas (los registros de dominios .org y .info lo usan para su
almacenamiento primario, as como grandes compaas e instituciones
financieras).

En Suecia, el artculo de Codd gener la base de datos Mimer SQL3 en la


universidad de Uppsala. En 1984 este proyecto se consolid en una compaa
independiente. A principios de 1980, Mimer introdujo la gestin de transacciones
para dar robustez a las aplicaciones, una idea que fue recogida en muchos otros
SGBD.
Sistemas orientados a objetos (1980)
Durante la dcada de 1980 el auge de la programacin orientada a objetos influy
en el modo de manejar la informacin de las bases de datos. Programadores y
diseadores comenzaron a tratar los datos en las bases de datos como objetos.
Esto quiere decir que si los datos de una persona estn en la base de datos, los
atributos de la persona como direccin, telfono y edad se consideran que
pertenecen a la persona, no son datos extraos. Esto permite establecer
relaciones entre objetos y atributos, ms que entre campos individuales.

Otro gran foco de atencin durante la dcada fue el incremento de velocidad y


fiabilidad en el acceso. En 1989, dos profesores de la Universidad de Wisconsin
publicaron un artculo en una conferencia ACM en el que exponan sus mtodos
para mejorar las prestaciones de las bases de datos. La idea consista en replicar
la informacin importante y ms solicitada en una base de datos temporal de
pequeo tamao con enlaces a la base de datos principal. Esto implicaba que se
poda buscar mucho ms rpido en la base de datos pequea que en la grande.
Su mejora de prestaciones llev a la introduccin de la indizacin, incorporado en
la totalidad de los SGBD.

Sistemas NoSQL (2000)


El siglo XXI trajo una nueva tendencia en las bases de datos: el NoSQL. Esta
tendencia introduca una lnea no relacional significativamente diferentes de las
clsicas. No requieren por lo general esquemas fijos, evitan las operaciones join
almacenando datos desnormalizados y estn diseadas para escalar
horizontalmente. La mayor parte de ellas pueden clasificarse como almacenes
clave-valor o bases de datos orientadas a documentos.

Recientemente ha habido una gran demanda de bases de datos distribuidas con


tolerancia a particiones, pero de acuerdo con el teorema CAP no es posible
conseguir un sistema distribuido que simultneamente proporcione consistencia,
disponibilidad y tolerancia al particionado. Un sistema distribuido puede satisfacer
slo dos de las tres restricciones a la vez. Por dicha razn muchas de las bases
de datos NoSQL usan la llamada consistencia eventual para proporcionar
disponibilidad y tolerancia al particionado, con un nivel mximo de consistencia de
datos.
Entre las aplicaciones ms populares encontramos MongoDB, MemcacheDB,
Redis, CouchDB, Hazelcast, Apache Cassandra y HBase, todas ellas de cdigo
abierto.

Sistemas XML (2010)


Las Bases de Datos XML forman un subconjunto de las Bases de Datos NoSQL.
Todas ellas usan el formato de almacenamiento XML, que est abierto, legible por
humanos y mquinas y ampliamente usado para interoperabilidad.

En esta categora encontramos: BaseX, eXist, MarkLogic Server,


MonetDB/XQuery, Sedna.