sábado, 31 de mayo de 2008

Proceso de creación de software

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 (ejemplo: 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) y/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 estimadamente 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.).
Considerando los de gran porte, es necesario realizar tantas y tan complejas tareas, tanto técnicas, de gerenciamiento, fuerte gestión y análisis diversos (entre otras) que toda una ingeniería hace falta para su estudio y realización: la Ingeniería de Software.
En tanto que en los de mediano porte, pequeños equipos de trabajo (incluso un avesado analista-programador solitario) puede realizar la tarea. Aunque, siempre en casos de mediano y gran porte (y a veces también en algunos de pequeño porte, según su complejidad), se deben seguir ciertas etapas que son necesarias para la construcción del software. Tales etapas, si bien deben existir, son flexibles en su forma de aplicación, de acuerdo a la metodología o Proceso de Desarrollo escogido y utilizado por el equipo de desarrollo o analista-programador solitario (si fuere el caso).
Los "procesos de desarrollo de software" poseen reglas preestablecidas, y deben ser aplicados en la creación del software de mediano y gran porte, ya que en caso contrario lo más seguro es que el proyecto o no logra concluir o termina sin cumplir los objetivos previstos y con variedad de fallos inaceptables (fracasan, en pocas palabras). Entre tales "procesos" los hay rápidos o livianos (ejemplo XP), pesados y lentos (ejemplo RUP) y variantes intermedias; y normalmente se aplican de acuerdo al tipo y porte del software a desarrollar, a criterio del líder (si lo hay) del equipo de desarrollo. Algunos de esos procesos son Extreme Programming (XP), Rational Unified Process (RUP), Feature Driven Development (FDD), etc.
Es común para el desarrollo de software de mdiano porte que los equipos humanos involucrados apliquen sus propias metodologías, normalmente un híbrido de los procesos anteriores y a veces con criterios propios.
El proceso de desarrollo puede involucrar numerosas y variadas tareas, desde lo administrativo, pasando por lo técnico y hasta la gestión y el gerenciamiento. Pero casi rigurosamente siempre se cumplen ciertas etapas mínimas, las que se pueden resumir como sigue:

Captura (elicitación) y Especificación de requisitos (ERS)
Análisis
Diseño
Codificación
Pruebas (unitarias y de integración)
Instalación y paso a Producción
Mantenimiento
En las anteriores etapas pueden variar ligeramente sus nombres o ser más globales, por ejemplo indicar como una única fase (a los fines documentales e interpretativos) el Análisis y el Diseño; o indicar como "Implementación" lo que está dicho como "Codificación"; pero en rigor, todas existen e incluyen, básicamente,las mismas tareas específicas.

*El Modelo Constructivo de Costes (o COCOMO, por su acrónimo del inglés Constructive Cost Model) es un modelo de estimación de costes de software que incluye tres submodelos, donde cada uno ofrece un nivel de detalle y aproximación cada vez mayor, a medida que avanza el proceso de desarrollo del software: básico, intermedio y detallado.
*La Ingeniería de software designa el conjunto de técnicas destinadas a la producción de un programa de computadora, más allá de la sola actividad de programación. Forman parte de esta disciplina las ciencias computacionales y el manejo de proyectos, entre otros campos, propios de la rama más genérica denominada Ingeniería informática.

viernes, 30 de mayo de 2008

Seguimos con su clasificación

Como ya dijimos la clasificación de software es:
Software de sistema/Software de programación/Software de aplicación
Pero ahora vamos a introducirnos más en ellos:

Software de sistema
*Sistemas operativos: Es un software de sistema, es decir, un conjunto de programas de computadora destinado a permitir una administración eficaz de sus recursos. Comienza a trabajar cuando se enciende el computador, y gestiona el hardware de la máquina desde los niveles más básicos, permitiendo también la interacción con el usuario.
Un sistema operativo se puede encontrar normalmente en la mayoría de los aparatos electrónicos que utilicen microprocesadores para funcionar, ya que gracias a éstos podemos entender la máquina y que ésta cumpla con sus funciones (teléfonos móviles, reproductores de DVD, autoradios, computadoras, etc.).

