eclipse を使った java 開発 111126 杉浦

71
1 Eclipse を使った Java 開発 杉浦 Twitter: @urasandesu Blog: http://urasandesu.blogspot.com/

Upload: urasandesu

Post on 03-Jul-2015

4.973 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Eclipse を使った java 開発 111126 杉浦

1

Eclipse を使ったJava 開発

杉浦 彰Twitter: @urasandesu

Blog: http://urasandesu.blogspot.com/

Page 2: Eclipse を使った java 開発 111126 杉浦

2

はじめに

既に、 VB や C++ などの、他のプログラミング言語を使った開発を行ったことがある人向けの資料です。

Eclipse を使った基本的な Java 開発を行うための導入資料となります。

ソフトウェア構成管理の一部である、テスト自動化についても触れています。

Page 3: Eclipse を使った java 開発 111126 杉浦

3

Java http://java.com/en/オブジェクト指向プラットフォーム非依存(互換性重視)

ネットワーク機能を標準でセキュリティ開発のしやすさ(枯れた構文、 GC、マルチスレッド向け言語仕様)

Page 4: Eclipse を使った java 開発 111126 杉浦

4

Eclipse http://www.eclipse.org/統合開発環境( IDE) 元は IBM が開発→ OSS 化豊富なプラグインデバッグ・ステップ実行コード編集支援(自動補完、自動追加、自動生成)

Page 5: Eclipse を使った java 開発 111126 杉浦

5

インストール

なにはともあれ、開発環境

Page 6: Eclipse を使った java 開発 111126 杉浦

6

Eclipse 3.7 Indigo(EE) 32bit 版

– eclipse-jee-indigo-SR1-win32.zip 64bit 版

– eclipse-jee-indigo-SR1-win32-x86_64.zip

適当なフォルダへ解凍 これだけ?

– これだけ。– コンパイラは同梱されてる。– ベンダにより微妙に挙動が違うのはよくある話。

最終的には標準的な環境で試すのが吉。

Page 7: Eclipse を使った java 開発 111126 杉浦

7

Hello, world!!

さっそく動かして見る

Page 8: Eclipse を使った java 開発 111126 杉浦

8

1. Eclipse を起動し、ワークスペースを指定。

Page 9: Eclipse を使った java 開発 111126 杉浦

9

2. Welcome 画面。とりあえず閉じる。

Page 10: Eclipse を使った java 開発 111126 杉浦

10

3. Package Explorer ビューで右クリック、[New]→[Project] を選択。

Page 11: Eclipse を使った java 開発 111126 杉浦

11

4. New Project ダイアログが開いたら、 [Java Project] を選択し、 [Next] ボタンをクリック。

Page 12: Eclipse を使った java 開発 111126 杉浦

12

5. New Java Project ダイアログが開いたら、[Project name] に “HelloWorld” を入力し、[Finish] ボタンをクリック

Page 13: Eclipse を使った java 開発 111126 杉浦

13

6. Package Explorer ビューにできたHelloWorld プロジェクトの中にある src フォルダを右クリック、 [New]→[Class] を選択。

Page 14: Eclipse を使った java 開発 111126 杉浦

14

7. New Java Class ダイアログが開いたら、[Name] に “Main” を入力し、 [Finish] をクリック。

Page 15: Eclipse を使った java 開発 111126 杉浦

15

8. Main.java をダブルクリックして開き、以下のようなコードを入力。

public class Main {

public static void main(String[] args) {

System.out.println("Hello, world!!");

}

}

Page 16: Eclipse を使った java 開発 111126 杉浦

16

9. 一通り入力が終わったら保存。 Problems ビューにビルドエラーが検出されていないことを確認。

Page 17: Eclipse を使った java 開発 111126 杉浦

17

10. Package Explorer ビューの Main.java を右クリック、 [Debug As]→[Java Application]。

Page 18: Eclipse を使った java 開発 111126 杉浦

18

11. 実行結果が Console ビューに表示される。

Page 19: Eclipse を使った java 開発 111126 杉浦

19

せっかくなら・・・

環境のカスタマイズ自分やメンバのお好みで

Page 20: Eclipse を使った java 開発 111126 杉浦

20

フォントの種類やサイズを変える [Window] – [Preferences]

[General] – [Appearance] – [Colors and Fonts]

Page 21: Eclipse を使った java 開発 111126 杉浦

21

