Ist die statische Codeverifizierung für mögliche Nullobjektverweise verfügbar?

8

Ich hätte gerne eine Möglichkeit, Warnungen zu erhalten, wenn eine Objektreferenz möglicherweise eine Null-Referenz-Ausnahme auslösen könnte, so dass ich für sie defensiven Code schreiben kann.

Ich habe Resharper angeschaut, aber ich habe dort nichts gesehen, was das bewirkt.

Code Contracts ist wahrscheinlich ein Nicht-Starter; Die Anwendung ist ziemlich groß und in .NET 3.5 geschrieben, bevor Code Contracts offiziell verfügbar wurden.

    
Robert Harvey 11.04.2012, 15:44
quelle

3 Antworten

3

Resharper schafft tatsächlich so etwas. Mögliche NullReferenceExpections werden in der IDE in blau mit QuickInfos markiert, wenn Sie den Mauszeiger darüber bewegen.

Resharper verfolgt dann potenzielle Fehler und Warnungen in seinem eigenen Inspektionsergebnisfenster (getrennt von den Compilerfehlern und Warnungen von Visual Studio).

    
raveturned 11.04.2012, 15:57
quelle
0

Wenn Sie ein Objekt nicht speziell initialisiert haben, kann es im Allgemeinen immer die Möglichkeit haben, eine Null-Objektreferenz zu werfen, zumindest soweit es den Compiler betrifft.

Damit ein Algorithmus überprüfen kann, ob eine Referenz auf das Objekt möglicherweise null sein kann, müsste er alle möglichen Pfade durchlaufen, die Ihr Programm ausführen kann. Dazu gehören auch Pfade in externen Bibliotheken, die Sie möglicherweise verwenden. Selbst für die einfachsten Programme würde ein solcher Algorithmus die Leistung Ihres Compilers zerstören.

    
Sam I am 11.04.2012 15:58
quelle
0

Ich bin gegen die Idee, blind gegen null für jedes Feld im Code und innerhalb jeder Methode zu verteidigen.

Die folgenden Punkte helfen mir bei der Entscheidung, wo mit Nullwerten zu prüfen ist:

1- Wer wird Ihre Methoden aufrufen?
Wenn eine Methode privat ist und Sie Kontrolle darüber haben, wie auf sie zugegriffen wird, sehe ich keinen Sinn darin, vor NULL-Prüfungen zu schützen, es sei denn, es ist Teil der Logik der Methode, Nullwerte zu erwarten. Wenn eine Methode der Öffentlichkeit zugänglich gemacht wird (z. B. eine API), sollten natürlich Null-Überprüfungen ein großes Problem darstellen.

2- Softwaredesign:
Das Bild, das Sie haben, ruft method1(fromAnimalToString(animal)); auf und aus irgendeinem Grund gibt fromAnimalToString() niemals null zurück (obwohl stattdessen eine leere Zeichenfolge zurückgegeben wird).
Dann wäre es in diesem Fall nicht sinnvoll, animal != null im Körper von method1 () zu überprüfen

3- Testen:
Im Software-Engineering ist es fast unmöglich, alle möglichen Szenarien zu testen, die jemals ausgeführt werden können. Testen Sie jedoch normale und alternative Szenarien und stellen Sie sicher, dass der Fluss wie erwartet verläuft.

    
SiN 11.04.2012 16:51
quelle

Tags und Links