Software:
Se conoce como software al equipamiento lógico o
soporte
lógico de un
sistema informático, que comprende el conjunto
de los componentes lógicos necesarios que hacen posible la
realización de tareas específicas, en contraposición a los componentes físicos que
son llamados
hardware.
Los componentes lógicos incluyen, entre muchos otros, las
aplicaciones informáticas; tales como el
procesador de texto, que permite al usuario
realizar todas las tareas concernientes a la edición de textos; el llamado
software de sistema, tal como el
sistema
operativo, que básicamente permite al resto de los programas funcionar
adecuadamente, facilitando también la interacción entre los componentes físicos
y el resto de las aplicaciones, y proporcionando una
interfaz con el usuario.
Definición de software:

Existen varias definiciones similares aceptadas para
software, pero probablemente la más formal sea la siguiente:
Es el conjunto de los programas de cómputo, procedimientos,
reglas, documentación y datos asociados, que forman parte de las operaciones de
un sistema de computación.
Considerando esta definición, el concepto de software va más
allá de los programas de computación en sus distintos estados:
código
fuente,
binario o
ejecutable; también su documentación, los datos a
procesar e incluso la información de usuario forman parte del software: es
decir, abarca todo lo intangible, todo lo «no físico» relacionado.
El concepto de leer diferentes secuencias de
instrucciones (
programa) desde la
memoria de un dispositivo para
controlar los cálculos fue introducido por
Charles
Babbage como parte de su
máquina diferencial. La teoría que
forma la base de la mayor parte del software moderno fue propuesta por
Alan Turing en
su ensayo de 1936, «Los números computables», con una aplicación al problema de
decisión.
Clasificación del software:

