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
古のJavaを使うということ / JJUC CCC 2016 Spring
Search
zer0-u
May 21, 2016
Programming
12
13k
古のJavaを使うということ / JJUC CCC 2016 Spring
#jjug_ccc #ccc_m71
zer0-u
May 21, 2016
Tweet
Share
More Decks by zer0-u
See All by zer0-u
OCJP for good coding #jjug_ccc #ccc_m3
zer0u
1
1.2k
kbkz_tech9
zer0u
0
350
You and Java and English ,
zer0u
0
310
JJUG CCC 2015 Fall LT
zer0u
0
1.2k
ねこでもわかる! ITインフラ・パフォーマンスチューニング
zer0u
16
6.9k
Other Decks in Programming
See All in Programming
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.7k
シェーダーで魅せるMapLibreの動的ラスタータイル
satoshi7190
1
480
Better Code Design in PHP
afilina
PRO
0
120
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
2024/11/8 関西Kaggler会 2024 #3 / Kaggle Kernel で Gemma 2 × vLLM を動かす。
kohecchi
5
910
弊社の「意識チョット低いアーキテクチャ」10選
texmeijin
5
24k
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
as(型アサーション)を書く前にできること
marokanatani
9
2.6k
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
Laravel や Symfony で手っ取り早く OpenAPI のドキュメントを作成する
azuki
1
110
EventSourcingの理想と現実
wenas
6
2.3k
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
6
1.7k
Featured
See All Featured
Building Applications with DynamoDB
mza
90
6.1k
Producing Creativity
orderedlist
PRO
341
39k
Designing for humans not robots
tammielis
250
25k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
410
Writing Fast Ruby
sferik
627
61k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Thoughts on Productivity
jonyablonski
67
4.3k
GraphQLとの向き合い方2022年版
quramy
43
13k
Documentation Writing (for coders)
carmenintech
65
4.4k
The Invisible Side of Design
smashingmag
298
50k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Docker and Python
trallard
40
3.1k
Transcript
古のJavaを使うということ #ccc_m71 JJUC CCC 2016 Spring ぜろゆ
#ccc_m71 目次 * 自分について - これは誰ですか? * 出会い - これはJavaですか?
* コメント - これは消せますか? * テスト - これは直せますか? * 周りに広める - これは使えますか? * 古のJava - これは変えられますか?
#ccc_m71 自分について - これは誰ですか? * ぜろゆ * 文系出身・プログラミング(ほぼ)未経験で就職 * 社会人3年目
* Twitter:@zer0_u
#ccc_m71 出会い - これはJavaですか? * Javaで「Hello,World!」できる程度で入社 「Java完全にマスターした」 * 研修で「動くものをつくる」魅力にはまる →
自分でもコードを書くように * よりよいものを作るために勉強&写経 * JUnit実践入門 * リーダブルコード などなど
#ccc_m71 出会い - これはJavaですか? * 配属! * 知ってるコードを書くとコンパイルエラーが出る → (o・д・)???
* どうやらJavaにはバージョンというものがあるらしい * じゃあ、この現場で使ってるJavaは?
#ccc_m71 出会い - これはJavaですか? >>> J2SE1.4 の気配を察知 <<<
#ccc_m71 J2SE1.4 - これはバージョンアップできますか? * 諸般の事情によりバージョンアップ不可 * この現場にいる限り逃げられない ↓ このときのぜろゆ
(o・д・) 。◦(とはいえ書けるものが少ないだけでしょ?)
#ccc_m71 出会い - これはJavaですか? ↓ いまのぜろゆ (o・д・) 。◦(そう簡単な話でもなかったんだよなぁ)
#ccc_m71 コメント - これは消せますか? * 業務 - 保守(不具合修正)が9割 * 自分がゼロからコードを書くことはまずない
* 誰かの書いたコードを読んで修正・追加がメイン * 状況 * バージョン管理あり * コードレビューあり
#ccc_m71
#ccc_m71 コメント - これは消せますか? (o・д・)「うわぁ、コメントアウトめっちゃいっぱいある」 (o・д・)「バージョン管理してるし消しちゃえ」 (o・д・)「小手先で直すとコード汚くなるな...」 ..... (o・д・)「できた! コードレビューお願いします!」
#ccc_m71 コメント - これは消せますか? (*‘∀‘)「ここ何で消したの?」 (o・д・)「え? コメントアウト邪魔じゃないですか?」 (*‘∀‘)「修正範囲は最低限だって言ったよね?」
#ccc_m71 コメント - これは消せますか? * 用語「修正範囲」 * 限りなく狭いほうがよいとされているもの * 同じ問題を解決できる複数の手法がある場合、
修正されるコードの行数が少ないほうが良い
#ccc_m71 コメント - これは消せますか? * 用語「修正範囲」 * 限りなく狭いほうがよいとされているもの * 同じ問題を解決できる複数の手法がある場合、
修正されるコードの行数が少ないほうが良い * 特に既存の部分を(コメントも含め)削除することは できる限り避けるべきである
#ccc_m71 コメント - これは消せますか? (o・д・) (とはいえこれ半端に手を入れても意味なさそうだが) (o・д・)「わかりました、やりなおします」 (o・д・) (どうする?)
#ccc_m71 コメント - これは消せますか? (o・д・) (どうする?) 1. 先輩のいうことを受け入れる 2. 強行突破する(同じ主張を繰り返して折れるのを待つ)
3. 何か素敵な策を思いつく
#ccc_m71 コメント - これは消せますか? (o・д・) (・・・!) (o・д・) (修正範囲を妥当に見せかければあるいは) ・・・ (o・д・)「できました!もう一度レビューお願いします!」
#ccc_m71 コメント - これは消せますか? * ここで取った作戦 * 「できる限り不具合を酷く見せる」 * 史上最悪の不具合に見せかけるためにひたすら
発生条件を増やし続けて1週間 * 修正しても致し方ないと思える範囲を広げれば コメントアウトの削除も許されるはず…! * 一部コメントアウトの削除はあきらめる → コメントアウト部分の削減に成功!
#ccc_m71 コメント - これは消せますか? (まとめ) * 最善のコードを書くためには被害状況を盛ることも大事 * コメントアウト一つといえど舐めてかかってはならない *
現状のコードにはそれなりの理由があって成り立っている ことがわかった * とはいえJavaDoc形式でコメントアウトするのはやめろ * Javaっぽい話はこの次から →
#ccc_m71 テスト - これは直せますか? * 業務 * 誰かの書いたコードを読んで修正・追加がメイン * 状況
* バージョン管理あり * コードレビューあり * テストコードなし * 仕様ほぼなし (都度ベストな対応を考える)
#ccc_m71 テスト - これは直せますか? * 用語「動作確認・保証」 * 画面上で操作を行い、不具合が修正されているか・ 別の不具合が起きていないか・過去に修正した 不具合が再発していないかを確認すること
* 開発者でも同じように動作確認・保証を行う
#ccc_m71 テスト - これは直せますか? (o・д・)「画面ぽちぽちするの面倒」 (o・д・)「JUnitとかいうのあるんでしょ?」 (o・д・)「テストコードが大事って知ってるもん」 (o・д・)「テストファースト!」
#ccc_m71 テスト - これは直せますか? プライバシーに配慮して一部に目隠しを施しています
#ccc_m71 テスト - これは直せますか? _人人人人_ > ない <  ̄Y^Y^Y ̄
#ccc_m71 テスト - これは直せますか? (o;・д・)「な、なければ書けばいいんだよ」
#ccc_m71 テスト - これは直せますか? _人人人人人人人人_ > 突然のJ2SE1.4 <  ̄Y^Y^Y^Y^Y^Y^Y ̄
#ccc_m71 テスト - これは直せますか? * JUnit (基礎知識) * 現在の主流はJUnit4 *
アノテーションを使って簡易に記述できることが特長 * アノテーションが利用できるのはJ2SE1.5から
#ccc_m71 テスト - これは直せますか? _人人人人人人人人_ > しかしJ2SE1.4 <  ̄Y^Y^Y^Y^Y^Y^Y ̄
#ccc_m71 テスト - これは直せますか? (o;д;)「今からJUnit3勉強しても間に合わない...」 (o;д;)「関連オブジェクト多くてテストできない...」
#ccc_m71 テスト - これは直せますか? (o・д・)「...!」
#ccc_m71 テスト - これは直せますか? (o・д・)「テストしたいコード部分は1クラスのみ」 (o・д・)「確かCSVファイルをDBっぽく使えるものがある」 (o・д・)「この部分だけ抽出してテストを書けないか?」
#ccc_m71 テスト - これは直せますか? * 書けた http://bit.ly/1srLofN
#ccc_m71 テスト - これは直せますか? * やったこと(概要) * JDK8が有効になっているeclipseを別で用意 * DBUnit+MySQLでDB接続を再現
* テスト対象コードは本番に載せるものをほぼコピー (o・д・)「後方互換バンザイ」
#ccc_m71 テスト - これは直せますか? * 周囲への説明 (o・д・)「これがあれば開発者の画面テストがほぼ不要」 (*‘∀‘)「ほんとに?デグレ起こさない?」 (o・д・)「これが(修正前)→こうだったのが(赤) →こうして(修正後)→こうじゃ(緑)」
(*‘∀‘)「まぁ最初のテストとしてはよさそうだね...」 (o・д・) (お、まずまずの感触)
#ccc_m71 テスト - これは直せますか? * 結果 * 当該不具合についてはテストコードで修正の妥当性を 確認できるようになった *
周囲にJUnitの存在と有用性を少しアピールできた * 継続して実行する基盤を作る前に異動...
#ccc_m71 テスト - これは直せますか?(まとめ) * 「テストが大事」という金科玉条にこだわると進めない * できる範囲のことで全力を尽くす * JDK8が有効な開発環境を用意する
* 自分が触るコードだけでもテストを書く * 疑う人には実演が効果的 * 画面ぽちぽちにかかる時間を計っておくとなおよし
#ccc_m71 ここまでのまとめ - これはJavaですか? (o・д・)「少しずつコードも読みやすくなってきた」 (o・д・)「(自分のところだけとはいえ)テストコードも書いて デグレが起きづらくなってきた」 (o・д・)「この取り組みを広めたら製品はよりよくなるはず」
#ccc_m71 ここまでのまとめ - これはJavaですか? _人人人人人人人人人人人人人人_ > そううまくいくわけがない < Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y
#ccc_m71 周りに広める - これは使えますか? * ここまででわかったこと * 製品をよりよくするためにはコードの改善も必要 * 不要なコメントアウトの削除
* テストコードの追加 など * 一部ではなく全体的な改善が製品の品質向上に 役立つはず * とはいえいちいち前提を説明して回るのは面倒
#ccc_m71 周りに広める - これは使えますか? (o・д・)「これをほかの人にも広めたい」 (o・д・)「ちょうどいい機会(略)あるし伝えてみようか」 ・・・ (o・д・)「ということで、一気にとはいわずとも少しずつ 改善していくと全体の効率が云々」
#ccc_m71 周りに広める - これは使えますか? (´ー`)「それ、お客様の業務にとっては どんなメリットがあるの?」 (o・д・)「直接は関係ありませんが、何か不具合が見つかった 際に修正する効率が上がります」 (´ー`)「それ別にコードを書かなくても達成できるよね?」
#ccc_m71 周りに広める - これは使えますか? (o・д・) (そうだけどさぁ) (o・д・)「コードを書く手間はありますが 自動で確認できる以上は活用しない手はないかと」 (´ー`)「動作確認は最悪外部の人に依頼できるし、
開発者は不具合修正に集中してほしい」
#ccc_m71 周りに広める - これは使えますか? (o・д・) (そういう) (o・д・) (話じゃ) (o・д・) (ないんだ)
(o・д・) (YO!!!!!!!) (o・д・) (とはいっても通じないんだろうなぁ) (o・д・)「はい、わかりました」
#ccc_m71 周りに広める - これは使えますか? (o・д・)「自分1人だと効果アピールが弱いのかな」 (o・д・)「仲間を増やして全体が効率化していることを 示せばさすがに認められるはず」
#ccc_m71 周りに広める - これは使えますか? * また別の日 (o・д・)「こうすると開発が早くなるんだよー」 ('ω') 「でもこれ書けるようになるまで時間かかるでしょ」 (o・д・)「そんなにかからんよ、普段書いてるコードと
ほとんど同じだし」 ('ω') 「であれば目視確認のが早いんじゃない?慣れてるし... それにテストコードが間違ってたらどうするの?」 (o・д・) (Oh...)
#ccc_m71 周りに広める - これは使えますか? (o・д・)「もういいや...自分のとこだけがんばろ」
#ccc_m71 周りに広める - これは使えますか?(まとめ) * コードを書いて品質を向上させるという考え方は 意外と少数派 * まずは自分の行動で範を示すしかない (その前に異動したけど)
* 仲間を増やすにはわかりやすい実績が大事かもしれない
#ccc_m71 古のJava - これは変えられますか? * 古いJavaのままでも「製品として成立させる」ことは可能 * セキュリティの話は省略 * Javaを使っている製品のライフサイクルなども考慮して
バージョンについて話す必要がある * サポートが切れそうな製品のJavaを無理に上げる 必要があるか?
#ccc_m71 古のJava - これは変えられますか? * 開発者個人として古のJavaに出会ったときに打てる手(1) * 現行のJDKベースの開発環境を確保 * 製品に必須ではない部分(テストコード等)は
現行のJDKベースで書く * 必須でないところは最低限の手間で書く * IDEの設定でコメント部はできる限り薄い色にする * 見えなければどうということはない * だからJavaDoc形式でコメントアウトはやめろと
#ccc_m71 古のJava - これは変えられますか? * 開発者個人として古のJavaに出会ったときに打てる手(2) * 実績を積む * 自分が手を入れた部分でデグレを起こさない
* 修正にかかるコスト(工数)の可視化
#ccc_m71 古のJava - これは変えられますか? * 開発者個人として古のJavaに出会ったときに打てる手(3) * 最善を学び続ける * 取るべき手段をできるだけ増やす
* そのまま適用できるケースはないが 状況の中で最善を尽くすには最善を知るしかない
#ccc_m71 古のJava - これは変えられますか?(まとめ) * 正しい製品を正しく作るために * 今まで作り上げたものを直視する * コメントアウトにも相応の事情がある
* コードを使って品質を向上させる手段があることを示す * まずは自分のところからテストを書く * 仕様はテストコードで示す勢い * 最善を学び続ける
Thank You! #ccc_m71