Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JUnit導入の成功と失敗.pdf
Search
SHIMANE, Yoshikazu
October 28, 2015
Technology
0
2.8k
JUnit導入の成功と失敗.pdf
JUnit導入の成功と失敗
SHIMANE, Yoshikazu
October 28, 2015
Tweet
Share
More Decks by SHIMANE, Yoshikazu
See All by SHIMANE, Yoshikazu
入り口から考えるソフトウェアテストエンジニアのキャリア / Thinking_About_a_Software_Test Engineer's_Career_from_the_Starting_Point
shimashima35
0
1.3k
テスト技法を使ったテストケースの表現方法/How to express test cases using test techniques
shimashima35
0
1.3k
VSTePのテスト観点出しで失敗した事例についての紹介/Failure case of test viewpoint derivation
shimashima35
0
750
組織横断部門におけるバグ数可視化の全社導入の事例/Example_of_company-wide_bug_number_visualization in_cross-organizational_departments
shimashima35
1
380
JaSST Tokyo実行委員のお仕事/Job of JaSST executive committee
shimashima35
0
790
What is “Quality” ?
shimashima35
0
1k
品質"実質"無料キャンペーン始めます / Start_quality_real_free_campaign
shimashima35
2
5.7k
明日から始めるSelenideによるブラウザテスト 2018年版/ Browser_test_by_selenide_to_start_from_tomorrow_in_2018
shimashima35
1
880
SelenideよるDSL風E2Eテスト基盤開発の実例 in Osaka /Example_of_E2E_Automation_Test_Architecture_By_Selenide_in_Osaka
shimashima35
0
1.2k
Other Decks in Technology
See All in Technology
EncryptedSharedPreferences が deprecated になっちゃった!どうしよう! / Oh no! EncryptedSharedPreferences has been deprecated! What should I do?
yanzm
0
460
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
1.3k
RSCの時代にReactとフレームワークの境界を探る
uhyo
10
3.5k
なぜスクラムはこうなったのか?歴史が教えてくれたこと/Shall we explore the roots of Scrum
sanogemaru
5
1.6k
テストを軸にした生き残り術
kworkdev
PRO
0
210
会社紹介資料 / Sansan Company Profile
sansan33
PRO
6
380k
共有と分離 - Compose Multiplatform "本番導入" の設計指針
error96num
2
990
LLM時代のパフォーマンスチューニング:MongoDB運用で試したコンテキスト活用の工夫
ishikawa_pro
0
160
はじめてのOSS開発からみえたGo言語の強み
shibukazu
2
810
KotlinConf 2025_イベントレポート
sony
1
140
現場で効くClaude Code ─ 最新動向と企業導入
takaakikakei
1
250
OCI Oracle Database Services新機能アップデート(2025/06-2025/08)
oracle4engineer
PRO
0
170
Featured
See All Featured
Site-Speed That Sticks
csswizardry
10
820
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
13k
How GitHub (no longer) Works
holman
315
140k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Visualization
eitanlees
148
16k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
GraphQLとの向き合い方2022年版
quramy
49
14k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Transcript
JUnit導入の成功と失敗 #Java騎士団 第一回円卓会議@2015/10/27 @shimashima35
自己紹介 @shimashima35 http://srad.jp/~shimashima/ 中小SI勤務(基本下請けなし) Java歴 14年くらい 好きなもの maven, テスト, ソフトウェエ
ア工学全般 最近IoTで遊んでいます JaSST(ソフトウェアテストシンポジウム) Tokyo 実行委員 JSTQB-FL取得 (New @2015/10/26)
本日の内容 JUnitによるUnitTest導入の成功事例と失敗事例の紹介。 成功要因/失敗要因についての考察。 時間があれば「JMeterによる疲れないリグレッションテスト」も……。
UnitTestとは 今回の講演でのUnitTestはTDDのUnitTestではありません。 自分は書いたプログラムが自分の意図通りに動くことを確認・保証 するためのもの。 一般的な品質保証の考えでの「単体テスト」です。
成功事例 概要 ❏ 金融系大規模案件 (300人月以上かな?) ❏ 最大プログラマだけで40名程度 ❏ 2007年頃 ❏
Java5+Spring 2.5+Hibernate3.2(Annotation)+Spring MVC ❏ まだSpring MVCもHibernate 3.2も事例がない ❏ 受注したベンダ中に複数の協力会社社員で構成 ❏ 大半は特定の1社 ❏ 自分も協力会社(Not 特定の1社)として入った一人
成功事例 JUnit導入経緯と結果 ❏ 金融系で高品質を求めた ❏ アーキテクトが主導した ❏ 最終的にお客様とコードカバレッジ100%でコミットした ❏ 厳密はgetter/setterなどは除外してよい
❏ それでも最終的には95%程度まで達成 ❏ テストチームによる結合テスト中でも気軽にリファクタリング ❏ コードに対して責任を持つ
成功事例 要因 ❏ 初期段階からUnitTestを意識し設計 ❏ レイヤーアーキテクチャ、DIなど ❏ アーキテクトの力量 ❏ UnitTest用フレームワークを一人で作成
❏ アーキテクトによる適度なコードレビュー ❏ おしなべて高かったスキル ❏ プロジェクトとしてのコミットメント ❏ プロジェクト内の意識の高さ
失敗事例 概要 ❏ 広告サイト構築案件 (200人月程度?) ❏ 最大プログラマだけで60名程度 ❏ 2009年頃 ❏
Java6+Seasar2+S2JDBC+SASturts ❏ 自社で受注 ❏ 協力会社多数参加
失敗事例 JUnit導入経緯 ❏ JUnit成功体験があった自分が参加 ❏ アーキテクトも「できるだけUnitTestは書きたい」という思い ❏ マネジャー的には「どうでもよい」 ❏ あった方がよい
❏ でも、それで進捗が遅れるのはなぁ…
失敗事例 JUnit導入結果 ❏ カバレッジ率なにそれ? ❏ UnitTestはほぼなし ❏ 皆があらゆるところを修正するのでテストメンテが事実上破た ん ❏
mvn -Dmaven.test.skip=true
失敗事例 要因 ❏ アーキテクトがテストにコミットできなかった ❏ マルチタスク ❏ マネジャーからの扱い(UnitTestはなくてもよい) ❏ スケジュールプレッシャー
❏ テストよりまず動くもの ❏ プログラマのアサインが画面単位
失敗事例 アサインの問題 1. アサインが画面単位 2. 一人が全てのレイヤまたがって実装を行う 3. 画面に近い部分は別としてService・Domain・Persist層を全 員触る a.
共通化されない、Interfaceが契約的ではない、APIが壊れ る b. 全員が全レイヤーのテストの書き方を覚えなければならな い
成功事例 アサインは? 1. アサインがレイヤー単位 2. 画面近く画面/機能単位でアサインされる 3. Service層/Domain層/Persist層はごく少のアーキテクチーム が受け持つ a.
業務単位である程度分割されるので、業務単位でクラスの オーナーが決まる b. オーナーがそのクラスの責任者として実装およびテストを 書く
まとめ
まとめ ❏ スケジュールプレッシャーは天敵 ❏ マネジャーの支援があると導入しやすい ❏ 「テストのための設計・準備」は必要 ❏ 意外なところでアサインの単位も重要
JMeterによる疲れないテスト
Selenium(WebDriver)あるある ❏ テストが壊れる ❏ メンテナンスコストが高い ❏ 時間がかかる
JMeterによる簡易テスト ❏ http(s)によるリクエストレベルでのテスト ❏ とりあえずhttpステータスコードのチェック ❏ 400番台、500番台は自動的にNG ❏ 200番台はOK ❏
302などの自動リダイレク対応 ❏ テストシナリオはキャプチャー&リプレイをベースに修正
SeleniumとJMeter ❏ Seleniumのつかいどころ ❏ 画面の動きを見たい・確認したい場合 ❏ Ajax ❏ レイアウト検証 ❏
JMeterのつかいどころ ❏ Web画面からロジックまで含めて検証 ❏ UIの細かい部分は意識しなくてよい場合 ❏ 何を検証したいかによって使い分けましょう
ご清聴ありがとうございました。