{"id":91065,"date":"2020-08-08T01:42:18","date_gmt":"2020-08-07T23:42:18","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii"},"modified":"2020-08-08T01:42:18","modified_gmt":"2020-08-07T23:42:18","slug":"staticheskij-analiz-ot-znakomstva-do-integraczii","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","title":{"rendered":"An\u00e1lisis est\u00e1tico \u2013 desde el conocimiento hasta la integraci\u00f3n","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Cansado de interminables revisiones de c\u00f3digo o depuraciones, a veces te preguntas c\u00f3mo simplificar tu vida. Y tras investigar un poco, o quiz\u00e1s encontrarte por casualidad con la m\u00e1gica frase: \"An\u00e1lisis est\u00e1tico\". Veamos de qu\u00e9 se trata y c\u00f3mo puede interactuar con tu proyecto.<\/p>\n<p><img decoding=\"async\" alt=\"An\u00e1lisis est\u00e1tico \u2013 desde el conocimiento hasta la integraci\u00f3n\" src=\"\/wp-content\/uploads\/2020\/08\/7811b22510bdda6f3f774b8335cbeabe.png\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEn realidad, si est\u00e1s programando en alg\u00fan lenguaje moderno, probablemente hayas pasado tu c\u00f3digo por un analizador est\u00e1tico sin saberlo. Cualquier compilador moderno ofrece, aunque sea un conjunto m\u00ednimo, advertencias sobre problemas potenciales en el c\u00f3digo. Por ejemplo, al compilar c\u00f3digo C++ en Visual Studio, puedes ver lo siguiente:<\/p>\n<p><img decoding=\"async\" alt=\"An\u00e1lisis est\u00e1tico \u2013 desde el conocimiento hasta la integraci\u00f3n\" src=\"\/wp-content\/uploads\/2020\/08\/a267e4e8a57c1a32e508e5e1983c5ff0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEn esta salida, vemos que la variable <i>var<\/i> no se ha utilizado en ninguna parte de la funci\u00f3n. As\u00ed que, de hecho, casi siempre has estado usando un simple analizador est\u00e1tico de c\u00f3digo. Sin embargo, a diferencia de los analizadores profesionales como Coverity, Klocwork o PVS-Studio, las advertencias proporcionadas por el compilador pueden se\u00f1alar solo un peque\u00f1o espectro de problemas.<\/p>\n<p>Si no sabes con certeza qu\u00e9 es el an\u00e1lisis est\u00e1tico y c\u00f3mo implementarlo, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0046\/\">este art\u00edculo<\/a><\/noindex>, para familiarizarte m\u00e1s con esta metodolog\u00eda. <\/p>\n<h2>\u00bfPara qu\u00e9 sirve el an\u00e1lisis est\u00e1tico?<\/h2>\n<p>\nEn pocas palabras: agiliza y simplifica. <\/p>\n<p>El an\u00e1lisis est\u00e1tico permite encontrar una gran cantidad de problemas en el c\u00f3digo: desde un uso incorrecto de construcciones del lenguaje hasta errores tipogr\u00e1ficos. Por ejemplo, en lugar de <\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.z;<\/code><\/pre>\n<p>\nhas escrito el siguiente c\u00f3digo:<\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.x;<\/code><\/pre>\n<p>\nComo puedes ver, hay un error tipogr\u00e1fico en la \u00faltima l\u00ednea. Por ejemplo, PVS-Studio emite la siguiente advertencia:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v537\/\">V537<\/a><\/noindex> Considera revisar la correcci\u00f3n del uso del \u00edtem 'y'.<\/p>\n<p>Si deseas probar este error manualmente, prueba el ejemplo preparado en Compiler Explorer: *<noindex><a rel=\"nofollow\" href=\"https:\/\/godbolt.org\/z\/cd4WK7\">clic<\/a><\/noindex>*.<\/p>\n<p>Y como bien entiendes, no siempre se puede prestar atenci\u00f3n a estos segmentos de c\u00f3digo de inmediato, y esto puede hacer que te quedes atascado en la depuraci\u00f3n por mucho tiempo, sin comprender por qu\u00e9 todo funciona de manera tan extra\u00f1a. <\/p>\n<p>Sin embargo, este es un error evidente. \u00bfY si el desarrollador escribi\u00f3 un c\u00f3digo sub\u00f3ptimo porque olvid\u00f3 alg\u00fan detalle del lenguaje? O incluso cometi\u00f3 un comportamiento <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0066\/\">indefinido en el c\u00f3digo.<\/a><\/noindex>? \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043e\u0431\u044b\u0434\u0435\u043d\u043d\u044b \u0438 \u043b\u044c\u0432\u0438\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u0430\u0434\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438, \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438\u043b\u0438 undefined behavior.<\/p>\n<p>Fue precisamente para estas situaciones que naci\u00f3 el an\u00e1lisis est\u00e1tico. Es una herramienta para los desarrolladores que les indicar\u00e1 diversos problemas en el c\u00f3digo y explicar\u00e1 en la documentaci\u00f3n por qu\u00e9 no se debe escribir de esa manera, a qu\u00e9 puede conducir y c\u00f3mo solucionarlo. Aqu\u00ed hay un ejemplo de c\u00f3mo puede lucir: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v702\/\">clic<\/a><\/noindex>*.<\/p>\n<p>M\u00e1s errores interesantes que el analizador puede descubrir se pueden encontrar en los art\u00edculos:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0700\/\">Las 10 principales errores en proyectos de C++ en 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0698\/\">Las 10 principales errores en proyectos de C# en 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0699\/\">Las 10 principales errores en proyectos de Java en 2019<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nAhora, despu\u00e9s de leer este material y de convencerse de la utilidad del an\u00e1lisis est\u00e1tico, puede que desee probarlo en acci\u00f3n. Pero, \u00bfpor d\u00f3nde empezar? \u00bfC\u00f3mo integrar una nueva herramienta en el proyecto actual? \u00bfY c\u00f3mo familiarizar al equipo con ella? Encontrar\u00e1 respuestas a estas preguntas a continuaci\u00f3n.<\/p>\n<p><b>Nota.<\/b> El an\u00e1lisis est\u00e1tico no reemplaza ni anula una herramienta tan \u00fatil como las revisiones de c\u00f3digo. Complementa este proceso, ayudando a notar y corregir errores tipogr\u00e1ficos, imprecisiones y construcciones peligrosas de antemano. Es mucho m\u00e1s productivo concentrarse en los algoritmos y la claridad del c\u00f3digo durante las revisiones de c\u00f3digo, en lugar de buscar un par\u00e9ntesis mal colocado o <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0509\/\">leer funciones de comparaci\u00f3n aburridas<\/a><\/noindex>.<\/p>\n<h2>0. Familiarizaci\u00f3n con la herramienta<\/h2>\n<p>\nTodo comienza con una versi\u00f3n de prueba. De hecho, es dif\u00edcil decidir implementar algo en el proceso de desarrollo si nunca se ha visto la herramienta en acci\u00f3n. Por lo tanto, lo primero que debe hacer es descargar <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-download\/?promo=mscas\">una versi\u00f3n de prueba<\/a><\/noindex>.<\/p>\n<p><b>Lo que aprender\u00e1 en esta etapa:<\/b><\/p>\n<ul>\n<li>Cu\u00e1les son las formas de interactuar con el analizador;<\/li>\n<li>Si el analizador es compatible con su entorno de desarrollo;<\/li>\n<li>Qu\u00e9 problemas existen actualmente en sus proyectos.<\/li>\n<\/ul>\n<p>\nDespu\u00e9s de haber instalado todo lo necesario, lo primero que debe hacer es ejecutar un an\u00e1lisis de todo el proyecto (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0635\/\">Windows<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">Linux<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">macOS<\/a><\/noindex>). En el caso de PVS-Studio en Visual Studio, ver\u00e1 una imagen similar (clickeable):<\/p>\n<p><img decoding=\"async\" alt=\"An\u00e1lisis est\u00e1tico \u2013 desde el conocimiento hasta la integraci\u00f3n\" src=\"\/wp-content\/uploads\/2020\/08\/865b2dfa10661e4999238cdccf8860dc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEl hecho es que, normalmente, los analizadores est\u00e1ticos emiten una gran cantidad de advertencias en proyectos con una gran base de c\u00f3digo. No es necesario corregirlas todas, ya que su proyecto ya est\u00e1 funcionando, lo que significa que estos problemas no son cr\u00edticos. Sin embargo, usted <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0633\/\">puede echar un vistazo a las advertencias m\u00e1s interesantes<\/a><\/noindex> y corregirlos si es necesario. Para ello, es necesario filtrar la salida y dejar solo los mensajes m\u00e1s fiables. En el plugin PVS-Studio para Visual Studio, esto se hace filtrando por niveles y categor\u00edas de errores. Para una salida m\u00e1s precisa, mantenga activadas solo <i>Alto<\/i> y <i>General<\/i> (tambi\u00e9n es clicable):<\/p>\n<p><img decoding=\"async\" alt=\"An\u00e1lisis est\u00e1tico \u2013 desde el conocimiento hasta la integraci\u00f3n\" src=\"\/wp-content\/uploads\/2020\/08\/400b90713f67b531e4ed513ea9d340a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDe hecho, revisar 178 advertencias es considerablemente m\u00e1s f\u00e1cil que varias miles...<\/p>\n<p>En las pesta\u00f1as <i>Medio<\/i> y <i>Bajo<\/i> frecuentemente aparecen buenas advertencias, sin embargo, en estas categor\u00edas se incluyen diagn\u00f3sticos que tienen menor precisi\u00f3n (fiabilidad). Puede ver m\u00e1s sobre los niveles de advertencias y las opciones de trabajo en Windows aqu\u00ed: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\">clic<\/a><\/noindex>*.<\/p>\n<p>Despu\u00e9s de revisar con \u00e9xito los errores m\u00e1s interesantes (y corregirlos exitosamente), deber\u00edas <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0032\/\">suprimir las advertencias restantes<\/a><\/noindex>. Esto es necesario para que las nuevas advertencias no se pierdan entre las antiguas. Adem\u00e1s, el analizador est\u00e1tico es una herramienta de ayuda para el programador, no una lista de errores. \ud83d\ude42<\/p>\n<h2>1. Automatizaci\u00f3n<\/h2>\n<p>\nDespu\u00e9s de familiarizarse, llega el momento de configurar los plugins e integrarse en CI. Esto es necesario hacerlo antes de que los programadores comiencen a usar el analizador est\u00e1tico. La cuesti\u00f3n es que el programador puede olvidar activar el an\u00e1lisis o, incluso, no querer hacerlo. Para ello, se necesita realizar una verificaci\u00f3n final de todo, para que el c\u00f3digo no verificado no pueda entrar en la rama principal de desarrollo.<\/p>\n<p><b>Lo que aprender\u00e1s en esta etapa:<\/b><\/p>\n<ul>\n<li>Qu\u00e9 opciones de automatizaci\u00f3n ofrece la herramienta;<\/li>\n<li>Si el analizador es compatible con tu sistema de construcci\u00f3n.<\/li>\n<\/ul>\n<p>\nDado que no existe documentaci\u00f3n perfecta, a veces es necesario escribir en <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/about-feedback\/\">soporte<\/a><\/noindex>. Es normal, y estamos encantados de ayudarte. \ud83d\ude42<\/p>\n<p>Y ahora, pasemos a los servicios de integraci\u00f3n continua (CI). Cualquier analizador se puede implementar en ellos sin problemas serios. Para ello, es necesario crear una etapa separada en el pipeline, que normalmente se encuentra despu\u00e9s de la construcci\u00f3n y las pruebas unitarias. Esto se hace mediante varias utilidades de consola. Por ejemplo, PVS-Studio proporciona las siguientes utilidades:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\">PVS-Studio_Cmd.exe<\/a><\/noindex> (an\u00e1lisis de soluciones, proyectos de C#, C++ en Windows)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0031\/\">CLMonitor.exe<\/a><\/noindex> (monitoreo de la compilaci\u00f3n)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">pvs-studio-analyzer<\/a><\/noindex> (an\u00e1lisis de proyectos de C++ en Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\/\">pvs-studio-dotnet<\/a><\/noindex> (an\u00e1lisis de soluciones, proyectos de C# en Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">pvs-studio.jar<\/a><\/noindex> (an\u00e1lisis de proyectos de Java)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">PlogConverter<\/a><\/noindex> (convertidor de archivos de informe)<\/li>\n<\/ul>\n<p>\nPara integrar el an\u00e1lisis en CI, hay que hacer tres cosas:<\/p>\n<ul>\n<li>Instalar el analizador;<\/li>\n<li>Ejecutar el an\u00e1lisis;<\/li>\n<li>Entregar resultados.<\/li>\n<\/ul>\n<p>\nPor ejemplo, para instalar PVS-Studio en Linux (basado en Debian) se deben ejecutar los siguientes comandos:<\/p>\n<pre><code class=\"bash\">wget -q -O - https:\/\/files.viva64.com\/etc\/pubkey.txt \n    | sudo apt-key add -\nsudo wget -O \/etc\/apt\/sources.list.d\/viva64.list \n  https:\/\/files.viva64.com\/etc\/viva64.list\n  \nsudo apt-get update -qq\nsudo apt-get install -qq pvs-studio<\/code><\/pre>\n<p>\nEn sistemas operativos Windows no es posible instalar el analizador desde el gestor de paquetes, sin embargo, se puede implementar el analizador desde la l\u00ednea de comandos:<\/p>\n<pre><code class=\"powershell\">PVS-Studio_setup.exe \/verysilent \/suppressmsgboxes \n\/norestart \/nocloseapplications<\/code><\/pre>\n<p>\nPuede leer m\u00e1s sobre la implementaci\u00f3n de PVS-Studio en sistemas operativos Windows *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">aqu\u00ed<\/a><\/noindex>*.<\/p>\n<p>Despu\u00e9s de la instalaci\u00f3n, es necesario iniciar el an\u00e1lisis. Sin embargo, se recomienda hacerlo solo despu\u00e9s de que se haya completado la compilaci\u00f3n y las pruebas. Esto se debe a que el an\u00e1lisis est\u00e1tico generalmente requiere el doble de tiempo que la compilaci\u00f3n.<\/p>\n<p>Dado que la forma de iniciar depende de la plataforma y de las caracter\u00edsticas del proyecto, mostrar\u00e9 un ejemplo para C++ (Linux):<\/p>\n<pre><code class=\"bash\">pvs-studio-analyzer analyze -j8 \n                            -o PVS-Studio.log\nplog-converter -t errorfile PVS-Studio.log --cerr -w<\/code><\/pre>\n<p>\nEl primer comando realizar\u00e1 el an\u00e1lisis, y el segundo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">convertir\u00e1<\/a><\/noindex>el informe a formato de texto, lo mostrar\u00e1 en pantalla y devolver\u00e1 un c\u00f3digo diferente de 0 en caso de advertencias. Este mecanismo es conveniente para bloquear la construcci\u00f3n si hay mensajes de error. Sin embargo, siempre puede eliminar la bandera <i>-w<\/i> y no bloquear la construcci\u00f3n que contiene advertencias.<\/p>\n<p><b>Nota.<\/b> El formato de texto es inc\u00f3modo. Se proporciona solo como ejemplo. Preste atenci\u00f3n a un formato de informe m\u00e1s interesante: FullHtml. Permite navegar por el c\u00f3digo.<\/p>\n<p>Puedes leer m\u00e1s sobre c\u00f3mo configurar el an\u00e1lisis en CI en el art\u00edculo \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0005\">PVS-Studio y Continuous Integration<\/a><\/noindex>\" (Windows) o \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0661\/\">C\u00f3mo configurar PVS-Studio en Travis CI<\/a><\/noindex>\" (Linux).<\/p>\n<p>Bien, has configurado el funcionamiento del analizador en el servidor de compilaci\u00f3n. Ahora, si alguien ha subido c\u00f3digo sin verificar, la etapa de verificaci\u00f3n fallar\u00e1 y podr\u00e1s detectar el problema, aunque no es muy conveniente, ya que es m\u00e1s eficaz verificar el proyecto antes de que se produzca la fusi\u00f3n de ramas, durante la fase de la solicitud de extracci\u00f3n.<\/p>\n<p>En general, la configuraci\u00f3n del an\u00e1lisis de solicitudes de extracci\u00f3n no difiere mucho de la ejecuci\u00f3n normal del an\u00e1lisis en CI, a excepci\u00f3n de la necesidad de obtener una lista de archivos modificados. Normalmente, puedes obtenerlos solicitando la diferencia entre ramas utilizando git:<\/p>\n<pre><code class=\"bash\">git diff --name-only HEAD origin\/$MERGE_BASE &gt; .pvs-pr.list<\/code><\/pre>\n<p>\nAhora es necesario pasar esta lista de archivos al analizador. Por ejemplo, en PVS-Studio esto se implementa mediante un flag. <i>-S<\/i>:<\/p>\n<pre><code class=\"bash\">pvs-studio-analyzer analyze -j8 \n                            -o PVS-Studio.log \n                            -S .pvs-pr.list<\/code><\/pre>\n<p>\nPuedes aprender m\u00e1s sobre el an\u00e1lisis de solicitudes de extracci\u00f3n *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0679\/\">aqu\u00ed<\/a><\/noindex>*. Incluso si tu CI no est\u00e1 en la lista de servicios mencionados en el art\u00edculo, te ser\u00e1 \u00fatil la secci\u00f3n general dedicada a la teor\u00eda de este tipo de an\u00e1lisis.<\/p>\n<p>Al configurar el an\u00e1lisis de solicitudes de extracci\u00f3n, podr\u00e1s bloquear los commits que contengan advertencias, creando as\u00ed un l\u00edmite que el c\u00f3digo sin verificar no podr\u00e1 cruzar.<\/p>\n<p>Todo esto es, sin duda, bueno, pero me gustar\u00eda tener la posibilidad de ver todas las advertencias en un solo lugar. No solo del analizador est\u00e1tico, sino tambi\u00e9n de pruebas unitarias o de un analizador din\u00e1mico. Para eso existen varios servicios y plugins. PVS-Studio, por ejemplo, tiene <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0037\/\">un plugin para la integraci\u00f3n en SonarQube.<\/a><\/noindex>.<\/p>\n<h2>2. Integraci\u00f3n en las m\u00e1quinas de los desarrolladores.<\/h2>\n<p>\nAhora ha llegado el momento de instalar y configurar el analizador para su uso diario en el desarrollo. Hasta este punto ya te has familiarizado con la mayor\u00eda de los m\u00e9todos de trabajo, por lo que esta puede considerarse la parte m\u00e1s f\u00e1cil.<\/p>\n<p>Como la opci\u00f3n m\u00e1s sencilla, los desarrolladores pueden instalar el analizador necesario por su cuenta. Sin embargo, esto tomar\u00e1 mucho tiempo y los desviar\u00e1 del desarrollo, por lo que puedes automatizar este proceso utilizando un instalador y los flags necesarios. Para PVS-Studio hay varios <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">flags para la instalaci\u00f3n automatizada.<\/a><\/noindex>. Sin embargo, siempre hay gestores de paquetes, como Chocolatey (Windows), Homebrew (macOS) o decenas de opciones para Linux.<\/p>\n<p>Luego ser\u00e1 necesario instalar los plugins requeridos, por ejemplo, para <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0635\/\">Visual Studio.<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/plugins.jetbrains.com\/plugin\/12263-pvs-studio-for-idea-and-android-studio\/\">IDEA.<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0052\/\">Rider.<\/a><\/noindex> etc.<\/p>\n<h2>3. Uso diario.<\/h2>\n<p>\nEn esta etapa es hora de mencionar algunas formas de acelerar el trabajo del analizador en su uso diario. Un an\u00e1lisis completo de todo el proyecto toma mucho tiempo, pero \u00bfcon qu\u00e9 frecuencia cambiamos el c\u00f3digo en todo el proyecto de una vez? Es poco probable que exista una refactorizaci\u00f3n tan amplia que afecte de inmediato a toda la base de c\u00f3digo. La cantidad de archivos modificados a la vez rara vez supera la docena, por lo que es sensato analizarlos. Para esta situaci\u00f3n existe <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0024\/\">el modo de an\u00e1lisis incremental.<\/a><\/noindex>. No se asusten, no es otra herramienta m\u00e1s. Es un modo especial que permite analizar solo los archivos modificados y sus dependencias, y esto ocurre autom\u00e1ticamente despu\u00e9s de la compilaci\u00f3n si trabajas en un IDE con el complemento instalado. <\/p>\n<p>En caso de que el analizador detecte problemas en el c\u00f3digo recientemente modificado, lo comunicar\u00e1 por s\u00ed mismo. Por ejemplo, PVS-Studio te lo har\u00e1 saber mediante una notificaci\u00f3n:<\/p>\n<p><img decoding=\"async\" alt=\"An\u00e1lisis est\u00e1tico \u2013 desde el conocimiento hasta la integraci\u00f3n\" src=\"\/wp-content\/uploads\/2020\/08\/20456a6652f0bd4f62d9aea5f1dda5cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNo es suficiente con decirles a los desarrolladores que usen la herramienta. Necesitamos de alguna manera contarles qu\u00e9 es y c\u00f3mo funciona. Aqu\u00ed, por ejemplo, hay art\u00edculos sobre c\u00f3mo empezar r\u00e1pidamente con PVS-Studio, aunque tutoriales similares los puedes encontrar para cualquier herramienta que prefieras:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\/\">C\u00f3mo ejecutar PVS-Studio en Windows (C, C++, C#)<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">C\u00f3mo ejecutar PVS-Studio en Linux y macOS (C, C++)<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">C\u00f3mo ejecutar PVS-Studio Java<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nArt\u00edculos como estos proporcionan toda la informaci\u00f3n necesaria para el uso cotidiano y no toman mucho tiempo. \ud83d\ude42<\/p>\n<p>Incluso en la etapa de familiarizaci\u00f3n con la herramienta, suprimimos muchas advertencias durante una de las primeras ejecuciones. Lamentablemente, los analizadores est\u00e1ticos no son perfectos, por lo que de vez en cuando emiten falsas alarmas. Suprimirlas suele ser f\u00e1cil, por ejemplo, en el complemento PVS-Studio para Visual Studio, solo debes presionar un bot\u00f3n:<\/p>\n<p><img decoding=\"async\" alt=\"An\u00e1lisis est\u00e1tico \u2013 desde el conocimiento hasta la integraci\u00f3n\" src=\"\/wp-content\/uploads\/2020\/08\/ed5382f468d21b7e711caba73b439fda.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSin embargo, no solo puedes suprimirlas. Por ejemplo, puedes informar al soporte sobre la existencia de un problema. Si es posible corregir la falsa alarma, en futuras actualizaciones puedes notar que cada vez hay menos y menos falsas alarmas espec\u00edficas de tu base de c\u00f3digo.<\/p>\n<h2>Despu\u00e9s de la integraci\u00f3n<\/h2>\n<p>\nHemos completado todas las etapas de la integraci\u00f3n del an\u00e1lisis est\u00e1tico en el proceso de desarrollo. A pesar de la importancia de configurar tales herramientas en CI, el lugar m\u00e1s importante para la ejecuci\u00f3n es precisamente la computadora del desarrollador. Porque el analizador est\u00e1tico no es un juez que te dice desde lejos que el c\u00f3digo no sirve. Por el contrario, es un asistente que te ayuda si est\u00e1s cansado y te recuerda si has olvidado algo.<\/p>\n<p>La verdad es que, sin el uso regular, el an\u00e1lisis est\u00e1tico dif\u00edcilmente simplificar\u00e1 significativamente el desarrollo. La principal utilidad para el desarrollador radica no tanto en encontrar secciones de c\u00f3digo complejas y discutibles, sino en detectarlas temprano. Acepta que descubrir un problema cuando los cambios ya est\u00e1n en prueba no solo es desagradable, sino tambi\u00e9n muy prolongado. Sin embargo, el an\u00e1lisis est\u00e1tico, cuando se utiliza de manera regular, revisa cada cambio directamente en tu computadora y te informa sobre lugares sospechosos mientras trabajas en el c\u00f3digo.<\/p>\n<p>Y si t\u00fa o tus colegas a\u00fan no est\u00e1n seguros sobre si implementar el analizador, les sugiero que ahora lean el art\u00edculo \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0687\/\">Razones para implementar un analizador est\u00e1tico de c\u00f3digo PVS-Studio en el proceso de desarrollo<\/a><\/noindex>\". En \u00e9l se abordan las preocupaciones comunes de los desarrolladores acerca de que el an\u00e1lisis est\u00e1tico les robar\u00e1 tiempo y dem\u00e1s.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\"><img decoding=\"async\" alt=\"An\u00e1lisis est\u00e1tico \u2013 desde el conocimiento hasta la integraci\u00f3n\" src=\"\/wp-content\/uploads\/2020\/08\/6372d668354f708cb0e08df27bb39bdd.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Si desea compartir este art\u00edculo con una audiencia de habla inglesa, le pido que utilice el enlace a la traducci\u00f3n: Maxim Zvyagintsev. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\">An\u00e1lisis Est\u00e1tico: Desde el Comienzo hasta la Integraci\u00f3n<\/a><\/noindex>.<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/514124\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0423\u0441\u0442\u0430\u0432 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u043e\u0433\u043e code review \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0432, \u043d\u0443 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435: &quot;\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437&quot;. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438 \u043a\u0430\u043a \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0432\u0430\u0448\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u043b\u0438\u0431\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0442\u043e\u0433\u0434\u0430, \u0434\u0430\u0436\u0435 \u043d\u0435 \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u044f\u0441\u044c \u043e\u0431 \u044d\u0442\u043e\u043c, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91066,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91065","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0423\u0441\u0442\u0430\u0432 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u043e\u0433\u043e code review \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0432, \u043d\u0443 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435: &quot;\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437&quot;.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u2013 \u043e\u0442 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0434\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0423\u0441\u0442\u0430\u0432 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u043e\u0433\u043e code review \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0432, \u043d\u0443 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435: &quot;\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437&quot;.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-07T23:42:18+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-07T23:42:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47An\u00e1lisis Est\u00e1tico \u2013 desde el conocimiento hasta la integraci\u00f3n | ProHoster","description":"Cansado de las interminables revisiones de c\u00f3digo o depuraciones, a veces piensas en c\u00f3mo simplificar tu vida. Y despu\u00e9s de buscar un poco, o casualmente encontrarte, puedes ver la m\u00e1gica frase: \"An\u00e1lisis Est\u00e1tico\".","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u2013 \u043e\u0442 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0434\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 | ProHoster","og:description":"\u0423\u0441\u0442\u0430\u0432 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u043e\u0433\u043e code review \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0432, \u043d\u0443 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435: &quot;\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437&quot;.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-07T23:42:18+00:00","article:modified_time":"2020-08-07T23:42:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91065","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:35:24","updated":"2022-10-01 20:50:02","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/91065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=91065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/91065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/91066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=91065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=91065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=91065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}