Qual è la differenza tra debugging e antibugging?

3

I termini debug e antibugging sembrano essere ampiamente usati per riferirsi a strumenti, misure e schemi di progettazione sbarazzarsi di bug.

Dopo aver letto il Paradigmi di programmazione di Intelligenza Artificiale: Case Studies in LISP comune Non ero sicuro della differenza tra questi termini:

It is a good idea to include antibugging checks in your code in addition to doing normal debugging. Antibugging code checks for errors and possibly take corrective actions.

E inoltre:

It may seem like wasted effort to spend time writing assertions that (if all goes well) will never be used. However, for all but the perfect programmer, bugs do occur, and the time spent antibugging will more than pay for itself in saving debugging time. Whenever you develop a complex data structure, such as some kind of data base, it is a good idea to develop a corresponding consistency checker. A consistency checker is a function that will look over a data structure and test for all possible errors. When a new error is discovered, a check for it should be incorporated into the consistency checker. Calling the consistency checker is the fastest way to help isolate bugs in the data structure. In addition, it is a good idea to keep a list of difficult test cases on hand. That way, when the program is changed, it will be easy to see if the change reintroduces a bug that had been previously removed. This is called regression testing, and Waters (1991) presents an interesting tool for maintaining a suite of regression tests.

E qui è un altro esempio di una conferenza intitolata "Linguaggio di programmazione Paradigms "presso l'Università di San Francisco (Chris Brooks, 2004). Lì, come @ Max3k ha sottolineato in questo post,

it seems that "antibugging" is a term that covers many good practices and/or the resulting code. It mentions defensive programming, throwing and catching exceptions, named exceptions, (unit) testing. Also according to the source just using a strongly typed langue over a dynamic one, would mean that you are "antibugging".

Ancora un altro riferimento, molte grazie a @CandiedOrange:

Antibugging means "defect avoidance", as opposed to debugging, which means "defect removal".

C through design - George E. Defenbaugh, Richard Smedley Franklin, Beedle, 1988 p16

Quindi ho cercato su Google per avere una risposta precisa e obiettiva ma non sono riuscito a ottenere una risposta autorevole, né ho molta esperienza su questo (come fino ad ora ho fatto solo progetti "domestici").

Puoi dirmi la differenza tra i due termini per distinguerli e usarli correttamente?

DISCLAIMER Antibugging sembra non essere ancora accettato globalmente come pensavo. Ma ci sono prove che alcune persone famose usano entrambi i termini, sia nel mondo accademico che in quello industriale. Penso che questo giustifichi la domanda e mostri che questo non è basato sull'opinione pubblica.

    
posta fr_andres 25.09.2016 - 02:13
fonte

3 risposte

3

Il termine

Il termine antibugging o anti-bugging non è ampiamente utilizzato: circa 2000 occorrenze di Google (parte di esse relative ai dispositivi per la rimozione dello spyware!) rispetto a 33 milioni per debug !

È stato utilizzato per la prima volta da Ed Yourdon , il pioniere dell'ingegneria del software, nel suo libro "Tecniche di struttura del programma e design " pubblicate nel 1975.

È strano che non abbia guadagnato la popolarità di altre idee promosse da Yourdon, come analisi strutturata e design strutturato o modellazione del flusso di dati Yourdon / DeMarco .

Ma malgrado il suo uso raro, il termine guadagna per essere conosciuto.

Debug

L'obiettivo del debug è catturare e correggere gli errori, soprattutto in una fase iniziale, e fornire strumenti di supporto individuazione dei bug, dovrebbero accadere più tardi nella produzione. Il debug viene eseguito principalmente in relazione alla codifica. Ad esempio:

  • verifiche di asserzione di pre e post-condizioni all'inizio o alla fine delle funzioni (se falliscono, l'esecuzione si interrompe),
  • logging per essere in grado di analizzare la causa dei bug se accadono,
  • test approfonditi per trovare potenziali bug,
  • attività guidata da un caffè durante la notte fino all'esaurimento o al bug sterminato.

Tranne qualche codice di uso generale per supportare il debug (in particolare la registrazione), il debugging non influenzerebbe direttamente la struttura del software IMO.

Antibugging

L'obiettivo dell'antibugging è impedire che si verifichino errori. Questa attività è stata eseguita durante tutto il corso processo di sviluppo. Ad esempio:

  • design che previene condizioni di bug
  • codifica difensiva che impedisce la propagazione dell'errore e che assicura che il caso speciale sia gestito correttamente
  • correzione automatica degli errori o strategie di recupero (ad esempio rilancio di un servizio che è stato interrotto ma necessario)

Questo tipo di prevenzione dovrebbe essere intrapreso dall'inizio dello sviluppo e dovrebbe essere radicato nella struttura e nella struttura del software (ad esempio progettazione dell'API, gestione delle eccezioni). Potrebbe quindi influenzare l'architettura del software. E include anche la programmazione difensiva tradizionale, per garantire l'offerta di un percorso alternativo di esecuzione per gestire con garbo le condizioni di errore.

Quindi il debug e l'antibugging hanno confini chiari.

Ma dove finisce?

IMO è molto più difficile distinguere le pratiche di progettazione di software anti-contraffazione e audio. Ad esempio, è incapsulamento antibugging, solo perché previene i bug attraverso la riduzione degli effetti collaterali inaspettati? È uno schema di progettazione di stato antibugging, perché impedisce che si verifichi un comportamento che non è in linea con quello di un oggetto stato? ... e così via.

In pratica quindi mi concentrerei sulla prevenzione di bug concreti e probabili - situazione di errore che potrebbe accadere--, invece di visualizzarla in modo troppo ampio per evitare bug di codice che non verranno mai scritti, mantenendo i principi del sound design come qualcosa di distinto dall'antivegetativo.

Ulteriori letture:

risposta data 28.09.2016 - 15:00
fonte
13

In primo luogo, l'antibugging non è un termine comunemente usato, poche persone lo usano, ma non sarà generalmente riconosciuto.

Per quelle persone che lo usano, intendono pratiche per evitare di scrivere bug in primo luogo piuttosto che rimuovere bug dopo che sono stati trovati.

    
risposta data 25.09.2016 - 02:43
fonte
5

Il debugging è l'atto di correggere i difetti nel codice del software.

Antibugging "controlla la presenza di eventuali errori ed eventualmente intraprende azioni correttive"
Paradigmi di programmazione dell'intelligenza artificiale: Antibugging s3.14 p87

Sì, sembra un po 'lo stesso, ma significa anche questo:

Ciòchestannodescrivendoèciòcheèdiventatonotocomeconvalida.Controlliamochesiamoinunostatovalidoprimadiandareefarequalcosaperdiffonderelanostraconfusioneingiro.Dovehannouncerror(errorecontinuabile)altrilancianoecatturanoeccezioni.

Quindino,questononèaffattoildebug.Ildebugstacorreggendoidifettinelcodice.Idifettidelcodiceprovengonodaiprogrammatori.QuestoAnti-buggingstacorreggendoidifettinellostato.Èpossibileottenereunostatonegativodaqualsiasiinput:utente,file,Internet,queiprogrammatoridinuovo...

Googlebooksmihaaiutatoatrovareunadefinizionepiùformale:

Antibuggingmeans"defect avoidance", as opposed to debugging, which means "defect removal".

C through design - George E. Defenbaugh, Richard Smedley Franklin, Beedle, 1988 p16

A me piacciono le cose che fai per impedire a qualcuno di archiviare un ticket di problemi, non cose che fai dopo che fanno.

    
risposta data 25.09.2016 - 05:53
fonte