行番号を表示 /列ガイドを表示 [Window] – [Preferences]

[General] – [Editors] – [Text Editors] – [Show line numbers]

[General] – [Editors] – [Text Editors] – [Show print margin] [Print margin column] に桁数を入力

Page 22: Eclipse を使った java 開発 111126 杉浦

22

シンタックスハイライトをカスタマイズ [Window] – [Preferences]

[Java ] – [Editor] – [Syntax Coloring]

Page 23: Eclipse を使った java 開発 111126 杉浦

23

タブ派 v.s. スペース派 [Window] – [Preferences]

[Java ] – [Code Style] – [Formatter] – [Edit] ボタンクリック

[Profile name] にわかりやすい名前を入力 [Indentation] タブの [Tab policy] を変更

Page 24: Eclipse を使った java 開発 111126 杉浦

24

1 行に入る文字数 [Window] – [Preferences]

[Java ] – [Code Style] – [Formatter] – [Edit] ボタンクリック

[Profile name] にわかりやすい名前を入力 [Line Wrapping] タブの [Maximum line width] を変更

Page 25: Eclipse を使った java 開発 111126 杉浦

25

設定のインポート /エクスポート

インポート– [File] – [Import]

[General] – [Preferences] – [Next] ボタンクリック [From preference file] に他のマシンからエクスポートした設定ファイルを指定し、 [Finish]

エクスポート– [File] – [Export]

[General] – [Preferences] – [Next] ボタンクリック [Export all] チェックボックスをチェック [To preference file] にエクスポートする設定ファイルパスを指定し、 [Finish]

Page 26: Eclipse を使った java 開発 111126 杉浦

26

他にも色々?

Eclipse の真骨頂

Page 27: Eclipse を使った java 開発 111126 杉浦

27

例えば、静的解析ツール

バグの元になりやすそうなパターンを指摘– 無効な引数– 変数の初期化し忘れ– コメントの有無

Eclipse で使える静的テストツール - @IT– http://www.atmarkit.co.jp/fjava/rensai3/eclipsetst02/eclipsetst02_1.html

Page 28: Eclipse を使った java 開発 111126 杉浦

28

Checkstyle

代表的な静的解析ツールを使ってみるプラグインの導入方法も

Page 29: Eclipse を使った java 開発 111126 杉浦

29

Checkstyle

http://checkstyle.sourceforge.net/ Java のための静的解析ツール 主にコーディング規約が遵守されてるかどうか– 空白スペースの記述位置– クラス名、メソッド名、定数、変数などの命名規則

– Sun のコーディング規約があらかじめ提供される

Page 30: Eclipse を使った java 開発 111126 杉浦

30

あと、プラグイン Eclipse に新しい機能を付けられる 柔軟性は非常に高い

– Java 以外の言語でも Eclipse を利用可能に!– C+

+、 PHP、 Perl、 C#、 D、 TeX、 Python、Ruby、 JavaScript、 COBOL…

簡単な導入機能– ただし、 Eclipse 3.4 以降

Checkstyle もこれに対応したプラグインを配布– http://eclipse-cs.sourceforge.net/

Page 31: Eclipse を使った java 開発 111126 杉浦

31

1. [Help] メニューの [Install New Software]

Page 32: Eclipse を使った java 開発 111126 杉浦

32

2. Install ダイアログが開いたら、[Add] ボタンをクリック

Page 33: Eclipse を使った java 開発 111126 杉浦

33

3. Add Repository ダイアログが開いたら、[Name] にわかりやすい名前入力し、 [Archive] ボタンをクリック

Page 34: Eclipse を使った java 開発 111126 杉浦

34

4. ダウンロードした zip ファイルを指定し、[OK] ボタンをクリック

Page 35: Eclipse を使った java 開発 111126 杉浦

35

5. [Select All] ボタンをクリックし、 続けて [Next] ボタンをクリック

Page 36: Eclipse を使った java 開発 111126 杉浦

36

6. [Next] ボタンをクリック

Page 37: Eclipse を使った java 開発 111126 杉浦

37

7.License Agreement を確認し、 [Finish] ボタンをクリック

Page 38: Eclipse を使った java 開発 111126 杉浦

38

8.Warning ダイアログが出てもそのまま進める

Page 39: Eclipse を使った java 開発 111126 杉浦

39

9.Eclipse の再起動を促されるので、再起動

