jueves, 12 de noviembre de 2015

Aplicacion con TDD

Bueno para el blog anexo hemos decidido desarrollar una aplicacion que tenga la metodologia TDD

Tomado Textualmente de https://es.wikipedia.org/wiki/Desarrollo_guiado_por_pruebas

"Desarrollo guiado por pruebas de software, o Test-driven development (TDD) es una práctica de ingeniería de software que involucra otras dos prácticas: Escribir las pruebas primero (Test First Development) y Refactorización (Refactoring). Para escribir las pruebas generalmente se utilizan las pruebas unitarias (unit test en inglés). En primer lugar, se escribe una prueba y se verifica que las pruebas fallan. A continuación, se implementa el código que hace que la prueba pase satisfactoriamente y seguidamente se refactoriza el código escrito. El propósito del desarrollo guiado por pruebas es lograr un código limpio que funcione. La idea es que los requisitos sean traducidos a pruebas, de este modo, cuando las pruebas pasen se garantizará que el software cumple con los requisitos que se han establecido."


Por lo cual he decidido explicar la metodologia con una calculadora desarrollada en Netbeans que explicare en las siguientes imagenes



Los requerimientos funcionales sobre los que se trabajo fueron

Sumar 2 y 3 para dar como resultado 5
Restar 6 y 2 para dar como resultado 4
Multiplicar 2 y 4 para que sea 8
Dividir  6 entre 3 y el resultado es 2
Residuo entre 7 y 3 y el resultado es 1

1. Crear el Proyecto Netbeans



  •  Instalamos el Netbeans 8.0 y creamos el proyecto AplicacionTDDCalculadora
  • Luego creamos la clase calculadora y la definimos de la siguiente manera



2. Para hacer el testeo de la aplicacion necesitamos el complemento JUnit que instalamos de la siguiente manera.





Configurando el testing de pruebas

1.  Se crea la clase calculadoratest como elemento junit, y se añade el siguiente contenido 




2.Luego se hace el testing, ejecutando el archivo calculadoratest, haciendo click derecho y dando ejecutar archivo

3.. Aplicando la metodologia TDD

Se veran varios errores, por mala definicion de metodos en el archivo calculadora.java



Luego se arregla la clase calculadora.java cambiando el contenido que tiene para arreglar el test que posteriormente ejecutaremos.


Hacemos el test nuevamente y nos daremos cuenta que sale exitoso en su ejecucion


Luego despues de hacer varios tests uno fallido, y luego redefinir el codigo para volverlo exitoso, vamos a refactorizar el codigo que poseemos, tanto para el programa como para el test, para hacer mas eficiente el programa

a) Refactorizar el codigo de calculadora.java


b) Refactorizar el codigo de calculadoratest



9. Test Final

Despues de realizar la refactorizacion del codigo, se procede a realizar el test final sobre calculadoratest descubriendo que efectivamente no posee errores despues.







Y asi fue como se implemento la metodologia tdd, sobre una calculadora
Anexo link para descargar la carpeta con el proyecto.

https://www.dropbox.com/home/Archivos%20G.Tecnologica?preview=AplicacionTDDCalculadora.rar

Proyecto realizado en colaboracion con
David Rodriguez
Jorge Lopez
Julian RIncon

Juan Pablo Villamil 

jueves, 5 de noviembre de 2015

Ensayo sobre las Metodologias Agiles

El éxito de una metodología radica en saber cuándo, cómo y por qué usarla.

El desarrollo de software ha venido evolucionando en los últimos años, a causa de las necesidades que requiere la humanidad para hacer más fácil su diario vivir. No obstante, los ingenieros y los desarrolladores han tenido que asumir retos importantes, encaminados a brindar un producto software de alta calidad, que cumpla con las expectativas de usabilidad, integridad, fiabilidad, eficiencia, flexibilidad, escalabilidad, modularidad y seguridad. Es ahí, donde toma gran importancia el entender las metodologías de desarrollo de software como el conjunto de procedimientos, técnicas y un soporte documentado  que garantiza un trabajo estructurado, planificado y controlado en el proceso de elaboración de sistemas de información.
Cuando se emprende en un proyecto de software, se tiene la convicción, que para crear un producto de alta calidad, es pertinente escoger una metodología robusta y rigurosa. Por ejemplo la metodología RUP ( Rational Unified Process) esta es una metodología que maneja un enfoque de asignación de tareas y responsabilidades dentro de una organización. Tiene como objetivo principal la aseguración de la producción de software de alta calidad para satisfacer las necesidades del cliente dentro de un tiempo prudencial y previsible. Esta metodología está enfocada a la utilización de diagramas de casos de uso, manejo de los riesgos y de la arquitectura. Tiende a manejar desarrollos iterativos, el ciclo de vida que utiliza es espiral para establecer tanto tareas, como fases e iteraciones, donde es posible manejar complejidad en varias etapas del proyecto.
RUP, presenta unas fases definidas para completar sus iteraciones, la primera de ellas es la fase de inicio, centrado en el modelamiento de los requerimientos, buscando siempre lo que se necesite, para utilizar los recursos, mejorándolo y dándole una visión del proyecto, la segunda fase es la elaboración centrado en el desarrollo  de los casos de uso tomando como principio el diseño, la tercera fase que es la de construcción, se lleva a cabo la construcción del software  por medio de iteraciones que, se utilizan los casos de uso, definiendo su análisis, luego su implantación y posteriormente las pruebas, finalmente la última fase es la de transición, donde se busca garantizar que el producto este en óptimas condiciones para ser entregado al usuario. En cada fase se realizan una serie de artefactos, que son utilizados para comprender no solo el análisis sino el diseño de los datos, el primer artefacto es el inicio, para generar un documento de visión y una especificación de requerimientos, en la elaboración son los diagramas de casos de uso, en la construcción el documento de arquitectura que tiene las siguientes vistas, la vista lógica maneja diagrama de clases y modelo de entidad relación, en la vista de implementación, el diagrama de secuencia, estados y colaboración, en la vista conceptual el modelo de dominio y la vista física el mapa de comportamiento del software.
Como toda metodología tiene unas características que lo identifican,  la primera de ellas  es un forma disciplinada de asignar tareas y responsabilidades, implementar mejores prácticas de ingeniería de software, manejo de desarrollo iterativo, utiliza la administración de requisitos, utiliza la arquitectura basada en los componentes, maneja controles de cambios, maneja un modelo visual de todo el software, y verifica la calidad del software. Así mismo esta metodología maneja unos principios claves, como es la adaptación del proceso, donde el proceso se adapta a las características de la organización, otro es el balanceo de prioridades, la colaboración entre equipos, con comunicación fluida para coordinar requerimientos, demostrar el valor iterativamente, se debe motivar el concepto de reutilización  y enfocarse en calidad.