Si bien esta distinción es, en cierto modo, arbitraria, y a
veces confusa, a los fines prácticos se puede clasificar al software en tres
grandes tipos:
Software de sistema: Su objetivo es
desvincular adecuadamente al usuario y al programador de los detalles del
sistema informático en particular que se use, aislándolo especialmente del
procesamiento referido a las características internas de: memoria, discos,
puertos y dispositivos de comunicaciones, impresoras, pantallas, teclados, etc.
El software de sistema le procura al usuario y programador adecuadas
interfaces de alto nivel,
controladores, herramientas y utilidades
de apoyo que permiten el mantenimiento del sistema global. Incluye entre otros:
Herramientas de Corrección y Optimización
Entornos de Desarrollo Integrados (
IDE): Agrupan las anteriores
herramientas, usualmente en un entorno visual, de forma tal que el programador
no necesite introducir múltiples
comandos para compilar, interpretar,
depurar, etc. Habitualmente cuentan con una
avanzada
interfaz gráfica de usuario (
GUI).
Software de aplicación: Es aquel que permite
a los usuarios llevar a cabo una o varias tareas específicas, en cualquier
campo de actividad susceptible de ser automatizado o asistido, con especial
énfasis en los negocios. Incluye entre muchos otros:
Software de control numérico (
CAM)
Codificación del software:
Durante esta etapa se realizan las tareas que comúnmente se
conocen como
programación; que consiste, esencialmente, en llevar a
código fuente, en el lenguaje de programación elegido, todo lo diseñado en la
fase anterior. Esta tarea la realiza el
programador,
siguiendo por completo los lineamientos impuestos en el diseño y en
consideración siempre a los requisitos funcionales y no funcionales (ERS)
especificados en la primera etapa.
Es común pensar que la etapa de programación o codificación
(algunos la llaman implementación) es la que insume la mayor parte del trabajo
de desarrollo del software; sin embargo, esto puede ser relativo (y
generalmente aplicable a sistemas de pequeño porte) ya que las etapas previas
son cruciales, críticas y pueden llevar bastante más tiempo. Se suele hacer
estimaciones de un 30% del tiempo total insumido en la programación, pero esta
cifra no es consistente ya que depende en gran medida de las características
del sistema, su criticidad y el lenguaje de programación elegido.
7 En
tanto menor es el nivel del lenguaje mayor será el tiempo de programación
requerido, así por ejemplo se tardaría más tiempo en codificar un
algoritmo en
lenguaje ensamblador que el mismo
programado en
lenguaje C.
Mientras se programa la aplicación, sistema, o software en
general, se realizan también tareas de depuración, esto es la labor de ir
liberando al código de los errores factibles de ser hallados en esta fase (de
semántica, sintáctica y lógica). Hay una suerte de solapamiento con la fase
siguiente, ya que para depurar la lógica es necesario realizar pruebas
unitarias, normalmente con datos de prueba; claro es que no todos los errores
serán encontrados sólo en la etapa de programación, habrán otros que se
encontrarán durante las etapas subsiguientes. La aparición de algún error
funcional (mala respuesta a los requisitos) eventualmente puede llevar a
retornar a la fase de diseño antes de continuar la codificación.
Durante la fase de programación, el código puede adoptar
varios estados, dependiendo de la forma de trabajo y del lenguaje elegido, a
saber:
Código fuente: es el escrito directamente por los
programadores en
editores de texto, lo cual genera el
programa. Contiene el conjunto de
instrucciones codificadas en algún lenguaje de alto nivel. Puede estar
distribuido en paquetes, procedimientos,
bibliotecas fuente, etc.
Código objeto: es el código binario o intermedio
resultante de procesar con un
compilador el
código fuente. Consiste en una traducción completa y de una sola vez
de éste último. El código objeto no es inteligible por el ser humano
(normalmente es formato binario) pero tampoco es directamente ejecutable por la
computadora. Se trata de una representación intermedia entre el código fuente y
el código ejecutable, a los fines de un enlace final con las rutinas de
biblioteca y entre procedimientos o bien
para su uso con un pequeño intérprete intermedio [a modo de distintos ejemplos
véase
EUPHORIA, (intérprete intermedio),
FORTRAN (compilador
puro)
MSIL
(Microsoft Intermediate Language) (intérprete) y
BASIC (intérprete
puro, intérprete intermedio, compilador intermedio o compilador puro, depende
de la versión utilizada)].
El código objeto no existe si el programador
trabaja con un lenguaje a modo de intérprete puro, en este caso el mismo
intérprete se encarga de traducir y ejecutar línea por línea el código fuente
(de acuerdo al flujo del programa), en tiempo de ejecución. En este caso tampoco
existe el o los archivos de
código ejecutable. Una desventaja de esta
modalidad es que la ejecución del programa o sistema es un poco más lenta que
si se hiciera con un intérprete intermedio, y bastante más lenta que si existe
el o los archivos de código ejecutable. Es decir no favorece el rendimiento en
velocidad de ejecución. Pero una gran ventaja de la modalidad intérprete puro,
es que el esta forma de trabajo facilita enormemente la tarea de depuración del
código fuente (frente a la alternativa de hacerlo con un compilador puro).
Frecuentemente se suele usar una forma.
mixta de trabajo (si el lenguaje de programación elegido lo
permite), es decir inicialmente trabajar a modo de intérprete puro, y una vez
depurado el código fuente (liberado de errores) se utiliza un compilador del
mismo lenguaje para obtener el código ejecutable completo, con lo cual se
agiliza la depuración y la velocidad de ejecución se optimiza.
Código ejecutable: Es el código binario resultado
de
enlazar uno
o más fragmentos de código objeto con las rutinas y
bibliotecas necesarias. Constituye uno o
más
archivos binarios con un formato tal que el
sistema
operativo es capaz de cargarlo en la memoria
RAM (eventualmente
también parte en una
memoria virtual), y proceder a su ejecución
directa. Por lo anterior se dice que el código ejecutable es directamente
«inteligible por la computadora». El código ejecutable, también conocido como
código máquina, no existe si se programa con
modalidad de «intérprete puro».
Instalación y paso a producción
La
instalación del software es el proceso
por el cual los programas desarrollados son transferidos apropiadamente al
computador destino, inicializados, y, eventualmente,
configurados; todo ello con el
propósito de ser ya utilizados por el usuario final. Constituye la etapa final
en el desarrollo propiamente dicho del software. Luego de ésta el producto
entrará en la fase de funcionamiento y producción, para el que fuera diseñado.
La instalación, dependiendo del sistema desarrollado, puede
consistir en una simple copia al
disco rígido destino
(casos raros actualmente); o bien, más comúnmente, con una de complejidad
intermedia en la que los distintos archivos componentes del software
(ejecutables,
bibliotecas, datos propios, etc.) son
descomprimidos y copiados a lugares
específicos preestablecidos del disco; incluso se crean vínculos con otros
productos, además del propio
sistema
operativo. Este último caso, comúnmente es un proceso bastante automático
que es creado y guiado con herramientas software específicas (
empaquetado y distribución, instaladores).
En productos de mayor complejidad, la segunda alternativa es
la utilizada, pero es realizada o guiada por especialistas; puede incluso
requerirse la instalación en varios y distintos computadores (instalación
distribuida).
También, en software de mediana y alta complejidad
normalmente es requerido un proceso de
configuración y chequeo, por el
cual se asignan adecuados parámetros de funcionamiento y se testea la
operatividad funcional del producto.
En productos de venta masiva las instalaciones completas, si
son relativamente simples, suelen ser realizadas por los propios usuarios
finales (tales como sistemas operativos, paquetes de oficina, utilitarios,
etc.) con herramientas propias de instalación guiada; incluso la configuración
suele ser automática. En productos de diseño específico o «a medida» la
instalación queda restringida, normalmente, a personas especialistas
involucradas en el desarrollo del software en cuestión.
Una vez realizada exitosamente la instalación del software,
el mismo pasa a la fase de producción (operatividad), durante la cual cumple
las funciones para las que fue desarrollado, es decir, es finalmente utilizado
por el (o los) usuario final, produciendo los resultados esperados.
Mantenimiento:
El
mantenimiento de software es el
proceso de control, mejora y optimización del software ya desarrollado e
instalado, que también incluye depuración de errores y defectos que puedan
haberse filtrado de la fase de pruebas de control y beta test. Esta fase es la
última (antes de iterar, según el modelo empleado) que se aplica al ciclo de
vida del desarrollo de software. La fase de mantenimiento es la que viene
después de que el software está operativo y en producción.
De un buen diseño y documentación del desarrollo dependerá
cómo será la fase de mantenimiento, tanto en costo temporal como monetario.
Modificaciones realizadas a un software que fue elaborado con una documentación
indebida o pobre y mal diseño puede llegar a ser tanto o más costosa que
desarrollar el software desde el inicio. Por ello, es de fundamental
importancia respetar debidamente todas las tareas de las fases del desarrollo y
mantener adecuada y completa la documentación.
El período de la fase de mantenimiento es normalmente el
mayor en todo el ciclo de vida.
7 Esta
fase involucra también actualizaciones y evoluciones del software; no
necesariamente implica que el sistema tuvo errores. Uno o más cambios en el
software, por ejemplo de adaptación o evolutivos, puede llevar incluso a rever
y adaptar desde parte de las primeras fases del desarrollo inicial, alterando
todas las demás; dependiendo de cuán profundos sean los cambios. El modelo
cascada común es particularmente costoso en mantenimiento, ya que su rigidez
implica que cualquier cambio provoca regreso a fase inicial y fuertes
alteraciones en las demás fases del ciclo de vida.
Durante el período de mantenimiento, es común que surjan
nuevas revisiones y versiones del producto; que lo liberan más depurado, con
mayor y mejor funcionalidad, mejor rendimiento, etc. Varias son las facetas que
pueden ser alteradas para provocar cambios deseables, evolutivos, adaptaciones
o ampliaciones y mejoras.
Básicamente se tienen los siguientes tipos de cambios:
Perfectivos: Aquellos que llevan a una mejora de la calidad
interna del software en cualquier aspecto: Reestructuración del código,
definición más clara del sistema y su documentación; optimización del
rendimiento y eficiencia.
Evolutivos: Agregados, modificaciones, incluso
eliminaciones, necesarias en el software para cubrir su expansión o cambio,
según las necesidades del usuario.
Adaptivos: Modificaciones que afectan a los entornos en los
que el sistema opera, tales como: Cambios de configuración del hardware (por
actualización o mejora de componentes electrónicos), cambios en el software de
base, en gestores de base de datos, en comunicaciones, etc.
Correctivos: Alteraciones necesarias para corregir errores
de cualquier tipo en el producto software desarrollado.
SISTEMAS OPERATIVOS:
Un sistema operativo (SO o, frecuentemente, OS —del
inglés Operating System—) es un
programa o conjunto de programas que en
un sistema informático gestiona los recursos de
hardware y
provee servicios a los
programas de aplicación, ejecutándose en
modo privilegiado respecto de los restantes y anteriores próximos y viceversa
(aunque puede que parte del mismo se ejecute en espacio de usuario).
A finales de los años 1980, una computadora
Commodore
Amiga equipada con una aceleradora
Video Toaster era capaz de
producir efectos comparados a sistemas dedicados que costaban el triple. Un
Video Toaster junto a Lightwave ayudó a producir muchos programas de televisión
y películas, entre las que se incluyen
Babylon 5,
SeaQuest
DSV y
Terminator 2.
Sistemas operativos multiprogramados
Surge un nuevo avance en el hardware: el hardware con
protección de memoria. Lo que ofrece nuevas soluciones a los problemas de
rendimiento:
Se solapa el cálculo de unos trabajos con la entrada/salida
de otros trabajos.
Se pueden mantener en memoria varios programas.
Se asigna el uso de la CPU a los diferentes programas en
memoria.
Debido a los cambios anteriores, se producen cambios en el
monitor residente, con lo que éste debe abordar nuevas tareas, naciendo lo que
se denomina como Sistemas Operativos multiprogramados, los cuales cumplen con
las siguientes funciones:
Administrar la memoria.
Gestionar el uso de la CPU (planificación).
Administrar el uso de los dispositivos de E/S.
Cuando desempeña esas tareas, el monitor residente se
transforma en un sistema operativo multiprogramado.
Ejemplos de sistemas operativos para PC