Download - Twitter4J, Jenkins and Regression
![Page 1: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/1.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
Twitter4J, Jenkins and Regression
Yusuke YamamotoTwitter4J.org
http://twitter4j.org/
![Page 2: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/2.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
Who am I10+ years experience in Java4+ years experience in the Twitter APIAuthor of open-source tools including:– Samurai http://samuraism.jp/samurai/– Twitter4J http://twitter4j.org/
![Page 3: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/3.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
What is Twitter4J
An open-source library for the Twitter APIAvailable since Jun 2007Compatible with – Java 1.4.2+– Android– Google App Engine
![Page 4: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/4.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
Tools powering Twitter4J
Maven Central repo
![Page 5: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/5.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
Tools and Development cycle
dev twitter4j.orggithub.com
service hook
repo1.maven.org
oss.sonatype.org
release:perform
promote
git push origin master
![Page 6: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/6.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
Test-driven development
1. Write a test case which fails
2. Implement and commit
3. Run tests
4. NO regression
![Page 7: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/7.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
the Timeline
Jun 2007: Started Twitter4J projectMar 2009: Applied Hudson
![Page 8: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/8.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
the Timeline
Jun 2007: Started Twitter4J projectMar 2009: Applied Hudson
With Jenkins applied, your softwareshould be regression free…
![Page 9: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/9.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
the Timeline
Jun 2007: Started Twitter4J projectMar 2009: Applied HudsonOct 2010:Critical regression found
![Page 10: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/10.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
the Timeline
Jun 2007: Started Twitter4J projectMar 2009: Applied HudsonOct 2010:Critical regression found
The how and why
![Page 11: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/11.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
The issue
• Version: Twitter4J 2.1.5• Symptom: certain method calls fail with 401
401:Authentication credentials were missing or incorrect.
![Page 12: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/12.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
Direct cause of the issue• bug in StringUtil– introduced in v2.1.5– leads invalid OAuth signature in certain condition
public static String[] split(String str, String separator){String[] returnValue;int index;if(-1 == str.indexOf(separator)){returnValue = new String[0];}else{...
expected actualsplit(“foo,bar”,”,”) {“foo”, “bar”}√ {“foo”, “bar”}split(“foobar”,”,”) {“foobar”} {}
![Page 13: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/13.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
Why StringUtil.split()
• String#split() - @since Java1.4• Found of a compatibility issue with CLDC– CLDC doesn’t support String#split()
Caused by: java.lang.NoSuchMethodError: java.lang.String: method split(Ljava/lang/String;)[Ljava/lang/String; not foundat 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 14: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/14.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
General cause of software regressions
W/ test casesnot enough test
coverage
test failure(s) ignored
W/O test casesimplementation
wrongly modified
external resource became incompatible
![Page 15: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/15.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
General cause of software regressions
W/ test casesnot enough test
coverage
test failure(s) ignored
W/O test casesimplementation
wrongly modified
external resource became incompatible
![Page 16: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/16.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
General cause of software regressions
W/ test casesnot enough test
coverage
test failure(s) ignored
W/O test casesimplementation
wrongly modified
external resource became incompatible
![Page 17: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/17.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
Ignoring failed test cases
• Generally not recommendedbut
• Sometimes you need to, because– external resource not available
or– test failure caused by a component managed
by other committer
![Page 18: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/18.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
General cause of software regressions
W/ test casesnot enough test
coverage
test failure(s) ignored
W/O test casesimplementation
wrongly modified
external resource became incompatible
![Page 19: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/19.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
General cause of software regressions
W/ test casesnot enough test
coverage
test failure(s) ignored
test case wrongly modified
W/O test casesimplementation
wrongly modified
external resource became incompatible
![Page 20: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/20.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
ruined tests with Basic auth deprecation
before refactoring:Basic auth & OAuth
after refactoring:OAuth only
TwitterTestUnittest base class
OAuthTestOAuth
BasicTestBasic auth
TwitterTestUnit
not recognized by Maven
![Page 21: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/21.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
Lessons learned - 1
• check the Ages of failed tests
![Page 22: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/22.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
Lessons learned - 2• be very careful when you refactor test cases• make sure that– number of test cases doesn’t change many– code coverage doesn’t decrease
smelly trend
![Page 23: Twitter4J, Jenkins and Regression](https://reader035.vdocument.in/reader035/viewer/2022070501/5681693f550346895de0beb9/html5/thumbnails/23.jpg)
Jenkins User Conference San Francisco, Oct 2nd 2011 #jenkinsconf
Thank You To Our SponsorsPlatinumSponsor
GoldSponsor
SilverSponsor
BronzeSponsors
Coming Soon: The CloudBees Newsletter for Jenkins
Please complete the Jenkins survey to help us better serve the community(bonus: a chance to win an Apple TV!)