Sin embargo, RUP como metodología  tradicional, es renuente a cambios que se puedan dar durante el desarrollo de proyectos de software que presenten un grado de incertidumbre en un entorno volátil;  y que es necesario para ir detectando y corrigiendo errores que puedan generar múltiples fallas imposibles de manejar en el sistema de información que se esté construyendo. Por tal razón se busca metodologías de desarrollo agiles que se ajusten  a entornos cambiantes y llenos de presiones; donde los ciclos de desarrollo sean cortos y se incremente las funcionalidades en cada iteración, sin afectar la rigurosidad que ofrecen las metodologías tradicionales.
Al entrar al contexto de las metodologías ágiles, se debe pensar en que son técnicas que surgieron como contraparte a  métodos del CMMI, y se han ido expandiendo a gran cantidad de proyectos que hoy día se trabajan. Muchas compañías optan por ello precisamente por lo “agiles” al momento de desarrollar rápidamente proyectos en cortos tiempos. Es necesario tener en cuenta algunos principios que son agrupados en 4 valores. El primero de ellos  son los individuos y la interacción que tendrá más importancia que las herramientas que se vayan a utilizar, el segundo de ellos que el software funcione, por encima de documentación y procesos complejos y exhaustivos, el tercero de ellos se enfoca en la colaboración con el cliente, ya que se centra en estar siempre con el cliente, apoyarlo y hacerlo parte del proceso y el cuarto y último es la respuesta al cambio, donde pueda haber no solo adaptabilidad sino acceso al manejo de cambios que deban ser necesarios realizar, por encima de cualquier plan que se haya construido minuciosamente.
Existe un paradigma al trabajar metodologías ágiles y es que se asocia a que agilidad es sinónimo de no trabajar documentación o control sobre el proyecto, que es sencillamente realizar el proyecto, acompañar e incluir al cliente y que todo funcione, esto no es verdadero, ya que es diferente minimizar todas las tareas que no son influyentes e importantes en el proyecto para llegar a cumplir todos los objetivos del proyecto, que hablar solamente de desarrollar, codificar, probar y hacer funcionar. Esto lleva a pensar que las metodologías ágiles no son perfectas y no se pueden aplicar en todo momento, dependen principalmente de donde se desee enfocar y lo que se vaya a aplicar
Un punto a favor de las metodólogas ágiles son en su mayoría todos aquellos proyectos referentes a tecnología o llamados tecnológicos, cada una de ellas tiene sus ventajas y debilidades, inclusive puede darse casos en que una sola metodología pueda no ser suficiente y se deba apoyar en otra dependiendo las características y funciones dadas en el proyecto. Algunas de las más reconocidas son las siguientes:
Metodología
Descripción
SCRUM
Puede ser definido como un marco de trabajo que brinda herramientas y roles de manera iterativa, para visualizar el progreso del proyectos y resultados que se vayan generando
KANBAN
Su foco principal es el trabajo en curso (Work in Progress), basado en no debe trabajarse algo nuevo en el proyecto cuando no se haya terminado un proceso anterior o un bloque y este haya sido finalizado y entregado
XP
Una de las más comunes y utilizadas, no solamente en ámbito empresarial, sino académico, busca mejorar las relaciones interpersonales en el grupo, influyendo en el éxito del desarrollo del software, promueve que se haga trabajo en equipo, procura un buen clima de trabajo tanto para todo el grupo, como para los desarrolladores
En el momento de elegir una metodología de desarrollo ágil, se deben tener cuenta algunos puntos clave como que se va a desarrollar, que tipo de proyecto se iría a realizar, que debilidades y fortalezas tiene, se recomienda que todos los cambios que se manejen en metodologías ágiles no deben ser cambios bruscos o fuertes, pero si pueden adaptarse de pequeños progresos de cambios, otro punto a tener en cuenta es que el cliente final o el usuario que vaya a utilizar la aplicación juega un papel clave durante todo el proceso del proyecto, pero si no se tomara el cliente como parte importante, es mejor desistir de metodologías ágiles
Pero no solamente se trabajan metodologías ágiles, en algunos casos puede que estas no sean muy efectivas o sirvan. Las metodologías tradicionales tienen mejor cabida en proyectos donde se conoce el problema y la solución está bien definida. Si se conoce el problema, la solución y el entorno, se puede analizar, diseñar y ejecutar una solución de manera fácil. Los startups son organizaciones temporales donde pueden moverse en zonas con mucha incertidumbre que busca un modelo de negocio que pueda ser escalable y replicable. Aquellos startups que sean capaces de seguir el enfoque Lean, plantea varias hipótesis sobre un problema que se presente y experimenta diversas formas de solucionarlo, para hallar la forma correcta, es decir que se trabajan en entornos muy cambiantes, para estos casos las metodologías agiles juegan un papel muy importante, ya que pueden realizar gestión de cambio que implican un esfuerzo menor. Por lo que hay que definir para quien es que metodología y para quien no, todas aquellas metodologías que se relacionen con Lean Startup se encarga de la construcción, en cambio las metodologías ágiles se enfocan en el cómo se realizaría
Metodología XP
Revisando algunos las metodologías ágiles que son influyentes en el medio, se abre la puerta de la más común de todas y quizás una de las más utilizadas en cualquier ámbito de desarrollo, y es la metodología XP, esta es definida como un enfoque dado en la Ingeniería del Software que fue formulada por Kent Beck. XP traduce eXtreme Programming, o en nuestro vocablo programación extrema, se desvía en trabajar la factibilidad que la previsibilidad, aquellos que defienden esta metodología sugieren que los cambios son algo natural y deseable en cualquier proyecto que se desee realizar, se piensa que es capaz de adaptarse  a cambios en cualquier punto vital del proyecto aproximándose con más realidad al proyecto defiendo requisitos iniciales y controlando los cambios que se generen. Al analizar esta metodología no se centra en entregar cambios muy grandes o bruscos, al contrario deben ser pequeños y controlables, que sean rápidos de desarrollar y actualizar, para que este pueda ser evaluado en ambientes reales, se considera que las entregas trabajadas no deben ser mayor a dos a tres semanas máximo. Para entender esta metodología debe comprenderse en  4 puntos focales, el primero de ellos habla del diseño, este debe ser simple, se deben cumplir los requerimientos con un programa que sea sencillo se denomina (Simple Design),  que busca cumplir  las necesidades inmediatas del cliente, puede rejuvenecer procesos antiguos y eliminar redundancias. La metáfora viene siendo el segundo punto que se desarrolla por aquellos que tienen el rol de programadores desde el inicio, definiendo historias de cómo debe funcionar el sistema en su totalidad, XP permite trabajar y utilizar estas historias que son vistos como pequeñas descripciones de un trabajo, reemplazando todos los diagramas UML. Otro elemento que se trabajan son las tarjetas CRC (Clase, Responsabilidad, Colaboración) también permiten definir actividades en el momento del desarrollo. Cada tarjeta puede representar una clase en la programación que se orienta a objetos definiendo responsabilidades y colaboradores de esa clase. El tercer punto es la propiedad colectiva del código, que debe tener propiedad compartida, es decir todos son propietarios del código, no se destaca el individualismo, se argumenta que entre más gente se trabaje menos errores deben aparecer. El cuarto y último habla de estándar de codificación que permite definir la propiedad del código tanto para escribir, como documentar el código y todas las diferencias de trozos o piezas de código desarrollada por diferentes equipos. Todos los programadores deben tener la visión holística para poder unir estos trozos y ver como si un solo programador hubiera escrito todo el código de manera armoniosa.
Los objetivos en que se centra la metodología XP, es crear mejores prácticas de todos los desarrollos hechos en los proyectos, permitir mejorar toda la productividad en el proyecto, garantizar que la calidad del software supere todas las expectativas del cliente, y asumir que con niveles de planificación, codificación y pruebas poder decidir si se está siguiendo el camino que es o no, para evitar retrocesos enormes. Pero no solamente se centra en el bienestar del proyecto, sino de todos los programadores, ya que es necesario no agotar a los programadores, ya que si estos están cansados, podrían escribir código de menor calidad, se debe minimizar horas extras, mantener al personal fresco, pueden generar código de calidad y pertinente, es decir se recomienda 40 horas a la semana.
Entre las características que trabajan la metodología XP, pueden enfocarse en que esta se basa en prueba y error para obtener un software que funcione, se fundamenta en principios, se orienta hacia quien se produce el software y cómo va a ser utilizado, puede reducir el coste de cambios de ciclo de vida del sistema, trata de combinar las mejores prácticas para utilizarlas y llevarlas al extremo. El cliente debe estar bien definido (es decir saber quién es), Los requisitos pueden ser cambiantes, puede trabajarse en un grupo de 2 a 12 personas trabajándose en parejas, equipo con gran formación y capacidad para aprender. Los principios que maneja esta metodología son la simplicidad, es decir resolver todas las necesidades que se muestren en el momento y desarrollar lo necesario, el feedback, indica que se basa en iteraciones  pequeñas con entregas y pruebas, la decisión es saber tomar decisiones o reparar un error detectado o mejorar el código de feedback pasados, la comunicación se vuelve fundamental para colocar en contacto directo a clientes y desarrolladores.
Las prácticas fundamentales son el equipo completo, ya que todos tienen que ver algo con el proyecto, se planifica por medio de las historias de usuarios, generando orden y revisión continua, el test del cliente propone validaciones para realizar pruebas, pequeñas versiones que pueden ser desarrolladas en pocas semanas, debe tener un diseño simple, la programación debe darse por parejas, el desarrollo se guía por pruebas automáticas  se ejecutan con frecuencia, debe realizarse integración continua, es decir cuando se ejecuten nuevas funcionalidades, compilar y ejecutar, el código es compartido, se deben respetar normas codificadas, buscar frases para definir la función de distintas partes del programa y trabajar a un ritmo que pueda ser constante y sin detenerse.
Las ventajas que brinda al trabajar la metodología XP, es trabajar la programación organizada, reduciendo la tasa menor de errores y permitir satisfacer al programador, facilitar cambios, permitir ahorrar mucho tiempo y dinero, el cliente puede tener control sobre las prioridades y se hacen pruebas continuas del proyecto, como todo posee algunos inconvenientes o debilidades donde se recomienda trabajar en proyectos de corto plazo, requiere un rígido ajustes a todos los principios del XP, puede de entrada no ser fácil si se está familiarizado con metodologías tradicionales y generar altas comisiones. Pero trabaja mucho a las personas y las relaciones entre las personas, se manejan roles específicos como el programador que puede escribir las pruebas y el código, el cliente escribe sus historias de usuario y valida el proceso, el tester permitir al cliente validar las pruebas funcionales, el tracker se encarga de realizar el seguimiento sobre todo en estimaciones y tiempo real, el entrenador responsable de todo el proceso global, guiando a todos los miembros del equipo, el consultor que es externo al equipo pero con conocimientos necesarios para el equipo y proyecto, y el gestor (Big Boss), que sirve de vínculo entre los clientes y programadores
Metodología SCRUM
Esta metodología aplica conjuntos de buenas prácticas para trabajar de manera colaborativa en un equipo, permitiendo alcanzar el mejor resultado posible en el proyecto. Utiliza un marco de desarrollos ágiles que tienen características como adopción de estrategias que permite generar un desarrollo incremental, en lugar planificar y ejecutar completo el producto, tener como factor clave el conocimiento tácito de las personas que en la calidad de procesos de empleados, a la hora de pensarse en la calidad del resultado. Uno de sus objetivos principales es maximizar el retorno invertido para el proyecto en una empresa. Tiene como base construir la funcionalidad de mayor valor para el cliente o usuario final y actos seguidos los principios de inspección, adaptación, auto-gestión e innovación.
Al trabajar SCRUM, se realizan entregas parciales y regulares del producto finalizado. Está centrado especialmente en proyectos que son complejos, donde se requiere obtener resultados muy pronto, donde los requisitos pueden ser cambiantes o no están muy bien definidos, donde se tiene factores relevantes como la innovación, competitividad, flexibilidad y competitividad. Posee muchos beneficios al trabajar esta metodología como el cumplimiento de expectativas, donde se le permite al cliente establecer las expectativas indicando el valor de cada requisito, el segundo es que muy flexible y adaptable a cambios, que puede darse por momentos cambiantes de las necesidades del cliente o evolución dada en el mercado, el tercero permite reducir el time to market, es decir que el cliente puede usar las funcionalidades que sean más importantes en el proyecto sin haberlo finalizado, el cuarto es trabajar una mayor calidad del software, ya que se realiza un trabajo metódico al obtener un resultado en cada iteración, el quinto es obtener mayor productividad, por la eliminación de burocracias y motivar al equipo que sea autónomo para organizarse, el sexto se enfoca predicciones de tiempos, donde puede conocerse la velocidad del equipo en los sprint (puntos historia), por lo que permite estimar con facilidad cuando estará disponible una nueva funcionalidad en el proyecto, y la última pero no menos importante reducir riesgos, ya que se lleva como prioridad las funcionalidades de nuevo valor y conocer la velocidad de avance, despejando riesgos de manera anticipada.
El proceso manejado en SCRUM el proyecto se realiza en ejecución de bloques cortos y fijos. Cada iteración debe proporcionar un resultado completo, al igual que en XP, se manejan las iteraciones en el proyecto, pero con unas pequeñas diferencias, donde al planificar la iteración se debe tener en cuenta como primer punto la selección de requisitos, donde el cliente presenta al equipo todos los requisitos considerados importantes en el proyecto, el equipo busca indagar cuales requisitos son los más primordiales para comprometerse a completarlos en la iteración, el segundo punto es ya en planificar la iteración, donde el equipo realiza una lista de tareas a desarrollar en la iteración, el esfuerzo se mide de manera conjunta y los miembros del equipo se auto asignan tareas a cumplir. Cada iteración si tiene contemplada que dure 1 mes, con un plazo ampliado de 6 semanas máximo, al ejecutar cada iteración se realizan reuniones de sincronización inspeccionando el trabajo que se ha realizado, para poder cumplir con los compromisos que han sido adquiridos, en cada reunión se debe responder a tres interrogantes que son ¿Qué se ha hecho desde la última reunión de sincronización?, ¿Qué se va a realizar desde este momento? y ¿Qué impedimentos se van a presentar?. Durante todas las iteraciones el facilitador tiene la tarea de que verificar que todos los miembros cumplan con sus compromisos adquiridos, eliminando aquellos obstáculos que el equipo no ha podido superar y proteger al equipo de interrupciones externas que pueden afectar el avance y productividad en la iteración. Ya entrando al último día de la iteración se realiza una revisión que se compone de dos partes, la primera de ellas en demostrar los requisitos completados al cliente en la iteración, y los resultados mostrados, teniendo en cuenta cambios y adaptaciones necesarias de manera objetiva, desde la primera iteración, que permita replanificar el proyecto, el segundo de ellos es la retrospectiva donde el equipo analiza su ritmo y forma de trabajo y que problemas u obstáculos pueden impedir avances sean mínimos como significativos, para ser tenidos en cuenta ay mejorar la productividad. Al igual que en le metodología XP, se trabajan unos roles importantes que para este caso se caracteriza en primer lugar el scrum master es quien lidera al equipo para que pueda cumplir la metodología al pie de la letra, gestiona todos los impedimentos que intervienen en los avances y trabaja con el product owner para maximizar el ROI (Inversión de Retorno), el product owner es el representante de los accionistas y clientes del software focalizado en parte del negocio en el ROI, traslada la visión del proyecto a todo el equipo, que formaliza las prestaciones en historias, y el team es el grupo de profesionales que poseen los conocimientos necesarios, quienes desarrollan el proyecto de maneja conjunta con las historias.
En SCRUM, se maneja una documentación específica, uno de ellos se le conoce como el product backlog, como documento de alto nivel para el proyecto, es un conjunto de requisitos en el proyecto, que tiene descripciones de funcionalidades de manera general, solo puede ser abierto y modificado por le product owner. El sprint backlog es un subconjunto de requisitos desarrollados, se describe como se implementaría los requisitos durante el spring. Todas las tareas en el sprint backlog son tomadas por todos los miembros. El burn down chart es una gráfica mostrada que mide la cantidad de requisitos en el Backlog del proyecto mientras se comienza cada Spring.
Una vez viendo estas metodologías, puede concluirse que no todas las metodologías pueden utilizarse para lo mismo, es decir tiene ciertas restricciones que, permite que sean empleadas y utilizadas dependiendo del proyecto a trabajar, la prioridad del proyecto, lo que se quiere hacer, que cada una trabaja un roles diferentes, un modo único de realizar y ver iteraciones para la entrega del proyecto, que puede trabajarse para proyectos simples y cortos, o complejos y que requieren resultados, que puede enfocarse en los miembros del equipo o la calidad del proyecto y el personal involucrado. Es por ello que debe analizarse de manera centrada que metodología es la correcta a trabajar dependiendo del proyecto que se va a cumplir, no cuál sería la mejor.