*Controladores de dispositivo:(llamado normalmente controlador, o, en inglés, driver) es un programa informático que permite al sistema operativo interactuar con un periférico, haciendo una abstracción del hardware y proporcionando una interfaz -posiblemente estandarizada- para usarlo. Se puede esquematizar como un manual de instrucciones que le indica cómo debe controlar y comunicarse con un dispositivo en particular. Por tanto, es una pieza esencial, sin la cual no se podría usar el hardware.

*Herramientas de diagnóstico: Software que permite monitorear y en algunos casos controlar la funcionalidad del hardware, como: computadoras, servidores y periféricos, según el tipo y sus funciones. Estos dispositivos pueden ser, la memoria [[RAM]], el procesador, los discos duros, ruteadores, tarjetas de red, entre muchos dispositivos más. El software permite monitorear temperatura, rendimiento, trasferencia de datos, etc.

Herramientas de Corrección y Optimización

*Servidores: En informática o computación es:
Una aplicación informática o programa que realiza algunas tareas en beneficio de otras aplicaciones llamadas clientes. Algunos servicios habituales son los servicios de archivos, que permiten a los usuarios almacenar y acceder a los archivos de una computadora y los servicios de aplicaciones, que realizan tareas en beneficio directo del usuario final. Este es el significado original del término. Es posible que un ordenador cumpla simultáneamente las funciones de cliente y de servidor.
El computador en el que se ejecuta un programa que realiza alguna tarea en beneficio de otras aplicaciones llamadas clientes, tanto si se trata de un ordenador central (mainframe), un mini ordenador, un ordenador personal, una PDA o un sistema integrado; sin embargo, hay computadoras destinadas únicamente a proveer los servicios de estos programas: estos son los servidores por antonomasia.
Un servidor no es necesariamente una máquina de última generación grande y monstruosa, no es necesariamente un superordenador; un servidor puede ser desde una computadora vieja, hasta una máquina sumamente potente (ej.: servidores Web, bases de datos grandes, etc. Procesadores especiales y hasta varias gigas de memoria). Todo esto depende del uso que se le dé al servidor. Si usted lo desea, puede convertir al equipo desde el cual usted está leyendo esto en un servidor instalando un programa que trabaje por la red y a la que los usuarios de su red ingresen a través de un programa de servidor Web como Apache.
A lo cual podemos llegar a la conclusión de que un servidor también puede ser un proceso que entrega información o sirve a otro proceso, el modelo cliente/servidor no necesariamente implica tener dos ordenadores, ya que un proceso cliente puede solicitar algo como una impresión a un proceso servidor en un mismo ordenador

*Utilidades: En informática, una utilidad es una herramienta que realiza:
Tareas de mantenimiento
Soporte para la construcción y ejecución de programas
Las tareas en general
En donde se incluyen las bibliotecas de sistema, middleware, herramientas de desarrollo, etc.
Entre ellas podemos nombrar cifrado, descifrado de archivos, compresión de archivos, defragmentadores de discos editores de texto, respaldo, etc.

Software de programación
*Editores de texto: Es un programa que permite crear y modificar archivos digitales compuestos únicamente por texto sin formato, conocidos comúnmente como archivos de texto ó texto plano. El programa lee el archivo e interpreta los bytes leídos según el código de carácteres que usa el editor.

*Compiladores: Es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es código máquina, pero también puede ser simplemente texto. Este proceso de traducción se conoce como compilación.
Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.

*Intérpretes: es un programa informático capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los intérpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripción en un lenguaje de programación al código máquina del sistema destino, los primeros (los interpretes) sólo realizan la traducción a medida que sea necesario, típicamente, instrucción por instrucción, y normalmente no guardan el resultado de dicha traducción.
Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos de programación y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa o añadir módulos completamente nuevos), y permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete, sino del propio intérprete (lo que se conoce comúnmente como máquina virtual).
Comparando su actuación con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intérprete corresponde al intérprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito.
En la actualidad, uno de los entornos más comunes de uso de los intérpretes informáticos es Internet, debido a la posibilidad que estos tienen de ejecutarse independientemente de la plataforma.

