{"id":76,"date":"2026-01-13T19:25:00","date_gmt":"2026-01-13T18:25:00","guid":{"rendered":"https:\/\/www.matteobononi.it\/blog\/?p=76"},"modified":"2026-10-13T08:41:38","modified_gmt":"2026-10-13T07:41:38","slug":"audit-to-refactor-il-metodo-ai-driven-per-migrare-moduli-legacy-di-prestashop","status":"publish","type":"post","link":"https:\/\/www.matteobononi.it\/blog\/audit-to-refactor-il-metodo-ai-driven-per-migrare-moduli-legacy-di-prestashop\/","title":{"rendered":"Audit-to-Refactor: il metodo AI-driven per migrare moduli legacy di Prestashop"},"content":{"rendered":"<p>Quando hai un modulo vecchio da portare avanti, la prima difficolt\u00e0 pu\u00f2 essere capire cosa stai cercando di conservare. Il codice funziona dentro un sito, incontra dati e configurazioni, si appoggia ad altri moduli. Riscriverlo leggendo solo le funzioni rischia di lasciare fuori proprio quei collegamenti.<\/p>\n<p>Nel <a href=\"https:\/\/www.matteobononi.it\/blog\/dal-caos-allordine-la-mia-esperienza-nel-refactoring-di-un-sito-prestashop-1-6-verso-la-versione-9\/\">racconto sul lavoro con PrestaShop legacy<\/a> descrivo il contesto da cui \u00e8 nato Audit-to-Refactor. Qui provo a spiegare come avevamo organizzato il percorso.<\/p>\n<h2>Che cosa intendo con Audit-to-Refactor<\/h2>\n<p>\u00c8 il nome che ho dato al metodo per analizzare i moduli, conservare le informazioni utili e preparare lo sviluppo insieme agli agenti. L\u2019audit produce un punto di partenza: funzioni, dipendenze, vincoli e dubbi. Il lavoro successivo deve ancora verificarlo.<\/p>\n<p>Nel caso raccontato il metodo accompagnava la riscrittura di moduli verso una versione nuova di PrestaShop. Il refactoring di un componente e la migrazione del sito sono lavori collegati: la disponibilit\u00e0 di un modulo riscritto, da sola, non documenta il completamento della migrazione.<\/p>\n<h2>1. Delimitare il modulo e i suoi collegamenti<\/h2>\n<p>Nel percorso iniziale avevamo isolato i moduli custom in repository dedicati. Questa scelta restringeva il contesto da leggere, ma richiedeva di annotare le dipendenze che attraversavano quel confine.<\/p>\n<p>Prima di decidere che un pezzo va riscritto, conviene capire quali funzioni servono ancora, quali sono gi\u00e0 disponibili altrove e quali vincoli ci portiamo dietro. La riscrittura \u00e8 una scelta da motivare, anche quando l\u2019IA rende pi\u00f9 facile cominciarla.<\/p>\n<h2>2. Conservare l\u2019audit in una forma rileggibile<\/h2>\n<p>I report erano raccolti in <code>audit_update\/<\/code>. La struttura descritta nel lavoro iniziale comprendeva:<\/p>\n<ul>\n<li><code>01_overview.md<\/code>: funzioni e scopo del modulo.<\/li>\n<li><code>02_hooks.md<\/code>: hook usati e comportamento collegato.<\/li>\n<li><code>03_database.md<\/code>: tabelle, dati e relazioni.<\/li>\n<li><code>04_ui.md<\/code>: interfacce e form.<\/li>\n<li><code>05_dependencies.md<\/code>: moduli e componenti esterni.<\/li>\n<li><code>06_notes_migration.md<\/code>: rischi, scelte da valutare e verifiche mancanti.<\/li>\n<\/ul>\n<p>I nomi dei file aiutavano a ritrovare le informazioni. Per un altro progetto possono cambiare. Quello che deve restare comprensibile \u00e8 da dove arriva un\u2019osservazione, quale comportamento descrive e dove manca ancora una risposta.<\/p>\n<h2>3. Rivedere l\u2019analisi prima di usarla<\/h2>\n<p>Gli agenti aiutavano a leggere e a rivedere il materiale. Un secondo passaggio poteva trovare un errore del primo, oppure riprenderne la stessa interpretazione sbagliata. Per questo la revisione deve confrontarsi con codice, documentazione e prove del comportamento.<\/p>\n<p>La <a href=\"https:\/\/devdocs.prestashop-project.org\/9\/modules\/\">documentazione ufficiale dei moduli PrestaShop<\/a> e i <a href=\"https:\/\/devdocs.prestashop-project.org\/9\/basics\/installation\/system-requirements\/\">requisiti della versione di destinazione<\/a> servono anche a decidere quali regole mettere nel progetto. Una lista di tecnologie copiata da un audit vecchio pu\u00f2 essere un altro pezzo da correggere.<\/p>\n<h2>4. Preparare istruzioni e piano di lavoro<\/h2>\n<p>In <code>AGENTS.md<\/code> avevamo distinto i compiti di analisi, architettura, sviluppo e revisione. Le istruzioni indicavano obiettivi e vincoli; il piano organizzava i passaggi da affrontare.<\/p>\n<p>Se nasce un repository nuovo, l\u2019audit e le istruzioni possono entrarci come contesto iniziale. I riferimenti al codice precedente vanno comunque conservati: servono per controllare ci\u00f2 che il nuovo modulo deve fare.<\/p>\n<p>Il contesto va poi aggiornato. Il lavoro che oggi faccio con <a href=\"https:\/\/www.matteobononi.it\/progetti\/repo-forge\/\">Repo Forge<\/a> riguarda proprio questa manutenzione: quando cambia il progetto, le istruzioni e le decisioni devono continuare a descriverlo.<\/p>\n<h2>5. Provare ci\u00f2 che abbiamo costruito<\/h2>\n<p>Audit, istruzioni e piano rendono il lavoro pi\u00f9 facile da seguire. La compatibilit\u00e0 e il funzionamento richiedono ancora verifiche sul modulo e sull\u2019ambiente di destinazione.<\/p>\n<p>Per il singolo intervento sceglierei prove che coprano installazione, percorsi funzionali, lettura e scrittura dei dati, dipendenze e condizioni in cui il modulo pu\u00f2 fallire. Gli esiti devono restare collegati alla versione provata. Non basta una revisione del testo per dichiarare quei controlli eseguiti.<\/p>\n<h2>Due cose da chiarire<\/h2>\n<p><strong>\u00c8 un tool pronto da installare?<\/strong> Qui \u00e8 documentato un metodo di lavoro. Nell\u2019articolo originario avevo ipotizzato una CLI chiamata <code>ps-migrate<\/code>; era una possibile evoluzione, non la descrizione di un tool distribuito.<\/p>\n<p><strong>Il metodo garantisce una migrazione riuscita?<\/strong> Aiuta a organizzare analisi, sviluppo e controlli. Il risultato va dimostrato con le verifiche del progetto, comprese quelle sui passaggi fra moduli e sul sito che li usa.<\/p>\n<p>La <a href=\"https:\/\/www.matteobononi.it\/progetti\/audit-to-refactor\/\">scheda di Audit-to-Refactor<\/a> raccoglie questo percorso. La cosa utile dell\u2019audit \u00e8 poter tornare a una scelta e ritrovare il motivo per cui l\u2019avevamo fatta. Anche quando, rileggendola, ci accorgiamo che va cambiata.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il metodo nato dal lavoro sui moduli PrestaShop: audit, dipendenze, istruzioni e verifiche. Come conservare il contesto e quali risultati richiedono ancora prove.<\/p>\n","protected":false},"author":1,"featured_media":77,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56],"tags":[5,3,6],"class_list":["post-76","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sviluppo","tag-esperienze-personali","tag-intelligenza-artificiale","tag-sviluppo-software"],"_links":{"self":[{"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/posts\/76","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/comments?post=76"}],"version-history":[{"count":2,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/posts\/76\/revisions"}],"predecessor-version":[{"id":207,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/posts\/76\/revisions\/207"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/media\/77"}],"wp:attachment":[{"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/media?parent=76"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/categories?post=76"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/tags?post=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}