Bibliografía Utilizada:
Metodología ágil
·         http://www.javiergarzas.com/metodologias-agiles
·         http://blog.leanmonitor.com/es/que-son-las-metodologias-agiles/
Metodología XP
·         http://es.slideshare.net/Piskamen/metodologa-xp
·         https://procesosdesoftware.wikispaces.com/METODOLOGIA+XP
·         https://es.wikipedia.org/wiki/Programaci%C3%B3n_extrema
·         http://ingenieriadesoftware.mex.tl/52753_XP---Extreme-Programing.html
Metodología SCRUM
·         https://es.wikipedia.org/wiki/Scrum
·         http://proyectosagiles.org/que-es-scrum/
·         https://www.softeng.es/es-es/empresa/metodologias-de-trabajo/metodologia-scrum/proceso-roles-de-scrum.html
Metodología RUP
·         https://es.wikipedia.org/wiki/Proceso_Unificado_de_Rational
·         http://rupmetodologia.blogspot.com.co/2012/06/fases-de-la-metodologia-rup.html
·         http://procesosdesoftware.wikispaces.com/METODOLOGIA+RUP
·         http://es.slideshare.net/cortesalvarez/metodologa-rup


Este ensayo se realizó con colaboración de 
David Esteban Rodriguez
Jorge Lopez Parra
Juan Pablo Villamil Romero
Julian Eduardo Rincon Rozo



