<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Miguel Matas Blog &#187; Metodologías</title>
	<atom:link href="http://www.miguelmatas.es/blog/category/metodologias/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.miguelmatas.es/blog</link>
	<description>Ingeniería de Software, Gestión de Proyectos, Programación, BPM, Arquitectura de Software, .NET, J2EE</description>
	<lastBuildDate>Sat, 21 Jan 2012 11:00:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>¿Dónde se ejecutan las cosas?</title>
		<link>http://www.miguelmatas.es/blog/2011/12/07/%c2%bfdonde-se-ejecutan-las-cosas/</link>
		<comments>http://www.miguelmatas.es/blog/2011/12/07/%c2%bfdonde-se-ejecutan-las-cosas/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 09:39:13 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Arquitectura]]></category>
		<category><![CDATA[Metodologías]]></category>

		<guid isPermaLink="false">http://www.miguelmatas.es/blog/?p=657</guid>
		<description><![CDATA[HTML, Javascript, CSS, ASP.NET, WCF, WPF, C#, PL/SQL&#8230; Una multitud de herramientas a las que se enfrentan ya con soltura desarrolladores web (especialmente sobre plataforma Microsoft) y para las que nadie cae ya en la dificultad inicial y conceptual que representa la pregunta: ¿dónde se ejecutan las cosas? Pregunta que sin lugar a dudas es fundamental resolver [...]]]></description>
			<content:encoded><![CDATA[<p>HTML, Javascript, CSS, ASP.NET, WCF, WPF, C#, PL/SQL&#8230;</p>
<p>Una multitud de herramientas a las que se enfrentan ya con soltura desarrolladores web (especialmente sobre plataforma Microsoft) y para las que nadie cae ya en la dificultad inicial y conceptual que representa la pregunta: ¿dónde se ejecutan las cosas?</p>
<p>Pregunta que sin lugar a dudas es fundamental resolver al inicio, para formaciones orientadas a nuevos profesionales del desarrollo web, especialmente para aclarar muchos conceptos derivados del funcionamiento de ASP.NET, y su transformación/creación al vuelo de HTML, CSS y Javascript&#8230; por no hablar de temas específicos de comunicación cliente-servidor y mantenimiento del estado de la página mediante uso del ViewState, Session, etc.</p>
<p>Un concepto tan básico para desarrolladores ya iniciados, como que cuando entramos en una web esta no se visualiza en el &#8220;limbo&#8221;, si no que es descargada una copia en local (seguramente después de un procesado de página en el servidor web) y que lo único que hace el navegador es abrir dicha copia en local y renderizarla, no es algo que tengan tan claro los recién iniciados en este mundillo. Hay que saber contarlo y empezar por ahí, ya que con esto comenzaremos a asentar conocimientos básicos de arquitectura, del mismo modo que empezaremos a dar margen a pensar en la usabilidad y tiempos de respuesta de la página al usuario (no es lo mismo ejecutar arriba que ejecutar abajo, ni resolver problemas mediante una llamada a servidor o mediante n, ni de forma síncrona o asíncrona).</p>
<p>Este punto debería ser pieza clave, a la hora de comenzar el: <strong>Capítulo IV. Replicando en Web.</strong> El cual describíamos en el artículo <a title="Metodología de Formación para Nuevos Profesionales del Software" href="http://www.miguelmatas.es/blog/2011/09/18/metodologia-formacion-nuevos-profesionales-software/">Metodología de Formación para Nuevos Profesionales del Software</a></p>
<p>Saludos.</p>
<p>Miguel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelmatas.es/blog/2011/12/07/%c2%bfdonde-se-ejecutan-las-cosas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Metodología de Formación para Nuevos Profesionales del Software</title>
		<link>http://www.miguelmatas.es/blog/2011/09/18/metodologia-formacion-nuevos-profesionales-software/</link>
		<comments>http://www.miguelmatas.es/blog/2011/09/18/metodologia-formacion-nuevos-profesionales-software/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 15:21:49 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Arquitectura]]></category>
		<category><![CDATA[Metodologías]]></category>

		<guid isPermaLink="false">http://www.miguelmatas.es/blog/?p=640</guid>
		<description><![CDATA[A continuación, basado en su uso y experiencia, traslado la metodología que mejor resultado viene dando en la transmisión de conceptos de arquitectura y desarrollo de software a perfiles de profesionales recién licenciados sin experiencia, con experiencia leve, o experiencia focalizada en desarrollos específicos web, escritorio o dispositivos móviles. Puntualizar que la experiencia ha sido [...]]]></description>
			<content:encoded><![CDATA[<p>A continuación, basado en su uso y experiencia, traslado la metodología que mejor resultado viene dando en la transmisión de conceptos de arquitectura y desarrollo de software a perfiles de profesionales recién licenciados sin experiencia, con experiencia leve, o experiencia focalizada en desarrollos específicos web, escritorio o dispositivos móviles.</p>
<p>Puntualizar que la experiencia ha sido siempre lanzada utilizando como base tecnología Microsoft.NET, la cual dispone de herramientas que dan cobertura completa a los conceptos de arquitectura a trasladar, pero esto no quiere decir que este método no pueda ser aplicado utilizando otras tecnologías de cobertura completa (Java por ejemplo) o incluso en combinación de varias (bajo mi punto de vista sería el objetivo a cumplir tras la primera fase del &#8220;curso&#8221; que hoy os vamos a trasladar).</p>
<p><strong>Objetivos</strong></p>
<p>En el momento de finalizar el curso el alumno debe haber asentado su conocimiento sobre los siguientes conceptos</p>
<p>1) Entorno de desarrollo tipo<br />
2) Desarrollo de arquitecturas orientadas a n-capas<br />
3) Desarrollo de aplicaciones SOA<br />
4) Buenas y malas prácticas de programación<br />
5) Diferencias fundamentales en el desarrollo de aplicaciones web y escritorio<br />
6) Trabajo colaborativo y en equipo<br />
7) Importancia de las pruebas en el proceso de desarrollo<br />
 <img src='http://www.miguelmatas.es/blog/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> Despliegue de aplicaciones en entornos no accesibles<br />
9) Dinámica de proyecto</p>
<p>Mientras que los objetivos del instructor son</p>
<p>1) Adaptar la formación a un escenario tipo de proyecto, el alumno desde el primer día debe entrar en la dinámica del día a día de un proyecto real<br />
2) Identificar áreas de mejora de los alumnos, tanto técnicas como no técnicas<br />
3) Identificar puntos fuertes y puntos de mejora del alumno<br />
4) Identificar puntos de mejora del propio método de formación</p>
<p><strong>Requerimientos Previos</strong></p>
<p>Referidos a los alumnos (en orden de importancia):</p>
<p>1) Programación orientada a objetos<br />
2) Definición de modelos entidad-relación<br />
3) HTML básico</p>
<p>La falta de conocimiento de alguno de estos puntos, requerirá que el instructor incorpore a la formación módulos adicionales que cubran la visión necesaria al respecto.</p>
<p>Otros valores deseables ajenos a las capacidades técnicas</p>
<p>1) Pro actividad<br />
2) Eficacia<br />
3) Eficiencia<br />
4) Trabajo en equipo<br />
5) Liderazgo<br />
6) Confianza<br />
7) Capacidad de trabajo<br />
 <img src='http://www.miguelmatas.es/blog/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> Nivel de interlocución</p>
