miércoles, 24 de septiembre de 2014

Paradigmas en el desarrollo de software





Definición de Paradigma:
Para la Ingeniería de Software el paradigma es una agrupación de métodos, herramientas y procedimientos con el fin de describir un modelo.


Paradigmas de la Ingeniería de Software:
Cada metodología de desarrollo de software tiene más o menos su propio enfoque para el desarrollo de software.

La ingeniería del Software define paradigmas de desarrollo estructurado como base a seguir en un proyecto de Software. Si ninguno de estos paradigmas se adecua al problema por resolver, entonces el desarrollador se verá obligado a combinar los paradigmas o definir uno nuevo.
Para resolver los problemas reales, el ingeniero del software debe incorporar una estrategia de desarrollo que acompañe al proceso, métodos y capas de herramientas.

La estrategia a menudo se llama modelo de proceso o paradigma de ingeniería del software. Se selecciona un modelo de proceso para la ingeniería del software según la naturaleza del proyecto y de la aplicación, los métodos y las herramientas a utilizarse y los controles y entregas que se requieren.

Los paradigmas o modelos de desarrollo de software más utilizados son: el método de  cascada, el método de prototipos y el de Espiral.


Modelo Lineal Secuencial o de Cascada (Waterfall):
Es un proceso secuencial de desarrollo en el que los pasos de desarrollo son vistos hacia abajo (como en una cascada de agua) a través de las fases de análisis de las necesidades, el diseño, implantación, pruebas (validación), la integración, y mantenimiento.

La primera descripción formal del modelo de cascada se cita a menudo a un artículo publicado por Winston Royce en 1970, aunque Royce no utilizó el término "cascada" en este artículo.

Es el paradigma más antiguo y fue el más utilizado durante la hegemonía del método estructurado. El número de etapas propuestas varía de acuerdo al proyecto a desarrollar, aunque existen etapas comunes para este paradigma.

Este paradigma concibe las fases de desarrollo como proceso independientes en el tiempo, es decir, no se pueden realizar de manera simultánea; cada fase empieza cuando se ha terminado la fase anterior y para poder pasar a otra fase es necesario haber conseguido todos los objetivos de la etapa previa.

Las etapas de este paradigma se desarrollan en forma secuencial y cuando se detecta algún error en alguna etapa, lo más probable será abandonar todo lo avanzado y regresar a la etapa primera de análisis de requisitos del sistema; pues, aunque la vuelta atrás por etapas es posible, ésta demanda mucho esfuerzo y puede terminar en el colapso.

Definición de los requisitos. En este proceso se identifican las necesidades y requerimientos del cliente con respecto al software.

Análisis y Diseño. En el análisis se establece la viabiliad del software desde el punto de vista técnico y económico, se planifican las actividades y el presupuesto. En el diseño del software se centra en cuatro atributos de un programa: estructura de datos, arquitectura del software, representaciones de interfaz y detalle procedimental (algoritmo).

Codificación: Se traducir en forma legible por la máquina el modelo previamente diseñado. El paso de generación de código lleva a cabo esta tarea. Si lleva a cabo el diseño de una forma detallada, la generación de código se realiza mecánicamente.

Pruebas. El proceso de pruebas se centra en los procesos lógico internos del software, y en los procesos externos funcionales.  Se deben realizar las pruebas para detección de errores y asegurarse que las entradas definidas produzcan resultados reales que concuerden con los resultados requeridos.

Mantenimiento. El software indudablemente sufrirá cambios después de ser entregado al cliente. El mantenimiento vuelve a aplicar cada una de las fases precedentes a un programa ya existente y no a uno nuevo.

Modelos de Prototipos:


El modelo de prototipos permite desarrollar modelos de aplicaciones de software que permiten ver la funcionalidad básica de la misma, sin necesariamente incluir toda la lógica o características del modelo terminado.

El prototipo permite al cliente evaluar en forma temprana el producto, e interactuar con los diseñadores y desarrolladores para saber si se está cumpliendo con las expectativas y las funcionalidades acordadas.

Los Prototipos no poseen la funcionalidad total del sistema pero si condensa la idea principal del mismo, Paso a Paso crece su funcionalidad, y maneja un alto grado de participación del usuario.

Los modelos previos pueden ser en papel o computadora para mostrar la interacción hombre-máquina; un modelo que muestra algunas funciones del software; o, algún software anterior (parte o todo) parecido al que se desea, que luego será modificado y adaptado según los requerimientos del usuario.

El paradigma de construcción de prototipos comienza con la recolección de requisitos. El desarrollador y el cliente encuentran y definen los objetivos globales para el software, identifican los requisitos conocidos, y las áreas del esquema en donde es obligatoria más definición. Entonces aparece un “diseño rápido”.

