通常、人々はすぐに指摘するように、ソフトウェアの利点の1つは、ハードウェアに比べて変更が簡単で比較的安価であると想定されていることです。これは、根本的に何かが間違っていることに気づいたときに特に重要です。ハードウェアでも同じことをすると、100万ドルを失うので、あなたが言ったように、シミュレーターなどを使用して、そこからバジンガをテストします。これは、ソフトウェアに移行したときにパラダイムがいくらか失敗するところだと思います。
平均的なソフトウェア開発者の頭の中に入りましょう。あなたが持っているのは、非常に忙しい人で、締め切りは非常に厳しいです。彼のマネージャーは、後からいつでも修正できるので、いくつかのバグを残しても大丈夫だと言っています。多くの場合、テストは再考されますが、テスト駆動シナリオでも、テストは最小限に抑えられ、コードは最小限のテストに書き込まれ、多くの場合、境界ケースの多くが見落とされるようにショートカットが使用されます。システムは完全にユニットテストされますが、全体として厳密にテストされることはまれであり、ストレステストは非常にまれです。これに加えて、ソフトウェアをゼロから作成します。ソフトウェアを作成する前に、ソフトウェアをシミュレートする機会はほとんどありません。これは主に、ハードウェアにあるようなきめ細かいビルディングブロックからソフトウェアを作成することはめったにないからです。
OPの質問に戻ります。すべてのソフトウェアの派生元となるビルディングブロックのシステムを定義できますか?おそらく。費用対効果は非常に高いでしょうか?おそらくそうではないでしょう。なぜなら、この理想をサポートするのに十分な堅牢なコンポーネント、テスト、およびその他の道具のシステムを開発するまでには、プログラミングシステムでは、競争がすでに市場に打ち勝っていることに気付くでしょうし、さらに悪いことに、平均的なプログラマーの観点からすると、おそらく「クッキーカッター」スタイルのプログラミングシステムは非常に制限的であり、非常に可能性が高いでしょう退屈な。私は個人的にAPIに取り組んでおり、モジュールコードの大部分が完全に洗練されて標準化されているため、コードテンプレートを生成して空白を埋めるだけです。私の時間の大部分は、単純なコネクタコードを記述し、できるだけ早くモジュールをドアから取り出すことに費やすことができます。それは真剣に心を落ち着かせる。同じ種類のものを何度もコーディングする以上のことを行う機会はほとんどないので、別のプロジェクトの機会が来たとき、私は他のことをする機会に飛びつきます。
それでは、どのようにして高品質で十分にファクタリングされたソフトウェアを提供し、実際にそれを楽しんでいるのでしょうか?これは、ツールと方法論の選択に帰着すると考えています。私にとって、答えは、優れたBDD APIの使用を採用することでした。なぜなら、非常に読みやすく、しかも非常にきめ細かいコードを作成できるからです。最小限の再利用可能なメソッドから一連のテストを構築し、仕様の言語でテストを記述することができます。このようにして、ビルディングブロックの設計とチェックを担当するという事実を除き、よりコンポーネント化された開発アプローチに近づきます。さらに、テスト出力は、障害が発生したテストの正確な部分を特定するため、障害がセットアップにあるのかアサーションにあるのかを推測する必要がありません。
方法論の調整も役立ちます。私は、無駄のない開発プリンシパルを適用し、アジャイル運動が長年にわたって強打してきた他の多くのテクニックやプリンシパルと組み合わせることを強く支持しています。私がこれまでイライラすることが多かった無駄な慣行のほとんどを排除したことは、開発をより楽しい活動にするために大いに役立ちました。バグがコードに表示されることがありますが、あまり頻繁ではないことを願っていますが、今ではより多くの時間を費やし、より堅牢なテストを作成し、100テスト範囲の割合。さらに良いことに、これらの緑色のライトがすべて私の一日の終わりに表示されるのを見るのは本当に素晴らしい気分です。