{"id":682,"date":"2009-03-11T02:32:00","date_gmt":"2009-03-11T02:32:00","guid":{"rendered":"http:\/\/karstieltopia.com\/2009\/03\/11\/analizando-codigo\/"},"modified":"2009-03-11T02:32:00","modified_gmt":"2009-03-11T02:32:00","slug":"analizando-codigo","status":"publish","type":"post","link":"http:\/\/karstieltopia.com\/programacion\/herramientas\/analizando-codigo\/","title":{"rendered":"Analizando c\u00f3digo"},"content":{"rendered":"

\u00daltimamente tengo que estar mirando mucho c\u00f3digo que no es m\u00edo y, como todo el mundo sabe (\u00a1o debiera! xD) el c\u00f3digo de un ente y de otro pueden (y ser\u00e1n) muy diferentes, o hasta el mismo estilo de programaci\u00f3n de una persona puede variar con el tiempo o con las necesidades\/obligaciones\/malestares\/etc que tuviera en el momento de la creaci\u00f3n de dicho c\u00f3digo.<\/p>\n

Y claro, una de las fases de vida de un proyecto (y la que es la m\u00e1s larga y tediosa), es la manutenci\u00f3n de dicho c\u00f3digo.<\/p>\n

As\u00ed que nos encontramos con que hay que ampliar\/mejorar\/arreglar\/etc un cacho de trozo de programa que sabe alguien para que sirve y que no hay alma en pena que entienda las malevolencias que debe hacer (yo perjuro que es una maldici\u00f3n en arameo), pero hay que tragarse el ego (nadie lleva bien que le insulten) y tratar de entender las maldiciones que suelta dicho ente.<\/p>\n

Bien, lo que se suele decir es que con una buena documentaci\u00f3n previa y con comentarios en el c\u00f3digo se puede hacer \u00e9sto m\u00e1s o menos bien. Con esta premisa estoy de acuerdo, pero la considero insuficiente.<\/p>\n

Lo siguiente, una vez que entiendes un poco lo que hace, es probarlo y ver que rej\u00f3spitos hace. Con \u00e9sto aprendemos m\u00e1s de la misi\u00f3n del ente y como lo hace. Si encima tenemos una bater\u00eda de pruebas con el que saturarlo, tendremos todav\u00eda m\u00e1s informaci\u00f3n, dado que nos encontraremos con un contexto “virtual” de dicho ente.<\/p>\n

Vale, ya lo tenemos, sabemos que hace y sabemos que queremos modificarlo y, por eso, atacamos al c\u00f3digo para ver c\u00f3mo lo hace… Y aqu\u00ed nos quedamos con los comentarios anteriores y el saltar de funci\u00f3n en funci\u00f3n manualmente (o con ayudas del IDE haciendo click encima de la funci\u00f3n, o viendo una lista de llamadas)… \u00a1Y nada m\u00e1s!<\/p>\n

No s\u00e9 si os pasa a vosotros, pero personalmente echo mucho de menos que no haya una herramienta visual para ver como cada funci\u00f3n se comunica con otras, ver las llamadas que salen y las que entran, hasta inclusive inclustar eso en un debugger. S\u00e9 que hay por ah\u00ed una herramienta de pago que hace algo parecido a \u00e9sto (creo que est\u00e1 todav\u00eda en una versi\u00f3n beta) y que estoy seguro que mejora la interpretaci\u00f3n del c\u00f3digo antiguo de una manera antol\u00f3gica.<\/p>\n

Imaginaros el que est\u00e1is viendo una funci\u00f3n grande, que no sab\u00e9is muy bien como funciona… Encima llama a muchas funciones externas con un mont\u00f3n de par\u00e1metros… Tienes que dedicarle mucho tiempo por mucha informaci\u00f3n que nos den los IDEs actuales (o los grep de toda la vida :D). Con una herramienta que nos mostrara visualmente cada funci\u00f3n (o similar) como un ente, con las llamadas a otras y los par\u00e1metros pasados y as\u00ed poder ir navegando a trav\u00e9s de las funciones r\u00e1pidamente y visualmente, nos ayudar\u00eda enormemente.<\/p>\n

Despu\u00e9s de tantos diagramas, comentarios, documentaci\u00f3n… \u00bfpor qu\u00e9 una herramienta tan b\u00e1sica no existe?<\/p>\n","protected":false},"excerpt":{"rendered":"

\u00daltimamente tengo que estar mirando mucho c\u00f3digo que no es m\u00edo y, como todo el mundo sabe (\u00a1o debiera! xD) el c\u00f3digo de un ente y de otro pueden (y ser\u00e1n) muy diferentes, o hasta el mismo estilo de programaci\u00f3n de una persona puede variar con el tiempo o con las necesidades\/obligaciones\/malestares\/etc que tuviera en […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[953],"tags":[365],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"yoast_head":"\nAnalizando c\u00f3digo - Karstieltopia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/karstieltopia.com\/programacion\/herramientas\/analizando-codigo\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Analizando c\u00f3digo - Karstieltopia\" \/>\n<meta property=\"og:description\" content=\"\u00daltimamente tengo que estar mirando mucho c\u00f3digo que no es m\u00edo y, como todo el mundo sabe (\u00a1o debiera! xD) el c\u00f3digo de un ente y de otro pueden (y ser\u00e1n) muy diferentes, o hasta el mismo estilo de programaci\u00f3n de una persona puede variar con el tiempo o con las necesidades\/obligaciones\/malestares\/etc que tuviera en […]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/karstieltopia.com\/programacion\/herramientas\/analizando-codigo\/\" \/>\n<meta property=\"og:site_name\" content=\"Karstieltopia\" \/>\n<meta property=\"article:published_time\" content=\"2009-03-11T02:32:00+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:creator\" content=\"@karstiel\" \/>\n<meta name=\"twitter:site\" content=\"@karstiel\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/karstieltopia.com\/#website\",\"url\":\"http:\/\/karstieltopia.com\/\",\"name\":\"Karstieltopia\",\"description\":\"Programaci\\u00f3n, tecnolog\\u00eda y a\\u00f1adidos\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"http:\/\/karstieltopia.com\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/karstieltopia.com\/programacion\/herramientas\/analizando-codigo\/#webpage\",\"url\":\"http:\/\/karstieltopia.com\/programacion\/herramientas\/analizando-codigo\/\",\"name\":\"Analizando c\\u00f3digo - Karstieltopia\",\"isPartOf\":{\"@id\":\"http:\/\/karstieltopia.com\/#website\"},\"datePublished\":\"2009-03-11T02:32:00+00:00\",\"dateModified\":\"2009-03-11T02:32:00+00:00\",\"author\":{\"@id\":\"http:\/\/karstieltopia.com\/#\/schema\/person\/3d09a55c38c7c00e78c41fa3f71a6e75\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/karstieltopia.com\/programacion\/herramientas\/analizando-codigo\/\"]}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/karstieltopia.com\/#\/schema\/person\/3d09a55c38c7c00e78c41fa3f71a6e75\",\"name\":\"karstiel\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6AuIG-b0","_links":{"self":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts\/682"}],"collection":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/comments?post=682"}],"version-history":[{"count":0,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts\/682\/revisions"}],"wp:attachment":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/media?parent=682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/categories?post=682"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/tags?post=682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}