SQLを最初にリファクタリングしていますか?あなたの建築は?またはあなたのコードベース? 言語を変更しますか?あなたはすべてを捨てて、最初から始めますか? [リファクタリングなし]Brownfieldアプリケーションでユニットテストを実装するための最初のタスクは何ですか?
答えて
私は大規模なレガシースパゲッティコードベースにユニットテストを追加しています。
私のアプローチは、問題を解決するように頼まれたときに、私の現在のタスクに関連するコードベースの部分の周りに新しいラッパーを作成しようとしています。この新しいラッパーは、TTDを使用して開発されました(最初にテストを書く)。いくつかの時間のに非ユニットテスト済みのレガシーコードを呼び出します。他の時には、私は既存のモジュールの新しいコピーを作成し、それに深刻な暴力を加え始める。時には機能を最初から書き直すこともあります。
しかし、私はそれをかなりよくテストしているので、私はかなりコントロールしています。
あまりにも多くのコピーと貼り付けで開発されたこのコードベースで見つかったことは、特定の部分を理解してからその中からいくつかの機能を抽出することです。 ...これらの機能は、他の多くの場所で使用できることがよくあります。したがって、レガシーコードを自分でテストしたライブラリで置き換える割合が増えます。
私の現在の問題(通常は修正しようとしているバグ)に触れられていないコードの部分にテストを書き直したり追加したりすることはありませんが触れられていて関連性のあるものには積極的な積極的な立場をとっています。
更新:Penguinix氏は質問しています。「あなたはどの言語で作業していますか?特定のテストハーネスをお勧めしますか?」
今、私は...いろいろなところで働いています!しかし、同じ原理がどこでも働く。私はMinUnitを見たhttp://www.jera.com/techinfo/jtns/jtn002.html
が、それは一種の私のための啓発の「禅」瞬間だった:UTの私の理解を変換
何かがMinUnitました。単体テストについての誤解は、洗練されたオブジェクト指向フレームワークなどを必要とする複雑なものであった。私は、UTがたくさんのテストを書いていることを理解した。 「ハーネス」は、好きな言語で約3分で自分で書くことができます。ちょうどそれをやりなさい。
これは実際にコードベースの状態に依存します...大規模なクラスはありますか?メガメソッドを持つ1つのクラス?クラスは緊密に結合されていますか?構成は負担ですか?
これを考慮して、Working Effectively with Legacy Codeを読んで、問題を選んで、推奨事項を適用することをお勧めします。
http://www.manning.com/baley/ .NETのBrownfieldアプリケーションも良好に見えます。 –
興味深いですね。私は今、最初の主要なブラウンフィールドアプリケーションで「Working Effectively ...」を使用しています。 Refactoring http://www.amazon.com/dp/0201485672も役に立つと思う(私の次の購入)。 –
Martin Fowlerによるリファクタリングは、リファクタリングツールです。それは私の開発に非常に役立っています。ヘッド・ファースト・デザイン・パターンとコード・コンプリートもお勧めします。 –
- 1. WP7アプリケーションの認証/ログインサービスを実装するためのオプションは何ですか?
- 2. インストール後にアプリケーションの最初の実行を検出するためにlocalstorageを実装する方法は?
- 3. コンウェイのライフゲームのための最もプロローグの実装は何ですか?
- 4. このアプリケーションを実装するための最善の方法
- 5. Railsアプリケーションでスキニングを実装する最も良い方法は何ですか
- 6. Django/Python 2.7から始めるための最初のステップは何ですか?
- 7. 最初の起動時にアプリケーションの指示を実装する
- 8. Windowsストアのアプリケーションでシングルサインオンを実装するためのさまざまなオプションは何ですか?
- 9. iOSで暗号化ロジックを実装するためのベストプラクティスは何ですか?
- 10. Djangoでルックアップテーブルを実装するための良いパターンは何ですか?
- 11. 最初からカスタムアグロメレーションアルゴリズムを実装する
- 12. 1日目の最初のビルドでGradleタスクを実行する
- 13. Grouponのようなシステムを実装するためのオプションは何ですか?
- 14. OpenGLのglDrawBuffersを実装するためのwebGl代替メソッドは何ですか?
- 15. mavenタスクを最初に実行する
- 16. VB.NET/MBUnitでスキーマを生成するためのNHibernateユニットテストの実装
- 17. ジョブコレクションを実装する最適なアルゴリズムは何ですか?
- 18. これを実装する最適なソリューションは何ですか?
- 19. バブルソートでの最初のパスの実装
- 20. ANTLR4:インクルードファイル処理のようなCを実装するための最善のアプローチは何ですか?
- 21. ファイル処理のためのWebサービスを実装する最良の方法は何ですか?
- 22. CFでwebserviceを実装するための最良の方法
- 23. ダミーの実装と実際の実装の両方を持つインタフェースを使用している場合、ユニットテストの最適なアプローチは何ですか?
- 24. 「半仮想」メソッドを実装するためのベストプラクティスは何ですか?
- 25. 最初に実行されるのは何ですか?
- 26. このPHPアプリケーションでユーザーの設定を実装する最良の方法は何ですか?
- 27. Generative Adversarial Networksを実装するための最善の深い学習フレームワークは何ですか?
- 28. ClojureでADTを実装するためには何が必要ですか?
- 29. hapi.jsでウェブサイトのユーザログインシステムを実装する最良の方法は何ですか?
- 30. cakephpで最初のプログラムを実行するための設定
あなたはどの言語で作業していますか?あなたが推奨するテストハーネスがありますか? –