{"id":1157,"date":"2014-05-13T10:44:55","date_gmt":"2014-05-13T09:44:55","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=1157"},"modified":"2014-05-14T13:11:05","modified_gmt":"2014-05-14T12:11:05","slug":"aplicacion-legacy-c-refactorizacion-reingenieria-1","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/aplicacion-legacy-c-refactorizacion-reingenieria-1\/","title":{"rendered":"Aplicaci\u00f3n Legacy C \u2013 \u00bfRefactorizaci\u00f3n o reingenier\u00eda? (I)"},"content":{"rendered":"<p><a href=\"http:\/\/500px.com\/Vicken\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1816\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/WordCLegacy_UseCases1.jpg\" alt=\"WordCLegacy_UseCases1\" width=\"360\" height=\"240\" \/><\/a>Continuamos esta serie sobre el an\u00e1lisis del c\u00f3digo fuente de Word 1.1a, publicado por Microsoft en 1990.<\/p>\n<p>En el primer post, hemos visto <a href=\"http:\/\/qualilogy.com\/es\/auditoria-aplicacion-legacy-c-microsoft-word-1-1a-1\/\" target=\"_blank\">las m\u00e9tricas cuantitativas<\/a> de tama\u00f1o, de complejidad, el nivel de comentario y de duplicaci\u00f3n. El segundo post fue dedicado a los diferentes <a href=\"http:\/\/qualilogy.com\/es\/auditoria-aplicacion-legacy-c-microsoft-word-1-1a-2\/\" target=\"_blank\">&#8216;Issues\u2019 Blocker, Critical, Major et Minor<\/a>. <!--more--><\/p>\n<p>Estos resultados de an\u00e1lisis sugieren una estrategia de desarrollo orientada claramente hacia la fiabilidad y el rendimiento del software, ya que nos encontramos con pocas violaciones de mejores pr\u00e1cticas en este campo. Hay muchas m\u00e1s en t\u00e9rminos de legibilidad y de comprensi\u00f3n del c\u00f3digo, y por lo tanto de mantenimiento.<\/p>\n<p>Recuerdo: hice este an\u00e1lisis de forma sencilla, es decir &#8216;out of the box&#8217;, sin nada de parametrizaci\u00f3n. He resuelto algunos problemas de parsing, pero no he intentado declarar macros, y he trabajado con el Quality Profile (conjunto de reglas) por defecto. Lo importante para m\u00ed, en esta serie, no es la b\u00fasqueda de la m\u00e1xima precisi\u00f3n en los resultados, ya que el objetivo no es auditar el c\u00f3digo de esta versi\u00f3n de Word, pero ver c\u00f3mo una sencilla evaluaci\u00f3n y algunos indicadores pueden ser \u00fatiles para tomar decisiones, dependiendo del contexto.<\/p>\n<h2>Casos de uso<\/h2>\n<p>\u00bfQui\u00e9n dice contexto dice casos de uso. Cuando hablamos de aplicaciones Legacy, los casos de uso m\u00e1s frecuentes ser\u00e1n:<\/p>\n<ul>\n<li>Externalizaci\u00f3n: transferir el mantenimiento de la aplicaci\u00f3n a un nuevo equipo, usualmente una empresa de servicios, y con el fin de reducir los costes de mantenimiento.<\/li>\n<li>Refactorizaci\u00f3n: la deuda t\u00e9cnica creci\u00f3 hasta tal punto que cualquier modificaci\u00f3n de c\u00f3digo tiene un muy alto coste de cambio. Una refactorizaci\u00f3n es necesaria para reducir los intereses de la deuda.<\/li>\n<li>Reingenier\u00eda: una refactorizaci\u00f3n significa a menudo concebir de nuevo el dise\u00f1o y la arquitectura de la aplicaci\u00f3n. \u00bfPor qu\u00e9 no aprovechar esta oportunidad para re-escribir esta aplicaci\u00f3n en otra tecnolog\u00eda, m\u00e1s reciente y m\u00e1s f\u00e1cil de mantener?<\/li>\n<li>Abandono: abandonar esta aplicaci\u00f3n? Esta es una pregunta que surge con frecuencia para aplicaciones Legacy, especialmente en el mundo Cobol. Si es m\u00e1s barato reemplazarla con un software de empresa (Enterprise Software), entonces podemos descartala.<\/li>\n<\/ul>\n<p>Ahora voy a ponerme en un contexto muy concreto: has decidido comprar Microsoft. S\u00ed, lo s\u00e9, es un poco dif\u00edcil de imaginar, pero intentalo. Tu misi\u00f3n, si la aceptas, ser\u00e1 recomendar una estrategia para esta versi\u00f3n de Word:<\/p>\n<ol>\n<li>Externalizaci\u00f3n: \u00bfcu\u00e1l es el coste de transferir el conocimiento de esta aplicaci\u00f3n a otro equipo de I + D?<\/li>\n<li>Refactorizaci\u00f3n: \u00bfcu\u00e1l es el coste de resolver los defectos existentes encontrados (re-dise\u00f1o incluido), con el equipo actual? O con un nuevo equipo despu\u00e9s de una transferencia de conocimiento (caso 1 + 2)?<\/li>\n<li>Reingenier\u00eda: re-escribir esta aplicaci\u00f3n en una nueva tecnolog\u00eda, como C++ (lo m\u00e1s logico). Con el mismo equipo o con otro equipo (caso 1 + 3).<\/li>\n<li>Abandono: decisi\u00f3n para el management, porque hay una dimensi\u00f3n estrategica. Si mantener el software cuesta m\u00e1s que lo que se puede ganar, se le permitir\u00e1 morir de muerte natural, con una equipo reducido para resolver los defectos m\u00e1s cr\u00edticos pero sin trabajar en la evoluci\u00f3n de la aplicaci\u00f3n.<\/li>\n<\/ol>\n<p>Para evaluar los costes de estas diferentes estrategias, pens\u00e9 en cuales de los diversos datos e informaciones disponibles en mi dashboard pueden ser utiles, y que tomar en cuenta para cada caso. Empezando con el e coste estimado de la transferencia de conocimientos de esta aplicaci\u00f3n a un nuevo equipo. \u00bfQu\u00e9 hace que un programa o una funci\u00f3n ser\u00e1 m\u00e1s o menos dif\u00edcil de entender?<\/p>\n<ul>\n<li>Su tama\u00f1o: m\u00e1s largo un programa, m\u00e1s tiempo se requiere para conocer\u00a0 la l\u00f3gica implantada y lo que hace.<\/li>\n<li>Su complejidad: cuanto m\u00e1s condiciones tiene un programa &#8211; que sean If &#8230; Else o Switch &#8211; y bucles, m\u00e1s dif\u00edcil entender el flujo de tratamientos.<\/li>\n<li>Su estructura: cuanto m\u00e1s bloques de c\u00f3digo imbricados, Goto, Break y otras instrucciones que inducen una lectura no lineal del c\u00f3digo, m\u00e1s complicados los algoritmos.<\/li>\n<\/ul>\n<p>Empec\u00e9 con los datos de complejidad.<\/p>\n<h2>Complejidad<\/h2>\n<h3>Funciones<\/h3>\n<p>Hemos visto <a href=\"http:\/\/qualilogy.com\/es\/auditoria-aplicacion-legacy-c-microsoft-word-1-1a-1\/\" target=\"_blank\">en el primero post<\/a> que esta aplicaci\u00f3n tiene algunas funciones y archivos con un alto n\u00famero de puntos de Complejidad Ciclom\u00e1tica (CC). De hecho, la distribuci\u00f3n es la siguiente:<\/p>\n<p style=\"text-align: center\"><strong><em>Tabla 1 &#8211; Complejidad Ciclom\u00e1tica de las funciones de la aplicaci\u00f3n Word Opus <\/em><\/strong><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_CCDistribFns.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1824\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_CCDistribFns.jpg\" alt=\"Word_CCDistribFns\" width=\"244\" height=\"272\" \/><\/a><\/p>\n<p>Podemos ver en esta tabla 689 funciones con una Complejidad Ciclom\u00e1tica igual a 1, luego 870 funciones de CC igual a 2 y menos de 4, etc.<\/p>\n<p>Se considera que la distribuci\u00f3n \u00f3ptima de la Complejidad Ciclom\u00e1tica de una aplicaci\u00f3n C es como sigue:<\/p>\n<ul>\n<li>Funciones pocas complejas con una CC &lt; 4 (Low): 52% del n\u00famero total de funciones en la aplicaci\u00f3n.<\/li>\n<li>Funciones moderadamente complejas con una CC &gt; 4 y &lt; 10 (Moderate): 25%.<\/li>\n<li>Funciones complejas con una CC &gt; 10 y &lt; 20 (High): 15%.<\/li>\n<li>Funciones muy complejas con una CC &gt; 20 (Very High): 8%.<\/li>\n<\/ul>\n<p>Si se calcula la distribuci\u00f3n de la complejidad en nuestra aplicaci\u00f3n Word desde la Tabla 1, se obtiene esta siguiente:<\/p>\n<p style=\"text-align: center\"><strong><em>Tabla 2 \u2013 Distribuci\u00f3n de la complejidad en la aplicaci\u00f3n Word Opus<\/em><\/strong><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_CCDistribFns2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1828\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_CCDistribFns2.jpg\" alt=\"Word_CCDistribFns2\" width=\"377\" height=\"199\" \/><\/a><\/p>\n<p>La siguiente figura muestra la curva de distribuci\u00f3n de la complejidad en Word, en comparaci\u00f3n con la curva ideal.<\/p>\n<p style=\"text-align: center\"><strong><em>Figura 1 \u2013 Curva de distribuci\u00f3n de la complejidad (Funciones)<\/em><\/strong> <a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_CCDistribFnsGraph.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1832\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_CCDistribFnsGraph.jpg\" alt=\"Word_CCDistribFnsGraph\" width=\"518\" height=\"355\" \/><\/a><\/p>\n<p><span id=\"result_box\" lang=\"es\"><span class=\"hps\">Vemos<\/span> <span class=\"hps\">que la proporci\u00f3n de<\/span> <span class=\"hps\">funciones de<\/span> <span class=\"hps\">complejidad media<\/span> <span class=\"hps\">o <\/span><span class=\"hps\">alta<\/span> es <span class=\"hps\">en fase con la curva optimal<\/span>:<br \/>\n<\/span><\/p>\n<ul>\n<li><span id=\"result_box\" lang=\"es\"><span class=\"hps\">29<\/span>% de &#8216;Moderate&#8217; <span class=\"hps\">en Word<\/span> <span class=\"hps\">vs.<\/span> <span class=\"hps\">25<\/span>% <span class=\"hps\">idealmente<\/span>. <\/span><\/li>\n<li><span id=\"result_box\" lang=\"es\"><span class=\"hps\">16.7<\/span>% de &#8216;<span class=\"hps\">High&#8217; en Word vs.<\/span> <span class=\"hps\">15<\/span>% <span class=\"hps\">idealmente<\/span>. <\/span><\/li>\n<\/ul>\n<p><span id=\"result_box\" lang=\"es\">Pero, las funciones <span class=\"hps\">menos complejas<\/span> <span class=\"hps\">no son suficientes<\/span>: <span class=\"hps\">39,7<\/span>% en lugar de <span class=\"hps\">52<\/span>%. <span class=\"hps\">Y el nivel de<\/span> <span class=\"hps\">funciones muy complejas<\/span> <span class=\"hps\">es demasiado<\/span> <span class=\"hps\">alto:<\/span> <span class=\"hps\">14,6%<\/span> <span class=\"hps\">frente al 8%<\/span> <span class=\"hps\">en el<\/span> <span class=\"hps\">ideal.<\/span> <span class=\"hps\">Esto<\/span> <span class=\"hps\">deber\u00eda afectar<\/span> <span class=\"hps\">los<\/span> <span class=\"hps\">costes de transferencia de<\/span> <span class=\"hps\">conocimiento o la<\/span> <span class=\"hps\">reingenier\u00eda<\/span> <span class=\"hps\">de esta aplicaci\u00f3n.<\/span><\/span><\/p>\n<p><span class=\"hps\">Entonces<\/span> <span class=\"hps\">me he centrado en<\/span> <span class=\"hps\">las funciones m\u00e1s<\/span> <span class=\"hps\">complejas<\/span> <span class=\"hps\">utilizando la siguiente<\/span> <span class=\"hps\">m\u00e9trica que<\/span> <span class=\"hps\">lista las<\/span> <span class=\"hps\">funciones<\/span> con una <span class=\"hps\">Ciclom\u00e1tica<\/span> <span class=\"hps\">Complejidad<\/span> <span class=\"hps\">por encima de<\/span> <span class=\"hps\">20<\/span> <span class=\"hps\">puntos<\/span><span class=\"hps\">:<\/span><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Avoid_Cplx_Fns.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1834\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Avoid_Cplx_Fns.jpg\" alt=\"Word_Avoid_Cplx_Fns\" width=\"463\" height=\"34\" \/><\/a><span id=\"result_box\" lang=\"es\"><span class=\"hps\">Hay que tener en cuenta que<\/span> <span class=\"hps\">hab\u00edamos identificado<\/span> <a href=\"http:\/\/qualilogy.com\/es\/auditoria-aplicacion-legacy-c-microsoft-word-1-1a-1\/\" target=\"_blank\">en <\/a><\/span><span id=\"result_box\" lang=\"es\"><a href=\"http:\/\/qualilogy.com\/es\/auditoria-aplicacion-legacy-c-microsoft-word-1-1a-1\/\" target=\"_blank\">el primero post<\/a> <span class=\"hps\">573<\/span> <span class=\"hps\">funciones<\/span> <span class=\"hps\">con una<\/span> <span class=\"hps\">CC<\/span> <span class=\"hps\">superior o<\/span> <span class=\"hps\">igual a<\/span> <span class=\"hps\">20, lo cual<\/span> <span class=\"hps\">significa que tenemos<\/span> <span class=\"hps\">34<\/span> <span class=\"hps atn\">funciones (<\/span>573 &#8211; 539) <span class=\"hps\">con exactamente<\/span> <span class=\"hps\">20<\/span> <span class=\"hps\">puntos.<\/span><br \/>\n<\/span><\/p>\n<p class=\"hps\"><span id=\"result_box\" lang=\"es\"><span class=\"hps\">Estas funciones<\/span> <span class=\"hps\">representan una<\/span> <span class=\"hps\">complejidad ciclom\u00e1tica<\/span> <span class=\"hps\">de<\/span> <span class=\"hps\">24 667<\/span>, <span class=\"hps\">m\u00e1s de la mitad<\/span> <span class=\"hps\">de la C<\/span><span class=\"hps\">C<\/span> global <span class=\"hps atn\">(<\/span>43 <span class=\"hps\">846,<\/span> <span class=\"hps\">como se ve<\/span> <span class=\"hps\">en\u00a0<span id=\"result_box\" lang=\"es\"><a href=\"http:\/\/qualilogy.com\/es\/auditoria-aplicacion-legacy-c-microsoft-word-1-1a-1\/\" target=\"_blank\">en el primero post<\/a><\/span><\/span> <span class=\"hps\">de esta serie)<\/span> <span class=\"hps\">y algunas funciones<\/span> <span class=\"hps\">son muy complejas<\/span>:<\/span><\/p>\n<p style=\"text-align: center\"><em><strong>Tabla 3 \u2013 Distributci\u00f3n de las funciones m\u00e1s complejas<\/strong><\/em><br \/>\n<a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_CCDistribLargestFns.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1836\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_CCDistribLargestFns.jpg\" alt=\"Word_CCDistribLargestFns\" width=\"405\" height=\"195\" \/><\/a><\/p>\n<p style=\"text-align: justify\"><span id=\"result_box\" lang=\"es\"><span title=\"Nous comptons :&lt;\/p&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;\n&lt;p&gt;\u00a0\u00a0\u00a0\u00a0\">Contamos con:<br \/>\n<\/span><\/span><\/p>\n<ul>\n<li><span id=\"result_box\" lang=\"es\"><span title=\"6 fonctions au-del\u00e0 de 200 points de CC (la plus importante atteint m\u00eame les 355 points), pour un total de 1 513 points de CC.\">6 funciones m\u00e1s all\u00e1 de 200 puntos de CC (la m\u00e1s grande, incluso llega a 355 puntos), para un total de 1 513 puntos de CC. <\/span><span title=\"Donc ces 1% des 539 fonctions tr\u00e8s complexes repr\u00e9sentent 6% de la CC de toutes ces fonctions (1 513 \/ 24 667).&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;\n\u00a0\u00a0\u00a0\u00a0\">As\u00ed que el 1% de las 539 funciones m\u00e1s complejas representan el 6% de la CC de todas estas funciones (1 513 \/ 24 667).<\/span><\/span><\/li>\n<li><span id=\"result_box\" lang=\"es\"><span title=\"30 fonctions entre 100 et 200 points de CC, pour un total de 3 921 points, soit 5.6% des 539 fonctions tr\u00e8s complexes et 15.9% de la CC globale de celles-ci.&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;\n&lt;p&gt;\">30 funciones entre 100 y 200 puntos de CC para un total de 3 921 puntos, o sea 5.6% de las 539 funciones m\u00e1s complejas y 15.9 % de la CC total de ellas.<\/span><\/span><\/li>\n<\/ul>\n<p style=\"text-align: justify\"><span id=\"result_box\" lang=\"es\"><span title=\"Donc en r\u00e9sum\u00e9, 36 des fonctions au-del\u00e0 de 20 points de CC repr\u00e9sentent 21.5% de la complexit\u00e9 globale de ces 539 fonctions.&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;\n\">As\u00ed que en resumen, 36 funciones representan el 22% de la complejidad global de estas 539 funciones.<br \/>\n<\/span><span title=\"Si on regarde au niveau de l'ensemble de l'application, 36, c'est-\u00e0-dire 0.9% des 3936 fonctions existantes repr\u00e9sentent 12.4% de la Complexit\u00e9 Cyclomatique totale (43 846 points).&lt;\/p&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;\n&lt;p&gt;\">En toda la aplicaci\u00f3n, 36, es decir, el 0.9% de las <span id=\"result_box\" lang=\"es\"><span title=\"Si on regarde au niveau de l'ensemble de l'application, 36, c'est-\u00e0-dire 0.9% des 3936 fonctions existantes repr\u00e9sentent 12.4% de la Complexit\u00e9 Cyclomatique totale (43 846 points).&lt;\/p&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;\n&lt;p&gt;\">3 936 <span id=\"result_box\" lang=\"es\"><\/span><\/span><\/span>funciones <span id=\"result_box\" lang=\"es\"><span title=\"Si on regarde au niveau de l'ensemble de l'application, 36, c'est-\u00e0-dire 0.9% des 3936 fonctions existantes repr\u00e9sentent 12.4% de la Complexit\u00e9 Cyclomatique totale (43 846 points).&lt;\/p&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;\n&lt;p&gt;\">existentes <\/span><\/span>representan el 12.4% del total de la Complejidad Ciclom\u00e1tica (43 846 puntos).<br \/>\n<\/span><\/span><\/p>\n<p style=\"text-align: justify\"><span id=\"result_box\" lang=\"es\"><span title=\"Inutile de dire que nous porterons une attention toute particuli\u00e8re \u00e0 ces objets, lorsque nous \u00e9tudierons notre plan d'action, que ce soit pour un transfert de connaissances, un refactoring ou un re-engineering.&lt;\/p&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;&lt;br \/&gt;\n&lt;p&gt;\">Entonces, no falta decir que vamos a prestar especial atenci\u00f3n a estos objetos, para evaluar el coste de nuestras tres opciones: transferencia de conocimiento, refactorizaci\u00f3n o reingenier\u00eda.<br \/>\n<\/span><\/span><\/p>\n<p style=\"text-align: justify\"><span id=\"result_box\" lang=\"es\"><span title=\"Nous continuerons cet article dans le prochain post, en effectuant ce m\u00eame travail sur la complexit\u00e9, au niveau des fichiers cette fois.\">Vamos a seguir este art\u00edculo en el pr\u00f3ximo post mediante el mismo trabajo de medici\u00f3n de complejidad, a nivel de los archivos.<\/span><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Continuamos esta serie sobre el an\u00e1lisis del c\u00f3digo fuente de Word 1.1a, publicado por Microsoft en 1990. En el primer post, hemos visto las m\u00e9tricas cuantitativas de tama\u00f1o, de complejidad, el nivel de comentario y de duplicaci\u00f3n. El segundo post fue dedicado a los diferentes &#8216;Issues\u2019 Blocker, Critical, Major et Minor.<\/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-1157","post","type-post","status-publish","format-standard","hentry","category-calidad-de-aplicaciones"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1157"}],"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=1157"}],"version-history":[{"count":26,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1157\/revisions"}],"predecessor-version":[{"id":1184,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1157\/revisions\/1184"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=1157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=1157"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=1157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}