domingo, 30 de noviembre de 2014

TÉCNICAS Y HERRAMIENTAS EN EL PROCESO DE DESARROLLO DE SOFTWARE


Técnicas:

Las técnicas que se podrían utilizar en la elaboración de un software seria el procedimiento o conjunto de reglas, normas o protocolos, que tienen como objetivo obtener un resultado determinado para que dicho software sea lo más parecido a las exigencias del cliente, podrían ser: 

Técnica para la Recopilación de Datos
La recolección de datos se refiere al uso de una gran diversidad de técnicas y herramientas que pueden ser utilizadas por el analista para desarrollar los sistemas de información, los cuales pueden ser;
Las entrevistas: Es una técnica de obtención de información mediante el diálogo mantenido en un encuentro formal y planeado.
La encuesta: estudio en el cual el investigador obtiene los datos a partir de realizar un conjunto de preguntas normalizadas dirigidas a una muestra representativa o al conjunto total de la población.
El cuestionario: es un conjunto de preguntas sobre los hechos o aspectos que interesan en una investigación y son contestados por los encuestados. 
La observación: Es una técnica que consiste en observar atentamente el fenómeno, hecho o caso, tomar información y registrarla para su posterior análisis.
Técnica de Costo-Beneficios 
El análisis de costo-beneficio es una técnica analítica que enumera y compara el costo neto de una intervención con los beneficios que surgen como consecuencia de aplicar dicha intervención.
Técnica de Planificación y Control de Proyectos
La Planificación y Control de Proyectos de Software comprende una serie de procedimientos, sin embargo, se mencionaran solo los más complejos y/o significativos, los cuales son:
Objeto
Alcance
Entradas
Salidas Desarrollo
Planificación
Programación
Control



Herramientas:

Las Herramientas dan  ayuda al desarrollo de Sistemas de Información, ayudan a solucionar  los problemas que se nos presentan en los proyectos y desarrollos de aplicaciones informáticas.

Tal  es el caso que para el desarrollo de software libre se pueden conseguir unas cuantas herramientas  pero todas utilizan la notación UML.
Existen herramientas orientadas a una db en especifico y estas son MySql y PostgreSQL, el de MySql (MySql WorkBench no es libre).

También se puede utilizar, Herramientas para Ingeniería de Software Asistida por Computadora (CASE) Son un conjunto de métodos, utilidades y técnicas que facilitan la automatización del ciclo de vida del desarrollo de sistemas de información.

Clasificación de las herramientas CASE

No existe una única clasificación de herramientas CASE y, en ocasiones, es difícil incluirlas en una clase determinada. Podrían clasificarse atendiendo a:

• Las plataformas que soportan.

• Las fases del ciclo de vida del desarrollo de sistemas que cubren.

• La arquitectura de las aplicaciones que producen.

• Su funcionalidad.


FUNDAMENTOS TEÓRICOS 

Un paradigma de programación es un estilo de desarrollo de programas. Es decir, un modelo para resolver problemas computacionales. Los lenguajes de programación, necesariamente, se encuadran en uno o varios paradigmas a la vez a partir del tipo de órdenes que permiten implementar, algo que tiene una relación directa con su sintaxis.


Un paradigma de programación es una propuesta tecnológica que es adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que unívocamente trata de resolver uno o varios problemas claramente delimitados. La resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software. Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición. Un paradigma de programación está delimitado en el tiempo en cuanto a aceptación y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente. 



MÉTODO DE DESARROLLO DEL SOFTWARE

El método de diseño de software que se expone a continuación es el método de solución de problemas mediante técnicas de ingeniería.

1. Definición del Problema                     

    En esta etapa, también conocida como Especificación de Requerimientos, se establece el problema, aclarándolo lo más posible. Es la parte más crítica de la solución. Amerita un estudio cuidadoso. Se deben identificar las teorías, fundamentos y/o principios matemáticos, físicos o de cualquier índole que permitan fundamentar satisfactoriamente el problema.
  •        Se deben eliminar los aspectos poco importantes para el planteamiento del problema.
  •       Si el problema no está completamente definido se deben allegar la información adicional.

2. Análisis

En esta etapa se deben identificar las entradas del problema, los resultados deseados o salidas y cualquier requerimiento o restricción adicional en la solución.

·        Identificar qué información se proporciona (datos del problema)
·        Identificar qué resultados deben calcularse y/o desplegarse
·        Determinar la forma y las unidades en qué se deben desplegar los resultados
·  Acotar las teorías, fundamentos y/o principios necesarios haciendo los supuestos y simplificaciones necesarias
·   Identificar los tipos y estructuras de datos necesarios para los datos del problema y para los resultados
· Identificar las funciones u operaciones necesarias para cubrir los requerimientos del problema.

