2011-12-22 18 views
7

私は非常に古い、よく書かれていないRailsアプリケーションを持っています。約9000行のコードとゼロテストがあります。コードの大部分はコントローラ内にあり、さらに悪いことに、多数の外部APIコール、ランダムスクリプトへのシステムコールなどがあります。従来のRailsアプリケーションでの作業

また、開発環境もなく、本番データベースに対して機能するように設定されています。 1つのデータベースだけでなく、10の異なるデータベースがあります。これは、大きなサイトの管理バックエンドのようなものです。

私の最初のアイデアは、私が取り組む予定の部品については、少なくとも多少のテストカバレッジを得ることでしたが、プロダクションサーバー以外の場所では動作させることができませんでした。

また古い宝石と廃止された警告がありますが、テストがあるまで宝石のアップグレードについて考えることさえできません。全体の書き直しはオプションではなく、すぐに追加/変更する必要があります。

私は本当にそのようなアプリケーションのテストにアプローチする方法はわかりません。間違ってしまうほどのものがあるからです。私が本当にやりたいことは、いくつかの統合テストを書いてリファクタリングを開始することですが、実稼働環境ではこれを行うことはできません。

スタブとモックの束を使った単体テストの作成は役に立ちません。基本的に作業するコードは最初から書き直す必要があるためです。

基本的に巨大な複雑な制作環境を自分の開発マシンに複製するために取ることができるいくつかのステップは何ですか?

編集:アプリに関する少し楽しい事実。私が最初に実行しようとしたとき、エラーメッセージなしでフリーズし続けました。約30分後に、データベースに接続するためのタイムアウトが利用可能に設定されていました。 90分

+7

これを作成した人を見つけ、彼の家族を人質に取ると、彼は(または少なくともものがどのように動作するかを説明)のお手伝いをします。 –

+2

プロダクションマシンのスナップショットを撮り、ラボで引き裂くことができます。 –

答えて

9

レール "LEGACY"アプリケーションはそれほど普及していない(まだかなり若い)ので、これは比較的新しい/まれな出来事です。

しかし、(テストされていない)レガシーレールアプリケーションをテストする方法について、いくつかの異なる記述が出てきました。私はお勧めそのいくつかは以下のとおりです。実用的なプログラマから "Rails Test Presciptions" の

  1. This slideshare
  2. 第18章。

究極の最も重要なことは、ある種のテストハーネスを動作させることです。これは、テストデータベースを稼働させ、レーキを稼働させること(たとえそれが壊れたテストを取り除くことを意味するとしても)を工場に働かせることを意味します。その時点から、必要に応じてモジュールをテストし、プロジェクトに追加する新しいコードをすべてテストしていることを確認します。

これは非常に苦しい仕事です。私はあなたに正しい方法でそれをやりたいと賞賛します。

乾杯!

+0

母、私は規律のために正しい方法ではないが、緑色の点がなくても気にしないことに触れることができないので怖いから。私はTDDが私をあまりにも害してくれると思う。 –

+1

あなたはそうです、そうでした。しかし、TDDはまた、あなたに、試すことができる考え方からこれにアプローチする知性を与えました。それを維持する - しかし、最も重要なのはもう一度、使用可能なハーネスのいくつかの並べ替えを実行しているので、時間をかけてそれに追加することができます。 – andrewpthorp

2

この種の恐ろしいボートにようこそ。それは私に起こった

前回は、私はカピバラとテストの番号を書いて:私は...デシベルで作成するか、しないかと予想されたものを

  • 確認

    • ...その後、ビットビットの後、私はこの場合、

    をリファクタリングよ、私は、最高レベルのアプリに近づい以外の手段が表示されず、任意のスタブ/モックせずに、最低で結果を確認してください。それが使用されて

    Rails, 
    Ruby, 
    Mysql socket, 
    

    のバージョンは何

  • 0

    私はこのようなアプリに仕事をしていました。ここで私がしなければならなかったものです:

    Copy DB over, 
    do not run the migrations, 
    installed gems as production environment, 
    do not update gems. 
    

    マイアプリは(gettextのV = 1.10)

    +1

    Rails 2.3.smething。ああ、それはもう一つの問題です。私は本番サーバーに直接アクセスすることはできません。そのため、宝石のどのバージョンがインストールされているか分かりません。また、config /環境でも指定されていません。 rbだから、私が基本的にこれまでにやったのは、アプリを実行して、不足している宝石の上にクラッシュするのを待ってから、依存関係にマッチしたランダムなバージョンをインストールして動作させることです... –

    +0

    そして、すべてのデータベースがMySQLではなく、一部はMS SQL Server ... yay –

    +0

    私が持っていたよりも悪いケース。私は2つのmysql dbsしか持っていませんでした。彼らはどのようなWebサーバーを使用しますか? – Marrento

    3

    非常に具体的な宝石のバージョンを使用し、私はいくつかの救助任務、本当に悪かった、主にPHPのプロジェクトに取り組んではなく、悪い80%のプログラマーが放棄した欲望のプロダクトオーナーは、放棄されたプロジェクトを終わらせるのにうれしいです:)。

    • 私のアプローチは、ブルートフォースを使用することです。
    • は開発にそれを起動し、あなたはそれが全くのパワーによって、実行中の取得まで、物事を解決
    • - してみてください、修正、してみてください、修正します。
    • あなたそれが最終的に取り組んで取得します。コードの
    • 9000行は、私はそれは、それは多くの悪化していた可能性が悪いレガシーコードのための合理的な大きさだと言うだろう、あまりコードではありません。
    • 少しずつリファクタリングを開始してください。
    • これらのタスクには時間が必要なので、一度に起こるとは思わないでください。