*Enlazadores: Es un programa que toma los ficheros de código objeto generado en los primeros pasos del proceso de compilación, la información de todos los recursos necesarios (biblioteca), quita aquellos recursos que no necesita, y enlaza el código objeto con su(s)biblioteca con lo que finalmente produce un fichero ejecutable o una biblioteca.. En el caso de los programas enlazados dinámicamente, el enlace entre el programa ejecutable y las bibliotecas se realiza en tiempo de carga o ejecución del programa.
*Depuradores: Es un programa que permite depurar o limpiar los errores de otro programa informático.

Software de aplicación
*Aplicaciones de control: La tecla control de los teclados informáticos.
*Automatización industrial: Es el uso de sistemas o elementos computarizados para controlar maquinarias y/o procesos industriales substituyendo a operadores humanos.
El alcance va más allá que la simple mecanización de los procesos ya que ésta provee a operadores humanos mecanismos para asistirlos en los esfuerzos físicos del trabajo, la automatización reduce ampliamente la necesidad sensorial y mental del humano. La automatización como una disciplina de la ingeniería es más amplia que un mero sistema de control, abarca la instrumentación industrial, que incluye los sensores y transmisores de campo, los sistemas de control y supervisión, los sistema de transmisión y recolección de datos y las aplicaciones de software en tiempo real para supervisar y controlar las operaciones de plantas o procesos industriales.

*Aplicaciones ofimáticas: Una suite ofimática o suite de oficina es un conjunto de software para el uso en oficinas y entornos profesionales.
No hay una norma estricta sobre los programas a incluir, pero la mayoría incluyen al menos un procesador de textos y una hoja de cálculo. De forma añadida, la suite puede contener un programa de presentaciones, un sistema de gestión de base de datos, herramientas menores de gráficos y comunicaciones, un gestor de información personal (agenda y cliente de correo electrónico) y un navegador web.
En la actualidad la suite ofimática dominante en el mercado es Microsoft Office, la cual posee sus propios formatos cerrados de documentos para cada uno de sus programas. Debido a esto y a la pobre compatibilidad de la suite de Microsoft con otros formatos abiertos (como OpenDocument), la habilidad de lectura y escritura de formatos Microsoft Office es esencial para cualquier otra suite ofimática del mercado.


*Software educativo: Es el software destinando a la enseñanza y el auto aprendizaje y además permite el desarrollo de ciertas habilidades cognitivas. Así como existen profundas diferencias entre las filosofías pedagógicas, así también existe una amplia gama de enfoques para la creación de software educativo atendiendo a los diferentes tipos de interacción que debería existir entre los actores del proceso de enseñanza aprendizaje: educador, aprendiz, conocimiento, computadora. Como software educativo tenemos desde programas orientados al aprendizaje hasta sistemas operativos completos destinados a la educación, como por ejemplo las distribuciones Linux orientadas a la enseñanza.

*Software médico: En los ordenadores, los programas informáticos médicos son una importante rama de la ingeniería de software. Muchos dispositivos médicos que vigilar o controlar los pacientes son en su mayoría controlados por software.
Monitores: frecuencia cardiaca, la presión arterial, la tasa de respiración, el uso de software para interpretar la información de sensores y mostrarlo de una manera significativa en un monitor.
Medicamentos bombas: Estos dispositivos están programados para el bombeo de una cierta cantidad de plasma, sangre, solución salina, u otra medicación en un paciente en un determinado tipo. El software proporciona la capacidad para controlar muchos aspectos de los procedimientos de tratamiento.
Análisis: Muchos dispositivos, tales como escáneres CAT, medida de los datos en bruto que es esencialmente de sentido a la gente. Software reinterpreta estos datos para crear las imágenes que los médicos pueden leer y entender.
Sistemas Expertos: Una variedad de sistemas expertos que se han creado para indicar lo que se debe hacer. Estos son menos utilizados que las otras cosas que acabo de mencionar.
Médico de la informática: software para la empresa y de información aspecto de la medicina.
Terapia de entrega: El software de marcapasos y desfibriladores implantables proporciona tolerancia a fallos, en tiempo real, críticos para la misión de vigilancia de los ritmos cardíacos y la entrega de terapia asociada.
Médico de la asistencia sanitaria y los programas informáticos educativos: Software utilizado como un centro de enseñanza o herramienta de estudio para los profesionales de la salud.

