Slide 1

Slide 1 text

JJUG CCC 2019 Springのまとめ ~Java歴1年なりの意見を添えて~ 京都Devかふぇ#6 〜JJUG CCC 2019 Spring 参加報告会(非公式)〜 フリュー株式会社 角田 拓己 a.k.a. chan_kaku

Slide 2

Slide 2 text

Who Twitter @chan_kakuz フリュー株式会社 サーバサイドエンジニア 時々フロント 普段はJava,Kotlin,Vueとか 好き chan_kaku

Slide 3

Slide 3 text

今回の京都Devかふぇ のテーマは

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

1人くらい振り返りやら ないと、、、

Slide 7

Slide 7 text

今回話す内容 ● 今回のCCCで話されていた内容の振り返り ● Java歴1年のペーペーエンジニアが感じたこと

Slide 8

Slide 8 text

Valhalla, update and future(David Buck)

Slide 9

Slide 9 text

Valhalla, update and future ● Project Valhallaについての紹介 ● 今後どうしていくか

Slide 10

Slide 10 text

The Goals of this Project is to provide a venue to explore and incubate advanced Java VM and Language feature candidates such as: ● Value Types ● Generic Specialization ● VarHandles ● Nestmates About Project Valhalla https://wiki.openjdk.java.net/display/valhalla/Main

Slide 11

Slide 11 text

Value Types オブジェクト プリミティブ String Integer float int

Slide 12

Slide 12 text

Value Types オブジェクト プリミティブ String Integer float int Value Types

Slide 13

Slide 13 text

Value Types 個人的に面白そうなところ ● ジェネリクスの型への型パラメータについて

Slide 14

Slide 14 text

Nestmates Nastedとは Class A Class B

Slide 15

Slide 15 text

Nestmates class A { class B{} }

Slide 16

Slide 16 text

Nestmates コンパイルすると、、、 A.class A$B.classと言う2つのクラスファイルにコンパイルされる

Slide 17

Slide 17 text

Nestmates A.class A$B.class JVMの解釈

Slide 18

Slide 18 text

Nestmates public class Outer { private int i = 0; public class Inner { public int i() { return i; } } }

Slide 19

Slide 19 text

Nestmates クラスファイル(Outer.class)のバイトコードをみてみる(Java Version <= 10)

Slide 20

Slide 20 text

Nestmates 誰や???

Slide 21

Slide 21 text

Nestmates access$000()の正体 インナークラスがクラスがprivateへのアクセスはコンパイラによって Outerクラスのパッケージprivateなアクセッサメソッド access$000()に変換される jasmとか使えばどこからでもprivateにアクセスでき てしまう

Slide 22

Slide 22 text

Nestmates Java Version >= 11

Slide 23

Slide 23 text

Nestmates Java 11以降ではaccess$000()を外部から呼べなくなった(多分)

Slide 24

Slide 24 text

感じたこと NestMatesについてはJava11らへんで調べていた Javaの実装がどうなっているかはあまり気にしたことがなかったが、ちょっと興味が出て きた

Slide 25

Slide 25 text

テストエンジニアが教える  JUnitを書き始める前に考えるべきテスト (風間 裕也)

Slide 26

Slide 26 text

内容 ● テストの目的 ● テストファーストで行うことの良さ ● 何をテストすれば良いのか

Slide 27

Slide 27 text

テストの目的 ● 欠陥の検出 ● 対象ソフトウェアの品質が十分であることの確認 ● 意思決定のための情報の提示 ● 欠陥の作り込みの防止 テストの7原則的にはテストは「欠陥があること」しか示せ ない

Slide 28

Slide 28 text

テストの目的 ● 欠陥の検出 ● 対象ソフトウェアの品質が十分であることの確認 ● 意思決定のための情報の提示 ● 欠陥の作り込みの防止 テストの7原則的にはテストは「欠陥があること」しか示せ ない 実装前に行うことも!

Slide 29

Slide 29 text

何をテストすべきか? 例題 http://www.slideshare.net/takashiyamasaki378/ss-55384920

Slide 30

Slide 30 text

何をテストすべきか? パスワードは4文字以上12文字以下の 英数字のみを許容する パスワードを3分以内に4回以上間違って入力すると アカウントを5分間 ロックする 文字列長 文字種 期間管理 回数管理 誤入力 誤入力 ロック保持期間 状態遷移 許容しないとどうなる? (ボタン制御orエラー画面) 5回目の入力はどうなる?

Slide 31

Slide 31 text

何をテストすべきか? 実はこの例では何もプログラムを書いていない - 実装前にテストをすることができる! - 実装前のレビューで指摘できれば、Fコストも大幅に削減することができる!

Slide 32

Slide 32 text

どうやってテストケースを作るのか? 何個の選択肢をテストするのか?

Slide 33

Slide 33 text

答え1 プルダウンの一番上と下をテストする - 最後の項目まで動くかどうかチェックする - 特に1番最後は大事! - 配列の最後の選択を i[46]ではなくi[47]にしていたり、、、

Slide 34

Slide 34 text

答え2 都、道、府、県の4パターン 選択したら以下の図のように出力されるような場合

Slide 35

Slide 35 text

テストケースを作るときに大事なこと なぜそのテストをするのか理由を考える - この理由がそのままテストの名前にすることができる

Slide 36

Slide 36 text

テストケースはいくつ? テストケースは時間さえあれば無限に作れる テスト設計技法 - 同値分割法 - 境界分析 - などなど、、、

Slide 37

Slide 37 text

境界値分析 4 12 有効 無効 無効 パスワードは4文字以上12文字以下 3 13 テスト原則:欠陥の偏在

Slide 38

Slide 38 text

感じたこと CCCでワークをしたのは初めてだったので、結構楽しかった 人によってどれくらいテストした方が良いのかと言う幅が違くて、結構難しいと思っていた ので、観点がわかったのはよかった テストのモチベーションが上がった

Slide 39

Slide 39 text

CCCの全体の感想

Slide 40

Slide 40 text

今回のCCCの感想 前回までは、KotlinやScalaなどJava以外の話が多かったイメージ 今回はJavaの話が多く、特に設計の話が多く、個人的には最近設計にはまっているの で、とても有意義であった だんだんと英語のセッションも増えてきている印象 英語頑張る

Slide 41

Slide 41 text

fin

Slide 42

Slide 42 text

参考 ● https://www.slideshare.net/DavidBuck7/valhalla-update-jjug-ccc-spring-2019 ● https://speakerdeck.com/nihonbuson/jjug-ccc-2019-spring