Misurare / imporre meccanicamente l'uso decrescente di un'API obsoleta nel tempo?

1

Uno degli ultimi progetti a cui ho lavorato aveva molti metodi deprecati. Esistono buone strategie per assicurarsi che l'uso di questi metodi diminuisca effettivamente nel tempo? L'esempio che segue è specifico per Python, ma questa domanda si applica davvero a tutte le lingue.

Ho letto un po 'in passato sull'adozione di politiche informali che si applicano a ogni commit come "il numero di linee non coperte dalla suite di test non può crescere" o "la percentuale di copertura non deve diminuire" come mezzi per migliorare la copertura del test che non comporta la perdita di tutto. Questo è anche l'angolo di cui mi sto avvicinando. Qual è un criterio misurabile che può essere visto da qualcuno per determinare se il commit è educato o meno.

Ecco come potrebbe apparire un esempio. Supponiamo che io abbia un RequestTask che aveva un group_id , ma non lo ha più. Il metodo validate_group_id è ora deprecato e chiama solo validate_request_id . La variabile di istanza group_id è stata sostituita con una proprietà. Ecco un file scheletro.

class RequestTask:
    ...
    def validate_request_id(self):
        ...

    # deprecated method
    def validate_group_id(self):
        return self.validate_request_id()

    @property
    def group_id(self):
        return None

Supponiamo inoltre che non possiamo semplicemente modificare tutto il codice che chiama i metodi deprecati in questo momento, a causa di vincoli di tempo.

Voglio assicurarmi che il codice che chiama questi metodi deprecati alla fine venga modificato.

  • Quali sono alcune buone strategie per tracciare se l'uso di metodi e API deprecati sta effettivamente diminuendo nel tempo?
  • Se necessario, qual è un buon modo per applicare una norma che porterà al non utilizzo dei metodi deprecati?
  • È anche una buona idea provare qualcosa del genere?
posta Gregory Nisbet 05.04.2017 - 02:32
fonte

1 risposta

3

Il principio sarebbe lo stesso in questo e il caso di copertura del test. Per implementarlo si dovrebbe fare qualcosa di simile durante le build, sia staticamente che dinamicamente, compilando un elenco di tutte le funzioni / metodi chiamando il metodo deprecato e salvando ot. Se quell'elenco ottiene sempre un nuovo elemento, fallisce la build

Per tracciare le chiamate puoi farlo analizzando il codice sorgente / i binari (ad esempio in dotNet questo è abbastanza semplice con Nunit) o rintracciando le chiamate dal vivo e registrandole durante i test (si basa su una buona suite di test e capacità per ispezionare lo stack di chiamate).

Per python in particolare questo La risposta SO mostra come tracciare queste chiamate in modo dinamico. Dubito che l'analisi del codice sorgente / byte possa funzionare per un linguaggio così dinamico.

    
risposta data 05.04.2017 - 02:52
fonte

Leggi altre domande sui tag