El diseño rápido se centra en una representación de esos aspectos del software que serán visibles para el usuario/cliente. El diseño rápido lleva a la construcción de un prototipo.
El prototipo lo evalúa el cliente/usuario y lo utiliza para refinar los requisitos del software a desarrollar. 

La interacción ocurre cuando el prototipo satisface las necesidades del cliente, a la vez que permite que el desarrollador comprenda mejor lo que se necesita hacer.

Lo ideal sería que el prototipo sirviera como un mecanismo para identificar los requisitos del software. Si se construye un prototipo de trabajo, el desarrollador intenta hacer uso de los fragmentos del programa ya existentes o aplica herramientas que permiten generar rápidamente programas de trabajo.

El paradigma de la elaboración por prototipos resulta una alternativa para el desarrollo rápido de aplicaciones de software; pues el analista acorta en tiempo entre la determinación de los requerimientos de información y la entrega de un sistema funcional, además que el usuario podrá modificar y depurar sus requerimientos conforme avance el desarrollo del proyecto.

Modelo en Espiral:


Propuesto por Boehm en 1988 con la finalidad de paliar los inconvenientes del modelo en cascada y adecuar el desarrollo por prototipos a problemas complejos.

Este paradigma combina el paradigma de cascada y el de construcción por prototipos, agregando una etapa de "análisis de riesgo".

El paradigma de espiral es un modelo de ciclo de vida orientado a riesgos que divide un proyecto software en miniproyectos y donde cada miniproyecto se centra en uno o más riesgos importantes hasta que todos estos estén controlados.

Este modelo se realiza en varias iteraciones; se parte de una escala pequeña la cual comienza con la identificación de objetivos, alternativas y restricciones; en medio de la espiral, se localizan riesgos, se genera un plan para manejarlos, y a continuación se establece una aproximación a la siguiente iteración.

Se proporciona el potencial para el desarrollo rápido de versiones increméntales del software. En el modelo espiral, el software se desarrolla en una serie de versiones increméntales. Durante las primeras iteraciones, la versión incrementar podría ser un modelo en papel prototipo.

Durante las últimas iteraciones, se producen versiones cada vez más completas de ingeniería del sistema. El modelo en espiral se divide en un número de actividades estructurales también llamadas guiones de tareas. Estas inclusive pueden variar de 3 a 6 tareas.

Cuando empieza este proceso evolutivo, el equipo de ingeniería del software gira alrededor de la espiral en la dirección de las agujas del reloj, comenzando por el centro. El primer circuito de la espiral produce el desarrollo de una especificación de productos; los pasos siguientes en la espiral se podrían utilizar para desarrollar un prototipo y progresivamente versiones más sofisticadas del software. Cada paso de la región de planificación produce ajustes en el plan del proyecto.

El costo y la planificación se ajustan según la reacción ante la evaluación del cliente. Además, el gestor del proyecto ajusta el número planificado de iteraciones requeridas para completar el software.

En esencia, la espiral, cuando se caracteriza de esta forma, permanece operativo hasta que el software se retira. Hay veces en que el proceso está inactivo, pero siempre que se inicie un cambio, el proceso arranca en el punto de entrada adecuado (p. Ej.: mejora el producto).

El modelo en espiral es un enfoque realista del desarrollo de sistemas y de software a gran escala. Como el software evoluciona, a medida que progresa el proceso, el desarrollador y el cliente comprenden y reaccionan mejor ante riesgos en cada uno de los niveles evolutivos.

El modelo en espiral utiliza la construcción de prototipos como mecanismos de reducción de riesgos, pero lo que es más importante, permite a quien lo desarrolla aplicar el enfoque de construcción de prototipos en cualquier etapa de evolución del producto.

Mantiene el enfoque sistemático de los pasos sugeridos por el ciclo de vida clásico, pero lo incorpora al marco de trabajo interactivo que refleja de forma más realista el mundo real. El modelo en espiral demanda una consideración directa de los riesgos técnicos en todas las etapas del proyecto, y si se aplica adecuadamente, debe reducir los riesgos antes de que se conviertan en problemáticos.

El paradigma espiral, al igual que los demás modelos, se puede combinar con otros paradigmas.


Módelo “Rapid Application Development” (RAD)
El desarrollo rápido de aplicaciones (RAD) es una metodología de desarrollo de software, que implica el desarrollo iterativo y la construcción de prototipos.

