↑Programmieren in Rust
Checkliste
- Programm mit
cargo clippy
untersuchen.
- Programm mit
valgrind
und miri
untersuchen.
- Möglichst reichhaltige Unit-Tests schreiben.
- Arithmetische Operationen bezüglich Überlauf analysieren.
- Typkonvertierungen bezüglich Überlauf analysieren.
- Rekursive Funktionen – besonders Parser – bezüglich
Überlauf des Aufrufstapels analysieren.
- Untersuchen, ob implizite Implementierungen von
Drop
zu Rekursionen führen können, die den Aufrufstapel überlaufen würden.
- Programm bezüglich Misra-C und Cert-C analysieren.
- Programm für sämtliche Targets und Konfigurationen testen.
- Programm ggf. gegen Absturz bzw. Denial of Service härten.
- Wurde das Principle of least privilege überall beachtet?
- Haben alle Eingabeschnittstellen hinreichendes Sanitizing?
- Ggf. partielle Funktionen durch monadische Wrapper ersetzen.
- Nach faktorisierbaren Programmteilen suchen.
- Geheimnisprinzip mit Minimodulen ausweiten.
- Fehlermeldungen sollten informativ genug sein.
- Schnelle Fehleranalyse ermöglichen.
- Benutzerschnittstellen möglichst narrensicher gestalten.
- Schnittstellen möglichst narrensicher gestalten.
- Ggf. Formate und Semantiken formal spezifizieren.
- Die Dokumentation sollte so umfänglich sein, dass das
Projekt jederzeit von jemand anderem fortgeführt werden kann.
- Debug-Formatierung ist bisweilen nicht fest spezifiert. Daher darf
sie im fertigen Programm eigentlich nicht genutzt werden.
- Der Befehl
println
kann unter Umständen zu panic führen.
Ist dies unerwünscht, sollte write_all
bezüglich
io::stdout
genutzt werden.
Portabilität
- Programm ist sowohl für eine Adressgröße von
32 Bit als auch für 64 Bit kompilierbar.
- Programm ist für beide Byte-Reihenfolgen LE/BE kompilierbar.
- Programm ist unabhängig vom Betriebssystem.
- Die Parser akzeptieren sowohl LF als auch CR LF und CR als
Zeilenumbruch.
- Genutzte Bibliotheken sind unabhängig vom Betriebssystem.
- Grafik-Schnittstelle ist unabhängig von der Grafikkarte.
- Programm bietet grundlegende Unterstützung von Unicode.
- Benutzerschnittstelle ist leicht in eine andere Sprache
übersetzbar.
- Portabilität der transitiven Abhängigkeiten prüfen.
Literatur
- »Secure Rust Guidelines: Checklist«.