sábado, 17 de octubre de 2015

Mapas Mentales Lecturas

Las tecnologias Cloud son inmensas, dado que se convirtieron en gran parte de las organizaciones que se forjan actualmente por sus minimos riesgos de seguridad que existen, y porque la informacion no sufre tantos ataques como en otro tipo de tecnologias, ademas de que actualmente son de alta disponibilidad, ahorrando costos de almacenamiento y gastos al tener toda la informacion corporativa en un mismo ambiente, hoy en dia la empresa que no esta con tecnologias cloud, puede quedar obsoleta, si el proceso no se delimita desde sistemas y se comienza a elaborar, y su uso no depende solamente a nivel interno organizacional sino tambien a nivel externo.


Se anexan los dos mapas mentales en los cuales se explica en detalle el manejo de las tecnologias cloud y su importancia dentro de las organizaciones, asi como los procesos que competen con ella y como mejoran al performance empresarial






El segundo mapa muestra los procesos de adopcion de la tecnologia en una organizacion, asi como su cambio tecnologico, en la misma asi como sus limitaciones e inconvenientes a la hora de realizar la implementacion del mismo




Los mapas mentales se realizaron con colaboracion de
David Esteban Rodriguez
Jorge Lopez Parra
Julian Eduardo Rincon Rozo