El desarrollo rápido de aplicaciones es un término originalmente utilizado para describir un proceso de desarrollo de software introducido por James Martin en 1991.
El objetivo clave de este modelo es un rápido desarrollo y entrega de una alta calidad en un sistema de relativamente bajo coste de inversión.
Intenta reducir el riesgos inherente del proyecto partiendolo en segmentos más pequeños y proporcionar más facilidad de cambio durante el proceso de desarrollo.

Orientación dedicada a producir sistemas de alta calidad con rapidez, principalmente mediante el uso de iteración por prototipos (en cualquier etapa de desarrollo), promueve la participación de los usuarios y el uso de herramientas de desarrollo computarizadas. 

Estas herramientas pueden incluir constructores de Interfaz gráfica de usuario (GUI), Computer Aided Software Engineering (CASE) las herramientas, los sistemas de gestión de bases de datos (DBMS), lenguajes de programación de cuarta generación, generadores de código, y técnicas orientada a objetos.

Hace especial hincapié en el cumplimiento de la necesidad comercial, mientras que la ingeniería tecnológica o excelencia es de menor importancia.

El control de proyecto implica el desarrollo de prioridades y la definición de los plazos de entrega. Si el proyecto empieza a aplazarse, se hace hincapié en la reducción de requisitos para el ajuste, no en el aumento de la fecha límite.

En general incluye “Joint application development” (JAD), donde los usuarios están intensamente participando en el diseño del sistema, ya sea a través de la creación de consenso estructurado en talleres, o por vía electrónica.

La participación activa de los usuarios es imprescindible.

Iterativamente realiza la producción de software, en lugar de enfocarse en un prototipo.
Produce la documentación necesaria para facilitar el futuro desarrollo y mantenimiento.

Criterios Generales para Seleccionar un Paradigma:
El ingeniero de sistemas debe estar en capacidad de seleccionar de manera correcta la utilización de alguno de los paradigmas anteriormente mencionados o una combinación de ellos, evaluando las principales características del problema al cual se enfrentará.

Estas características se deben captar en la fase de análisis general del sistema y deberán reforzarse en la etapa de análisis detallado del sistema. Como puntos de evaluación para la selección del paradigma adecuado tenemos:

  • La naturaleza del proyecto, donde se agrupan criterios como la complejidad del producto final, el conocimiento de la aplicación por parte del grupo, la utilización final del software, etc.
  • El control del proyecto y la importancia de los avances, directamente relacionado con las características del cliente, sus perspectivas y deseos respecto al software, la importancia de su inclusión en el grupo de desarrollo del producto, etc..
  • Los métodos y las herramientas disponibles para el desarrollo de cada una de las fases a realizar.


martes, 23 de septiembre de 2014

Sistema de Información y su Clasificación


Los sistemas de información no son un fin en sí mismos, ellos facilitan y aceleran la estrategia organizacional. 
Es vital para la organización tomar conciencia que existe una estrecha relación entre estrategia, proceso de negocio, sistemas de información y recursos humanos, solo de esta forma se podrán alcanzar los resultados esperados. 

Los sistemas de información son como una lupa de aumento, si tienes una buena estrategia y un recurso humano entrenado y motivado, los objetivos planteados se lograran mucho más rápidos pero si estas estrategias son pésimas y un recurso humano mediocre, el sistema de información ayudará a que las malas prácticas utilizadas se realicen de forma más rápida, acelerando la caída de la organización.

lunes, 22 de septiembre de 2014

Cómo invertir en tecnología y qué errores evitar al momento de invertir


La tecnología está cambiando la forma tradicional de hacer las cosas, las personas que trabajan en gobierno, en empresas privadas, que dirigen personal o que trabajan como profesional en cualquier campo utilizan los sistemas de información cotidianamente mediante el uso de Internet, las tarjetas de crédito, el pago electrónico de la nómina, entre otras funciones; es por eso que la función de los sistemas de información en los procesos de la empresa como manufactura y ventas se han expandido grandemente.

Un proyecto de Sistemas de Información no consiste únicamente en la automatización o administración de datos. El término envuelve la “Administración o Gerencia de la Información, su transformación a través de herramientas adecuadas en conocimiento”.

Cuando la manera en la cual utilizamos la información es el centro de atención, el proceso de decisión, la estructura de gerencia, incluso la forma en la cual el trabajo es realizado comienza a transformarse. Cuando la estructura organizacional se centra en el manejo y gerencia de la información, los niveles gerenciales se ven reducidos.

¿Que es el Software?



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, datos asociados, procedimientos y documentación, 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 o ejecutable; también su documentación, los datos a procesar e incluso la información del usuario forma parte del software: es decir, abarca todo lo intangible, todo lo «no físico».