*Software de Cálculo Numérico: El análisis o cálculo numérico es la rama de la matemática que se encarga de diseñar algoritmos para, a través de números y reglas matemáticas simples simular procesos matemáticos más complejos aplicados a procesos del mundo real.

*Software de Diseño Asistido (CAD): El diseño asistido por computador remoto (o computadora u ordenador), abreviado como DAO (diseño asistido por computador) pero más conocido por sus siglas inglesas CAD (Computer Aided Design remote), es el uso de un amplio rango de herramientas computacionales que asisten a ingenieros, arquitectos y a otros profesionales del diseño en sus respectivas actividades.
El diseño asistido por computadora remoto es, además, la herramienta principal para la creación de entidades geométricas e isométricas variables enmarcadas dentro de procesos de administración del ciclo de vida de productos (Product Lifecycle Management), y que involucra software y algunas veces hardware especiales.

*Software de Control Numérico (CAM):La fabricación asistida por computadora, también conocida por las siglas en inglés CAM (Computer Aided Manufacturing), hace referencia al uso de un extenso abanico de herramientas basadas en los ordenadores que ayudan a ingenieros, arquitectos y otros profesionales dedicados al diseño en sus actividades.

Los datos creados con el CAD, se mandan a la máquina para realizar el trabajo, con una intervención del operador mínima.
Algunos ejemplos de CAM son: el fresado programado por control numérico, la realización de agujeros en circuitos automáticamente por un robot, soldadura automática de componentes SMD en una planta de montaje.
CAM (Computer Aided Manufacturing o Manufactura asistida por computadora): La manufactura asistida por computadora (CAM, de computer aided manufacturing), implica el uso de computadores y tecnología de cómputo para ayudar en todas las fases de la manufactura de un producto, incluyendo la planeación del proceso y la producción, maquinado, calendarización, administración y control de calidad. El sistema CAM abarca muchas de las tecnologías. Debido a sus ventajas, se suelen combinar el diseño y la manufactura asistidos por computadora en los sistemas CAD/CAM.
Esta combinación permite la transferencia de información dentro de la etapa de diseño a la etapa de planeación para la manufactura de un producto, sin necesidad de volver a capturar en forma manual los datos sobre la geometría de la pieza. La base de datos que se desarrolla durante el CAD es almacenada; posteriormente ésta es procesada por el CAM, para obtener los datos y las instrucciones necesarias para operar y controlar la maquinaria de producción, el equipo de manejo de materiales y las pruebas e inspecciones automatizadas para establecer la calidad del producto.
Una función de CAD/CAM importante en operaciones de maquinado, es la posibilidad de describir la trayectoria de la herramienta para diversas operaciones, como por ejemplo torneado, fresado y taladrado con control numérico. Las instrucciones o programas se generan en computadora, y pueden modificar el progra-mador para optimizar la trayectoria de las herramientas. El ingeniero o el técnico pueden entonces mostrar y comprobar visualmente si la trayectoria tiene posibles colisiones con prensas, soportes u otros objetos.
En cualquier momento es posible modificar la trayectoria de la herramienta, para tener en cuenta otras formas de piezas que se vayan a maquinar. También, los sistemas CAD/CAM son capaces de codificar y clasificar las piezas en grupos que tengan formas semejantes, mediante codificación alfanumérica.
El surgimiento del CAD/CAM ha tenido un gran impacto en la manufactura al normalizar el desarrollo de los productos y reducir los esfuerzos en el diseño, pruebas y trabajo con prototipos: ha hecho posible reducir los costos en forma importante, y mejorar la productividad. Por ejemplo, el avión bimotor Boeing 777 de pasajeros, fue diseñado en su totalidad en computadora y diseño sin papel) con 2000 estaciones de trabajo conectadas a ocho computadoras. Ese avión se construye en forma directa con los programas CAD/CAM desarrollados (y el sistema ampliado CATIA), y no se construyeron prototipos ni simulaciones, como los que se requirieron en los modelos anteriores. El costo de este desarrollo fue del orden de 6 mil millones de dólares.

Fuentes informáticas:
http://es.wikipedia.org/wiki/Computer_software
http://es.wikipedia.org/wiki/Software_de_sistema
http://es.wikipedia.org/wiki/Software_de_programaci%C3%B3n
http://es.wikipedia.org/wiki/Software_de_aplicaci%C3%B3n

