Programmieren in Rust

Checkliste

  1. Programm mit cargo clippy untersuchen.
  2. Programm mit valgrind und miri untersuchen.
  3. Möglichst reichhaltige Unit-Tests schreiben.
  4. Arithmetische Operationen bezüglich Überlauf analysieren.
  5. Typkonvertierungen bezüglich Überlauf analysieren.
  6. Rekursive Funktionen – besonders Parser – bezüglich Überlauf des Aufrufstapels analysieren.
  7. Untersuchen, ob implizite Implementierungen von Drop zu Rekursionen führen können, die den Aufrufstapel überlaufen würden.
  8. Programm bezüglich Misra-C und Cert-C analysieren.
  9. Programm für sämtliche Targets und Konfigurationen testen.
  10. Programm ggf. gegen Absturz bzw. Denial of Service härten.
  11. Wurde das Principle of least privilege überall beachtet?
  12. Haben alle Eingabeschnittstellen hinreichendes Sanitizing?
  13. Ggf. partielle Funktionen durch monadische Wrapper ersetzen.
  14. Nach faktorisierbaren Programmteilen suchen.
  15. Geheimnisprinzip mit Minimodulen ausweiten.
  16. Fehlermeldungen sollten informativ genug sein.
  17. Schnelle Fehleranalyse ermöglichen.
  18. Benutzerschnittstellen möglichst narrensicher gestalten.
  19. Schnittstellen möglichst narrensicher gestalten.
  20. Ggf. Formate und Semantiken formal spezifizieren.
  21. Die Dokumentation sollte so umfänglich sein, dass das Projekt jederzeit von jemand anderem fortgeführt werden kann.
  22. Debug-Formatierung ist bisweilen nicht fest spezifiert. Daher darf sie im fertigen Programm eigentlich nicht genutzt werden.
  23. 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

  1. Programm ist sowohl für eine Adressgröße von 32 Bit als auch für 64 Bit kompilierbar.
  2. Programm ist für beide Byte-Reihenfolgen LE/BE kompilierbar.
  3. Programm ist unabhängig vom Betriebssystem.
  4. Die Parser akzeptieren sowohl LF als auch CR LF und CR als Zeilenumbruch.
  5. Genutzte Bibliotheken sind unabhängig vom Betriebssystem.
  6. Grafik-Schnittstelle ist unabhängig von der Grafikkarte.
  7. Programm bietet grundlegende Unterstützung von Unicode.
  8. Benutzerschnittstelle ist leicht in eine andere Sprache übersetzbar.
  9. Portabilität der transitiven Abhängigkeiten prüfen.

Literatur

  1. »Secure Rust Guidelines: Checklist«.