<p>Es labor del instructor identificar puntos de mejora también en estos aspectos, potenciándolos durante el proceso formativo. No solo estamos formando a nivel técnico, también estamos formando profesionales que van a ser parte fundamental de proyectos de desarrollo que requerirán de aptitudes no solo técnicas para lograr el éxito del proyecto.</p>
<p>Referidos al instructor:</p>
<p>1) Profesional consolidado en conocimientos de arquitectura y en la tecnología/tecnologías de desarrollo que se desarrollan en el curso.<br />
2) Experiencia de trabajo en proyectos, habiendo participado/liderado procesos de captura de requerimientos, definición de arquitecturas y procesos de implantación/despliegue, gestión de equipos, diseños funcionales, diseños técnicos, supervisión del trabajo de otros programadores y construcción.<br />
3) Nivel de interlocución medio-alto<br />
4) Experiencia en sesiones formativas</p>
<p>En resumen y por poner un símil en consultoría, las habilidades esperadas de un Jefe de Equipo.</p>
<p><strong>Bases Fundamentales de la Metodología</strong></p>
<p>* Dinámica de proyecto desde el primer día<br />
* Curso eminentemente práctico<br />
* Grupos de formación pequeños (entre 5 y 10 alumnos máximo por instructor)<br />
* No solo centrarse en las habilidades técnicas<br />
* Que el alumno de el primer paso: resolver el problema de forma completa con el conocimiento actual del alumno, a medida que se vayan incorporando conceptos nuevos (a posteriori) el alumno deberá resolver de forma completa el problema adaptando su solución e incorporando los nuevos conceptos adquiridos.<br />
* El instructor no es el protagonista</p>
<p><strong>Capítulo I: Definiendo requerimientos</strong></p>
<p>Todo proyecto comienza a partir de un conjunto de requerimientos, por lo que si uno de nuestros principales objetivos es introducir al alumno en la dinámica del proyecto deberemos partir de un conjunto de requerimientos base. No es objetivo de esta formación introducir al alumno en el proceso de toma de requerimientos, por lo que nos mantendremos ajenos a él. Nuestro punto de partida puede ser un pequeño documento que describa un pequeño escenario o si queremos empezar desde ya a identificar capacidades no técnicas, un pequeña conversación (poniéndose el instructor la gorra del cliente) donde se describan los requerimientos a cubrir; es aquí donde el alumno debe comenzar a tomar notas y hacerse un pequeño esquema mental de la solución. No es una toma de requerimientos en sí, ya que lo que hará el instructor será recitar verbalmente los requerimientos como si los estuviera leyendo.</p>
<p>Dependiendo de a dónde queramos llegar elegiremos uno de los dos métodos, eso sí, es fundamental que sea cual sea el formato seleccionado, se abra un espacio para dudas y preguntas por parte del alumno. Es así como comenzaremos a matizar el alcance, reglas de negocio, otros requerimientos, etc; además de comenzar a identificar habilidades no técnicas del alumno.</p>
<p>¿Y qué vamos a construir? Bajo mi punto de vista deberíamos definir una herramienta que motive al alumno, pero cuyo funcionamiento a bajo nivel resulte algo ajeno. Es decir, evitaría temas muy comunes como el desarrollo de una aplicación de gestión para bibliotecas o temas muy complejos como el desarrollo de una herramienta de gestión de cálculo de declaraciones de renta. Como un ejemplo no muy complejo tendríamos una herramienta tipo Facebook o Google+.</p>
<p><strong>Capítulo II: Plazos e hitos</strong></p>
<p>La propia definición de proyecto lo lleva de serie, los plazos. No hay proyecto sin un plazo de ejecución límite, por lo que el alumno debe desde el primer día ser consciente de esta realidad, trasladándole la tensión (que no presión) necesaria para mantener su motivación y dedicación al proyecto.</p>
<p>Este es el momento de trasladar al alumno cuál es la planificación de su primer proyecto (la planificación del curso), con cada uno de sus hitos intermedios y su hito final. Tanto el instructor como el alumno son los responsables de que dicha planificación se cumpla (no solo el instructor), cumpliendo adicionalmente todos los objetivos establecidos para el curso.</p>
<p>Para cada tarea el instructor establecerá tiempos límite. El objetivo es que el alumno empiece a jugar con el tiempo, a saber cuándo puede dilatarlo y cuándo puede (normalmente más que puede debe) contraerlo. No podemos irnos por las ramas, atascarnos de forma permanente; si no podemos tomar un camino, busquemos otra alternativa. La calidad de los resultados tiene relación también con el tiempo, hay que saber jugar con estos conceptos.</p>
<p><strong>Capítulo III: Desarrollo de aplicación de escritorio</strong></p>
<p><em>Fase 1 &#8211; Familiarizarse con el entorno y la tecnología</em></p>
<p>Como comentábamos al inicio, las formaciones de este tipo siempre han venido de la mano de tecnología Microsoft .NET, por lo que el hilo argumental se basará en la experiencia con dicha tecnología. Es en este punto donde cada instructor deberá adaptar los conceptos y herramientas a la tecnología seleccionada.</p>
<p>En nuestro caso entonces, nuestro entorno de desarrollo podría ser Visual Studio 2010 y nuestro framework el .NET Framework 4.0 (adaptar también dependiendo de los objetivos a lograr).</p>
<p>En esta primera fase, el instructor trasladará al alumno el funcionamiento básico del entorno de desarrollo:</p>
<p>* Tipos de proyecto<br />
* Menús<br />
* Teclas de acceso rápido</p>
<p>y de la tecnología</p>
<p>* Framework .NET 4.0 (en nuestro caso de partida)<br />
* Orientación a eventos</p>
<p>Fase 2 &#8211; Solucionar el problema con lo puesto, premisa: todo va en memoria</p>
<p>Manos a la obra, el alumno ya dispone de una versión mínima de funcionamiento del entorno y del framework y conoce los requerimientos a cubrir. El primer objetivo a proponer al alumno es el de construir un aplicativo de escritorio que cubra los requerimientos demandados por el cliente, obviando una de las partes fundamentales de una herramienta de gestión, como es el almacenamiento de la información en un modelo de persistencia no volátil (una base de datos o un conjunto de ficheros).</p>
<p>En este punto el instructor únicamente marca las siguientes premisas:</p>
<p>1) El alumno deberá describir en un pequeño documento las principales entidades implicadas y sus relaciones (no estamos hablando de un modelo relacional formal, simplemente queremos ver que el alumno ha entendido el requerimiento y se ha construido un mapa mental con la información a gestionar y las relaciones que existen entre ella).</p>
<p>2) Antes de iniciar la codificación, el alumno deberá diseñar en primer lugar las interfaces de usuario a partir del entorno visual (WYSWYG) que provee el propio Visual Studio. Interfaces sin comportamiento únicamente descripción de las pantallas.</p>
<p>3) Límite temporal para realizar estas actividades.</p>
<p>Adicionalmente, el instructor puede esperar a ver con qué herramientas soluciona el problema del almacenamiento en memoria el alumno o trasladar una pista inicial que es el uso de listas genéricas, que es donde el instructor pretende que el alumno llegue. Una u otra opción dependerá del plazo temporal que estipulemos para esta primera fase.</p>
<p>El objetivo de esta primera fase se considera alcanzado cuando el alumno ha sido capaz de construir un aplicativo libre de errores con las nociones básicas de programación en objetos de las que cuenta, las nociones de entorno, de framework y la formación en el uso de listas genéricas. Nuestro aplicativo es un aplicativo que cubre el requerimiento sobre una aplicación de escritorio, pero con el pequeño gran defecto de que al cerrar el aplicativo toda la información almacenada en memoria se pierde.</p>
<p><em>Fase 3 &#8211; Primeras Pruebas</em></p>
<p>En este punto el alumno cuenta con una aplicación que cubre los requerimientos descritos por el cliente (o que debería cumplirlos) y que está preparado para su uso masivo por parte del mismo (esperamos).</p>
<p>Es este el momento para trasladar la importancia del proceso de pruebas. Lo más normal es que el instructor en menos de 5 minutos haya conseguido explotar tanto vulnerabilidades del sistema (objetos no referenciados, validaciones que fallan, problemas de seguridad de acceso, navegaciones ineficientes, etc) y requerimientos que no se cumplen parcial o totalmente. Se debe estudiar cada una de las aplicaciones y trasladar de forma global a los alumnos cuáles han sido los problemas que se han detectado. Es fundamental que el instructor traslade al alumno la importancia del proceso de pruebas y verificación; se la ha de poner en la piel del cliente. El alumno debe afianzar la visión del cliente y quedarse con la máxima &#8220;me da igual cómo esté hecho por dentro, lo que te haya costado hacerlo y lo que cueste mantenerlo (esto último no debería darle igual pero ya hablaremos de ese tema otro día), necesito que funcione y solucione mi problema fácil y rápidamente&#8221;. La definición técnica y de arquitectura es básica para el éxito del aplicativo y su posterior mantenimiento, pero debemos transmitir a fondo en esta fase que ésta no es la prioridad principal del cliente, por lo que el desarrollador debe darle tanta importancia a los factores técnicos como a los factores de &#8220;cliente&#8221;. Como ya muchos de vosotros sabréis, los éxitos técnicos son estupendos y maravillosos (seguramente os hayan acusado de románticos más de una vez), pero no son suficientes si el aplicativo no hace lo que tiene que hacer o falla intentándolo; si el aplicativo no es usado, no hay éxito.</p>
<p>Resumiendo, no es objetivo de esta fase validar técnicamente el aplicativo, únicamente el instructor se debe poner la gorra del cliente y revisar el aplicativo a nivel de uso, siendo muy exigente con el resultado obtenido. Es buen momento para trasladar ciertas nociones de usabilidad al alumno y de establecer los mecanismos básicos de herramientas para llevar a cabo pruebas unitarias y funcionales.</p>
<p><em>Fase 4 &#8211; Trasladando buenas prácticas</em></p>
<p>El punto de entrada de esta fase es una aplicación que representa lo que el requerimiento dictamina, de forma usable y con una tasa de errores no significativa.</p>
<p>Es ahora el momento en el que el instructor deberá analizar cada uno de los aplicativos desarrollados por los alumnos de forma interna, evaluando cuáles son los principales problemas detectados. El nivel de conocimiento previo del alumno es el que va a marcar el camino a seguir a partir de ahora. Resalto a continuación los principales temas identificados como puntos de mejora en desarrolladores con experiencia media-baja.</p>
<p>* No aplicación de patrones de diseño y otras herramientas provistas por la programación orientada a objetos<br />
* No se encapsula<br />
* No se orienta el código a su mantenibilidad<br />
* No se emplean estándares de codificación<br />
* No se comentan los métodos, ni los parámetros, ni los fragmentos de código más complejos<br />
* No se aplican las listas genéricas (si no lo hemos trasladado en una fase anterior)<br />
* No se usan constantes<br />
* Se hardcodean parámetros configurables a partir de ficheros externos<br />
* No se emplean excepciones<br />
* No hay separación entre capas</p>
<p>El alumno tendrá que refactorizar su código atendiendo a todas estas clausulas, logrando disponer nuevamente de una herramienta que cubra los mismos requerimientos y que pase el proceso de pruebas nuevamente. Lo interesante sería que estos conceptos se vayan dando de uno en uno, para que el alumno los vaya asentando individualmente.</p>
<p><em>Fase 5 &#8211; Concepto de capa de acceso a datos</em></p>
<p>Uno de los problemas que seguramente haya surgido en la primera fase es que no haya separación entre capas, es decir, que el alumno haya construido un aplicativo en el que desde el propio interfaz se esté aplicando la lógica de negocio y accediendo a nuestro repositorio de datos (que por ahora tenemos en memoria).</p>
<p>En este punto es donde vamos a tener que proponer una refactorización importante de código, ya que todo lo que tenga que ver con acceso a datos el alumno deberá moverlo a un conjunto de clases independientes agrupadas por entidades de datos. La interfaz debe dejar de saber dónde estamos almacenando el dato, pudiendo en un momento dado cambiar el modelo de almacenamiento (de memoria a una base de datos física) sin necesidad de modificar una sola línea de código en la capa de presentación. En este punto es interesante trasladar el funcionamiento de patrones como DAO y DTO.</p>
<p>Nuevamente tras el desarrollo, el alumno deberá garantizar que la aplicación cubre los requerimientos y pasa el plan de pruebas, así como que ante un cambio de modelo de persistencia, la capa de presentación no va a sufrir ningún tipo de cambio.</p>
<p><em>Fase 6 &#8211; Definiendo un modelo relacional</em></p>
<p>El alumno ya debería estar en disposición en este punto de modelar relacionalmente la solución. Para ello, se le provee en este caso de un acceso a una instancia de SQL Server 2008, donde va a poder definir el modelo relacional. Es en este punto donde el instructor deja definir al alumno el modelo sin aplicar ningún tipo de premisa, con el objetivo de identificar necesidades formativas al respecto.</p>
<p>El instructor debería reforzar los siguientes conceptos</p>
<p>* Uso de claves primarias y foráneas<br />
* Uso de relaciones 1-N y 1-1, definición de modelos entidad-relación basados en 3FN<br />
* Abuso de la 3FN y problemas de rendimiento asociados<br />
* Estándar de nomenclatura para campos y tablas<br />
* Introducir comentarios descriptivos en campos y tablas<br />
* Importancia de los índices<br />
* Concepto y programación de procedimientos almacenados (muchos recién licenciados salen de la carrera sin que nadie les haya contado que es un procedimiento almacenado y para qué sirve).</p>
<p><em>Fase 7 &#8211; Almacenando la información de forma persistente</em></p>
<p>Ya tenemos una capa de acceso a datos que realizamos en la fase 5 y un modelo de datos desarrollado en la fase 6; ahora nos queda preparar nuestra capa de acceso a datos para cambiar el modelo de persistencia y comenzar a persistir sobre nuestra base de datos SQL Server 2008.</p>
<p>En este punto el instructor deberá seleccionar la tecnología de acceso a datos que considere. En caso de orientar la formación a un proyecto específico o tecnología esto nos llevaría a trabajar en este punto con una tecnología de acceso a datos concreta. En casos en los cuales no tengamos clara la salida del alumno, y a nivel general, recomiendo partir de las clases básicas de acceso a datos que provee el framework (ADO.NET<em>; </em>JDBC para formaciones Java<em>),</em> que accedan a los procedimientos almacenados que el alumno ha creado sobre la propia base de datos.</p>
<p>Esta fase va a generar una refactorización exclusivamente sobre la capa de acceso a datos (si hemos hecho bien el resto), y nuestra aplicación, sin necesidad de tocar una sola línea en el interfaz, va a pasar de almacenar la información en memoria a almacenar la información en base de datos.</p>
<p>Como siempre, tras este cambio, la aplicación va a tener que seguir cumpliendo el requerimiento y pasando el plan de pruebas.</p>
<p>Tras este desarrollo, el alumno debería percibir la importancia del trabajo en capas, la abstracción que supone el uso de capas separadas, reforzando el uso de clases con una alta cohesión y bajo acoplamiento.</p>
<p><em>Fase 8 &#8211; Concepto de capa de lógica de negocio</em></p>
<p>Nuestro código dispone en este punto de una capa de presentación que no conoce de dónde proviene el dato que está manejando, pero que sí conoce la lógica del negocio. Es decir, si para nuestro negocio dar de alta un nuevo modelo de coche en nuestro software de gestión de flotas de vehículos supone, además de realizar una inserción en la tabla que almacena los modelos a través de nuestra nueva y reciente capa de acceso a datos, enviar 3 e-mails a 3 destinatarios diferentes, replicar un conjunto de datos asociado al modelo en otro contexto diferente al nuestro, generar un fichero de comunicación con otros sistemas, etc; en este punto todo este código seguramente estará ubicado en el propio evento &#8220;onClick&#8221; del botón dar de alta nuevo modelo de coche.</p>
<p>El objetivo de esta fase es que una vez finalizada, nuestro aplicativo cuente con una capa de negocio que encapsule todo este comportamiento. Nuestro botón &#8220;onClick&#8221; debería llamar a un único método llamado &#8220;DarDeAltaModeloCoche&#8221; que se encargara de realizar todas las acciones pertinentes (entre otras realizar la inserción del nuevo modelo de coche a través de la capa de acceso a datos). La capa de presentación no sabe dónde se almacena el coche, y qué significa para nuestro negocio el dar de alta un modelo de coche.</p>
<p>Nuevamente, el aplicativo deberá respetar los requerimientos y pasar el plan de pruebas.</p>
<p><em>Fase 9 &#8211; Otras capas: Caché, Validación</em></p>
<p>Incluimos a continuación nociones de uso de otras capas como Caché, Validación, etc. Es un bueno momento para trasladar al alumno teoría de algunos patrones como Singleton, Strategy, Factory, etc.</p>
<p>El aplicativo debería reflejar dichos ajustes.</p>
<p>Fase 10 &#8211; Librerías</p>
<p>Nuestro código, aunque separado perfectamente en diferentes capas, ha estado formando parte de la misma aplicación en todo momento. Es este el momento de incluir los conceptos de librería de clase, y dividir cada una de las capas en librerías diferenciadas por el proyecto inicial. Acceso a Datos, Negocio, Validación, Entidades de Negocio&#8230; son librerías diferenciadas que podrán ser actualizadas de forma independiente y reutilizadas.</p>
<p><strong>Capítulo IV: Replicando en Web</strong></p>
<p>Es precisamente en este punto donde vamos a comenzar a reutilizar el trabajo realizado en la última de las fases de desarrollo de aplicaciones de escritorio, ya que vamos a referenciar las librerías de negocio, acceso datos, caché, validación y otras capas que hayamos creado para la aplicación de escritorio. Todo el trabajo va a ser reutilizado a excepción de la capa de presentación que es la única que va a cambiar. El alumno deberá notar la potencia de haber desarrollado su anterior trabajo con esta orientación, limitándose a realizar una nueva interfaz.</p>
<p>En este punto el instructor debe trasladar conocimientos avanzados al respecto de</p>
<p>* HTML<br />
* Javascript<br />
* CSS<br />
* ASP.NET</p>
<p>Una vez finalizado este capítulo, el alumno cuenta con dos aplicativos diferentes que realizan exactamente la misma función y sobre los que únicamente se diferencia la interfaz (ambos referencian a los mismos proyectos de tipo librería para realizar cálculos de negocio y almacenamiento de datos).</p>
<p><strong>Capítulo V: Replicando en Dispositivos Móviles</strong></p>
<p>Mismo trabajo en el punto de desarrollo de aplicaciones web, pero en este caso realizando desarrollo sobre proyecto de aplicación móvil.</p>
<p><strong>Capítulo VI: Distribuyendo el negocio, concepto de servicio, arquitectura SOA, independencia del dispositivo</strong></p>
<p>Nuestro aplicativo ha referenciado hasta ahora librerías locales. Ha llegado el momento de distribuir el conocimiento del negocio en un aplicativo distribuido: Windows Communication Foundation. Si todo ha ido bien, las tres capas de presentación diferenciadas con las que contamos en este momento (escritorio, web, móvil), únicamente deberán cambiar su referencia de las librerías locales a los servicios web publicados por el aplicativo WCF que también crearemos en este punto.</p>
<p>Hasta aquí la primera versión de este método, donde intento a alto nivel dar a entender el formato de formación que hasta ahora mejor resultado viene dando, permitiendo en un plazo de 3/4 semanas situar al alumno en una dinámica de proyecto lo más cercana a la realidad, habiendo repasado conceptos de arquitectura medios y avanzados que forman parte del día a día de los proyectos de software; todo ello en un ambiente divertido y de aprendizaje continuo.</p>
<p>Intentaré en próximos artículos bajar de nivel de abstracción alguno de los puntos, intentando dar algo más de detalle de cómo enfocarlos a más bajo nivel.</p>
<p>Un saludo.</p>
<p>Miguel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelmatas.es/blog/2011/09/18/metodologia-formacion-nuevos-profesionales-software/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>El día a día del modelado Entidad-Relación. Enunciado.</title>
		<link>http://www.miguelmatas.es/blog/2008/10/02/el-dia-a-dia-del-modelado-entidad-relacion-enunciado/</link>
		<comments>http://www.miguelmatas.es/blog/2008/10/02/el-dia-a-dia-del-modelado-entidad-relacion-enunciado/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 19:09:51 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Arquitectura]]></category>
		<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Metodologías]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.miguelmatas.es/blog/?p=297</guid>
		<description><![CDATA[[Actualizado a 05/10/2008] A continuación os planteo un típico problema de modelo entidad-relación en base de datos, en el que se debe modelar una situación bastante común en un desarrollo de software. Os pediría que intentarais resolver el problema sin ver antes las tres soluciones que marco al &#8220;ejercicio&#8221; en la parte final del post, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>[Actualizado a 05/10/2008]</strong></p>
<p>A continuación os planteo un típico problema de modelo entidad-relación en base de datos, en el que se debe modelar una situación bastante común en un desarrollo de software. Os pediría que intentarais resolver el problema sin ver antes las tres soluciones que marco al &#8220;ejercicio&#8221; en la parte final del post, y comprobar así finalmente cuál ha sido el tipo de solución más habitual. Os agradecería además que razonarais la respuesta. En el caso de que vuestra solución no se ajuste a ninguna de las tres descritas, por favor, enviadme un diagrama a <a href="mailto:info@miguelmatas.es">info@miguelmatas.es</a> para que pueda adjuntarla al artículo. Sería estupendo además que en el razonamiento de vuestra solución no se limitara a las razones estríctamente del modelo y la base de datos, si no que estuviera acompañada de algún razonamiento relacionado con arquitectura de software, orientación al negocio, eficiencia a nivel de datos, protección del dato, etc. En el caso de que no queráis &#8220;perder&#8221; tanto tiempo, me doy por satisfecho si contestáis al post indicando si vuestra solución se acerca a una de las tres primeras o ha sido otra <img src='http://www.miguelmatas.es/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Gracias!</p>
<p><strong>Enunciado:</strong></p>
<p>Una conocida empresa de Rent a Car quiere informatizar su sistema de gestión de vehículos. En esencia, dicha empresa alquila de forma temporal los coches de los que dispone, y, en un primer proceso de ingeniería necesita contar con una descripción técnica de cómo se almacenarían el repositorio de los diferentes coches con los que cuenta en cartera.</p>
<p>La empresa cuenta con diferentes tipos de coches, son realmente los tipos de coches que maneja lo que la diferencia de los Rent a Car al uso, ya que los usuarios tienen la oportunidad de alquilar coches anfibios, coches voladores y coches oficiales blindados. Estos tres tipos de coche tienen algunas características en común que se desean conocer, como son la matrícula, el número de puertas y la marca. Además, de forma específica se necesita conocer el máximo de nudos a la hora a la que puede navegar un coche anfibio, los milímetros de blindaje y el tipo de blindaje de un coche oficial blindado, y la autonomía de horas de vuelo con las que cuenta un coche volador.</p>
<p><strong>Posibles soluciones de modelado entidad-relación:</strong></p>
<p>Os pediría por favor que no consultarais las soluciones hasta que hayáis desarrollado vuestra propia solución, para así no interferir en el resultado.</p>
<p><a href="http://www.miguelmatas.es/blog/wp-content/uploads/2008/10/relaciones0n.jpg" target="_blank">Solución 1</a></p>
<p><a href="http://www.miguelmatas.es/blog/wp-content/uploads/2008/10/relaciones01.jpg" target="_blank">Solución 2</a></p>
<p><a href="http://www.miguelmatas.es/blog/wp-content/uploads/2008/10/relacionesdesnormalizado.jpg" target="_blank">Solución 3</a></p>
<p><a href="http://www.miguelmatas.es/blog/wp-content/uploads/2008/10/relacionesxml.jpg" target="_blank">Solución 4</a> [nuevo 05/10/2008]</p>
<p>Saludos y gracias <img src='http://www.miguelmatas.es/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Miguel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelmatas.es/blog/2008/10/02/el-dia-a-dia-del-modelado-entidad-relacion-enunciado/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Introduciendo UML</title>
		<link>http://www.miguelmatas.es/blog/2008/05/07/introduciendo-uml/</link>
		<comments>http://www.miguelmatas.es/blog/2008/05/07/introduciendo-uml/#comments</comments>
		<pubDate>Wed, 07 May 2008 11:37:49 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Metodologías]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.miguelmatas.es/blog/?p=168</guid>
		<description><![CDATA[Vamos a aprovechar algún comentario en el blog al respecto de información asociada a UML para dejar para empezar algún link que pueda serviros de referente para empezar a empaparos. Os los ordeno un poco en el orden que recomiendo leerlos para que os vaya quedando todo un poco más claro. 1) Historia de UML, qué [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos a aprovechar algún comentario en el blog al respecto de información asociada a UML para dejar para empezar algún link que pueda serviros de referente para empezar a empaparos.</p>
<p>Os los ordeno un poco en el orden que recomiendo leerlos para que os vaya quedando todo un poco más claro.</p>
<p>1) <a title="Historia de UML, qué es UML. Muestra superficial de algunos diagramas " href="http://www.disca.upv.es/enheror/pdf/ActaUML.PDF" target="_blank">Historia de UML, qué es UML. Muestra superficial de algunos diagramas </a></p>
<p>2) <a title="Pequeños ejemplos de los diagramas UML más comunes" href="http://docs.kde.org/kde3/es/kdesdk/umbrello/uml-elements.html" target="_blank">Pequeños ejemplos de los diagramas UML más comunes</a></p>
<p>3) <a title="A fondo UML de casos de uso" href="http://dc.exa.unrc.edu.ar/nuevodc/materias/sistemas/Material%202006/1165858703/TEORIA_4_UML_DCU.pdf " target="_blank">A fondo UML de casos de uso</a></p>
<p>4) <a title="A fondo UML diagrama de clases " href="http://www.vico.org/aRecursosPrivats/UML_TRAD/talleres/mapas/UMLTRAD_101A/LinkedDocuments/UML_diagClases.pdf" target="_blank">A fondo UML diagrama de clases </a></p>
<p>Un saludo.</p>
<p>Miguel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelmatas.es/blog/2008/05/07/introduciendo-uml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flexibilidad con SCRUM</title>
		<link>http://www.miguelmatas.es/blog/2007/11/03/flexibilidad-con-scrum/</link>
		<comments>http://www.miguelmatas.es/blog/2007/11/03/flexibilidad-con-scrum/#comments</comments>
		<pubDate>Sat, 03 Nov 2007 18:21:15 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Gestión de Proyectos]]></category>
		<category><![CDATA[Libros]]></category>
		<category><![CDATA[Metodologías]]></category>

		<guid isPermaLink="false">http://www.miguelmatas.es/blog/2007/11/03/flexibilidad-con-scrum/</guid>
		<description><![CDATA[Otro magnífico libro de la mano de Juan Palacio, el cual nos da la oportunidad de descargar gratuitamente en PDF o adquirirlo a través de http://www.lulu.com Os dejo el link al artículo en su blog http://www.navegapolis.net/content/view/694/61/ Saludos. Miguel.]]></description>
			<content:encoded><![CDATA[<p>Otro magnífico libro de la mano de Juan Palacio, el cual nos da la oportunidad de descargar gratuitamente en PDF o adquirirlo a través de <a href="http://www.lulu.com/">http://www.lulu.com</a></p>
<p>Os dejo el link al artículo en su blog <a href="http://www.navegapolis.net/content/view/694/61/">http://www.navegapolis.net/content/view/694/61/</a></p>
<p>Saludos.</p>
<p>Miguel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelmatas.es/blog/2007/11/03/flexibilidad-con-scrum/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Plantilla completa de Casos de Uso</title>
		<link>http://www.miguelmatas.es/blog/2007/10/17/plantilla-completa-de-casos-de-uso/</link>
		<comments>http://www.miguelmatas.es/blog/2007/10/17/plantilla-completa-de-casos-de-uso/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 20:29:42 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Gestor de Curriculums]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Metodologías]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.miguelmatas.es/blog/2007/10/17/plantilla-completa-de-casos-de-uso/</guid>
		<description><![CDATA[Buceando por la red he encontrado una plantilla (en inglés) bastante buena para completar casos de uso. Tanto me ha gustado que en el Documento de Casos de Uso que estoy preparando para el Gestor de Curriculum (no me he olvidado de su desarrollo, la cosa es que no tengo demasiado tiempo para dedicarle), voy a [...]]]></description>
			<content:encoded><![CDATA[<p>Buceando por la red he encontrado una plantilla (en inglés) bastante buena para completar <a title="Casos de Uso" href="http://es.wikipedia.org/wiki/Caso_de_uso" target="_blank">casos de uso</a>.</p>
<p>Tanto me ha gustado que en el Documento de Casos de Uso que estoy preparando para el Gestor de Curriculum (no me he olvidado de su desarrollo, la cosa es que no tengo demasiado tiempo para dedicarle), voy a seguir la plantilla prácticamente al completo.</p>
<p>Como podréis ver, se incluye una descripción completa de cada uno de las entidades a rellenar en la plantilla.</p>
<p><a title="Descargar Plantilla de Casos de Uso" href="http://www.miguelmatas.es/blog/wp-content/uploads/2007/10/use_case_template.doc">Descargar Plantilla de Casos de Uso</a><a title="Casos de Uso" href="http://www.miguelmatas.es/blog/wp-content/uploads/2007/10/use_case_template.doc"></a></p>
<p>Saludos.</p>
<p>Miguel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelmatas.es/blog/2007/10/17/plantilla-completa-de-casos-de-uso/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>GTD y el cómo gestionar tu tiempo</title>
		<link>http://www.miguelmatas.es/blog/2007/09/15/gtd-y-el-como-gestionar-tu-tiempo/</link>
		<comments>http://www.miguelmatas.es/blog/2007/09/15/gtd-y-el-como-gestionar-tu-tiempo/#comments</comments>
		<pubDate>Sat, 15 Sep 2007 18:17:03 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Gestión de Proyectos]]></category>
		<category><![CDATA[Libros]]></category>
		<category><![CDATA[Metodologías]]></category>

		<guid isPermaLink="false">http://www.miguelmatas.es/blog/2007/09/15/gtd-y-el-como-gestionar-tu-tiempo/</guid>
		<description><![CDATA[Extraigo la descripción de GTD que incorpora wikipedia en el siguiente link http://es.wikipedia.org/wiki/Getting_Things_Done &#8220;GTD se basa en el principio de que una persona necesita borrar de su mente todas las tareas que tiene pendientes guardándolas en un lugar específico. De este modo, se libera a la mente del trabajo de recordar todo lo que necesita [...]]]></description>
			<content:encoded><![CDATA[<p>Extraigo la descripción de GTD que incorpora wikipedia en el siguiente link <a href="http://es.wikipedia.org/wiki/Getting_Things_Done">http://es.wikipedia.org/wiki/Getting_Things_Done</a></p>
<p>&#8220;GTD se basa en el principio de que una persona necesita borrar de su mente todas las tareas que tiene pendientes guardándolas en un lugar específico. De este modo, se libera a la mente del trabajo de recordar todo lo que necesita hacer, y permitiéndole concentrarse en la realización de aquellas tareas. La psicología de GTD se basa en hacer fácil el almacenamiento, seguimiento y revisión de toda la información relacionada con las cosas que necesitas hacer. Allen (desarrollador de la teoría) sugiere que muchos de los bloqueos mentales en los que nos encontramos a la hora de completar ciertas tareas vienen dados por una planificación insuficiente (p.e., para cualquier trabajo nosotros debemos aclarar lo que se debe conseguir y que acciones se deben llevar a cabo para completarlo). Según Allen, es más práctico hacerlo reflexionando previamente sobre ello, generando una serie de acciones que hacer más tarde sin necesidad de volverlo a planificar durante su realización.&#8221;</p>
<p>Puestos además en serio, me acabo de comprar el libro en Amazon.com</p>
<p>Título: Getting Things Done: The Art of Stress-Free Productivity<br />
Autor: David Allen<br />
Idioma: Inglés</p>
<p>En cuanto esté algo más empapado del tema&#8230; os cuento con más profundidad.</p>
<p>Saludos.</p>
<p>Miguel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelmatas.es/blog/2007/09/15/gtd-y-el-como-gestionar-tu-tiempo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La importancia de la protección del modelo de datos en ámbitos de Software-Factory</title>
		<link>http://www.miguelmatas.es/blog/2007/09/13/la-importancia-de-la-proteccion-del-modelo-de-datos-en-ambitos-de-software-factory/</link>
		<comments>http://www.miguelmatas.es/blog/2007/09/13/la-importancia-de-la-proteccion-del-modelo-de-datos-en-ambitos-de-software-factory/#comments</comments>
		<pubDate>Thu, 13 Sep 2007 19:25:42 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Metodologías]]></category>
		<category><![CDATA[Motivación]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.miguelmatas.es/blog/2007/09/13/la-importancia-de-la-proteccion-del-modelo-de-datos-en-ambitos-de-software-factory/</guid>
		<description><![CDATA[A medida que voy conociendo nuevos proyectos y aplicaciones desarrolladas por otras personas, me doy aún más cuenta de la importancia de proteger y abstraer al desarrollador del modelo de datos en el que asienta una aplicación. Proteger y abstraer siempre es algo básico, pero sobre todo, si el desarrollo de una aplicación va a llevarse en [...]]]></description>
			<content:encoded><![CDATA[<p>A medida que voy conociendo nuevos proyectos y aplicaciones desarrolladas por otras personas, me doy aún más cuenta de la importancia de proteger y abstraer al desarrollador del modelo de datos en el que asienta una aplicación.</p>
<p>Proteger y abstraer siempre es algo básico, pero sobre todo, si el desarrollo de una aplicación va a llevarse en un modelo de desarrollo de Software-Factory. A continuación expongo alguna de las razones más importantes.</p>
<p>1) La volatidad de los profesionales que trabajan en este tipo de empresas es muy alta.</p>
<p>2) Es habitual que los proyectos estén integrados por un mayor porcentaje de profesionales con experiencia media/baja (becarios, programadores con un año o dos de experiencia&#8230;) elevado, liderados por un grupo reducido de profesionales con mayor experiencia (en proyectos de 4 o 5 personas estamos hablando de 1 profesional o 2 realmente qualificado).</p>
<p>3) La formación en las herramientas/tecnologías a utilizar por parte de los miembros del proyecto con menor experiencia es proporcional a los años de experiencia profesional que acumulan.</p>
<p>Con todo este panorama por delante, veo totalmente esencial que el acceso y manipulación del modelo de datos se deba llevar a cabo por los profesionales con más experiencia del grupo, abstrayendo al resto del problema, y centrándolos en el desarrollo de la vista y el controlador. Por supuesto que el desarrollo del controlador se va a basar en llamadas al modelo de datos que hemos protegido, siguiendo unos flujos que el analista funcional debe encargarse de transmitir a los programadores.</p>
<p>¿Cómo llevar a cabo dicha protección y abstracción? A mi modo de ver la mejor forma de realizar esta labor es llegando a crear la sensación al programador de que el modelo de datos no existe, que no hay base de datos. Únicamente disponemos de un conjunto de clases (agrupadas en un NameSpace, Package&#8230;), que representan el modelo de negocio y que cuentan ya con una serie de operaciones asociadas.</p>
<p>Y por supuesto dichas clases son una caja negra, de la cual sólo conocemos su estructura, pero para nada cómo funcionan por dentro. Con mi clase &#8220;Coche&#8221; podré realizar todas las operaciones asociadas a un Coche, es decir, Arrancar, Aparcar, Acelerar, Frenar, PonerFrenodeMano, BajarVentanilla, y podré acceder además a otra información como NumeroDePuertas, VelocidadActual, KilometrosRecorridos, Consumo, Marca, Modelo, Conductor&#8230;</p>
<p>Si necesito crear una aplicación que a partir de una ruta por una carretera calcule el consumo de diferentes modelos de coche dependiendo de su velocidad media y de si tiene las ventanillas bajadas, no tendría más que utilizar dos de mis clases Coche y Ruta de la siguiente manera.</p>
<p>// Definimos modelo de coche, abrimos la puerta<br />
Coche.Modelo(Seat.SeisCientos);<br />
Coche.AbrirPuerta();</p>
<p>// Creamos una nueva ruta a partir de alguna de las que tengamos definidas<br />
Ruta.DefinirRuta(Rutas.Zaragoza-Barcelona-PorAP2); </p>
<p>// Asociamos la ruta al coche, marcamos velocidad, puertas y definimos que el viaje se hará<br />
// con las ventanillas bajadas&#8230; arrancamos y ala, a viajar<br />
Coche.EstablecerRuta(Ruta);<br />
Coche.VelocidadMedia = 120;<br />
Coche.NumeroPuertas = 3;<br />
Coche.BajarVentanilla();<br />
Coche.Arrancar();<br />
Coche.RealizarViaje();</p>
<p>// Guardamos los datos asociados al viaje<br />
Coche.AlmacenarDatosConsumo();</p>
<p>Como podemos ver la protección y la encapsulación es máxima. Sabemos que para poder realizar un viaje primero hay que arrancar el coche, pero no sabemos si el arrancar el coche guardará en alguna tabla alguna información al respecto. Por supuesto no sabemos cómo se realiza el cálculo del consumo de carburante respecto a la velocidad media, ruta y estado de las ventanillas&#8230; llamando a &#8220;RealizarViaje&#8221; se calculará todo. Y lo que es más importante, se habrá consultado información sobre la ruta, modelo del coche&#8230; tal vez entren en juego 5, 6 o 20 tablas, pero a nosotros nos trae sin cuidado. Y finalmente, a la hora de almacenar los datos de consumo, tal vez tengamos un histórico de consumos asociados al coche, a la ruta&#8230; no lo sabemos, de eso se encargará la clase.</p>
<p>¿Por cierto, quién nos asegura que la información se esté guardando en una base de datos relacional? ¿tal vez se esté llevando acabo en un excel, o en un fichero plano separado por comas&#8230; o en una mysql, en un sql server o un oracle? ¿Es necesario si quiera que el desarrollador sepa qué es una select o un insert o un update?</p>
<p>Nuestro modelo de datos está 100% protegido a modificaciones llevadas de forma incorrecta.</p>
<p>Y en cuanto a la seguridad, podríamos dar acceso a un modelo de negocio a una tercera empresa para que se encargara del desarrollo de la aplicación, pero sin mostrarle realmente lo que hay detrás (¿en una dll, en un servicio web?)</p>
<p>Y en cuanto a la motivación del equipo de desarrollo, siguiendo esta forma de desarrollo, ¿quién siente realmente que está moviendo al coche? ¿todos?</p>
<p>Saludos.</p>
<p>Miguel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelmatas.es/blog/2007/09/13/la-importancia-de-la-proteccion-del-modelo-de-datos-en-ambitos-de-software-factory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to Capability Maturity Model Integration V.1.2</title>
		<link>http://www.miguelmatas.es/blog/2007/05/15/introduction-to-capability-maturity-model-integration-v12/</link>
		<comments>http://www.miguelmatas.es/blog/2007/05/15/introduction-to-capability-maturity-model-integration-v12/#comments</comments>
		<pubDate>Tue, 15 May 2007 19:54:36 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Cursos]]></category>
		<category><![CDATA[Metodologías]]></category>

		<guid isPermaLink="false">http://www.miguelmatas.es/blog/2007/05/15/introduction-to-capability-maturity-model-integration-v12/</guid>
		<description><![CDATA[Este es el título del último Curso al que he podido asistir. El curso es requisito indispensable para poder participar en las auditorías para obtener el nivel de madurez 2 del modelo CMMI. Certificación que ofrece el ESI, el Instituto Europeo de Software. Curso de 21 horas en el Instituto Tecnológico de Aragón. Demasiado teórico [...]]]></description>
			<content:encoded><![CDATA[<p>Este es el título del último Curso al que he podido asistir. El curso es requisito indispensable para poder participar en las auditorías para obtener el nivel de madurez 2 del modelo CMMI. Certificación que ofrece el ESI, el Instituto Europeo de Software.</p>
<p>Curso de 21 horas en el Instituto Tecnológico de Aragón. Demasiado teórico a mi gusto, prácticamente 15 horas fueron teóricas. En parte es algo difícil de evitar, sobre todo porque partimos de la base de que sólo disponemos de 21 horas. La metodología necesita su tiempo para poder ver cómo está organizada, y como intenta abordar las diferentes areas de proceso.</p>
<p>La verdad es que por fin tuve la oportunidad de poder conocer in situ el funcionamiento del CMMI, y entender bastante mejor las críticas que conocía sobre el modelo.</p>
<p>Como rápido resumen sobre el modelo, digamos que su máxima es que la calidad de un producto depende directamente de la calidad de los procesos que se realizan para llevarlo a cabo. El problema de enfocar tanto la gestión a los procesos, es que almenos en la definición del modelo se está dejando de lado totalmente a las personas, y no nos da ningún tipo de guía al respecto.</p>
<p>Veremos ahora qué pasa con la auditoría. Tenemos hasta octubre para prepararla.</p>
<p>Saludos!</p>
<p>Miguel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelmatas.es/blog/2007/05/15/introduction-to-capability-maturity-model-integration-v12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resolución de Errores de Software.</title>
		<link>http://www.miguelmatas.es/blog/2007/04/27/resolucion-de-errores-de-software-parte-i/</link>
		<comments>http://www.miguelmatas.es/blog/2007/04/27/resolucion-de-errores-de-software-parte-i/#comments</comments>
		<pubDate>Fri, 27 Apr 2007 16:45:00 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Gestión del Mantenimiento]]></category>
		<category><![CDATA[Metodologías]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.miguelmatas.es/blog/2007/04/27/resolucion-de-errores-de-software-parte-i/</guid>
		<description><![CDATA[De todos es sabido que los errores en el software son el pan nuestro de cada día. Alguna de las aplicaciones con las que nos toca trabajar dan más problemas que otras, y lo más normal es que si una aplicación se mantiene viva, con constantes actualizaciones y mejoras, los problemas vayan surgiendo a medida [...]]]></description>
			<content:encoded><![CDATA[<p>De todos es sabido que los errores en el software son el pan nuestro de cada día. Alguna de las aplicaciones con las que nos toca trabajar dan más problemas que otras, y lo más normal es que si una aplicación se mantiene viva, con constantes actualizaciones y mejoras, los problemas vayan surgiendo a medida que se añaden nuevas funcionalidades. Por no hablar por supuesto de nuevas aplicaciones, recien salidas del horno, en las que tras una arquitectura moderna y robusta, puede esconderse una falta de testeo de algunos módulos o funcionalidades, o simplemente algunos descuidos de programación que aún no ha degenerado en error ya que para explotar necesitan verse inmersas bajo una serie de condicionantes que en entornos de desarrollo es difícil simular.</p>
<p>Y estoy hablando de errores, de errores de programación, típicos mensajes de alerta, con nuesto querido símbolo de admiración, o su triangulito&#8230; no de errores provenientes de una mala toma de requerimientos (modulos que no fallan pero no hacen lo que se supone que tenían que hacer). Petadas, reventadas, bugs&#8230; ya sabéis de lo que hablo.</p>
<p>Sobre prevención de errores hablaremos otro día, pero&#8230; ¿cómo resolvemos los errores de software una vez se han producido?</p>
<p>Si tenemos suerte y nuestro Proyecto cuenta con un Plan de Riesgos en el cual se ha contemplado el riesgo de errores en el software y se ha documentado cuales son los pasos que debemos seguir en caso de que se produzca un error&#8230; tendremos bastante ganado. Vamos a suponer que no es así, para hacer el &#8220;más difícil todavía&#8221;.</p>
<p>La posibilidad de resolver un error comienza cuando este se produce (obvio), lo que no es tan obvio es que debemos disponer de medios para detectar el error lo antes posible, cosa de la que a veces nos olvidamos. &#8220;Bueno, si falla ya llamarán&#8221;. &#8220;No ha llamado nadie en toda la mañana, eso es que va bien&#8221;. ¿Por qué debemos esperar a la llamada de un usuario para ponernos en marcha? ¿No sería mucho mejor que una vez se ha producido un error, la propia aplicación sea capaz de enviarnos una alarma al equipo de trabajo, y así poder ponernos a investigar prácticamente en el acto? Que bonito sería que antes de que llamara el usuario llamarle tú. Hola buenas tardes señor Fulanito, hemos observado que ha surgido un error en la Aplicación durante el proceso de blablabla, le informamos que tenemos el error controlado, que no ha afectado a la transacción que estaba llevando a cabo, y que tenemos ya a una persona resolviendo la incidencia. O&#8230; que te llamara el usuario&#8230; Ah si, buenas tardes sr Menganito, somos conocedores del error que se le ha producido en la aplicación, se ha realizado un análisis del mismo, y visto que su nivel de importancia es medio, y no produce ningún bloqueo en la aplicación, hemos postpuesto la publicación del parche a la primera hora de mañana, para así juntarlo con otras mejoras que teníamos pendientes.</p>
<p>Qué diferencia eh. Y no es tan difícil conseguir que una aplicación mande un SMS o un E-Mail cuando se ha producido una excepción en la aplicación.</p>
<p>Y para finalizar unas cuantas frases.</p>
<p>&#8220;Los errores de software desprestigian a la empresa, desprestigian al producto, desprestigian al grupo de trabajo y desprestigian al programador. Además, cabrean.&#8221;</p>
<p>&#8220;La confianza del usuario en un producto es inversamente proporcional al número de errores generados por la aplicación, multiplicado por la importancia de los mismos (y añadiría también por aquí algo sobre la media de la distancia de tiempo entre errores)&#8221;.</p>
<p>&#8220;Esta claro que no se puede tratar igual la gestión de errores de sistemas críticos como el de una central nuclear o un cohete espacial, pero eso no quiere decir que nos tengamos que olvidar de la gestión de errores de un simple editor de texto. Siempre que lo queramos vender, claro.&#8221;</p>
<p>Seguimos en la siguiente parte.</p>
<p>Saludos.</p>
<p>Miguel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelmatas.es/blog/2007/04/27/resolucion-de-errores-de-software-parte-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

