Twitter4Jとテスト


                 @yusuke

#atest_hack                   Yusuke Yamamoto
↑を開発しています
              Java用Twitter APIライブラリ

              サポートプラットフォーム
               • JDK1.4.2∼
               • Google App Engine
               • Android
#atest_hack                           Yusuke Yamamoto
Twitter4Jとテスト
• Twitter4Jの開発・テスト環境
• Twitter API1.1対応

• (時間があまれば)Androidの本当にあった怖い話




#atest_hack                   Yusuke Yamamoto
Twitter4Jの開発で利用しているツール
              IntelliJ IDEA: github / Jiraに対応


              JUnit: テストツール


              Maven: ビルドツール


              Jira: issue管理ツール

        スライドに登場するロゴ、製品名は各社、各コミュニティの登録商標です
#atest_hack                                     Yusuke Yamamoto
Twitter4Jの開発で利用しているツール
              Maven Central Repository
                                         2008年6月∼


              Hudson / Jenkins: CIツール
              2009年3月∼            2011年2月∼

              github: ソーシャルコーディングハブ
                                  2009年4月∼

              Sonatype Nexus: Mavenプロジェクト管理
                                  2010年1月∼
        スライドに登場するロゴ、製品名は各社、各コミュニティの登録商標です
#atest_hack                                  Yusuke Yamamoto
Twitter4Jの開発環境
                                       release:perform
              git push origin master




                                         oss.sonatype.org
                          service hook
                                           promote




開発マシン              CIサーバ     github.com repo1.maven.org
#atest_hack                                      Yusuke Yamamoto
Android環境のテスト



#atest_hack         Yusuke Yamamoto
Android環境のテスト
• AndroidはJavaじゃない
• DalvikはJVMじゃない
   参考: Androidの本当にあった怖い話

   http://www.slideshare.net/yusukey/android-6595931




#atest_hack                                     Yusuke Yamamoto
Android環境のテスト
• Twitter4JのAndroid環境のテストの現状
         ‣ 報告があれば直す
         ‣ リグレッションテストはしていない


• Android環境のテストも自動化すべき
         ‣ Android Emulator Plugin

   エミュレータのインストール/実行、
   OSバージョン、スクリーンサイズ別のテストなどが簡単

#atest_hack                          Yusuke Yamamoto
Twitter4Jとテスト



#atest_hack                   Yusuke Yamamoto
Twitter4Jとテスト
• Twitter4Jのテスト
    •     APIの疎通確認

    •     ドキュメント通りの挙動をしているか確認

    •     仕様変更(アナウンスなしに変更になることも)に対応




#atest_hack                       Yusuke Yamamoto
Twitter4Jとテスト
• Twitter4Jを使うアプリケーション
    •     テスト不要 - 非ビジネスロジック

         ‣ パラメータ、レスポンスの型
         ‣ APIコール失敗時のリトライ
    •     要テスト - ビジネスロジック

         ‣ 正常系
         ‣ 異常系
              •   レートリミット到達


#atest_hack
              •   API呼び出し失敗時の挙動
                                  Yusuke Yamamoto
テストの目的
• ソフトウェア品質の向上、担保

• 品質を保つために他に出来ること・・
    •     コンパイラにチェックさせる

    •     メトリクス分析




#atest_hack               Yusuke Yamamoto
• 来週本が出ます




                データ指向のソフトウェア品質マネジメント
              メトリクス分析による「事実にもとづく管理」の実績

#atest_hack                      Yusuke Yamamoto
Twitter4JをTwitter API1.1
              に対応させてみた

                @yusuke

#atest_hack               Yusuke Yamamoto
Twitter API 1.1の主な変更点
  • レートリミット方式の更新
  • いくつか新しいAPIの導入
  • エンドポイントのベースURLの変更
http://api.twitter.com/1.1/users/show.json?screen_name=yusuke

  • 全APIが要OAuth認可に
  • いくつかのAPIが廃止
  • いくつかのAPIが追加
 #atest_hack                                         Yusuke Yamamoto
今回のフォーカス
  • レートリミット方式の更新
  • いくつか新しいAPIの導入
  • エンドポイントのベースURLの変更
http://api.twitter.com/1.1/users/show.json?screen_name=yusuke

  • 全APIが要OAuth認可に
  • いくつかのAPIが廃止
  • いくつかのAPIが追加
 #atest_hack                                         Yusuke Yamamoto
JUnitに期待すること
• テストケースでAPI1.1非互換部分を洗い出せる
   OAuth認可せず呼び出している箇所

   廃止されたAPIを呼び出している箇所




#atest_hack                  Yusuke Yamamoto
変更したコード




#atest_hack             Yusuke Yamamoto
実際
• テストケースひとつしか失敗しない




#atest_hack          Yusuke Yamamoto
わかったこと
• Twitter API1.1でも依然OAuth認可なしに呼び出
      せる(いまのところ)

• Twitter API1.1で廃止されたメソッドもまだ呼び
      出せる(いまのところ)




#atest_hack                   Yusuke Yamamoto
わかったこと
• Twitter API1.1でも依然OAuth認可なしに呼び出
      せる(いまのところ)

• Twitter API1.1で廃止されたメソッドもまだ呼び
      出せる(いまのところ)


              ドキュメント通りの挙動になることに
               Twitter4Jが備えておく必要がある


#atest_hack                           Yusuke Yamamoto
現状できる対策(1)
• 認可をを確認するコードを追加・テスト実行




#atest_hack                Yusuke Yamamoto
現状できる対策(2)
• 認可無しで呼び出すためのフィールドを削除



• コンパイル


#atest_hack                Yusuke Yamamoto
現状できる対策(3)
• 廃止されたAPIを目チェック


               ・・・・・・・・・・・・




#atest_hack                   Yusuke Yamamoto
まとめ
• テストは品質向上・担保の「動的な」手段

• 静的な手段も検討
    •     コンパイラにチェックさせる

    •     静的解析

    •     コードメトリクスで分析



• 外部と接続する箇所は仕様に頼りすぎない
#atest_hack               Yusuke Yamamoto

Twitter4Jとテスト