Page 40: Eclipse を使った java 開発 111126 杉浦

40

10.試しに最初のプログラムをチェックしてみる。 – 右クリック [Checkstyle] – [Check Code

with Checkstyle]

Page 41: Eclipse を使った java 開発 111126 杉浦

41

11.指摘たくさん!

Page 42: Eclipse を使った java 開発 111126 杉浦

42

12. プロジェクトや個人で使いたいものに絞り込む。 [Window] – [Preferences]

[Checkstyle] デフォルトの Check Configuration をコピーするなどして、使うチェックだけにカスタマイズ

Page 43: Eclipse を使った java 開発 111126 杉浦

43

ソフトウェア構成管理はじめの一歩

急に JUnit に入ってもアレかと・・・すみません・・・前置き長いかもです

Page 44: Eclipse を使った java 開発 111126 杉浦

44

例えばこんな問題

しっかり直したはずの不具合が、いつの間にか復活してる!

このバージョンのマスタがあったはずなのだけど、どこに行った?

追加したはずの機能が、他の人の手違いで上書き /削除されてしまった!

特定の PC にしか最新版のソースがない、特定の人しかビルド /リリースできない・・・。

ある機能の実装を担当していた人が突然いなくなってしまった!

Page 45: Eclipse を使った java 開発 111126 杉浦

45

例えば、「しっかり直したはずの不具合が~」

何が起こった?(他に影響はない?) いつから? どのリリースから?(仕向け地毎 /機器毎にカスタマイズしてる場合とか)

誰が?(我々?それとも別会社?) なぜそれが入り込んだ?

再発防止策、作ってよ?

不具合が出ちゃったものはしょうがないけど、

ちゃんと説明してよね!

Page 46: Eclipse を使った java 開発 111126 杉浦

46

これらの問題を解決するために

ソフトウェア構成管理Software Configuration Management: SCM

構成管理=構成管理=品質管理+変更履歴管理品質管理+変更履歴管理

Page 47: Eclipse を使った java 開発 111126 杉浦

47

品質管理と変更履歴管理

品質管理–要求 /障害の管理–リリース計画

変更履歴管理–作業記録–複数メンバによる共同作業時の決め事

Page 48: Eclipse を使った java 開発 111126 杉浦

48

ただ・・・ 例えば、不具合を不具合管理用の帳票で

↓ 過去に似たようなもの直したはずだから、参考にしたい・・・でも、どこにあるの?

そもそも帳票の最新版はどれ?

不具合管理帳票の変更管理表過去に修正した不具合の一覧表それらの文書をまとめる管理表

・・・あれ?

Page 49: Eclipse を使った java 開発 111126 杉浦

49

自動化、しましょうか・・・

脱・属人性方法論があるのであれば、なるべく

Page 50: Eclipse を使った java 開発 111126 杉浦

50

品質管理ツール

要求 /障害の管理– Mantis/Trac/Redmine

リリース計画–継続的インテグレーション

Continuous Integration: CIビルド自動化( xmake/xant)テスト自動化( xUnit)

Page 51: Eclipse を使った java 開発 111126 杉浦

51

変更履歴管理ツール

第 1 世代– SCCS/RCS

第 2 世代– CVS/SVN/VSS

第 3 世代– Bazaar/Git/Mercurial

Page 52: Eclipse を使った java 開発 111126 杉浦

52

寄り道

品質管理とか変更履歴管理とか、他の部分のための社内勉強会もあるといいですね。

オープン系は結構情報出てくるんですけど、基幹系はこの辺りどうなってるんでしょう?xUnit の類に COBOLUnit ってツールもあるみたい?

– COBOL→Java 載せ換えみたいなプロジェクトでこの辺りの話はあるのか~とか。

– せっかく載せかえるのだから、バッチ処理の負荷分散とか並列処理とか~とか。

Page 53: Eclipse を使った java 開発 111126 杉浦

53

JUnit

今回は、テスト自動化ということで

Page 54: Eclipse を使った java 開発 111126 杉浦

54

JUnit

http://www.junit.org/ Java 向けのユニットテスト(単体テスト)自動化フレームワーク

Smalltalk の SUnit を元にケント・ベックらが中心となって開発

Eclipse EE には標準で同梱

Page 55: Eclipse を使った java 開発 111126 杉浦

55

1. Package Explorer を右クリック→ [New]→[JUnit Test Case]

