Come misurare la complessità delle espressioni?

-2

Sto confrontando due API per generare un metodo in C # e voglio misurare quanto sia "complesso" il codice per usarle. Prendere in considerazione:

API A:

MethodDeclaration(PredefinedType(Token(IntKeyword)), "CompareTo")
    .AddModifiers(Token(PublicKeyword))
    .AddParameterListParameters(
        Parameter(Identifier("other")).WithType(IdentifierName("Person"))

API B:

new CodeMemberMethod
{
    Attributes = Public | Final,
    ReturnType = new CodeTypeReference(typeof(int)),
    Name = "CompareTo",
    Parameters =
    {
        new CodeParameterDeclarationExpression("Person", "other")
    }
}

(Se qualcuno è curioso, l'API A è Roslyn SyntaxFactory , API B è CodeDOM.)

Si noti come con l'API A, ci si deve preoccupare di cose come token o identificatori, che a mio parere rende più complessa. Ma:

  • Se contiamo il numero di linee, l'API B è molto peggiore (4 righe contro 10 linee). Ma parte di questo è dovuto allo stile di indentazione che uso, che non riguarda in realtà la differenza tra le API.
  • Se contiamo il numero di caratteri non spazi bianchi, l'API A è peggiore, ma non di molto (192 vs 175). Ma in questa metrica, l'API B è danneggiata dai suoi nomi troppo lunghi, che a mio avviso non rendono il codice più complesso.

Quindi la mia domanda è: ci sono modi per misurare questo tipo di complessità del codice, accettato nel settore o nel mondo accademico? In caso contrario, il "numero di caratteri non spazi bianchi" è il migliore che posso fare?

Altre misure di complessità che ho respinto:

  • La complessità ciclomatica non è rilevante qui, poiché entrambi i casi sono espressioni non condizionali.
  • La complessità di Kolmogorov è un concetto teorico che non può essere effettivamente calcolato nella pratica. Forse una qualche approssimazione potrebbe funzionare?
posta svick 03.08.2018 - 17:40
fonte

1 risposta

0

Utilizza un parser per esaminare l'albero di sintassi astratto. La complessità è legata al numero di nodi e foglie in quell'albero.

    
risposta data 03.08.2018 - 19:28
fonte

Leggi altre domande sui tag