関連する質問をしましたが、満足のいく回答が得られませんでした。だから、おそらく私はそれを別の方法で尋ねるべきです。
PerlやRuby、さらにはLinuxカーネルなどの大規模なCプロジェクトは、ユニットテストをどのように処理しますか?または、関数型言語でも?
私はOOPでのテストのための依存性注入と抽象ファクトリに精通していますが、非OOPでのスケーラブルで管理しやすい同等性は見当たりません。たとえば、CやHaskellでは、関数のレイヤーの上にレイヤーがあり、上位のレイヤーは暗黙的に下位のレイヤーを呼び出します。すべての依存関係ではなく、コードの単位だけをテストするための継ぎ目を見つけるにはどうすればよいですか?
シームの必要性をすべて一緒に回避する1つの方法は、呼び出し依存グラフの深さを非常に低く保つことです。いわば、垂直方向ではなく水平方向にコーディングします。「leaf」関数で可能な限り多くのアプリケーションロジックを保持します。そして、「ノード」関数が他のノード/リーフ関数にデータを配管する以外に機能しないことを確認してください。次に、「リーフ」機能のみをテストします。「ノード」機能は統合テストに任せてください。そのアプローチは効果的ですか?
今日の最大のソフトウェアは、今でも手続き型言語で書かれています。うまくいくいくつかの方法論が採用されているに違いありません。優れたユニットテストを備えた手続き型言語の大規模ソフトウェアの経験がある人はコメントできますか?