2011 02-25-jenkinsci study

23
Copyright(c) Yusuke Yamamoto All rights reserved. Jenkinsリグレッションを起こす方法 2011/2/25 山本 裕介 @yusukey http://samuraism.jp/ @yusukey

Upload: yusuke-yamamoto

Post on 19-Jan-2015

2.316 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

Jenkinsでリグレッションを起こす方法

2011/2/25山本 裕介 @yusukey

http://samuraism.jp/@yusukey

Page 2: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

話す内容• Twitter4Jについて

• Jenkinsを使っているのにリグレッション発生

• 原因・ 経緯

• 学んだこと

Page 3: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

Twitter4Jについて

Page 4: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

Java用Twitter APIライブラリ30名を超すコントリビュータ• JDK1.4.2~• Google App Engine

• Android

に対応LOC: 5.3万行くらいの規模

Page 5: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

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

JUnit: テストツール

Maven: ビルドツール

Jira: issue管理ツール

スライドに登場するロゴ、製品名は各社、各コミュニティの登録商標です

Page 6: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

Twitter4Jの開発で利用しているツール

Maven Central Repository

Hudson / Jenkins: CIツール

github: ソーシャルコーディングハブ

Sonatype Nexus: Mavenプロジェクト管理2010年1月~

2009年4月~

スライドに登場するロゴ、製品名は各社、各コミュニティの登録商標です

2011年2月~2009年3月~

2008年6月~

Page 7: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

Page 8: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

Twitter4Jの開発エコシステム

開発マシン CIサーバ github.com

service hook

repo1.maven.org

oss.sonatype.org

release:perform

promote

git push origin master

Page 9: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

2007年より

3年半リグレッションなし♥♥

Page 10: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

2010年10月2日リグレッション発生

♥♥

Page 11: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

発生した問題• Twitter4J 2.1.5

• OAuth署名に失敗してメソッドコールができないとの報告

401:Authentication credentials were missing or incorrect.

Page 12: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

原因・経緯

Page 13: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

直接の原因• 文字列の分離を行うStringUtil.split()にバグ

• 特定の条件でOAuth署名に失敗

StringUtil.split(“foo,bar”,”,”); » {“foo”, “bar”}

StringUtil.split(“foobar”,”,”); » new String[0]

public static String[] split(String str, String separator){ String[] returnValue; int index; if(-1 == str.indexOf(separator)){ returnValue = new String[0]; }else{...

Page 14: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

なぜStringUtil.splitを実装?• 元々String#splitを使用

• J2MEでString#split(@since JDK1.4)がなくエラーが発生するというユーザーがいたため

• J2MEはJDKのサブセット、JDK1.3(?)ベース

Caused by: java.lang.NoSuchMethodError: java.lang.String: method split(Ljava/lang/String;)[Ljava/lang/String; not found at twitter4j.conf.PropertyConfiguration.setFieldsWithTreePath(Ljava/util/Properties;Ljava/lang/String;)V(PropertyConfiguration.java:196) at twitter4j.conf.PropertyConfiguration.<init>(Ljava/lang/String;)V(PropertyConfiguration.java:121)

Page 15: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

Jenkins使っていればリグレッションは起きないよね?

Page 16: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

Jenkins使っていればリグレッションは起きないよね?

Page 17: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

不具合のあるままリリースした原因1

• 当時Twitter4Jはほとんどテストされていなかった!

• なぜ?: 2010年8月末のBasic認証廃止に伴うテストケースのリファクタリングが原因

Page 18: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

誤ったTestCaseのリファクタリング

TwitterTestUnitテストメソッド

OAuthTestOAuth認証初期化

BasicTestBasic認証初期化

TwitterTestUnitテストメソッド

OAuth初期化

Mavenに認識されない

before

after

Page 19: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

不具合のあるままリリースした原因2

failしたテストケースを1部無視していた

なぜ?: Twitter APIは不安定なのでAPIの問題と勘違い

TwitterTestUnit AsyncTwitterTest

fail

Page 20: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

学んだこと

Page 21: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

学んだこと(1)• failするテストは定期的に確認!

• 特にage欄の確認は重要

Page 22: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

学んだこと(2)• テストケースのリファクタリングは慎重に• テスト数が異様に減っていたら注意• コードカバレッジにも注目

怪しい兆候

Page 23: 2011 02-25-jenkinsci study

Copyright(c) Yusuke Yamamoto All rights reserved.

ご静聴ありがとうございました

♥♥