Page 56: Eclipse を使った java 開発 111126 杉浦

56

2. New JUnit Test Case ダイアログが開いたら、Name にわかりやすい名前を入れ、 [Finish] ボタンをクリック

Page 57: Eclipse を使った java 開発 111126 杉浦

57

3. 実行。 [Debug As]→[JUnit Test]

Page 58: Eclipse を使った java 開発 111126 杉浦

58

4. JUnit ビューが自動的に表示される。まだ失敗。

Page 59: Eclipse を使った java 開発 111126 杉浦

59

5. テストを追加。 標準出力に Hello, world!! が出力されるんだっけ

。public class MainTest { @Test public void test() { // 設定 ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(baos); System.setOut(ps); // 実行 Main.main(new String[] {}); // 検証 Assert.assertEquals("Hello, world!!\r\n", baos.toString()); }}

Page 60: Eclipse を使った java 開発 111126 杉浦

60

6. もう一度実行→成功した!

Page 61: Eclipse を使った java 開発 111126 杉浦

61

機能を追加してみる

引数に与えた文字列を計算させる。イメージ

$> java Main + 1 1

Result: 2

Page 62: Eclipse を使った java 開発 111126 杉浦

62

7. テストの修正。public class MainTest { @Test public void test_main01Add() { // 設定 ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(baos); System.setOut(ps); // 実行 Main.main(new String[] {"+", "1", "1"}); // 検証 Assert.assertEquals("Result: 2\r\n", baos.toString()); }}

Page 63: Eclipse を使った java 開発 111126 杉浦

63

8. 実行。もちろん失敗する。

Page 64: Eclipse を使った java 開発 111126 杉浦

64

9.機能の変更。これでいいかな?

public class Main {

public static void main(String[] args) {

if (args[0].equals("+")) {

int x = Integer.parseInt(args[1]);

int y = Integer.parseInt(args[2]);

System.out.println(

String.format(

"Result: %d", x + y));

}

}

}

Page 65: Eclipse を使った java 開発 111126 杉浦

65

10.再度実行。O.K.!!

Page 66: Eclipse を使った java 開発 111126 杉浦

66

でも、ほんとにこれで大丈夫?

引数に何も与えられない場合は?引数が空の場合は?引数の数が足らない場合は?多すぎる場合は?

引数が数字じゃない場合は?

Page 67: Eclipse を使った java 開発 111126 杉浦

67

不安をテストに

怪しいのは非対称なパターン、異常系テストが書けないのは、仕様や設計が不明確なことも多々– “+”以外はなんかないの?

聞いて見ると、“ -”, “*”, “/” も必要だった!–整数の演算しかないの?

聞いて見ると、小数点付きの数や 16 進数の計算も必要だった!

実は、文字列の結合もしたいという要望もあった!

Page 68: Eclipse を使った java 開発 111126 杉浦

68

自動化しておくことで

仕様の変更や機能の追加に対しては・・・– 前にあった機能と実は競合してた、みたいなことが早めにわかる

– 処理の流れを整理したい、というときに安心してできる(リファクタリング)

– 新しく入った人に、勉強も兼ねて安全に触ってもらえる

一通り完成した後の保守でも・・・– 不具合対応が、もし他の場所に影響していた場合に検出しやすくなる(デグレの検出)

Page 70: Eclipse を使った java 開発 111126 杉浦

70

ハマりやすいところをいくつか

プリミティブ型(値型)と参照型– ラッパー型と Auto Boxing/Unboxing の動き

Integer i = null; // コンパイル可!int ii = i; // 実行時に NullPointerException!

演算子のオーバーロードはありません– String の同値比較は、 equals メソッドで

「リソースの確保は初期化時に( Resource Acquisition Is Initialization: RAII)」できません( Java 6 まで)– 例外安全にするには、 finally 文や Rent パターン

– Java 7 からは拡張 try 文が使える

Page 71: Eclipse を使った java 開発 111126 杉浦

71

Java を使ったプロジェクトならではの問題も?

変な規約– 設計書に書かれたクラスしか作ってはいけない!

初期のころの不具合やパフォーマンスの問題が未だに信じられている?

古いバージョンしか使えない– Java 4、 Java 5 は現役!

社内フレームワークがバージョンアップに付いて行けていない?

15 年前に出た言語なので、他にもありそう– ただ、未だに一番人気がある言語という地位を守っている事実!

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html