jueves, 15 de octubre de 2015

Servicio Web

La realizacion de un servicio web, permite enlazar por un mismo canal a un cliente y servidor intercambiar información.

Para nuestro caso se realizo con Netbeans 8.01 la creacion de un Web Service que permita a un usuario cliente, conectarse a un servidor para calcular el volumen de una esfera a partir de un sencillo procedimiento que esta desglosado en el codigo anexo

Para descargar los archivos enlazar al siguiente link, que permitira descargar un .rar llamado WebService.rar

https://www.dropbox.com/s/bedpbjdx0uvquwn/WebService.rar?dl=0


Cuando se haga la descarga, es necesario instalar Netbeans para ejecutar la aplicacion JSP en donde se creo el Web Service, desde alli se exportan dos proyectos, uno para el cliente y el otro para el servidor los cuales estan enlazados para permitir la ejecución del mismo.

No puede hacerse la ejecucion desde el JSP mismo, debido a que no es una pagina web.


Esta WebService se realizo con colaboracion de

David Esteban Rodriguez
Julian Eduardo Rincon
Jorge Lopez Parra






lunes, 28 de septiembre de 2015

Ejercicio II Corte

La empresa Plaza de Mercado de Boyacá S.A.S. actualmente tiene su base de datos sobre MS-Access (disponible para descargar). La organización necesita principalmente:
  1. Ampliar su BD para incluir datos de compradores, con el objeto de saber quienes son sus clientes, en dónde residen, quién es el contacto directo, qué canales de comunicación podrían establecer con ellos, que vendedor los atendió y qué productos compraron. 
  2. Normalizar la BD al menos a 3N y comprobar la integridad referencial de los datos.
  3. Proyectar el crecimiento de la base de datos para el 2020.
  4. Requieren las siguientes consultas específicas:
    • Una consulta que permita ver en orden alfabético el nombre de cada vendedor, su fecha de nacimiento y su teléfono. (Campos del resultado: Nombre, Fecha de nacimiento, Teléfono) 
    • Una consulta que dé como resultado el nombre de los vendedores nacidos en Bogotá. (Campos del resultado: Nombre, Ciudad) 6. Realice una consulta que le permita determinar quiénes tienen mayor acumulado (suma) en kilos vendidos, si los vendedores con hijos o los vendedores sin hijos. (Campos del resultado: Hijos, Suma de Kilos) 
    • Una consulta que le permita determinar cuál fue el producto con más kilos vendidos durante el año 1999. (Campos del resultado: Nombre del producto, Suma de Kilos en orden) 
    • Una consulta donde se muestre el nombre y el total de kilos vendidos por cada vendedor (entre todos los productos) para el año 2002. Ordene el resultado de forma descendente, de manera que el vendedor con mayores ventas ocupe el primer lugar. (Campos del resultado: Nombre del vendedor, Suma de Kilos)
    • Una consulta que permita ver el total de ventas por vendedor y producto. El resultado debe tener las siguientes columnas (campos) : nombre del vendedor, nombre del producto, suma de Kilos (kilos vendidos para ese producto), el precio del producto y el total de ventas, correspondiente a la suma de kilos multiplicada por el precio. 
  5. Informes para las dos últimas consultas de la lista anterior con el formato adecuado: que sean agradables y fáciles de entender, y de navegar en caso de ser extensos. 

