• ベストアンサー

テストコードのコーディング負担を減らす方法

こんにちは。 今会社で扱っているコードにテストコードがついておらず、かなり大量にテストコードを書かなくてはいけなくなりそうです。 今はJUnitとEasyMockを使っているので、何もないよりはもちろん楽なのですが、それでもかなりめんどくさくて。。。 テストコードを自動生成する方法などはないでしょうか?

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

製品版の「AgitarOne」ではソースのアップロードは必要無いかと思いますが、かなりなお値段ですよね。 以前 Tomcat を使ったシステムでは、Ant, JUnit, JWebUnit を使いスモークテストを作成ました。 Tomcat を操作するAntタスクでテスト用のデプロイを行い、JWebUnit を使ってテストを実行しました。 http://www.stackasterisk.jp/tech/java/ant05_01.jsp;jsessionid=aY0-jm8odXMg http://www.ibm.com/developerworks/jp/java/library/j-jwebunit/ JBossは使ったことが有りませんが、「JavaによるExtreme Programmingクックブック」という本にその手の事が載っていたような気がします。今、手元に無いのでちょっと確認できません。 http://www.amazon.co.jp/dp/4873111579/ 「できるだけ早く高カバレッジのテストコードを書いた方がいい」という点についてはおっしゃる通りです。 予算・人員・期間などが確保できるのであれば、それに越したことは無いと思います。 ただ、現実には限られたリソースの範囲で効率的にテストを行わなければならず、そう考えた場合は効果の高いものから順番に作成するのがよろしいかと。 ちなみに先ほどの参考URL「レガシー・コードのテスト」では 「最も短時間にテスト対象のコードを網羅する方法は、一番高いレベルからテストを開始することです。」 と述べられています。

foxa-gogo
質問者

お礼

再び、大変貴重なご回答をいただきましてありがとうございました。 JWebUnitは初めて聞きました。 ご紹介頂いた本もチェックしてみたいと思います! >最も短時間にテスト対象のコードを網羅する方法は、一番高いレベルからテストを開始することです。 確かにそうですね。そうして、段々網の目を細かくしていくのですね。 これまでにしっかり動いていた実績のないコードなので、ちょっぴり心配ですが、頂いたアドバイスを参考に頑張ってやってみます。 本当にありがとうございましたm(_ _)m

その他の回答 (1)

  • root139
  • ベストアンサー率60% (488/809)
回答No.1

Agitar Technologiesというところが、本番コードからテストケースを自動的に生成するツールを販売しています。ただし、本番コードにバグが有ってもそれを正しい仕様と見なしてしまう様です。 機能限定の無料版も有るようです。 http://www.atmarkit.co.jp/fjava/rensai3/eclipseplgn24/eclipseplgn24_1.html 個人的には、自動生成ツールを使うよりも、テストを作成するポリシーを決めて、テストの効果が早く現れるようにした方が良いかなと思っています。 例えば、下記のようなことが考えられます。 ・最初はスモークテスト(システム全体を結合して行う簡単なテスト)を作って基本的な動作のチェックを自動化する。 ・一番怪しいと思うところからテストを作る。 ・実際に本番障害の原因となった箇所、バグが発見された箇所のテストから作る。 (参考) レガシー・コードのテスト http://www.ibm.com/developerworks/jp/java/library/j-legacytest/ 下記のような本も参考になると思います。 Ship it! http://www.amazon.co.jp/dp/4274066568/ Working Effectively With Legacy Code http://www.amazon.co.jp/dp/0131177052

参考URL:
http://www.ibm.com/developerworks/jp/java/library/j-legacytest/
foxa-gogo
質問者

お礼

すみません、もう一点。。。 うちが引き継いだコードはパッケージで、これからかなり手を入れる&何度も再利用する(売る)ことが予想されるのですが、回帰テストという観点から考えると、できるだけ早く高カバレッジのテストコードを書いた方がいい、ということにはならないのでしょうか??

foxa-gogo
質問者

補足

お答えありがとうございました! Agitarは検討したのですが、ソースのアップロードが必要なのでダメでした。。 >・最初はスモークテスト(システム全体を結合して行う簡単なテスト)を作って基本的な動作のチェックを自動化する。 >・一番怪しいと思うところからテストを作る。 >・実際に本番障害の原因となった箇所、バグが発見された箇所のテストから作る。 うちのチームリーダも同じようなことを言っていました。 アプリ自体はJBoss上で動くのですが、こういうときはどういったツールを使ってスモークテストの自動化を行うのが効率よいのでしょうか? 大変お忙しい中、あつかましいお願いで申し訳ありませんが、気が向いたらお答えお願いしますm(_ _)m