3. Diseño

   El diseño consiste básicamente en desarrollar una lista de pasos llamados algoritmo o receta de la solución, verificando que el problema se resuelve como se desea.

·        Es la parte más difícil del proceso de solución del problema
·        Debe verificarse que es correcto el algoritmo antes de continuar
·        Se auxilia de técnicas de diseño como pseudocódigo y diagramas de flujo.

4. Implementación

   Esta etapa consiste en implementar o escribir el algoritmo como un programa de computadora en un lenguaje de programación, convirtiendo cada paso del algoritmo en instrucciones en el lenguaje de programación.

  •           Se requiere el conocimiento de un lenguaje de programación particular en lo referente a su gramática, sintáxis y semántica, para ello se recomienda leer el manual del programador o su equivalente y utilizarlo como consulta siempre que sea necesario.


Una manera de iniciar el conocimiento del lenguaje de programación es interpretando programas ejemplo, ejecutarlos, observar los resultados y analizar las entradas, las salidas y los procesos de cálculo y/o flujo de información mediante instrucciones de salida que finalmente.

Se requiere mínimo de las siguientes herramientas:
  •     Un editor de texto para escribir el código fuente como un archivo de tipo texto plano (por ejemplo notepad para guardar los archivos como html)
·     Un intérprete que procese el código fuente y lo ejecute (por ejemplo el browser que ejecuta scripts en javaScript al cargar la página web)
·    Un debugger que nos ayude a depurar los errores y a corregir el código fuente hasta lograr un programa ejecutable sin errores (por ejemplo el mismo browser que envía mensajes a encontrar errores al ejecutar nuestro programa)
·  Se deben utilizar los tipos y estructuras de datos más adecuados que permita el lenguaje de programación, teniendo especial cuidado en el uso de tipos de datos reales y los errores de redondeo que introducen y pueden alterar los resultados.


5. Verificación y Prueba

   Esta etapa consiste en probar el programa completo y verificar que trabaja como se esperaba.
  •        Se deben probar cada una de las funciones primero por separado y luego en conjunto
  •      Se debe probar el programa completo con distintos conjuntos de datos de prueba
  •         En caso de que haya errores repetir el paso 4 y 5 hasta la satisfacción de los requerimientos.

MODELADO DEL SOFTWARE

El modelado de software es realizado a través de la utilizacion de la herramientas suministradas por el UML Lenguaje Unificado de Modelado (UML, por sus siglas en inglés, Unified Modeling Language) es el lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad; está respaldado por el OMG (Object Management Group).



Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio, funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y compuestos reciclados.
Es importante remarcar que UML es un "lenguaje de modelado" para especificar o para describir métodos o procesos. Se utiliza para definir un sistema, para detallar los artefactos en el sistema y para documentar y construir. En otras palabras, es el lenguaje en el que está descrito el modelo.

Se puede aplicar en el desarrollo de software gran variedad de formas para dar soporte a una metodología de desarrollo de software (tal como el Proceso Unificado Racional o RUP), pero no específica en sí mismo qué metodología o proceso usar.
METODOLOGÍAS O PROCESOS DE DESARROLLO DE SOFTWARE


Una metodología es un conjunto integrado de técnicas y métodos que permite abordar de forma homogénea y abierta cada una de las actividades del ciclo de vida de un proyecto de desarrollo. Una definición estándar de metodología puede ser el conjunto de métodos que se utilizan en una determinada actividad con el fin de formalizarla y optimizarla. Determina los pasos a seguir y cómo realizarlos para finalizar una tarea.

Metodología de desarrollo de software se describe como el conjunto de herramientas, técnicas, procedimientos y soporte documental para el diseño de Sistemas de información.


En Ingeniería de software cuando se habla de desarrollo de software se habla de desarrollo de programas y por lo tanto se considera como una tarea de ingeniería, en el cuál se debe ejecutar una serie de fases, etapas para obtener un programa que funcione de acuerdo con métodos ya establecidos en otras disciplinas de ingeniería. Las actividades que los ingenieros de software realizan se encuentran asociadas a un proceso de software donde intervienen diferentes elementos (fases, actividades, producto, roles, agentes) que permiten la definición del software a producir (producto), el desarrollo o el diseño del software, la validación del software tanto lo interno requerimientos específicos) como lo externo (expectativas del cliente), y la evolución del software donde se modifica para adaptarlo a los cambios.

