{"id":1639,"date":"2015-04-05T12:08:46","date_gmt":"2015-04-05T11:08:46","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=1639"},"modified":"2015-04-06T08:55:02","modified_gmt":"2015-04-06T07:55:02","slug":"suenan-los-desarrolladores-con-puntos-function-automatizados-1","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/suenan-los-desarrolladores-con-puntos-function-automatizados-1\/","title":{"rendered":"\u00bfSue\u00f1an los desarrolladores con Puntos de Funci\u00f3n Automatizados? (I)"},"content":{"rendered":"<p><a href=\"http:\/\/500px.com\/Vicken\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2430\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/04\/Qualilogy_FP2.jpg\" alt=\"Qualilogy - Automated Function Points\" width=\"359\" height=\"239\" \/><\/a>El t\u00edtulo de este post parafrasea el t\u00edtulo de una novela de ciencia ficci\u00f3n que tal vez conoces: \u00ab \u00bfSue\u00f1an los androides con ovejas el\u00e9ctricas? \u00bb.<\/p>\n<p>Esta novela de Philip K. Dick ha sido la base para la pel\u00edcula \u00ab Blade Runner \u00bb de Ridley Scott, en la que un detective del futuro debe encontrar y neutralizar a unos androides que nada puede diferenciar de los humanos. <!--more--><\/p>\n<p>En el libro, el detective tiene una oveja en carne y hueso, que \u00e9l sustituye, a su muerte, por una oveja &#8216;el\u00e9ctrica&#8217;. \u00c9l viene a preguntarse si los androides sue\u00f1an como \u00e9l con una mascota, pero en su versi\u00f3n &#8216;animalo\u00efde&#8217;.<\/p>\n<p>Esta obra de K. Dick plantea una reflexi\u00f3n sobre la diferencia entre el humano y el robot, entre lo real y lo automatizado. Me la record\u00e9 cuando me pregunt\u00e9 cual es la diferencia entre los puntos de funci\u00f3n (Function Points o FP) en su versi\u00f3n manual y los puntos de funci\u00f3n automatizados (Automated Function Points o AFP).<\/p>\n<p>Hoy en d\u00eda, m\u00e1s y m\u00e1s desarrolladores utilizan cada d\u00eda las m\u00e9tricas de herramientas de an\u00e1lisis de c\u00f3digo,\u00a0estad\u00edsticas de pruebas, de seguimiento de correcciones y de cambios, los datos de la deuda t\u00e9cnica, etc. en su proyecto o en un proceso de integraci\u00f3n continua.<br \/>\nPues me pregunt\u00e9 \u00bfpor qu\u00e9 los desarrolladores, cada vez m\u00e1s aficionados a las medidas relativas a su c\u00f3digo y sus proyectos, ignoran generalmente todo de los puntos de funci\u00f3n? \u00bfPodr\u00eda interesarles esta medida?<\/p>\n<h2>Puntos de Funci\u00f3n<\/h2>\n<p>No voy a explicar lo que es un Punto de Funci\u00f3n: esto no es el tema de este post y necesitar\u00edamos muchas p\u00e1ginas. Sobre todo porque este t\u00e9rmino se relaciona con diferentes normas y m\u00e9todos, por no hablar de diferentes escuelas. Digamos sencillamente que el FP es una medida del tama\u00f1o funcional de una aplicaci\u00f3n, basada en los flujos transaccionales y las estructuras de datos.<\/p>\n<p>Si, lo s\u00e9: no es una definici\u00f3n precisa, pero de nuevo, no quiero entrar en esta discusi\u00f3n, sino recordar cuales son los objetivos principales de los Puntos de Funci\u00f3n:<\/p>\n<ul>\n<li>medir el tama\u00f1o funcional de una aplicaci\u00f3n existente o futura,<\/li>\n<li>de manera estandarizada y objetiva, con independencia de las tecnolog\u00edas y de las organizaciones, permitiendo as\u00ed comparaciones (benchmarking),<\/li>\n<li>con el resultado de que esta medida se utiliza a menudo para evaluar la productividad de los desarrolladores.<\/li>\n<\/ul>\n<h2>\u00bfSaben los desarrolladores que es un Punto de funci\u00f3n?<\/h2>\n<p>No, los desarrolladores no conocen los puntos de funci\u00f3n. Tal vez s\u00ed, pero yo nunca he conocido a un solo desarrollador que sepa lo que es.<\/p>\n<p>Una de las razones podr\u00eda ser que, en mi opini\u00f3n, los desarrolladores no est\u00e1n naturalmente interesados \u200b\u200ben los aspectos funcionales. No estoy diciendo que les importa poco, muchos desarrolladores se especializan en las \u00e1reas de banca, de finanzas, de industria, o en procesos de contabilidad, de log\u00edsticas, de recursos humanos, etc. Pero sabemos que es mejor hablarles de las nuevas tecnolog\u00edas, de nuevos lenguajes de programaci\u00f3n, de los \u00faltimos frameworks, posiblemente de metodolog\u00edas de desarrollo o de proyecto si queremos llamar su atenci\u00f3n.<\/p>\n<p>Otros motivos por los que no van a mirar naturalmente esta m\u00e9trica:<\/p>\n<ul>\n<li>Es complejo de entender: los desarrolladores saben lo que es una transacci\u00f3n o una estructura de datos, pero buena suerte si quieres explicar conceptos tales como &#8216;boundaries&#8217; (fronteras) de la\u00a0 aplicaci\u00f3n y otros &#8216;factores de ajuste&#8217;.<\/li>\n<li>Es un proceso manual, por lo general largo y tedioso, no automatizado. Volveremos en una segunda parte con los puntos de funci\u00f3n automatizados.<\/li>\n<\/ul>\n<p>Creo que tambi\u00e9n hay algunas razones culturales. Los conocimientos anglosajones son bastante orientados a lo cuantitativo, mientras que nosotros europeos del sur, somos m\u00e1s propensos a lo cualitativo. Me recuerdo de mis cursos de sociolog\u00eda del trabajo en la universidad. Cuando un equipo de soci\u00f3logos americanos quer\u00eda estudiar una organizaci\u00f3n \u2013 por ejemplo, un equipo de trabajadores en una fabrica \u2013 y ver qu\u00e9 lecciones se pueden aprender o c\u00f3mo mejorarla, estaban a favor de la observaci\u00f3n y la recogida de datos para medir la duraci\u00f3n de una operaci\u00f3n, el tiempo para que el producto X pasa del punto A al punto B, el n\u00famero de productos fabricados, el n\u00famero de defectos, etc.<\/p>\n<p>Un equipo, vamos a decir francesa, empezaba a trav\u00e9s de entrevistas con los empleados para evaluar su inter\u00e9s (o no) en el trabajo, sus observaciones sobre el proceso de fabricaci\u00f3n y sus defectos, eventuales sugerencias para la organizaci\u00f3n de la cadena de producci\u00f3n, etc. El enfoque era esencialmente cualitativo, no tanto cuantitativo.<br \/>\nMuchas personas tambi\u00e9n consideran que no es posible medir cualquier producci\u00f3n inmaterial, y la productividad del trabajo intelectual.<\/p>\n<h2>Puntos de funci\u00f3n y productividad<\/h2>\n<p>Otra raz\u00f3n por la cual los puntos de funci\u00f3n despiertan mayor inter\u00e9s en los pa\u00edses anglosajones y en nuestros pa\u00edses latinos: la medici\u00f3n de la productividad. La capacidad de comparar y hacer benchmarking de los equipos y de los proveedores para comprobar que son capaces de producir c\u00f3digo (si es posible de calidad) tan pronto como sea posible, es una especie de Santo Grial en la comunidad de los consultores.<\/p>\n<p>Estos aspectos de productividad no ocupan un lugar tan importante en nuestras organizaciones. Recuerdo a un manager ingl\u00e9s a quien le expliqu\u00e9 que unos desarrolladores no querian usar un software de an\u00e1lisis de c\u00f3digo, a pesar de todos los incentivos y los esfuerzos de su jerarqu\u00eda. De inmediato, \u00e9l me respondi\u00f3 que esto no ocurrir\u00eda con \u00e9l porque habr\u00eda terminado inmediatamente los contratos de los rebeldes. Lo cual ser\u00eda pr\u00e1cticamente imposible en la mayor\u00eda de nuestros pa\u00edses m\u00e1s mediterr\u00e1neos, si no en Francia, al menos en Espa\u00f1a.<\/p>\n<p>Obviamente, un desarrollador no puede rechazar una orden directa de su jefe, pero imponer a todo un equipo de proyecto que utiliza una herramienta es impensable, sin levantar todo tipo de objeciones, peligros y riesgos de comprometer el desarrollo de la pr\u00f3xima versi\u00f3n, y finalmente verlos sucumbir a una especie de apat\u00eda, rozando la inercia absoluta sobre el tema. Esta es tambi\u00e9n una de las razones por las que yo siempre digo que la calidad de las aplicaciones proviene de los desarrolladores y no se decreta. Convencer s\u00ed, imponer no.<\/p>\n<p>Adem\u00e1s, muchos desarrolladores son generalmente muy contentos de descubrir nuevas herramientas, pero ser\u00e1n naturalmente sospechosos si se trata de controlar su trabajo o de medir su productividad.<\/p>\n<h2>\u00bfLos desarrolladores necesitan Puntos de Function?<\/h2>\n<p>No creo que los desarrolladores hayan necesitado puntos de funci\u00f3n.<\/p>\n<p>Ellos, por supuesto, estar\u00edan interesados \u200b\u200ben una medici\u00f3n precisa de las caracter\u00edsticas funcionales que implementar en un software, pero lo que les importa m\u00e1s es que los requisitos no evolucionan constantemente durante la fase de desarrollo. Por otra parte, un jefe de proyecto con experiencia ser\u00e1 capaz de estimar la carga de trabajo que representan estas caracter\u00edsticas. Y \u00e9l sabe que tambi\u00e9n hay una variedad de factores que pueden obstaculizar al equipo para entregar la aplicaci\u00f3n a tiempo y hora: el uso de una nueva tecnolog\u00eda no totalmente depurada, procesos de proyecto inadecuados, herramientas defectuosas o mal integradas, un equipo con una formaci\u00f3n insuficiente o sin experiencia, etc.<\/p>\n<p>Tambi\u00e9n creo que los desarrolladores no necesitan Puntos de Funci\u00f3n para conocer su productividad. Hoy en d\u00eda hay muchos indicadores que nos permiten saber qui\u00e9n hace qu\u00e9 en un equipo de proyecto, y como se hace: el n\u00famero de registro de check-in\/check-out, el porcentaje de cobertura de pruebas, el n\u00famero de defectos encontrados durante la QA, etc. Por no hablar de las m\u00e9tricas de an\u00e1lisis de c\u00f3digo: es muy f\u00e1cil saber quien duplica c\u00f3digo con Copiar\/Pegar, quien nunca comenta o poco su c\u00f3digo, quien hace caso omiso de una mejor pr\u00e1ctica, etc.<\/p>\n<p>En una auditoria, si tengo m\u00e1s de una versi\u00f3n, intentar\u00e9 calcular una medida del esfuerzo de desarrollo entre dos versiones. Si conozco cu\u00e1ntos componentes se han a\u00f1adido, cambiado, eliminado entre las versiones, y si puedo asignar una carga de trabajo para cada tarea (dependiendo de la Complejidad Cyclomatica de estos componentes, por ejemplo), soy capaz de calcular una estimaci\u00f3n del n\u00famero de d\u00edas necesarios para la realizaci\u00f3n de esta nueva versi\u00f3n.<\/p>\n<p>Por supuesto, no voy a obtener resultados muy precisos (1). Sin embargo, prefiero una medida imprecisa pero f\u00e1cilmente comprensible, a una m\u00e9trica que se pretende perfecta, pero no sabemos exactamente c\u00f3mo ha sido calculada. Y mi cliente tambi\u00e9n: \u00e9l quisiera saber si el proveedor externo ha pasado realmente los 500 d\u00edas que le quiere facturar, y que parecen un poco exagerados a la luz del trabajo hecho. Si mi estimaci\u00f3n es f\u00e1cilmente comprensible para que se puede utilizar esta f\u00f3rmula de una manera bastante objetiva y realista, una diferencia de 10% o 20% en la evaluaci\u00f3n no ser\u00e1 realmente un problema. Pero si nuestro c\u00e1lculo resulta en 200 o 300 d\u00edas de carga estimada en lugar de los 500 facturados, el outsourcer tendr\u00e1 probablemente que responder a algunas preguntas.<\/p>\n<p>Esto funciona en ambos sentidos: una vez, se me pidi\u00f3 una auditor\u00eda \u00aba ciegas\u00bb para una aplicaci\u00f3n cr\u00edtica que ten\u00eda m\u00e1s de cuatro meses de retraso. Digo \u00aba ciegas\u00bb porque no pude conseguir ninguna informaci\u00f3n sobre el contexto y la historia de este proyecto. Y me encontr\u00e9 con un n\u00famero muy alto de componentes a\u00f1adidos y eliminados entre las dos \u00faltimas versiones. Eso me parec\u00eda caracter\u00edstico de evoluciones significativas de los requisitos funcionales entre las dos versiones. Y es lo que hab\u00eda pasado y que reconoci\u00f3 este cliente, basandonos en una estimaci\u00f3n imprecisa pero todav\u00eda suficientemente objetiva para resolver esta discrepancia con su proveedor.<\/p>\n<p>Este ejemplo muestra que una medida de esfuerzo de este tipo es \u00fatil, y entonces lo ser\u00edan los Puntos de Funci\u00f3n, que asuman una precisi\u00f3n mucho m\u00e1s sustancial que mi sencillo c\u00e1lculo. Ahora imaginamos que la estimaci\u00f3n de los puntos de funci\u00f3n se puede automatizar: \u00bfser\u00eda suficiente para que los desarrolladores puedan utilizar esta medida?<\/p>\n<p>Esto es lo que veremos en nuestro pr\u00f3ximo post.<\/p>\n<p>&nbsp;<\/p>\n<p>(1) Sin embargo, he notado que las cifras para lenguajes como Cobol o cliente-servidor son un poco m\u00e1s precisos que para los lenguajes OO de nuevas tecnolog\u00edas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El t\u00edtulo de este post parafrasea el t\u00edtulo de una novela de ciencia ficci\u00f3n que tal vez conoces: \u00ab \u00bfSue\u00f1an los androides con ovejas el\u00e9ctricas? \u00bb. Esta novela de Philip K. Dick ha sido la base para la pel\u00edcula \u00ab Blade Runner \u00bb de Ridley Scott, en la que un detective del futuro debe encontrar [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-1639","post","type-post","status-publish","format-standard","hentry","category-calidad-de-aplicaciones"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1639"}],"collection":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/comments?post=1639"}],"version-history":[{"count":19,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1639\/revisions"}],"predecessor-version":[{"id":1659,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1639\/revisions\/1659"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=1639"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=1639"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=1639"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}