関連するQ&A

  • Junit Testの時privateで宣言したメソッドのテスト方法

    お疲れ様です。 junitテストクラスの作成する時 まずテスト対象のクラスをobject生成しますが、 privateで宣言してるメソッドはobject生成後も呼べないから どうやってテスト出来るか分かりません。。。。

    • ベストアンサー
    • Java
  • JUnitでのプライベートメソッドのテストについて

    JavaSE6で開発をしております。 eclipse3.6を用いて、JUnit3でテストを行っているのですが、 クラスのプライベートメソッドをテストするにはリフレクション以外の方法はないのでしょうか。 リフレクションを使う方法ですと、テストコードが複雑になりがちで、publicメソッドに比べると、テストするのがしんどいです。 JUnit3に限らない、他のテストフレームワークでも構いませんので、プライベートメソッドをテストする、よい方法はないものでしょうか。

    • ベストアンサー
    • Java
  • SpringでサーブレットをUNITテストするには

    はじめまして。 Spring2.5のモック 「MockHttpServletRequest」や 「MockHttpServletResponse」を利用して、 JUnit4でテストしようと数日試しています。 @Test Public void testGet() { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); ABCServlet testWork = new ABCServlet(); try { testWork.doGet(request, response); } catch (Exception e) { e.printStackTrace(); fail("NGResultTest"); } } ABCServlet内のdoGetが、 protected voidで定義されている為、 そこをPublic voidに変更すれば 動くのですが、 大量に同じようなJavaサーブレットファイルが存在して、 テストのたびに毎回その変更をするのは 現実的ではない状態です。 そこで1点質問させてください。 Springで上記のようなJavaサーブレットを (protected voidのdoGet) JUnit4でテストする場合、 みなさんどのようにテストなさっていらっしゃるのでしょうか? なお、 上記のテスト方法以外でも、、 Javaサーブレットを自動テストする 良い方法がございましたら、 ぜひ教えてください。 (Jakarta Cakutasを利用しようと思ってネットで調べたところ、  JUnit3対応のみで、JUnit4で使えないようでした。  JUnit4関係で利用可能な方法を教えていただけると  ありがたいです) 以上になります。 どうぞよろしくおねがいします。

    • ベストアンサー
    • Java
  • システムテストの効果的な方法

    30代男で、システム開発をしています。 今まで、プログラミング行程を中心にやってきたのですが、現在人手不足のため、設計からシステムテストも行うことが多くなってきています。 単体テストも大変な作業ですが、システムテストも別の意味で大変な作業ということを実感しています。システムの業務的な知識が必要であるため、いろいろなことを限られた時間で学ぶ必要があります。どのようなテストをすればいいのか、想像を働かせる必要があります。 あまり、時間的な余裕がないので、無理な相談と思いますが、効率的な方法な方法はないものでしょうか。 単体テストでは、JUnitやテスト自動化などの手法が考えられますが、システムテストでは簡単にいかないような気がします。

  • Junitテストでvoid戻り値メッソドをテストする方法

    お疲れ様です。 Junitテストでvoid戻り値メッソドをテストする方法について質問が あります。 戻り値なしのvoidメソッドをassertで検査したい場合どうしたら いいでしょうか。 ただexceptionとかが無く動いたら良いだけです。 お答えお願いします。

    • ベストアンサー
    • Java
  • Mockオブジェクトの使い方

    こんにちは。 eclipse+JUnitで初歩的なテストの自動化は使用しているのですが、Mockオブジェクトにも親しもうと考えています。 ただ、どういう風にして入ったらよいのかよくわかりません。 現場では実際にどのようにして使っているのでしょうか?(手で書く?ツールで自動生成?) 例えば「うちではこういうプラグインをeclipseに入れて使っているよ」というようなことがあったら教えてください。 お願いいたしますm(_ _)m

    • ベストアンサー
    • Java
  • 抽象クラスをJUNITでテストする方法

    抽象クラス内に実装メソッドと抽象メソッドがある場合に、 そのクラスをJUNITでテストしたいと思っています。 通常のクラスであれば、そのクラスに対するテストクラスを 作成して、テストクラス内でテスト対象クラスをnewして テストケースを記述していくと思いますが、 上記のような抽象クラスの場合は、 どういった形でテストクラスを作成すれば良いのでしょうか? 抽象クラスはnewできないので、 抽象クラスを実装したクラスをまず作成して そのクラスに対するテストクラスを作成するのでしょうか? お薦めの方法や一般的な方法があれば教えてください。 以上、よろしくお願い致しますm(__)m 【環境】 JDK1.4.2 JUNIT3.8.1

    • ベストアンサー
    • Java
  • Dreamweaverのコード生成について

    こんにちは。 Dreamweaverのコード自動生成について教えていただきたいと思っています。 Dreamweaver8で、textに色をつける際、自動生成されるコードに外部CSSをあてないように作らさせるにはどうしたらよいのでしょう。 「デザイン」を選択して、文字列に色をつけると、 自動で生成されたコードは下のようになります。 <span class="style1">あいうえお</span> (style1は、.style1 {color: #FF0000}) それを、↓のように自動生成させる方法はありませんか? <span style="color: #FF0000;">あいうえお</span> すべて、<body> ~ </body>の中で完結させる記述を生成させたいのです。styleを使わない方法でもいいのです。 むかし、DREAMWEAVER4を使っていました。 CSSをつかわないあの感覚でソース生成させたいのです。 教えてください。よろしくお願いいたします。

  • @mixinの繰り返し生成について

    もしかしたら仕様で出来ないのかもしれないのですが、 ご存知の方は教えてください。 ミックスインを繰り返し文を使用して自動的に生成していきたいのですが、出来るのでしょうか? 試したコードが以下です。 -------------------------- @for $i from 1 through 5 { @mixin test#{$i}() { .test#{$i} { /* style */ } } } -------------------------- 上のコードではエラーになってしまいます。 そもそも@に対して変数を設定すること自体できないのかもしれませんが。 他に別の方法等ありましたら教えていただきたく思います。 宜しくお願いいたします。 ※また、なぜmixinを自動生成するのかというと、mixinを大量に作成し、全てシングルトン構成にしたいからです。

    • ベストアンサー
    • CSS
  • javaのソースコードからUMLを自動生成してくれるソフト

    システム開発を新しく手伝ってくれる人にソースコードを説明する際にUMLで説明をしようと考えています。 しかし今のシステムをUMLで書くのはめんどくさいので、javaのソースコードからUMLを自動生成してくれるソフトがあればいいなぁと思っています。 ご存知の人がいれば教えてください。