Sono rimasto perplesso ultimamente da un'idea intrigante.
Mi chiedo se esiste un metodo (noto) per estrarre il codice sorgente eseguito da un grande algoritmo complesso. Proverò ad elaborare questa domanda:
Scenario: esiste questo complesso algoritmo in cui una grande quantità di persone ha lavorato per molti anni. L'algoritmo crea le descrizioni delle misure per un dispositivo di misurazione complesso.
L'input per l'algoritmo è un ampio set di parametri di input, chiamiamola la ricetta. Sulla base di questa ricetta, l'algoritmo viene eseguito e la ricetta determina quali funzioni, cicli e costruzioni if-then-else vengono seguite all'interno dell'algoritmo. Quando l'algoritmo è finito, un insieme di parametri di misurazione calcolati formerà l'output. E con questi parametri di misurazione dell'uscita il dispositivo può eseguire la sua misura.
Ora, c'è un problema. Poiché l'algoritmo è diventato così complesso e ampio nel tempo, è molto difficile trovare la propria strada nell'algoritmo quando si desidera aggiungere nuove funzionalità per le ricette. Fondamentalmente una persona vuole modificare solo le funzioni ei blocchi di codice che sono interessati dalla sua ricetta, ma deve scavare nell'intero algoritmo e analizzare il codice per vedere quale codice è rilevante per la sua ricetta, e solo dopo quello elaborare nuove funzionalità può essere aggiunto nel posto giusto. Anche per semplici aggiunte, le persone tendono a perdersi nell'enorme quantità di codice complesso.
Soluzione: estrai il percorso del codice attivo? Ho fatto un brainstorming su questo problema, e penso che sarebbe bello se ci fosse un modo per elaborare l'algoritmo con i parametri di input (la ricetta) e per estrarre solo le funzioni attive e i blocchi di codice in un nuovo set di file sorgente o struttura del codice. In realtà sto parlando di estrarre codice sorgente reale qui.
Quando il codice attivo viene estratto e isolato, questo si tradurrà in un sottoinsieme di codice sorgente che è solo una frazione della struttura del codice sorgente originale, e sarà molto più facile per la persona analizzare il codice, capire il codice e apportare le sue modifiche. Alla fine le modifiche potrebbero essere unite al codice sorgente originale dell'algoritmo, o forse il codice sorgente estratto modificato può anche essere eseguito da solo, come se fosse una versione "lite" dell'algoritmo originale.
Informazioni aggiuntive: stiamo parlando di un algoritmo con codice C e C ++, circa 200 file e forse 100K linee di codice. Il codice è compilato e compilato con un ambiente di sviluppo personalizzato basato su Visual Studio.
Quindi ...: non so davvero se questa idea sia semplicemente ingenua e stupida, o se sia fattibile con la giusta quantità di ingegneria del software. Posso immaginare che ci siano state situazioni più simili nel mondo dell'ingegneria del software, ma non lo so.
Ho una certa esperienza con l'ingegneria del software, ma sicuramente non al livello di progettazione di sistemi complessi e di grandi dimensioni.
Apprezzerei qualsiasi tipo di risposta, suggerimento o commento.
Grazie in anticipo!