Tenga en cuenta que el licenciamiento de MS-Acces es costeado por el departamento como iniciativa gubernamental para apoyar las micro y pequeñas empresas del sector.
Se le solicita como consultor:
  • Su consejo sobre, ampliar lo que ya se tiene sobre la tecnología que poseen, o desarrollar desde cero un sistema de información a la medida. Argumente.
  • Calcular el costo de las dos alternativas (realice el cálculo sobre una el valor de hora ingeniero estimada).


SOLUCIÓN



En caso de requerirse la ampliación de un sistema de información, sobre lo que actualmente se tiene según la base de datos propuesta para el ejercicio, nos encontraríamos con una compleja modificación del sistema ya existente, además tocaría volver a plantear las reglas del negocio para desarrollar el nuevo Sistema, y se requiere que los ingenieros de software se adapten correctamente a la metodología ya propuesta. Por lo tanto es necesario tener a la mano la arquitectura del software trabajado, asi como las reglas que tiene dentro de su diseño y desarrollo para que pueda ser nuevamente estructurado, además de conocer los procesos a los cuales esta sometido, y la documentacion del software.

Ademas la base de datos Access no es tan potente como otros motores, por lo cual es necesario normalizar y parametrizar la base de datos para que tenga un crecimiento exponencial y eficiente hasta el 2020 en cuanto a las variables principales del negocio: Productos, Vendedores. ETC

