Cobolでもやりたいテスト自動化

7,148 views

Published on

cobol 自動テスト テスト自動化

Published in: Technology
1 Comment
7 Likes
Statistics
Notes
  • ですよね 「必要全パターンのテストコードを作成」→「オールグリーン」→「自動テスト運用開始!」→「と思った矢先、他の人の手により本体コードに仕様変更」→「あっというまにテストコード陳腐化」
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
7,148
On SlideShare
0
From Embeds
0
Number of Embeds
258
Actions
Shares
0
Downloads
13
Comments
1
Likes
7
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Cobolでもやりたいテスト自動化

    1. 1. COBOLでもやりたい テスト自動化
    2. 2. こんな感じの流れでいきます• 単体テストってめんどくさいよね• 世の中には自動テストなるものがあるらし い• それCOBOLでもやりたい!• テスト大好き! ( ›◡ु‹ )
    3. 3. テスト超メンドくさい
    4. 4. テストの何が メンドくさいのか• テストドライバ書くのとか• テストデータ作るのとか• テスト結果が妥当かどうか一々見て確認 しなきゃならないとか• …を正しく動くようになるまでやるとか
    5. 5. 何がメンドくさいってこんなことをPGに手を入れるたびにやらなくちゃならんことだ
    6. 6. The Long And Winding Road(保守の道)• 回帰テストとかホントにちゃんとやって る?• テスト者によってレベルが違うのも嫌な感 じ• リファクタリングもおちおち出来やしない
    7. 7. そこで自動テストですよ
    8. 8. 自動テストとはフレームワークを用いてテスト(の一部)を自動化する• テストケースの設計• テストの実行と結果の確認• テスト進 の管理• レポートの作成
    9. 9. 自動テストとはテスティングフレームワーク• xUnit • Java=>JUnit, C=>CUnit, PHP=>PHPUnit• Rspec(Ruby, BDD)•
    10. 10. 自動テストとはxUnit etc. Test Target テスト対象を実行 成否を出力
    11. 11. Ex: JUnit生年月日を受け取って年齢を返すメソッドを例に int Nenrei.getAge(String birthday)public class GetAgeTest extends TestCase { public void testGetAge() { Nenrei nenrei = new Nenrei(); int age = nenrei.getAge("1979/10/8"); assertEquals("年齢が正しくない",32, age); }}
    12. 12. Ex: JUnit 出力された結果の例//========== JUnit 3.8.2 ===================java -classpath .;junit-3.8.1.jar junit.textui.TestRunnerjunit.JUnitSampleTest...E.Time: 0.002There was 1 error:1) testC(junit.JUnitSampleTest)java.lang.RuntimeException:Exception at junit.JUnitSampleTest.testC(JUnitSampleTest.java:31)Tests run: 3, Failures: 0, Errors: 1
    13. 13. Ex: RSpec 同じ年齢メソッドの例describe Nenrei do subject do Nenrei.new end context "日付が与えられた時" do it "年齢を返す" do subject.getAge("1979/10/08").should == 32 end endend
    14. 14. Ex: RSpec もっともシンプルな例describe Stack do context "when new" do it { should be_empty } it { should have(0).items } endend
    15. 15. Ex: RSpec出力された結果の例
    16. 16. 自動テストの利点• テストが対象を実行する• テストデータとその結果はテストコードの なかに記述される• テストコード=仕様(SPEC)• テストコードがそのまま利用方法の手引き
    17. 17. 自動テストの利点• テストコードがあればいつでも誰でも何度で も実行出来る• 仕様変更の際、変更された仕様だけでなく既 存仕様も確認出来る(回帰テスト)• テストに守られている・改修が怖くない• 外部仕様を変えずに内部仕様を改善できる(リ ファクタリング)
    18. 18. 自動テストの難点• 本体のコードとともにテストコードも保守 要る• 適用出来る(し易い)もの、そうでないもの• レガシーコードのテスト全部書く?
    19. 19. そんなにイイものならCOBOLでもやりたいけど…
    20. 20. Ex: COBOLUnit PROCEDURE DIVISION USING CBU-ctx CBU-user-context.* Initialize a command order     MOVE ITALY TO TO-COUNTRY.   MOVE FRANCE TO FROM-COUNTRY.     MOVE "S99MLP15" TO PRODUCT-CODE.  * Call the COBOL program that set deliver taxes          CALL "PR-ORDER" USING  COMMAND-ORDER  COUNTRY-LIST.  * Add Assertion for deliver tax     MOVE "FR => IT:TAX=120" TO CBU-ASSERT-NAME.   SET CBU-ASSERT-EQUAL TO TRUE.   SET CBU-ASSERT-INT TO TRUE.   MOVE 120 TO CBU-ASSERT-EXPECTED-INT.   MOVE DELIVER-TAX TO CBU-ASSERT-ACTUAL-INT.   CALL CBU-assert USING CBU-ASSERT-CALL-INTERFACE CBU-ctx. 
    21. 21. COBOLUnitがダメならRSpecでやればイイじゃない
    22. 22. Ruby→COBOLブリッジ 書いたRSpec Test ブリッジ Target テスト対象を実行 RubyからCOBOLを 成否を出力 CALLする
    23. 23. RSpec on COBOLdescribe Nenrei do subject.invoke do record=Record.define("生年月日", "年齢") Invoker.new("nenrei.dll", record) end context "日付が与えられた時" do before :all do subject.生年月日 = "1979/10/8" subject.invoke end it "年齢を返す" do subject.年齢.should == 32 end endend
    24. 24. 密かなる適用事例 氏名編集サブルーチン• 漢字氏名、英字氏名、通称名、カナ氏名、 カナ通称名、etc.を受け取り、• 証明書、一覧系帳票、郵送物の宛名、画面 表示、etc.の各々に合わせた編集をして返す• ざっくりパターン数で1,000くらい?
    25. 25. 密かなる適用事例 氏名編集サブルーチン• 必要全パターンのテストコードを作成• オールグリーン• 自動テスト運用開始!• と思った矢先、他の人の手により本体コードに仕様 変更• あっというまにテストコード陳腐化
    26. 26. 密かなる今後の課題• ruby→COBOL呼び出しが極端に不安定 →segv吐きまくりじゃあ使い物にならないだろうよ• 適用できる型の拡大 →関数型(?)だけじゃ狭すぎる• テストの書きやすさ向上 →書きやすさこそ至上、継続のキモ
    27. 27. そんなこんなでテスト大好き! ( ›◡ु‹ )
    28. 28. ご静聴ありがとうございました。

    ×