El término «software» fue usado por primera vez en este sentido por John W. Tukey en 1958. En la ingeniería de software y las ciencias de la computación, el software es toda la información procesada por los sistemas informáticos: programas y datos.

jueves, 15 de mayo de 2014

Modos de ejecución de comandos en MySQL



Cuando se ejecute un comando SQL desde el cliente MySQL se disponen de dos modos, el modo interactivo y el modo por lotes (o batch):

A continuación se describe el uso de ambos modos:

Como conectarse y desconectarse a MySQL de modo interactivo



Para conectarse al servidor MySQL se debe proporcionar un nombre de usuario y una contraseña.

Si el servidor se está ejecutando en un ordenador distinto a donde se establece la conexión se debe adicionalmente especificar el nombre de host.

El administrador del equipo servidor donde se encuentra instalada el MySQL debe proporcionar los parámetros necesarios para realizar esta conexión (nombre de usuario, contraseña y host). Una vez que se conocen los parámetros necesarios, debe conectarse de esta forma:

Introducción al MySQL


¿Qué es MySQL?

MySQL es un sistema de administración relacional de bases de datos. Una base de datos relacional archiva datos en tablas separadas en vez de colocar todos los datos en un gran archivo. 

Esto permite velocidad y flexibilidad. Las tablas están conectadas por relaciones definidas que hacen posible combinar datos de diferentes tablas sobre pedido.

MySQL es software de fuente abierta. Fuente abierta significa que es posible para cualquier persona usarlo y modificarlo. Cualquier persona puede bajar el código fuente de MySQL y usarlo sin pagar.

Cualquier interesado puede estudiar el código fuente y ajustarlo a sus necesidades. MySQL usa el GPL (GNU General Public License) para definir qué puede hacer y qué no puede hacer con el software en diferentes situaciones. 

Si usted no se ajusta al GPL o requiere introducir código MySQL en aplicaciones comerciales, usted puede comprar una versión comercial licenciada.

Como crear claves foráneas en MySQL (FOREIGN KEY)



Foreign Key:
Una llave foránea (Foreign Key) es una limitación referencial entre dos tablas. La clave foránea identifica un campo en una tabla (tabla hija o referendo) que se refiere a un campo de otra tabla (tabla padre o referenciada).
El campo en la tabla padre debe ser clave primaria y un registro en la tabla hija no puede contener valores que no existen en la tabla padre.
Las referencias son creadas para vincular o relacionar información. Esto es una parte esencial de la normalización de base de datos.

miércoles, 7 de mayo de 2014

Motores de Almacenamiento de MySQL


MySQL soporta varios motores de almacenamiento que tratan con distintos tipos de tabla. Los motores de almacenamiento de MySQL incluyen algunos que tratan con tablas transaccionales y otros que no lo hacen:
  • MyISAM trata tablas no transaccionales, proporciona almacenamiento y recuperación de datos rápida, así como posibilidad de búsquedas fulltext. MyISAM se soporta en todas las configuraciones MySQL y fue el motor de almacenamiento por defecto hasta la versión 5.5 de MySQL.
  • El motor de almacenamiento MEMORY proporciona tablas en memoria. El motor de almacenamiento MEMORY anteriormente se conocía como HEAP.
  • Los motores de almacenamiento InnoDB y BDB proporcionan tablas transaccionales. InnoDB se incluye por defecto en todas las distribuciones binarias de MySQL 5.5

Tipos de columnas permitidas en MySQL


MySQL soporta un número de tipos de columnas divididos en varias categorías: tipos numéricos, tipos de cadenas de caracteres  y tipos de fecha y hora.
En este capítulo se mencionan los tipos de columnas más utilizados proporcionando una breve descripción de cada categoría:

Primeros pasos en MySQL: Comandos básicos


Para comenzar a trabajar con una base de datos o tabla, MySQL ofrece algunos comandos y funciones que proveen información acerca de las bases de datos y el sistema.

A continuación se mencionan los comandos y funciones más utilizados:

lunes, 5 de mayo de 2014

Cómo escribir consultas MySQL utilizando funciones



Funciones
Las funciones en MySQL se reconocen por los paréntesis al final. Entre las consideraciones al trabajar con funciones se pueden nombrar:
1. Los resultados de las funciones se devuelven en tablas, el primer renglón corresponde a los encabezados de las columnas. 
2. Es importante no dejar espacio entre el nombre de la función y los paréntesis, de otro forma MySQL genera un mensaje de error.
3. Cuando se utilizan cadenas de caracteres la primera posición es la uno (1).

A continuación se explican las funciones de cadena de caracteres, numéricas, Fecha y hora más utilizadas:

viernes, 2 de mayo de 2014

Sentencias de Definición de Datos


1. CREATE DATABASE
Crea una base de datos con el nombre dado.
Sintaxis:
CREATE DATABASE [IF NOT EXISTS] BaseDeDatos;
Ejemplo:
CREATE DATABASE IF NOT EXISTS nomina;


2. CREATE TABLE
Crea una tabla con el nombre dado.
Sintaxis:
CREATE TABLE [IF NOT EXISTS] tabla (
Campo1  TIPO(longitud) [NOT NULL o NULL],
Campo2  TIPO(longitud) [NOT NULL o NULL],
CampoN  TIPO(longitud) [NOT NULL o NULL],
PRIMARY KEY (Campo),
UNIQUE (Campo),
FOREIGN KEY (CampoDeEstaTabla) REFERENCES OtraTabla(CampodeOtraTabla)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE = INNODB;

Atributos de columna
Atributo
Significado
NULL
Se permiten valores nulos, atributo por omisión si no se especifica lo contrario.
NOT NULL
No se permiten valores nulos.
DEFAULT valor
Valor por omisión que se asigna a la columna.
AUTO_INCREMENT
El valor se asigna automáticamente incrementando en uno el máximo valor registrado  hasta el momento.
PRIMARY KEY
Señala al campo como clave primaria, implícitamente también lo declara como not null. Solo puede haber una sola clave primaria por tabla.

Aunque la creación de una clave primaria puede declararse como atributo de columna, es conveniente definirla como restricción de tabla, como se verá enseguida.

Restricciones de Tabla    
Restricción
Significado
PRIMARY KEY
Define el campo que servirá como clave primaria.
UNIQUE
Define los campos en las que no pueden duplicar valores.
FOREIGN KEY(Campo)
REFERENCES tabla2 (campo2)
Define un campo que es clave foránea en la tabla actual y es clave principal en otra tabla. Esto asegura que no se realicen referencias a registros que no existen.

Ejemplo:
CREATE TABLE IF NOT EXISTS empleado(
codigo INT(5) NOT NULL,
nombre VARCHAR(50) NOT NULL,
ingreso DATE NOT NULL,
num_hijos INT(2) UNSIGNED NOT NULL,
tipo ENUM("Fijo","Temporal") NOT NULL,
tiempo_contrato TINYINT(2) UNSIGNED DEFAULT 1 NOT NULL,
PRIMARY KEY(codigo)
) ENGINE=innodb;

  
3. ALTER TABLE
Cambia la estructura de una tabla existente.
Sintaxis:
(Para agregar campos)
ALTER TABLE tabla ADD nuevocampo definicióndecampo [FIRST o AFTER campo]
(Para modificar campos)
ALTER TABLE tabla CHANGE actualnombredecampo nuevonombredecampo definicióndecampo [FIRST o AFTER campo]
(Para eliminar campos)
ALTER TABLE tabla DROP campo;
(Para agregar llave primaria)
ALTER TABLE tabla ADD PRIMARY KEY(campoprimario)
(Para eliminar llave primaria)
ALTER TABLE tabla DROP PRIMARY KEY;
(Para renombrar tabla)
ALTER TABLE actualnombredetabla RENAME nuevonombredetabla

Ejemplos:
Agrega a la tabla 'empleado' el campo 'sueldo' (con 5 enteros y dos decimales) luego del campo ingreso.
ALTER TABLE empleado ADD sueldo FLOAT(7,2) AFTER ingreso;
Modifica a la tabla 'empleado' el campo sueldo agregando NOT NULL.
ALTER TABLE empleado CHANGE sueldo sueldo FLOAT(7,2) NOT NULL;
Elimina de la tabla 'empleado' el campo 'ciudad'
ALTER TABLE empleado DROP ciudad;
Renombra la tabla 'empleado' como 'obrero' 
ALTER TABLE empleado RENAME obrero;
Elimina de la tabla 'empleado' la llave primaria.
ALTER TABLE empleado DROP PRIMARY KEY;
Asignar al campo 'codigo' de la tabla 'empleado' como llave primaria.
ALTER TABLE empleado ADD PRIMARY KEY(codigo);


4. DROP TABLE
Borra una o más tablas.
Sintaxis:
DROP TABLE tabla
Ejemplo:
Borra la tabla 'empleados'.
DROP TABLE empleados


5. DROP DATABASE
Borra todas las tablas en la base de datos y borra la base de datos
Sintaxis:
DROP DATABASE basededatos
Ejemplo:
Borra la base de datos 'nomina'
DROP DATABASE nomina