Considerando lo anterior, seria mas pertinente arrancar desde cero, ya que es mejor por optimizacion de la base de datos y por manejo de recursos, además se debe cambiar el motor por otro mas potente como MYSQL, ya que access es uno de los mas limitados en cuanto a recursos, ademas es gratis, no ocupa tanto espacio en disco para almacenamiento de datos y es mas productivo y eficiente.

Access no es el motor que deberiamos usar para construir la base de datos, debido a que no es lo suficientemente poderoso como para manejar conexiones multiusuarios, ademas tiene menos capacidad para escalabilidad de la base de datos, requiere licenciamiento para ser utilizado y presenta errores para el manejo de consultas densas.

En caso de realizar migraciones efectivas a los datos dentro de la base de datos, es pertinente realizarlo con MYSQL, ya que tiene herramientas destinadas para ello como workbench, que permiten migrar de otro motor a MYSQL y ademas realiza la conversion de datos eficientemente. Logicamente el costo al desarrollarlo desde cero aumenta, pero permite en gran medida el mantenimiento, actualizacion, integridad y escalabilidad de la base de datos.


Si analizamos los costos posibles a nivel ingenieril de los dos casos

Modificacion de la BD existente

Realizacion de Nueva BD con Oracle.



Modelo Entidad Relación


Consultas Realizadas para la Base de Datos Plaza de Boyaca S.A.S


·         Una consulta que permita ver en orden alfabético el nombre de cada vendedor, su fecha de nacimiento y su teléfono. (Campos del resultado: Nombre, Fecha de nacimiento, Teléfono) 
SELECT nom_ven, fech_nac, tel_ven FROM tbl_vendedores, tbl_telefono_vendedor WHERE tbl_vendedores.id_ven=tbl_telefono_vendedor.id_ven ORDER BY nom_ven ASC
·         Una consulta que dé como resultado el nombre de los vendedores nacidos en Bogotá. (Campos del resultado: Nombre, Ciudad)
SELECT nom_ven, nom_ciudad FROM tbl_vendedores, tbl_ciudades WHERE tbl_vendedores.id_ciu=tbl_ciudades.id_ciu AND nom_ciudad='Bogota'
·         Realice una consulta que le permita determinar quiénes tienen mayor acumulado (suma) en kilos vendidos, si los vendedores con hijos o los vendedores sin hijos. (Campos del resultado: Hijos, Suma de Kilos) 
SELECT cantidad_hijos,SUM(kilo_venta) AS [Total Kilos] FROM tbl_hijos,tbl_ventas WHERE tbl_ventas.id_ven=tbl_hijos.id_ven GROUP BY cantidad_hijos ORDER BY SUM(kilo_venta)
·         Una consulta que le permita determinar cuál fue el producto con más kilos vendidos durante el año 1999. (Campos del resultado: Nombre del producto, Suma de Kilos en orden) 
SELECT nom_prod,SUM(kilo) FROM tbl_productos,tbl_ventas WHERE tbl_ventas.id_prod=tbl_productos.id_prod AND fech_vendido like '1999%' GROUP BY nom_prod ORDER BY sum(kilo) ASC
·         Una consulta donde se muestre el nombre y el total de kilos vendidos por cada vendedor (entre todos los productos) para el año 2002. Ordene el resultado de forma descendente, de manera que el vendedor con mayores ventas ocupe el primer lugar. (Campos del resultado: Nombre del vendedor, Suma de Kilos)

SELECT nom_vend AS nombre, sum(kilo) AS kilos FROM tbl_ventas, tbl_vendedores WHERE tbl_ventas.id_ven=tbl_vendedores.id_ven and fech_vendido like '2002%' GROUP BY nom_ven ORDER BY sum(kilo) DESC
·         Una consulta que permita ver el total de ventas por vendedor y producto. El resultado debe tener las siguientes columnas (campos) : nombre del vendedor, nombre del producto, suma de Kilos (kilos vendidos para ese producto), el precio del producto y el total de ventas, correspondiente a la suma de kilos multiplicada por el precio. 


SELECT nom_ven AS vendedor, nom_prod AS Producto, sum(kilo) AS [Kilos Vendidos], precio, ((sum(kilo))*(total)) AS Total FROM tbl_vendedores, tbl_productos, tbl_ventas WHERE tbl_vendedores.id_ven=tbl_ventas.id_ven AND tbl_ventas.id_prod=tbl_productos.id_prod GROUP BY nom_ven, nom_prod


Este Blog se realizo con colaboracion de 
Jorge Lopez Parra
David  Esteban Rodriguez
Julian Eduardo Rincon





viernes, 28 de agosto de 2015

Ensayo


Ensayo sobre la gestión de la tecnología en la vida del Ingeniero de Sistemas

El hombre en su afán de perfeccionar y profundizar sobre el conocimiento de todo aquello que lo rodea, ha desarrollado herramientas y habilidades que le permiten hacer todo lo que en su cotidianidad plantea en una forma mas sencilla y eficiente, en diferentes campos del saber y del desarrollo humano, para eso ha desarrollado técnicas y procedimientos diferentes y complejos, arrancando desde la rueda para transportarse, hasta diferentes áreas como las matemáticas, la ciencia y la psicología.