Por otro lado, Sommerville (2002) define que “un método de ingeniería de software es un enfoque estructurado para el desarrollo de software cuyo propósito es facilitar la producción de software de alta calidad de una forma costeable”, cabe destacar que para usar este enfoque se debe manejar conceptos fundamentales tales como; procesos, métodos, tareas, procedimientos, técnicas, herramientas, productos, entre otros.
Particularmente, una metodología se basa en una combinación de los modelos de proceso genéricos para obtener como beneficio un software que soluciones un problema. Adicionalmente una metodología debería definir con precisión los artefactos, roles y actividades, junto con prácticas, técnicas recomendadas y guías de adaptación de la metodología al proyecto. Sin embargo, la complejidad del proceso de creación de software es netamente dependiente de la naturaleza del proyecto mismo, por lo que el escogimiento de la metodología estará acorde al nivel de aporte del proyecto, ya sea pequeño, mediano o de gran nivel.

sábado, 29 de noviembre de 2014

PARADIGMAS DE PROGRAMACIÓN FUNCIONAL

     Paradigma de programación basada en la utilización de funciones aritméticas que no manejan datos mutables o estados. Este paradigma lo soportan lenguajes como ‘Haskell’ y ‘Lisp’.


En ciencias de la computación, la programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raíces en el cálculo lambda, un sistema formal desarrollado en los 1930s para investigar la definición de función, la aplicación de las funciones y la recursión. Muchos lenguajes de programación funcionales pueden ser vistos como elaboraciones del cálculo lambda. 


Los lenguajes de programación funcional, especialmente los que son puramente funcionales, han sido enfatizados en el ambiente académico principalmente y no tanto en el desarrollo de software comercial. Sin embargo, lenguajes de programación importantes tales como Scheme, Erlang, Objective Caml y Haskel, han sido utilizados en aplicaciones comerciales e industriales por muchas organizaciones. La programación funcional también es utilizada en la industria a través de lenguajes de dominio específico como R (estadística), Mathematica (matemáticas simbólicas), J y K (análisis financiero), F# en Microsoft.NET y XSLT (XML). Lenguajes de uso específico usados comúnmente como SQL y Lex/Yacc, utilizan algunos elementos de programación funcional, especialmente al procesar valores mutables. Las hojas de cálculo también pueden ser consideradas lenguajes de programación funcional. 
PARADIGMAS DE  PROGRAMACIÓN DECLARATIVA 


La Programación Declarativa, es un paradigma de programación que está basado en el desarrollo de programas especificando o "declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución. La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla (tan sólo se le indica a la computadora que es lo que se desea obtener o que es lo que se está buscando). No existen asignaciones destructivas, y las variables son utilizadas con Transparencia referencia.



Opuesto al imperativo. Los programas describen los resultados esperados sin listar explícitamente los pasos a llevar a cabo para alcanzarlos.

PARADIGMAS DE PROGRAMACIÓN ESTRUCTURADA 





La programación estructurada es una forma de escribir programas de ordenador (programación de computadora) de manera clara. Para ello utiliza únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN). 
PARADIGMAS DE PROGRAMACIÓN LÓGICA

Es un paradigma de programación que se basa en el concepto de función. Es un paradigma muy orientado a las matemáticas. Este paradigma lo soportan lenguajes como ‘Prolog’.

La programación lógica consiste en la aplicación del corpus de conocimiento sobre lógica para el diseño de lenguajes de programación; no debe confundirse con la disciplina de la lógica computacional. 


La programación lógica es un tipo de paradigmas de programación dentro del paradigma de programación declarativa. El resto de los subparadigmas de programación dentro de la programación declarativa son: programación funcional, programación basada en restricciones, programas DSL (de dominio específico) e híbridos. La programación lógica gira en torno al concepto de predicado, o relación entre elementos. La programación funcional se basa en el concepto de función (que no es más que una evolución de los predicados), de corte más matemático. 



PARADIGMAS DE PROGRAMACIÓN DIRIGIDA POR EVENTOS 


               
La programación dirigida por eventos es un paradigma de programación en el que tanto la estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema, definidos por el usuario o que ellos mismos provoquen.
Para entender la programación dirigida por eventos, podemos oponerla a lo que no es: mientras en la programación secuencial (o estructurada) es el programador el que define cuál va a ser el flujo del programa, en la programación dirigida por eventos será el propio usuario —o lo que sea que esté accionando el programa— el que dirija el flujo del programa.


El flujo del programa está determinado por sucesos externos (por ejemplo, una acción del usuario).
PARADIGMAS PROGRAMACIÓN MODULAR 

 La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible y manejable. 
 Al aplicar la programación modular, un problema complejo debe ser dividido en varios subproblemas más simples, y estos a su vez en otros subproblemas más simples. Esto debe hacerse hasta obtener subproblemas lo suficientemente simples como para poder ser resueltos fácilmente con algún lenguaje de programación. Ésta técnica se llama refinamiento sucesivo, divide y vencerás ó análisis descendente (Top-Down). 

 Un módulo es cada una de las partes de un programa que resuelve uno de los subproblemas en que se divide el problema complejo original. Cada uno de estos módulos tiene una tarea bien definida y algunos necesitan de otros para poder operar. En caso de que un módulo necesite de otro, puede comunicarse con éste mediante una interfaz de comunicación que también debe estar bien definida.

