私は現在、大規模なコードベースの一部をリファクタリングしており、ユニットテストはまったくありません。私は力ずくでコードをリファクタリングしようとしました。つまり、コードが何をしていてどのような変更が意味を変えないかを推測しようとしましたが、成功しませんでした。コードベースのすべての機能をランダムに破壊しました。
リファクタリングには、レガシーC#コードをより機能的なスタイルに移行すること(レガシーコードはLINQを含む.NET Framework 3以降の機能を使用しません)、コードのメリットがあるジェネリックの追加などが含まれることに注意してください。
費用がいくらかかかるので、正式な方法は使用できません。
一方、少なくとも「リファクタリングされたレガシーコードにはユニットテストが付属する」というルールは、いくらコストがかかっても、厳密に従うべきだと思います。問題は、500 LOCプライベートメソッドのごく一部をリファクタリングするときに、単体テストを追加することが難しいように見えることです。
特定のコードに関連する単体テストを知るのに役立つものは何ですか?コードの静的分析が何らかの形で役立つと思いますが、次の目的で使用できるツールと手法は何ですか。
どのユニットテストを作成すればよいかを正確に把握し、
そして/または私が行った変更が元のコードに影響を及ぼし、今とは異なる方法で実行されているかどうかを知っていますか?
formal methods in software development
、述語論理を使用して、プログラムの正しさを証明するために使用され、大規模なコードベースをリファクタリングに適用可能性を持っていないので、とにかく。コードを証明するために通常使用される正式な方法は、医療アプリケーションなどの分野で正しく機能します。あなたが正しいことは、それを行うにはコストがかかるため、それが頻繁に使用されない理由です。