Sin embargo con los constantes retos que durante la historia ha enfrentado el ser humano, le han permitido a partir de su saber y su aplicabilidad, desarrollar e implementar recursos técnicos que siendo de gran adaptabilidad a su entorno, le han permitido desarrollar inteligencia artificial avanzada en pro del desarrollo y de alcanzar la cúspide de la evolución humana, sin embargo para poderlo hacer de esa manera y llamar esos conocimientos combinados como tecnología, debe haber un proceso de administración y gerencia sobre dichos recursos, haciendo uso eficiente de lo que se tiene en busqueda de implementar mejores procesos organizacionales, ademas de minimizar costos y garantizar mejores decisiones. 

Por eso el autor  (Cidetexco, 1996) define la tecnología como conocimiento científico, pero también conocimiento organizado en otra forma, aplicado sistemáticamente a la producción y distribución de bienes y servicios.

Mientras que en la Ingeniería y mas concretamente en la de Sistemas, nos enfrentamos con la mala gestión de la tecnología tanto tangible como intangible, debido a las decisiones poco planeadas de los gerentes y a la poca vocería que presentaba anteriormente el gerente del área de sistemas en las empresas. Sin embargo ahora que la tecnología es parte indispensable de toda decisión que conlleve ganancias sustanciales a las empresas de ahora, conociendo lo que se impone en el mercado y tomando como ejemplo países donde las tecnologías estén en su punto mas alto, como la Unión Europea o los Estados Unidos.

La gestión de la tecnología, es un proceso inmerso a ella, con la cual nosotros hacemos administración, organización y sincronización de los elementos claves de una organización, para hacerla mas eficiente y competitiva, tomando sin embargo la definición del autor se dice que: La gestión se asume como el arte aplicado que involucra la vinculación de datos, información, conocimientos y la interacción social entre las personas en la solución de problemas o en la búsqueda de oportunidades (Gaynor, 1999b).

Las tecnologías son cambiantes y es por eso que el ingeniero debe estar siempre atento, a la vanguardia, y desarrollando mejores conceptos, por eso los autores Escorsa y Maspons (2001), citan lo siguiente:


•Flexibilización de los procesos, explotación de sistemas de comunicación de amplio alcance, incremento en la inversión en actividades de investigación y desarrollo,
• Reducción del ciclo de vida de los productos,
• Transición de la sociedad industrial a la sociedad del conocimiento,


• El creciente aumento de la importancia de procesos de innovación más que la producción en masa.

En la gestión de la tecnología, es necesario mencionar de forma imperativa que los datos son la mínima unidad de información a la cual como ingenieros de sistemas tenemos acceso y por lo tanto también es el mayor activo que tienen las organizaciones actuales para consolidarse y hacer parte del mercado, es decir que dichos datos deben ser salvaguardados y protegidos, al ser relacionados y llevados a un contexto determinado, se convierten en información que a la vez es un elemento primario del conocimiento junto con el know-how, la experiencia y los valores principales organizacionales, entiendiendose el know-how como el conjunto de pericias y habilidades necesarias dentro de la organización para hacer de sus procesos algo netamente eficiente e innovador que permita dar ventajas sobre las demás organizaciones.

Añadiendo temas, podremos encontrar que la gestión tecnológica tiene dos campos grandes  a tomar en cuenta, como lo son la gestión de la información y la del conocimiento que segun los autores se puede definir de la siguiente manera 

La gestión de la información es " un conjunto de procesos por los cuales se controla el ciclo de vida de la información, desde su obtención (por creación o captura), hasta su disposición final (su archivo o eliminación). Tales procesos también comprenden la extracción, combinación, depuración y distribución de la información a los interesados. El objetivo de la gestión de la información es garantizar la integridad, disponibilidad y confidencialidad de la información." 1

Mientras que "La gestión del conocimiento tiene perspectivas tácticas y operativas, es más detallado que la gestión del capital intelectual, y se centra en la forma de dar a conocer y administrar las actividades relacionadas con el conocimiento, así como su creación, captura, transformación y uso. Su función es planificar, implementar y controlar, todas las actividades relacionadas con el conocimiento y los programas requeridos para la administración efectiva del capital intelectual (Wiig, 1997)."

Teniendo estas dos definiciones como referencias podemos ver su relación dado que la información hace parte del capital intelectual que forma el conocimiento y permite su implementacion, por lo cual en mi concepto, podría afirmar que para la Ingeniería de Sistemas garantizar la confidencialidad, integridad y disponibilidad de la información solo se puede hacer por medio de la tecnología y el conocimiento y que sin su ayuda, es prácticamente imposible pensar que podremos hacer uso de la información eficientemente para transformarla en conocimiento relevante a nivel organizacional y personal.


Bibliografía

1. https://es.wikipedia.org/wiki/Gesti%C3%B3n_de_la_informaci%C3%B3n
2. https://es.wikipedia.org/wiki/Gesti%C3%B3n_del_conocimiento
3. http://www.ecured.cu/index.php/Gesti%C3%B3n_de_la_Informaci%C3%B3n
4. http://www.bdigital.unal.edu.co/2081/1/Gestion.pdf