Paradigmas de Programación Imperativa     

Es el paradigma de programación que más se ha utilizado en el pasado. Muchos comenzaron a programar bajo este paradigma. Lo soportan lenguajes como ‘C’, ’BASIC’ o ‘Pascal’


 La programación imperativa, en contraposición a la programación declarativa es un paradigma de programación que describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cómo realizar una tarea.


PARADIGMAS DE PROGRAMACIÓN ORIENTADO A ASPECTOS


   Este es un paradigma de programación relativamente nuevo, que incluye como característica el concepto de “Aspecto” que pretende dar una determinada funcionalidad al sistema; separando esta funcionalidad del sistemas, con el fin de aumentar la modularidad. Este nuevo paradigma de programación lo soporta el lenguaje de programación ‘AspectJ’.
Apunta a dividir el programa en módulos independientes, cada uno con un comportamiento bien definido.

    METODOLOGÍAS O PROCESOS DE DESARROLLO DE SOFTWARE

Una metodología es un conjunto integrado de técnicas y métodos que permite abordar de forma homogénea y abierta cada una de las actividades del ciclo de vida de un proyecto de desarrollo. Una definición estándar de metodología puede ser el conjunto de métodos que se utilizan en una determinada actividad con el fin de formalizarla y optimizarla. Determina los pasos a seguir y cómo realizarlos para finalizar una tarea.

Metodología de desarrollo de software se describe como el conjunto de herramientas, técnicas, procedimientos y soporte documental para el diseño de Sistemas de información.
En Ingeniería de software cuando se habla de desarrollo de software se habla de desarrollo de programas y por lo tanto se considera como una tarea de ingeniería, en el cuál se debe ejecutar una serie de fases, etapas para obtener un programa que funcione de acuerdo con métodos ya establecidos en otras disciplinas de ingeniería. Las actividades que los ingenieros de software realizan se encuentran asociadas a un proceso de software donde intervienen diferentes elementos (fases, actividades, producto, roles, agentes) que permiten la definición del software a producir (producto), el desarrollo o el diseño del software, la validación del software tanto lo interno requerimientos específicos) como lo externo (expectativas del cliente), y la evolución del software donde se modifica para adaptarlo a los cambios.

Por otro lado, Sommerville (2002) define que “un método de ingeniería de software es un enfoque estructurado para el desarrollo de software cuyo propósito es facilitar la producción de software de alta calidad de una forma costeable”, cabe destacar que para usar este enfoque se debe manejar conceptos fundamentales tales como; procesos, métodos, tareas, procedimientos, técnicas, herramientas, productos, entre otros.
Particularmente, una metodología se basa en una combinación de los modelos de proceso genéricos para obtener como beneficio un software que soluciones un problema. Adicionalmente una metodología debería definir con precisión los artefactos, roles y actividades, junto con prácticas, técnicas recomendadas y guías de adaptación de la metodología al proyecto. Sin embargo, la complejidad del proceso de creación de software es netamente dependiente de la naturaleza del proyecto mismo, por lo que el escogimiento de la metodología estará acorde al nivel de aporte del proyecto, ya sea pequeño, mediano o de gran nivel.

El modelado de sistemas software es una técnica para tratar con la complejidad inherente a estos sistemas. El uso de modelos ayuda al ingeniero de software a "visualizar" el sistema a construir. Además, los modelos de un nivel de abstracción mayor pueden utilizarse para la comunicación con el cliente. Por último, las herramientas de modelado y las de Ingeniería de Software Automatizada. pueden ayudar a verificar la corrección del modelo.




PROGRAMACIÓN ORIENTADA A OBJETOS 



La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos. 
FUNDAMENTOS TEÓRICOS 

PARADIGMAS DE PROGRAMACIÓN

Un paradigma de programación es un estilo de desarrollo de programas. Es decir, un modelo para resolver problemas computacionales. Los lenguajes de programación, necesariamente, se encuadran en uno o varios paradigmas a la vez a partir del tipo de órdenes que permiten implementar, algo que tiene una relación directa con su sintaxis.

Un paradigma de programación es una propuesta tecnológica que es adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que unívocamente trata de resolver uno o varios problemas claramente delimitados. La resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software. Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición. Un paradigma de programación está delimitado en el tiempo en cuanto a aceptación y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente.