Archive for the ‘Software Process Improvement’ Category

Articles

Java vive y dará la pelea.

In Desarrollo Software,Java,Noticias del Software,Rails,Software Process Improvement on noviembre 4, 2011 por racar

Duke, the Java Mascot, in the waving pose. Duk...

Image via Wikipedia

El mes que pasó, en la Java One, se dio el lanzamiento de la version 7 de java y se anunció la 8, animándome un poco a presentar el early upgrade de la recién salida versión 7, encuentro  dos cosas que me llaman la atención: que los cambios son significativos (de hecho java 8 esta proclamada como una revolución), y que dichos cambios están influenciados por el extraordinario éxito de los lenguajes dinámicos con que disponemos para programar actualmente en la plataforma. Hoy por hoy sobre la plataforma java es posible construir programas escritos en una variada gama de lenguajes funcionales y dinámicos: groovy, jruby, scala, jphyton. ¿En que momento llegaron a competirle a java en su propia VM? ¿Que causó esta disrupción? Bueno, he aquí un análisis resumido de la posible respuesta:

En el principio de los tiempos (en la JVM) solo se compilaba java…. los lenguajes de programación dinámicos, de alto nivel y orientados a objetos ya sea Python o Ruby, no tenían la influencia actual porque eran considerados “peligrosos” por el Status Quo corporativo. Debido a su característica dinámica resulta más difícil detectar bugs  y los errores se detectaban “in run time”; también son débilmente tipados y los todo poderosos IDES no pueden realizar sugerencias de autocompletado precisas y no pueden hilar eficientemente los trazos del stack de ejecución, sobretodo en las closures. Estas propiedades de los lenguajes dinámicos no permiten hacer debuggers eficientes.

Pero algo cambio:

Primera singularidad: Agile manifesto y extreme programming.  A finales de los 90’s, un grupo de revolucionarios llegó con ideas nuevas; hastiados de la burocracia corporativa que impuso la separación entre los managers/arquitectos y los “mortales” (desarrolladores), se fueron lanza en mano contra la metodología en cascada. El manifiesto ágil fue una proclama de mejores formas de construir software y trajo consigo las practicas que revolucionarían la profesión: el extreme programming. XP trajo varias practicas, entre ellas destaco dos: Test-Driven Development y Continuous integration. El primer golpe a la burocracia corporativa en torno al desarrollo de software se había dado.

Segunda singularidad: La filosofía “Getting Real” y el nacimiento de Rails. Casi 5 años después, en el 2005 aparece la máxima expresión de la metodología de desarrollo ágil de software, evitando la metodología predicativa formal esta se enfoca en crear aplicaciones útiles, innovadores (con alto valor creativo) y sencillas a partir de entregas pequeñas y continuas. Rails había nacido y trajo consigo totalmente integradas las practicas de XP y varias practicas mas: estructura robusta de testing, estructura fija de configuración sin XML, filosofía DRY o favorecer el re uso evitando las tareas repetitivas, estructura MVC y toda una serie de herramientas (ActiveRecord p. e.). Con esto, los desarrolladores se enfocan en crear la lógica del negocio y la parte creativa/innovadora de las aplicaciones. Con TDD y C.I. ya no se necesita el debugger y la fase de compilación. El segundo golpe, aun más fuerte.

La filosofía agile, va en contra del status quo corporativo y revoluciona o resiste la tendencia burocrática que favoreció los lenguajes estáticos como Java, también fomenta las practicas como TDD y continuos integration que derriban la teoría de la necesidad de un compilador y un debugger para detectar errores. Además de todo esto, añaden alta productividad al fomentar la automatización de tareas de desarrollo.

Cualquier desarrollador encuentra atractivas las ideas (y frameworks) detrás de los lenguajes dinámicos. Sin embargo Java ha respondido al cambio y después de un letargo, esta adaptándose al futuro en su versión 7 (coin) y sobretodo en la 8 (lambda). Java vive y dará la pelea!!.

Anuncios

Articles

Desarrollo de aplicaciones en ambientes regulados

In Desarrollo Software,Project Manager,Sistemas de Informacion Financiera,Software Process Improvement on octubre 15, 2011 por racar

IBM Z10 Mainframe Complex

Image by pchow98 via Flickr

El sector financiero y la banca requieren, como es obvio, de un componente importante de auditoria y control que se debe aplicar a cada uno de los proyectos de desarrollo. Demostrar que los desarrollos cumplen con los estándares de seguridad y calidad supone un enorme esfuerzo y agrega “overhead” a todo lo que se pretende implantar en producción. Adicionalmente varias personas deben validar los procesos, probarlos, documentarlos y certificarlos cuando son concluidos.

A esto hay que sumarle que, para el negocio financiero esto supone un gasto de operación, no es algo que le retribuya directamente como es el caso de sus inversiones. Lo único importante es tener cuanto antes el sistema “online”  y sin fallas ni excusas para que lo demas marche bien.

Para una corporación financiera la inversión en tecnología es más un gasto que una inversión, por dos razones: la cantidad de funcionarios involucrados en los proyectos y por los presupuestos abultados que se manejan en ellos.  

A que viene todo esto, bueno, que automatizar el proceso de gestión, configuración y entrega del software supone enormes beneficios: reduce la cantidad de esfuerzo y permite realizar auditorias mas confiables y precisas de lo que se va a instalar en ambientes de producción. Adicionalmente reduce los tiempos de entrega y mejora la calidad.

Actualmente, de la mano de las metodologías “agilistas”, contamos con varias técnicas que nos ayudan a automatizar: Continuous Integration, Test Driver Development, Configuration Management (Version Control Systems, Build Automatization, Dependencies Management).

Articles

Competisoft

In Software Process Improvement on marzo 6, 2010 por racar

Hace un par de semanas pasé por la librería nacional, y para sorpresa mía, encontré un libro llamado: COMPETISOFT, Mejora de Procesos Software para pequeñas y Medianas Empresas y Proyectos. Cuando estaba de estudiante en la universidad, tuve la oportunidad de asistir a un curso con uno de los co-autores del libro, el curso era sobre calidad del software. Sin dudarlo compre un ejemplar y me he dado una grata sorpresa de la calidad de la publicación y lo bien tratado del tema.

El libro expone y plantea solución a la situación que enfrentan(mos) los grupos pequeños de desarrollo frente a los requerimientos de calidad del software. La “industria” del software define los procesos de desarrollo en metodologías o modelos predictivos (RUP, CMMI, ISO) que son difíciles de abstraer para ser aplicados eficazmente en pequeñas organizaciones, este libro nos propone una serie de procesos ya establecidos para que los apliquemos y adaptemos, es decir nos dice como definir procesos de calidad (no se queda solo en el que).

Pues bien recomiendo el libro, es muy bueno, se basa en el trabajo de investigación de tesis doctoral de varios ingenieros de diversos países. Finalmente solo me queda enviar un saludo y felicitaciones a los Ingenieros F.  Pino y J.C. Vidal, profesores en la Universidad del Cauca.

Articles

Mejora tu código fuente, analiza tus binarios, no pierdas el tiempo y tu esfuerzo

In Project Manager,Software Process Improvement on febrero 22, 2010 por racar

“Software Improvement=People Improvement”. The Pragmatic Programmer (A. Hunt. D. Thomas’s).

La calidad en desarrollo empieza por mantener en orden tu trabajo, y que mejores como programador, entre las prácticas expuestas por Hunt y Thomas están (hay muchas mas): analizar el estilo y normalización de los fuentes, asegurarse de eliminar código redundante (el famoso Dont repeat Yurself-DRY), analizar el desempeño en ejecución de lo que sea que construyas (Performance) y asegurarte que no se pierda el producto de tu trabajo (Configuration Management). Para realizar estas tareas no estas solo, tu IDE las hace por ti. A continuación se listan 4 herramientas infaltables en el toolbox personal de un desarrollador, las herramientas son para la plataforma . NET pero existen sus precursoras en java (ver: CheckStyle, PMD y subclipse).

 

StyleCop: Permite analizar los fuentes en busca de errores de estilo. Aplicar un estilo al código fuente permite normalizarlo para que otros desarrolladores lo puedan leer fácilmente. Esto incluye agregar comentarios, identación, espaciamiento, uso de paréntesis, forma de los métodos, etc, etc. Esto parece trivial pero diferentes lenguajes definen diferentes estilos y no siempre te vas a acordar de todas las reglas. StyleCop te permite sacar alertas cuando no cumples el estilo.
http://blogs.msdn.com/sourceanalysis/

 

CloneDetective: La reutilización es clave en la POO, en desarrollos grandes es difícil detectar código existente para reutilizar. Esta herramienta permite analizar la cantidad de código que se repite a través de tus clases y te las expresa en términos de porcentajes para que decidas mejores formas de re factorizar partes de tus programas.
http://www.codeplex.com/CloneDetectiveVS

 

FxCop: Analiza los binarios en búsqueda de posibles faltas en el desempeño, como asignación repetida de variables en bucles, manejo de strings inmutables, desborde de variables o tipos erróneos de estas, etc.
http://blogs.msdn.com/fxcop/

 

ankhSVN: Integra Subversión al Visual Studio permitiendo manejar los cambios a las fuentes desde el IDE, muy parecido a subclipse en el mundo java, facilita el manejo de versiones evitando que el trabajo se pierda. Con un clic puedes dar commit y te permite visualizar el historial de cambios con los comentarios de las revisiones realizados por los commiters del proyecto.
http://ankhsvn.open.collab.net/

 

Todas estas herramientas están disponibles y se pueden bajar libremente. Realizando una reflexión a parte, antes de trabajar en .NET tenia la impresión que la plataforma Java reinaba por la increíble diversidad que impulsa la comunidad Opensource. La verdad es que .NET también tiene alternativas; en menor cantidad, pero las tiene, y muchas vienen de la comunidad opensource.