HARDWARE:
La historia del hardware de
computador se puede clasificar en cuatro generaciones, cada una caracterizada
por un cambio tecnológico de importancia. Una primera de limitación podría
hacerse entre hardware básico, el estrictamente necesario para el
funcionamiento normal del equipo, y complementario, el que realiza funciones
específicas.
El término hardware
(pronunciación AFI: [ˈhɑːdˌwɛə] o [ˈhɑɹdˌwɛɚ]) se
refiere a todas las partes tangibles de un sistema informático; sus componentes son: eléctricos, electrónicos, electromecánicos y mecánicos. Son cables, gabinetes o
cajas, periféricos de
todo tipo y cualquier otro elemento físico
involucrado; contrariamente, el soporte lógico es intangible y es llamado
software.
El término, aunque sea lo más
común, no solamente se aplica a las computadoras; del mismo modo, también un
robot, un teléfono móvil, una cámara fotográfica o un reproductor multimedia
poseen hardware (y software).
La clasificación evolutiva del
hardware del computador electrónico está dividida en generaciones, donde cada
una supone un cambio tecnológico muy notable.
1ª Generación (1945-1956):
electrónica implementada con tubos de vacío. Fueron las primeras máquinas que
desplazaron los componentes electromecánicos (relés).
2ª Generación (1957-1963):
electrónica desarrollada con transistores. La lógica discreta era muy parecida
a la anterior, pero la implementación resultó mucho más pequeña, reduciendo,
entre otros factores, el tamaño de un computador en notable escala.
3ª Generación (1964-hoy):
electrónica basada en circuitos integrados. Esta tecnología permitió integrar
cientos de transistores y otros componentes electrónicos en un único circuito
integrado impreso en una pastilla de silicio. Las computadoras redujeron así
considerablemente su costo, consumo y tamaño, incrementándose su capacidad,
velocidad y fiabilidad, hasta producir máquinas como las que existen en la
actualidad.
4ª Generación (futuro):
probablemente se originará cuando los circuitos de silicio, integrados a alta
escala, sean reemplazados por un nuevo tipo de material o tecnología.
CLASIFICACIÓN
Una de las formas de clasificar
el hardware es en dos categorías: por un lado, el "básico", que
abarca el conjunto de componentes indispensables necesarios para otorgar la
funcionalidad mínima a una computadora; y por otro lado, el hardware
"complementario", que, como su nombre indica, es el utilizado para
realizar funciones específicas (más allá de las básicas), no estrictamente
necesarias para el funcionamiento de la computadora.
Necesita un medio de entrada de
datos, la unidad central de procesamiento (C.P.U.), la memoria RAM, un medio de
salida de datos y un medio de almacenamiento constituyen el "hardware
básico".
UNIDAD CENTRAL DE PROCESAMIENTO
La CPU, siglas en inglés de
Unidad Central de Procesamiento, es el componente fundamental del computador,
encargado de interpretar y ejecutar instrucciones y de procesar datos.12 En los
computadores modernos, la función de la CPU la realiza uno o más microprocesadores.
Se conoce como microprocesador a una CPU que es manufacturada como un único
circuito integrado.
Un servidor de red o una máquina
de cálculo de alto rendimiento (supercomputación), puede tener varios, incluso
miles de microprocesadores trabajando simultáneamente o en paralelo
(multiprocesamiento); en este caso, todo ese conjunto conforma la CPU de la
máquina.
LA PLACA BASE.
La placa base, también conocida
como placa madre o con el anglicismo board, es un gran circuito impreso sobre
el que se suelda el chipset, las ranuras de expansión (slots), los zócalos,
conectores, diversos integrados, etc. Es el soporte fundamental que aloja y
comunica a todos los demás componentes: Procesador, módulos de memoria RAM,
tarjetas gráficas, tarjetas de expansión, periféricos de entrada y salida. Para
comunicar esos componentes, la placa base posee una serie de buses mediante los
cuales se trasmiten los datos dentro y hacia afuera del sistema.
MEMORIA RAM
Del inglés Random Access Memory,
literalmente significa "memoria de acceso aleatorio". El término
tiene relación con la característica de presentar iguales tiempos de acceso a
cualquiera de sus posiciones (ya sea para lectura o para escritura). Esta
particularidad también se conoce como "acceso directo", en
contraposición al Acceso secuencial.
La RAM es la memoria utilizada en
una computadora para el almacenamiento transitorio y de trabajo (no masivo). En
la RAM se almacena temporalmente la información, datos y programas que la
Unidad de Procesamiento (CPU) lee, procesa y ejecuta. La memoria RAM es
conocida como Memoria principal de la computadora, también como "Central o
de Trabajo"; a diferencia de las llamadas memorias auxiliares, secundarias
o de almacenamiento masivo (como discos duros, unidades de estado sólido,
cintas magnéticas u otras memorias).
Las memorias RAM son, comúnmente,
volátiles; lo cual significa que pierden rápidamente su contenido al
interrumpir su alimentación eléctrica.
MEMORIAS RAM ESPECIALES
Hay memorias RAM con
características que las hacen particulares, y que normalmente no se utilizan
como memoria central de la computadora; entre ellas se puede mencionar:
SRAM: Siglas de Static Random
Access Memory. Es un tipo de memoria más rápida que la DRAM (Dynamic RAM). El
término "estática" deriva del hecho que no necesita el refresco de
sus datos. Si bien esta RAM no requiere circuito de refresco, ocupa más espacio
y utiliza más energía que la DRAM. Este tipo de memoria, debido a su alta velocidad,
es usada como memoria caché.
NVRAM: Siglas de Non-Volatile
Random Access Memory. Memoria RAM no volátil (mantiene la información en
ausencia de alimentación eléctrica). Hoy en día, la mayoría de memorias NVRAM
son memorias flash, muy usadas para teléfonos móviles y reproductores
portátiles de MP3.
VRAM: Siglas de Video Random
Access Memory. Es un tipo de memoria RAM que se utiliza en las tarjetas
gráficas del computador. La característica particular de esta clase de memoria
es que es accesible de forma simultánea por dos dispositivos. Así, es posible
que la CPU grabe información en ella, al tiempo que se leen los datos que serán
visualizados en el Monitor de computadora.
PERIFÉRICOS
Se entiende por periférico a las
unidades o dispositivos que permiten a la computadora comunicarse con el
exterior, esto es, tanto ingresar como exteriorizar información y datos. Los
periféricos son los que permiten realizar las operaciones conocidas como de
entrada/salida (E/S).
Aunque son estrictamente
considerados “accesorios” o no esenciales, muchos de ellos son fundamentales
para el funcionamiento adecuado de la computadora moderna; por ejemplo, el
teclado, el disco duro y el monitor son elementos actualmente imprescindibles;
pero no lo son un escáner o un plóter. Para ilustrar este punto: en los años
80, muchas de las primeras computadoras personales no utilizaban disco duro ni
mouse (o ratón), tenían sólo una o dos disqueteras, el teclado y el monitor
como únicos periféricos.
DISPOSITIVOS DE ENTRADA DE INFORMACIÓN (E)
De esta categoría son aquellos
que permiten el ingreso de información, en general desde alguna fuente externa
o por parte del usuario. Los dispositivos de entrada proveen el medio
fundamental para transferir hacia la computadora (más propiamente al procesador)
información desde alguna fuente, sea local o remota. También permiten cumplir
la esencial tarea de leer y cargar en memoria el sistema operativo y las
aplicaciones o programas informáticos, los que a su vez ponen operativa la
computadora y hacen posible realizar las más diversas tareas.
Entre los periféricos de entrada
se puede mencionar: teclado, mouse o ratón, escáner, micrófono, cámara web ,
lectores ópticos de código de barras, Joystick, lectora de CD, DVD o BluRay
(sólo lectoras), placas de adquisición/conversión de datos, etc.
DISPOSITIVOS DE SALIDA DE INFORMACIÓN (S)
Son aquellos que permiten emitir
o dar salida a la información resultante de las operaciones realizadas por la
CPU (procesamiento).
Los dispositivos de salida
aportan el medio fundamental para exteriorizar y comunicar la información y
datos procesados; ya sea al usuario o bien a otra fuente externa, local o
remota.
Los dispositivos más comunes de
este grupo son los monitores clásicos (no de pantalla táctil), las impresoras,
y los altavoces.
Entre los periféricos de salida
puede considerarse como imprescindible para el funcionamiento del sistema, al
monitor. Otros, aunque accesorios, son sumamente.
HARDWARE GRÁFICO
El hardware gráfico lo
constituyen básicamente las tarjetas gráficas. Dichos componentes disponen de
su propia memoria y unidad de procesamiento, esta última llamada unidad de procesamiento gráfico (o GPU, siglas en inglés de Graphics Processing
Unit). El objetivo básico de la GPU es realizar los cálculos asociados a
operaciones gráficas, fundamentalmente en coma flotante,16 liberando así al
procesador principal (CPU) de esa costosa tarea (en tiempo) para que éste pueda
efectuar otras funciones en forma más eficiente. Antes de esas tarjetas de
vídeo con aceleradores por hardware, era el procesador principal el encargado
de construir la imagen mientras la sección de vídeo (sea tarjeta o de la placa
base) era simplemente un traductor de las señales binarias a las señales
requeridas por el monitor; y buena parte de la memoria principal (RAM) de la
computadora también era utilizada para estos fines.
SOFTWARE
Se
conoce como software1 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.
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,
controlador, herramientas y utilidades de apoyo que permiten el mantenimiento
del sistema global. Incluye entre otros:
Sistemas
operativos
Controladores
de dispositivos
Herramientas
de diagnóstico
Herramientas
de Corrección y Optimización
Servidores
Utilidades
Software de programación: Es el conjunto de herramientas que permiten
al programador desarrollar programas informáticos, usando diferentes
alternativas y lenguajes de programación, de una manera práctica. Incluyen
básicamente:
Editores
de texto
Compiladores
Intérpretes
Enlazadores
Depuradores
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:
Aplicaciones
para Control de sistemas y automatización industrial
Aplicaciones
ofimáticas
Software
educativo
Software
empresarial
Bases
de datos
Telecomunicaciones
(por ejemplo Internet y toda su estructura lógica)
Videojuegos
Software
médico
Software
de cálculo numérico y simbólico.
Software
de diseño asistido (CAD)
Software
de control numérico (CAM)
PROCESO DE CREACIÓN DEL SOFTWARE
Se define como proceso al
conjunto ordenado de pasos a seguir para llegar a la solución de un problema u
obtención de un producto, en este caso particular, para lograr un producto
software que resuelva un problema específico.
El proceso de creación de
software puede llegar a ser muy complejo, dependiendo de su porte,
características y criticidad del mismo. Por ejemplo la creación de un sistema
operativo es una tarea que requiere proyecto, gestión, numerosos recursos y
todo un equipo disciplinado de trabajo. En el otro extremo, si se trata de un
sencillo programa (por ejemplo, la resolución de una ecuación de segundo
orden), éste puede ser realizado por un solo programador (incluso aficionado)
fácilmente. Es así que normalmente se dividen en tres categorías según su
tamaño (líneas de código) o costo: de «pequeño», «mediano» y «gran porte».
Existen varias metodologías para estimarlo, una de las más populares es el
sistema COCOMO que provee métodos y un software (programa) que calcula y provee
una aproximación de todos los costos de producción en un «proyecto software»
(relación horas/hombre, costo monetario, cantidad de líneas fuente de acuerdo a
lenguaje usado, etc.).
MODELOS DE PROCESO O CICLO DE VIDA
Para cada una de las fases o
etapas listadas en el ítem anterior, existen sub-etapas (o tareas). El modelo
de proceso o modelo de ciclo de vida utilizado para el desarrollo, define el
orden de las tareas o actividades involucradas,6 también define la coordinación
entre ellas, y su enlace y realimentación. Entre los más conocidos se puede
mencionar: modelo en cascada o secuencial, modelo espiral, modelo iterativo
incremental. De los antedichos hay a su vez algunas variantes o alternativas,
más o menos atractivas según sea la aplicación requerida y sus requisitos.
MODELO CASCADA
Este, aunque es más comúnmente
conocido como modelo en cascada es también llamado «modelo clásico», «modelo
tradicional» o «modelo lineal secuencial».
El modelo en cascada puro
difícilmente se utiliza tal cual, pues esto implicaría un previo y absoluto
conocimiento de los requisitos, la no volatilidad de los mismos (o rigidez) y
etapas subsiguientes libres de errores; ello sólo podría ser aplicable a
escasos y pequeños sistemas a desarrollar. En estas circunstancias, el paso de
una etapa a otra de las mencionadas sería sin retorno, por ejemplo pasar del
diseño a la codificación implicaría un diseño exacto y sin errores ni probable
modificación o evolución: «codifique lo diseñado sin errores, no habrá en
absoluto variantes futuras». Esto es utópico; ya que intrínsecamente el software
es de carácter evolutivo, cambiante y difícilmente libre de errores, tanto
durante su desarrollo como durante su vida operativa.
MODELOS EVOLUTIVOS
El software evoluciona con el
tiempo. Los requisitos del usuario y del producto suelen cambiar conforme se
desarrolla el mismo. Las fechas de mercado y la competencia hacen que no sea
posible esperar a poner en el mercado un producto absolutamente completo, por
lo que se aconsejable introducir una versión funcional limitada de alguna forma
para aliviar las presiones competitivas.
En esas u otras situaciones
similares los desarrolladores necesitan modelos de progreso que estén diseñados
para acomodarse a una evolución temporal o progresiva, donde los requisitos
centrales son conocidos de antemano, aunque no estén bien definidos a nivel
detalle.
MODELO ITERATIVO INCREMENTAL
En términos generales, se puede
distinguir, los pasos generales que sigue el proceso de desarrollo de un
producto software. En el modelo de ciclo de vida seleccionado, se identifican
claramente dichos pasos. La descripción del sistema es esencial para
especificar y confeccionar los distintos incrementos hasta llegar al producto
global y final. Las actividades concurrentes (especificación, desarrollo y
validación) sintetizan el desarrollo pormenorizado de los incrementos, que se
hará posteriormente.
El diagrama muestra en forma muy
esquemática, el funcionamiento de un ciclo iterativo incremental, el cual
permite la entrega de versiones parciales a medida que se va construyendo el
producto final. Es decir, a medida que cada incremento definido llega a su
etapa de operación y mantenimiento. Cada versión emitida incorpora a los
anteriores incrementos las funcionalidades y requisitos que fueron analizados
como necesarios.
El incremental es un modelo de
tipo evolutivo que está basado en varios ciclos Cascada Realimentados aplicados
repetidamente, con una filosofía iterativa. En la Figura se muestra un
refino del diagrama previo, bajo un esquema temporal, para obtener finalmente
el esquema del modelo de ciclo de vida Iterativo Incremental, con sus
actividades genéricas asociadas. Aquí se observa claramente cada ciclo cascada
que es aplicado para la obtención de un incremento; estos últimos se van
integrando para obtener el producto final completo. Cada incremento es un ciclo
Cascada Realimentado, aunque, por simplicidad, en la Figura se muestra como secuencial
puro.
MODELO ESPIRAL.
El modelo espiral fue propuesto
inicialmente por Barry Boehm. Es un modelo evolutivo que conjuga la naturaleza
iterativa del modelo MCP con los aspectos controlados y sistemáticos del Modelo
Cascada. Proporciona potencial para desarrollo rápido de versiones
incrementales. En el modelo Espiral el software se construye en una serie de
versiones incrementales. En las primeras iteraciones la versión incremental
podría ser un modelo en papel o bien un prototipo. En las últimas iteraciones
se producen versiones cada vez más completas del sistema diseñado.
El modelo se divide en un número
de Actividades de marco de trabajo, llamadas «regiones de tareas». En general
existen entre tres y seis regiones de tareas (hay variantes del modelo). En la
Figura 6 se muestra el esquema de un Modelo Espiral con 6 regiones. En este
caso se explica una variante del modelo original de Boehm, expuesto en su
tratado de 1988; en 1998 expuso un tratado más reciente.
Las regiones definidas en el modelo
de la figura son:
Región 1 - Tareas requeridas para
establecer la comunicación entre el cliente y el desarrollador.
Región 2 - Tareas inherentes a la
definición de los recursos, tiempo y otra información relacionada con el
proyecto.
Región 3 - Tareas necesarias para
evaluar los riesgos técnicos y de gestión del proyecto.
Región 4 - Tareas para construir
una o más representaciones de la aplicación software.
Región 5 - Tareas para construir
la aplicación, instalarla, probarla y proporcionar soporte al usuario o cliente
(Ej. documentación y práctica).
Región 6 - Tareas para obtener la
reacción del cliente, según la evaluación de lo creado e instalado en los
ciclos anteriores.
MODELO ESPIRAL WIN & WIN
Una variante interesante del
Modelo Espiral previamente visto es el «Modelo espiral Win-Win»7
(Barry Boehm). El Modelo Espiral previo (clásico) sugiere la comunicación con
el cliente para fijar los requisitos, en que simplemente se pregunta al cliente
qué necesita y él proporciona la información para continuar; pero esto es en un
contexto ideal que rara vez ocurre. Normalmente cliente y desarrollador entran
en una negociación, se negocia coste frente a funcionalidad, rendimiento,
calidad, etc.
«Es así que la obtención de
requisitos requiere una negociación, que tiene éxito cuando ambas partes
ganan».
ETAPAS EN EL DESARROLLO DEL SOFTWARE
Captura,
análisis y especificación de requisitos
Al inicio de un desarrollo (no de
un proyecto), esta es la primera fase que se realiza, y, según el modelo de
proceso adoptado, puede casi terminar para pasar a la próxima etapa (caso de
Modelo Cascada Realimentado) o puede hacerse parcialmente para luego retomarla
(caso Modelo Iterativo Incremental u otros de carácter evolutivo).
En simple palabras y básicamente,
durante esta fase, se adquieren, reúnen y especifican las características
funcionales y no funcionales que deberá cumplir el futuro programa o sistema a
desarrollar.
Las bondades de las
características, tanto del sistema o programa a desarrollar, como de su entorno,
parámetros no funcionales y arquitectura dependen enormemente de lo bien
lograda que esté esta etapa. Esta es, probablemente, la de mayor importancia y
una de las fases más difíciles de lograr certeramente, pues no es
automatizable, no es muy técnica y depende en gran medida de la habilidad y
experiencia del analista que la realice.
Involucra fuertemente al usuario
o cliente del sistema, por tanto tiene matices muy subjetivos y es difícil de
modelar con certeza o aplicar una técnica que sea «la más cercana a la
adecuada» (de hecho no existe «la estrictamente adecuada»). Si bien se han
ideado varias metodologías, incluso software de apoyo, para captura,
elicitación y registro de requisitos, no existe una forma infalible o
absolutamente confiable, y deben aplicarse conjuntamente buenos criterios y
mucho sentido común por parte del o los analistas encargados de la tarea; es
fundamental también lograr una fluida y adecuada comunicación y comprensión con
el usuario final o cliente del sistema.
Procesos,
modelado y formas de elicitación de requisitos
Siendo que la captura,
elicitación y especificación de requisitos, es una parte crucial en el proceso
de desarrollo de software, ya que de esta etapa depende el logro de los
objetivos finales previstos, se han ideado modelos y diversas metodologías de
trabajo para estos fines. También existen herramientas software que apoyan las
tareas relativas realizadas por el ingeniero en requisitos.
El estándar IEEE 830-1998 brinda
una normalización de las «Prácticas Recomendadas para la Especificación de
Requisitos Software».
A medida que se obtienen los
requisitos, normalmente se los va analizando, el resultado de este análisis,
con o sin el cliente, se plasma en un documento, conocido como ERS o
Especificación de Requisitos Software, cuya estructura puede venir definida por
varios estándares, tales como CMMI.
Clasificación
e identificación de requisitos
Se pueden identificar dos formas
de requisitos:
Requisitos de usuario: Los
requisitos de usuario son frases en lenguaje natural junto a diagramas con los
servicios que el sistema debe proporcionar, así como las restricciones bajo las
que debe operar.
Requisitos de sistema: Los
requisitos de sistema determinan los servicios del sistema y pero con las
restricciones en detalle. Sirven como contrato.
Es decir, ambos son lo mismo,
pero con distinto nivel de detalle.
Ejemplo de requisito de usuario:
El sistema debe hacer préstamos Ejemplo de requisito de sistema: Función
préstamo: entrada código socio, código ejemplar; salida: fecha devolución; etc.
Se clasifican en tres los tipos
de requisitos de sistema:
Requisitos funcionales
Los requisitos funcionales
describen:
Los servicios que proporciona el
sistema (funciones).
La respuesta del sistema ante
determinadas entradas.
El comportamiento del sistema en
situaciones particulares.
Requisitos no funcionales.
DISEÑO DEL SISTEMA
En ingeniería de software, el diseño
es una fase de ciclo de vida del software. Se
basa en la especificación de requisitos producido por el análisis de los
requisitos (fase de análisis), el diseño define cómo estos
requisitos se cumplirán, la estructura que debe darse al sistema de software
para que se haga realidad.
El
diseño sigue siendo una fase separada de la programación o codificación, esta
última corresponde a la traducción en un determinado lenguaje de programación de las premisas
adoptadas en el diseño.
PRUEBAS (UNITARIAS Y DE
INTEGRACIÓN)
Entre
las diversas pruebas que se le efectúan al software se pueden distinguir
principalmente:
Prueba
unitarias: Consisten en probar o testear piezas de software pequeñas; a nivel
de secciones, procedimientos, funciones y módulos; aquellas que tengan
funcionalidades específicas. Dichas pruebas se utilizan para asegurar el
correcto funcionamiento de secciones de código, mucho más reducidas que el
conjunto, y que tienen funciones concretas con cierto grado de independencia.
Pruebas
de integración: Se realizan una vez que las pruebas unitarias fueron concluidas
exitosamente; con éstas se intenta asegurar que el sistema completo, incluso
los subsistemas que componen las piezas individuales grandes del software
funcionen correctamente al operar e inteoperar en conjunto.
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.
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.