lunes, 26 de mayo de 2008

Clasificación de Software

Si bien esta distinción es, en cierto modo, arbitraria, y a veces confusa, se puede clasificar al software de la siguiente forma:
Software de sistema: Es aquel que permite que el hardware funcione. Su objetivo es desvincular adecuadamente al programador de los detalles del computador 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 interfases de alto nivel y utilidades de apoyo que permiten su mantenimiento. Incluye entre otros:
Sistemas operativos
Controladores de dispositivo
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. Incluye entre otros:
Editores de texto
Compiladores
Intérpretes
Enlazadores
Depuradores
Entornos de Desarrollo Integrados (IDE): Agrupan las anteriores herramientas, usualmente en un entorno visual, de forma 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: 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 otros:
Aplicaciones de control y automatización industrial
Aplicaciones ofimáticas
Software educativo
Software médico
Software de Cálculo Numérico
Software de Diseño Asistido (CAD)
Software de Control Numérico (CAM)

viernes, 23 de mayo de 2008

¿Qué es el Software?¿y cuál es su definición?

Software, palabra proveniente del inglés, que en nuestro idioma no posee una traducción adecuada al contexto, por lo cual se la utiliza sin traducir. Se refiere al equipamiento lógico o soporte lógico de un computador digital, comprende el conjunto de los componentes lógicos necesarios para hacer posible la realización de una tarea específica, en contraposición a los componentes físicos del sistema (hardware). Tales componentes lógicos incluyen, entre otras, aplicaciones informáticas tales como procesador de textos, que permite al usuario realizar todas las tareas concernientes a edición de textos; software de sistema, tal como un sistema operativo, el que, básicamente, permite al resto de los programas funcionar adecuadamente, facilitando la interacción con los componentes físicos y el resto de las aplicaciones, también provee una interface ante el usuario.

*Plural: interfaces, en vez de interfases (varias entre-fases)

Su definición:

Probablemente la definición más formal de software es 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
Bajo esta definición, el concepto de software va más allá de los programas de cómputo en sus distintos estados: código fuente, binario o ejecutable; también su documentación, datos a procesar e información de usuario es parte del software: es decir, abarca todo lo intangible, todo lo "no físico" relacionado.
El término «software» fue usado por primera vez en este sentido por John W. Tukey en 1957. En las ciencias de la computación y la ingeniería de software, el software es toda la información procesada por los sistemas informáticos: programas y datos. El concepto de leer diferentes secuencias de instrucciones 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 vez primera por Alan Turing en su ensayo de 1936, "Los números computables", con una aplicación al problema de decisión.

sábado, 10 de mayo de 2008

SISTEMAS INFORMÁTICOS - Software



Un sistema informático es el conjunto de hardware, software y de un soporte humano. Un sistema informático típico emplea una computadora que usa dispositivos programables para capturar, almacenar y procesar datos. La computadora personal o PC, junto con la persona que lo maneja y los periféricos que los envuelven, resultan de por sí un ejemplo de un sistema informático.
Incluso la computadora más sencillo se clasifica como un sistema informático, porque al menos dos componentes (hardware y software) tienen que trabajar unidos. Pero el genuino significado de "sistema informático" viene mediante la interconexión. Muchos sistemas informáticos pueden interconectarse, esto es, unirse para convertirse un
sistema mayor. La interconexión de sistemas informáticos puede tornarse difícil debido a incompatibilidades. A veces estas dificultades ocurren a nivel de hardware, mientras que en otras ocasiones se dan entre programas informáticos que no son compatibles entre sí.
Los diseñadores de sistemas informáticos, profesionales titulados en
Ingeniería informática, no necesariamente esperan que sus sistemas se puedan interconectar con otros sistemas. Por otro lado, los técnicamente eruditos a menudo pueden configurar sistemas diferentes para que se puedan comunicar entre sí usando un conjunto de reglas y restricciones conocidas como protocolos. Los protocolos tratan precisamente de definir la comunicación dentro de y entre sistemas informáticos distintos pero conectados entre sí. Si dos sistemas informáticos usan el mismo protocolo, entonces podrán ser capaces de interconectarse y formar parte de un sistema mayor.