4-1-応 javaに関する知識ossモデルカリキュラムの学習ガイダンス 4-1-応...

23
OSS モデルカリキュラムの学習ガイダンス 4-1-Java に関する知識 1. 科目の概要 Java 言語が利用される Web アプリケーション開発を題材として、Java プログラミング の応用知識を解説する。また、アプリケーション開発に必要な文字コードやテスト、スレ ッドなどの周辺知識についても解説する。 2. 習得ポイント 本科目の学習により習得することが期待されるポイントは以下の通り。 習得ポイント シラバスの対応コマ 4-1-応-1.文字コードと国際化 文字データを扱うために必要な文字コードについて解説する。また、国際化として OpenI18N(Open Internationalization)の概要を説明し、Javaにおける国際化の手法として、 ロケールの設定とそれにあわせた書式の変換方法を解説する。 2 4-1-応-2.テストとデバッグ OSSの品質保証活動を支援する、テストとデバッグの手順を解説する。また、OSSの単体テス トを自動化するフレームワーク、カバレジ測定ツール、デバッグツールなどを紹介し、その使 用方法を説明する。 3 4-1-応-3.スレッドと同期 スレッドプログラミングの概要と特徴を説明する。Javaによるスレッドプログラミングを解説し、 共有や同期処理についても言及する。 4 4-1-応-4.ネットワークプログラミング Javaによるネットワークプログラミングの概要、特徴を説明する。ネットワークプログラミングの 基礎であるソケットを用いたセッション管理について、Javaを例題として説明する。 5 4-1-応-5.Javaを利用したGUIアプリケーション GUIプログラミングのためのフレームワークと、その利用方法を紹介する。各コンポーネントの 解説とともに、イベントドリブンの考え方の説明を行う。 6,7 4-1-応-6.MVCアーキテクチャの基本と特徴 Javaアプリケーションを例題として、Webアプリケーションの基本アーキテクチャとして想定さ れるMVC (Model-View-Controller)モデルの内容とメリットについて解説する。それぞれを 構成する要素技術を示し、モデルとの対応関係について説明する。 8 4-1-応-7.EJBによるアプリケーション開発の基本 EJB (Enterprise Java Beans)を活用したアプリケーション開発の概要を説明する。EJBコンテ ナの仕組みやトランザクション処理の手順など、実際のプログラミング事例を示しつつ具体的 な手法について解説する。 10 4-1-応-8.EJBによるビジネスロジックの実装 3層アーキテクチャにおけるビジネスロジック、およびデータアクセス部分の実装について解 説する。具体的な例としてEJB3.0仕様に基づいたEntityクラス、およびSession Beanのプロ グラミング例を示す。 11,12 4-1-応-9.JDBCによるデータベースの操作 JDBC (Java DataBase Connectivity)の基本と歴史、特徴について示し、JDBCを利用した データベースの操作方法について解説する。JDBCによるデータベース操作の具体的な方 法やプログラミング例を示し、データベース操作の基本手順を紹介する。 9,13 4-1-応-10.コードリーディング オープンソースソフトウェアを読み解くことの意義を説明し、コードリーディングに有効な手法 として、関連するドキュメント類の参照方法や、データ構造と処理の流れを読み解く方法を説 明する。更に解析に有用な統合開発環境やツール類の紹介を行う。 14 【学習ガイダンスの使い方】 1. 「習得ポイント」により、当該科目で習得することが期待される概念・知識の全体像を把握する。 2. 「シラバス」、「IT 知識体系との対応関係」、「OSS モデルカリキュラム固有知識」をもとに、必要に応じて、 従来の IT 教育プログラム等との相違を把握した上で、具体的な講義計画を考案する。 3. 習得ポイント毎の「学習の要点」と「解説」を参考にして、講義で使用する教材等を準備する。 独立行政法人 情報処理推進機構

Upload: others

Post on 03-Apr-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

OSS モデルカリキュラムの学習ガイダンス

4-1-応 Java に関する知識 ※ 1. 科目の概要

Java 言語が利用される Web アプリケーション開発を題材として、Java プログラミング

の応用知識を解説する。また、アプリケーション開発に必要な文字コードやテスト、スレ

ッドなどの周辺知識についても解説する。

2. 習得ポイント 本科目の学習により習得することが期待されるポイントは以下の通り。

習得ポイント 説 明 シラバスの対応コマ

4-1-応-1.文字コードと国際化文字データを扱うために必要な文字コードについて解説する。また、国際化としてOpenI18N(Open Internationalization)の概要を説明し、Javaにおける国際化の手法として、ロケールの設定とそれにあわせた書式の変換方法を解説する。

2

4-1-応-2.テストとデバッグOSSの品質保証活動を支援する、テストとデバッグの手順を解説する。また、OSSの単体テストを自動化するフレームワーク、カバレジ測定ツール、デバッグツールなどを紹介し、その使用方法を説明する。

3

4-1-応-3.スレッドと同期スレッドプログラミングの概要と特徴を説明する。Javaによるスレッドプログラミングを解説し、共有や同期処理についても言及する。

4

4-1-応-4.ネットワークプログラミングJavaによるネットワークプログラミングの概要、特徴を説明する。ネットワークプログラミングの基礎であるソケットを用いたセッション管理について、Javaを例題として説明する。

5

4-1-応-5.Javaを利用したGUIアプリケーションGUIプログラミングのためのフレームワークと、その利用方法を紹介する。各コンポーネントの解説とともに、イベントドリブンの考え方の説明を行う。

6,7

4-1-応-6.MVCアーキテクチャの基本と特徴Javaアプリケーションを例題として、Webアプリケーションの基本アーキテクチャとして想定されるMVC (Model-View-Controller)モデルの内容とメリットについて解説する。それぞれを構成する要素技術を示し、モデルとの対応関係について説明する。

8

4-1-応-7.EJBによるアプリケーション開発の基本EJB (Enterprise Java Beans)を活用したアプリケーション開発の概要を説明する。EJBコンテナの仕組みやトランザクション処理の手順など、実際のプログラミング事例を示しつつ具体的な手法について解説する。

10

4-1-応-8.EJBによるビジネスロジックの実装3層アーキテクチャにおけるビジネスロジック、およびデータアクセス部分の実装について解説する。具体的な例としてEJB3.0仕様に基づいたEntityクラス、およびSession Beanのプログラミング例を示す。

11,12

4-1-応-9.JDBCによるデータベースの操作JDBC (Java DataBase Connectivity)の基本と歴史、特徴について示し、JDBCを利用したデータベースの操作方法について解説する。JDBCによるデータベース操作の具体的な方法やプログラミング例を示し、データベース操作の基本手順を紹介する。

9,13

4-1-応-10.コードリーディングオープンソースソフトウェアを読み解くことの意義を説明し、コードリーディングに有効な手法として、関連するドキュメント類の参照方法や、データ構造と処理の流れを読み解く方法を説明する。更に解析に有用な統合開発環境やツール類の紹介を行う。

14

※ 【学習ガイダンスの使い方】

1. 「習得ポイント」により、当該科目で習得することが期待される概念・知識の全体像を把握する。 2. 「シラバス」、「IT 知識体系との対応関係」、「OSS モデルカリキュラム固有知識」をもとに、必要に応じて、

従来の IT 教育プログラム等との相違を把握した上で、具体的な講義計画を考案する。 3. 習得ポイント毎の「学習の要点」と「解説」を参考にして、講義で使用する教材等を準備する。

独立行政法人 情報処理推進機構

Page 2: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

OSS モデルカリキュラムの学習ガイダンス

3. IT 知識体系との対応関係 「4-1-応 Java に関する知識」と IT 知識体系との対応関係は以下の通り。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

4-1-応 Javaに関する

知識統合開発環境の利用

文字コードと国際化

テストとデバッグ スレッドと同期 ネットワーク

GUIアプリケーション開発・1(GUIとイベントハンドラ)

GUIアプリケーション開発・2(GUIコンポーネント)

MVCモデルJDBCによるデータベースアクセス

EJBによるアプリケーション開発

JavaによるServer処理実装の特徴と設計方法

JavaによるWebアプリケーションの設計/実装

JavaによるServer SideJava/Webアプリケーション実装

コードリーディングJavaアプリケーションのチューニング

科目名応用レベル

<IT 知識体系上の関連部分> 科目名 1 2 3 4 5 6 7 8 9 10 11 12 13

1IT-IAS 情報保証と情報セキュリティ

IT-IAS1.基礎的な問題

IT-IAS2.情報セキュリティの仕組み(対策)

IT-IAS3.運用上の問題

IT-IAS4.ポリシー IT-IAS5.攻撃IT-IAS6.情報セキュリティ分野

IT-IAS7.フォレンジック(情報証拠)

IT-IAS8.情報の状態

IT-IAS9.情報セキュリティサービス

IT-IAS10.脅威分析モデル

IT-IAS11.脆弱性

2

IT-SP 社会的な観点とプロフェッショナルとしての課題

IT-SP1.プロフェッショナルとしてのコミュニケーション

IT-SP2.コンピュータの歴史

IT-SP3.コンピュータを取り巻く社会環境

IT-SP4.チームワーク

IT-SP5.知的財産権

IT-SP6.コンピュータの法的問題

IT-SP7.組織の中のIT

IT-SP8.プロフェッショナルとしての倫理的な問題と責任

IT-SP9.プライバシーと個人の自由

3 IT-IM 情報管理IT-IM1.情報管理の概念と基礎

IT-IM2.データベース問合わせ言語

IT-IM3.データアーキテクチャ

IT-IM4.データモデリングとデータベース設計

IT-IM5.データと情報の管理

IT-IM6.データベースの応用分野

4IT-WS Webシステムとその技術

IT-WS1.Web技術 [1-Ⅰ-7]

IT-WS2.情報アーキテクチャ [1-Ⅰ-7]

IT-WS3.デジタルメディア

IT-WS4.Web開発 IT-WS5.脆弱性IT-WS6.ソーシャルソフトウェア

5IT-PF プログラミング基礎

IT-PF1.基本データ構造

IT-PF2.プログラミングの基本的構成要素

IT-PF3.オブジェクト指向プログラミング

IT-PF4.アルゴリズムと問題解決

IT-PF5.イベント駆動プログラミング

IT-PF6.再帰

6IT-IPT 技術を統合するためのプログラミング

IT-IPT1.システム間通信 [1-Ⅰ-3]

IT-IPT2.データ割り当てと交換

IT-IPT3.統合的コーディング

IT-IPT4.スクリプティング手法

IT-IPT5.ソフトウェアセキュリティの実現

IT-IPT6.種々の問題

IT-IPT7.プログラミング言語の概要

7CE-SWE ソフトウェア工学

CE-SWE0.歴史と概要

CE-SWE1.ソフトウェアプロセス

CE-SWE2.ソフトウェアの要求と仕様

CE-SWE3.ソフトウェアの設計

CE-SWE4.ソフトウェアのテストと検証

CE-SWE5.ソフトウェアの保守

CE-SWE6.ソフトウェア開発・保守ツールと環境 [1-Ⅰ-4]

CE-SWE7.ソフトウェアプロジェクト管理

CE-SWE8.言語翻訳CE-SWE9.ソフトウェアのフォールトトレランス

CE-SWE10.ソフトウェアの構成管理

CE-SWE11.ソフトェアの標準化 [1-Ⅰ-6]

8

IT-SIA システムインテグレーションとアーキテクチャ

IT-SIA1.要求仕様IT-SIA2.調達/手配

IT-SIA3.インテグレーション [1-Ⅰ-4]

IT-SIA4.プロジェクト管理

IT-SIA5.テストと品質保証

IT-SIA6.組織の特性

IT-SIA7.アーキテクチャ

9IT-NET ネットワーク

IT-NET1.ネットワークの基礎

IT-NET2.ルーティングとスイッチング

IT-NET3.物理層IT-NET4.セキュリティ

IT-NET5.アプリケーション分野 [1-Ⅰ-5]

IT-NET6.ネットワーク管理

CE-NWK0.歴史と概要

CE-NWK1. 通信ネットワークのアーキテクチャ

CE-NWK2.通信ネットワークのプロトコル

CE-NWK3.LANとWAN

CE-NWK4.クライアントサーバコンピューティング [1-Ⅰ-3]

CE-NWK5.データのセキュリティと整合性

CE-NWK6.ワイヤレスコンピューティングとモバイルコンピューティング

CE-NWK7.データ通信

CE-NWK8.組込み機器向けネットワーク

CE-NWK9.通信技術とネットワーク概要

CE-NWK10.性能評価

CE-NWK11.ネットワーク管理

CE-NWK12.圧縮と伸張

CE-NWK13.クラスタシステム

CE-NWK14.インターネットアプリケーション [1-Ⅰ-5,7]

CE-NWK15.次世代インターネット

CE-NWK16.放送

11IT-PT プラットフォーム技術

IT-PT1.オペレーティングシステム [1-Ⅰ-3]

IT-PT2.アーキテクチャと機構

IT-PT3.コンピュータインフラストラクチャ

IT-PT4.デプロイメントソフトウェア [1-Ⅰ-4]

IT-PT5.ファームウェア

IT-PT6.ハードウェア

12CE-OPS オペレーティングシステム

CE-OPS0.歴史と概要

CE-OPS1.並行性CE-OPS2.スケジューリングとディスパッチ

CE-OPS3.メモリ管理

CE-OPS4.セキュリティと保護

CE-OPS5.ファイル管理

CE-OPS6.リアルタイムOS

CE-OPS7.OSの概要CE-OPS8.設計の原則

CE-OPS9.デバイス管理

CE-OPS10.システム性能評価

コンピュー

ハー

ドウェ

アと

アー

キテクチャ

13CE-CAO コンピュータのアーキテクチャと構成

CE-CAO0.歴史と概要

CE-CAO1.コンピュータアーキテクチャの基礎

CE-CAO2.メモリシステムの構成とアーキテクチャ

CE-CAO3.インタフェースと通信

CE-CAO4.デバイスサブシステム

CE-CAO5.CPUアーキテクチャ

CE-CAO6.性能・コスト評価

CE-CAO7.分散・並列処理

CE-CAO8.コンピュータによる計算

CE-CAO9.性能向上

14 IT-ITF IT基礎IT-ITF1.ITの一般的なテーマ [1-Ⅰ-4]

IT-ITF2.組織の問題

IT-ITF3.ITの歴史

IT-ITF4.IT分野(学科)とそれに関連のある分野(学科)

IT-ITF5.応用領域IT-ITF6.IT分野における数学と統計学の活用

CE-ESY0.歴史と概要

CE-ESY1.低電力コンピューティング

CE-ESY2.高信頼性システムの設計

CE-ESY3.組込み用アーキテクチャ

CE-ESY4.開発環境CE-ESY5.ライフサイクル

CE-ESY6.要件分析 CE-ESY7.仕様定義 CE-ESY8.構造設計 CE-ESY9.テストCE-ESY10.プロジェクト管理

CE-ESY11.並行設計(ハードウェア、ソフトウェア

CE-ESY12.実装

CE-ESY13.リアルタイムシステム設計

CE-ESY14.組込みマイクロコントローラ

CE-ESY15.組込みプログラム

CE-ESY16.設計手法

CE-ESY17.ツールによるサポート

CE-ESY18.ネットワーク型組込みシステム

CE-ESY19.インタフェースシステムと混合信号システム

CE-ESY20.センサ技術

CE-ESY21.デバイスドライバ

CE-ESY22.メンテナンス

CE-ESY23.専門システム

CE-ESY24.信頼性とフォールトトレランス

複数領域にまたがるもの

15CE-ESY 組込みシステム

システム基盤

10CE-NWK テレコミュニケーション

分野

組織関連事項と情報システム

応用技術

ソフトウェ

アの方法と技術

独立行政法人 情報処理推進機構

Page 3: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

OSS モデルカリキュラムの学習ガイダンス

独立行政法人 情報処理推進機構

4. OSS モデルカリキュラム固有の知識 OSS モデルカリキュラム固有の知識として、Java 言語のフレームワークによる Web 開

発の特徴、開発手法がある。EJB、Servlet による Web システムを、OSS を用いて実際に

構築する事例を通して、実践的な知識を習得する。 科目名 第1回 第2回 第3回 第4回 第5回 第6回 第7回

(1) Javaの開発手順 (1) 文字コード (1) テスト (1) 並列処理 (1) ネットワークプログラミングの概要

(1) Swing (1) GUIの形式

(2) 統合開発環境Eclipse

(2) 国際化 (2) デバッグ (2) マルチスレッドの実装

(2) Swingにおけるイベントドリブン

第8回 第9回 第10回 第11回 第12回 第13回 第14回 第15回

(1) MVCアーキテクチャとは

(1) JDBCの概念と接続形態

(1) EJBの概要 (1) JavaによるServer処理の実装方法

(1) 業務の設計 (1) 構築実習 (1) ソースコードリーディング

(1) パフォーマンスチューニングの戦略

(2) MVCアーキテクチャのメリット

(2) JDBCプログラミング

(2) トランザクション処理

(2) データベース処理 (2) Java開発の具体的な作業項目

(2) コード解析手法 (2) プロファイリングの手法

(3) Servlet/JSP/JavaBeansの役割

(3)PreparedStatementの利用方法とそのメリッ

(3) プログラミング事例

(3) 構築実例の紹介 (3) 解析手順 (3) JVMのチューニング

(4) システム機能/非機能要件への対応

(4) トランザクション(Transaction)処理

(4) 読みやすいコード

(5) データソース、JDBC

4-1-応 Javaに関する知識

(2) GUIコンポーネント(JLabel、JButton、JCheckBox、JRadioButton、JTextArea、など)

(網掛け部分は IT 知識体系で学習できる知識を示し、それ以外は OSS モデルカリキュラム固有の知識を示している)

Page 4: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 1

スキル区分 OSS モデルカリキュラムの科目 レベル

プログラミング分野 4-1-応 Java に関する知識 応用

習得ポイント 4-1-応-1. 文字コードと国際化

対応する

コースウェア

第 2 回 文字コードと国際化

4-1-応-1. 文字コードと国際化

文字データを扱うために必要な文字コードについて解説する。また、国際化として OpenI18N(Open

Internationalization)の概要を説明し、Java における国際化の手法として、ロケールの設定とそれに

あわせた書式の変換方法を解説する。

【学習の要点】

* コンピュータ上で文字を扱うためには文字コードを設定する必要がある。

* 様々な言語や地域にソフトウェアを適合させるため、LSB(Linux Standard Base)の一部である

OpenI18N には、オープンソースソフトウェアの国際化対応に関する標準仕様が策定されてい

る。

* 言語、地域(国)、地域固有の言語(オプション)から構成されるロケールの設定にあわせて、国際

化のプログラミングが可能である。

図 4-1-応-1 文字コードと文字化け

Page 5: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 2

【解説】

1) 文字コード

文字や記号をコンピュータ上で扱うために関連付けられた値のこと、もしくは、その体系を文字コー

ドと呼ぶ。英数字は 1 バイトで表わされ、ASCII がほぼ世界標準である。日本語や中国語、韓国語

などは独自に定めた文字コードを使用するが、異なる文字コードで書かれた文字を表示すると正

常に表示されないなど、互換性に問題が残る。日本で主に使われている文字コードは以下の通り

である。

* Shift-JIS

日本語の文字コードの一つ。Windows や Mac OS で使われる。

* EUC(Extended Unix Code)

Unix や Linux で使われる文字コード。

* Unicode

世界中の言語の文字を単一のコードで扱うための文字コード。Java において、プログラム内部

での文字列は Unicode で扱われる。

* UTF-8

Unicode の符号化方式の一つ。Linux のディストリビューションによっては UTF-8 を OS 標準の

文字コードとしている。Mac OS X で使われる。

2) 国際化

国際化とは、国や地域によって異なる言語や通貨といったものに、ソフトウェアを対応付けることで

ある。LSBの一部であるOpenI18Nには、オープンソースソフトウェアの国際化対応に関する標準仕

様が策定されている。

* ロケール

Java では特定の地域を表すために、Locale クラスが用意されている。言語、地域(国)、地域固

有の言語(オプション)の指定を行うことができる。

* 通貨・数値

NumberFormat クラスを用いることによって、Locale に応じた通貨や数値、割合(%)のフォーマット

を表すことができる。

* 日付と時刻

DateFormat クラスを用いることによって、Locale に応じた日付や時刻のフォーマットを表すこと

ができる。

* テキスト

Collator クラスを用いることによって、Locale に応じて文字列のソートを行うことができる。

Page 6: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 3

スキル区分 OSS モデルカリキュラムの科目 レベル

プログラミング分野 4-1-応 Java に関する知識 応用

習得ポイント 4-1-応-2. テスト

対応する

コースウェア

第 3 回 テストとデバッグ

4-1-応-2. テストとデバッグ

OSS の品質保証活動を支援する、テストとデバッグの手順を解説する。また、OSS の単体テストを自

動化するフレームワーク、カバレジ測定ツール、デバッグツールなどを紹介し、その使用方法を説

明する。

【学習の要点】

* プログラムやモジュールの仕様に基づいたテストケースを作成し、テストプログラムに実装して動

作を確認することで、正しいプログラムを作成する。

* カバレジ測定ツールでの計測値が要求仕様に満たなければ、品質の向上と保証のためにテス

トケースを改修する。

* デバッグでの原因特定でテストケースの不備が表出すれば、テストケースを改修する。

図 4-1-応-2 テストとデバッグ

Page 7: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 4

【解説】

1) テスト

品質保証活動のひとつにユニットテストがあり、コーディングの後には必ず行う工程である。

* Javaにおいて、ユニットテストはクラスやメソッドをテスト対象の単位とする。ユニットテストを行うた

めには、テストケースを作成する必要がある。引数に与える値と、その値でメソッドを実行したと

きに期待される処理結果の値について、プログラムやモジュールの仕様に基づきテストケースを

作成する。これをもとに、実行結果と期待値を比較するコードをテストプログラムに実装し、その

他スタブやカバレジ測定などのテスト環境を整備する。こうして整った環境下で、テストプログラ

ムを実行し、期待通りの結果となるかどうかをテストするのがユニットテストである。結果が期待値

と異なればデバッグを行い、再度ユニットテストを行うために、テストプログラムを実行する。

またカバレジの計測値が要求仕様に満たなければ、テストケースを改修してテストプログラムに

実装し、再度ユニットテストを行う。後にソースコードが改修されれば、それによって既存の機能

に不具合を及ぼしていないか検査するために、再びユニットテストを実行する。このように、一度

使用されたテストプログラムは、後にユニットテストを繰り返す回帰テスト用のテストプログラムとし

て再利用される。

* 近年、オープンソースソフトウェアのテストツールが高く評価され、様々なテストツールが普及し

利用されている。そのなかには、ユニットテスト自動化ツールや、カバレジ測定ツールも含まれ

ている。これらのツールを取りそろえたサイトには「Open Source Testing」などがある。Java に関

する代表的なテストツールには下記のものがある。

- ユニットテスト自動化ツールとして、「JUnit」や「TestNG」などがある。

- カバレジ測定ツールとして、「cobertura」や「EMMA」などがある。

2) デバッグ

テストで不具合を検出した場合、デバッグを実施する。

* デバッグは下記の手順で行われる。

- エラー内容認識

- 再現手順明確化

- 発生箇所特定

- 原因特定

- 修正方法考察

- 修正実施

* デバッグでの原因特定でテストケースの不備が表出すれば、テストケースを改修する。

* 代表的なツールは、コマンドラインでは「jdb」がある。IDE では「Eclipse」のデバッグ機能が利用

されることが多い。

Page 8: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 5

スキル区分 OSS モデルカリキュラムの科目 レベル

プログラミング分野 4-1-応 Java に関する知識 応用

習得ポイント 4-1-応-3. スレッドと同期

対応する

コースウェア

第 4 回 スレッドと同期

4-1-応-3. スレッドと同期

スレッドプログラミングの概要と特徴を説明する。Java によるスレッドプログラミングを解説し、共有や

同期処理についても言及する。

【学習の要点】

* マルチスレッドプログラミングによって複数の処理を同時に走らせることができるようになる。

* Java では Thread クラスを用いてスレッドプログラミングを実現する。

* 同じリソースを非同期で扱うこともあるので、リソースの共有と排他を考える必要がある。

図 4-1-応-3 Thread クラスの使用例

Page 9: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 6

【解説】

1) スレッド

スレッドとは処理の実行単位であり、1 つのプログラムで複数のスレッドを同時に動作しているように

見せることをマルチスレッドという。1 つの CPU は同時に実行できる処理は 1 つだけであるから、実

際には OS がそれぞれのスレッドに CPU リソースを割り振って、同時に処理が行われているように見

せている。

マルチスレッドプログラミングにより、たとえば、重い処理(大量の検索など)や継続的な処理(音楽を

流すなど)を行いつつ、同時にユーザの入力を受け付ける、といった処理が可能になる。

2) Java におけるスレッド

Java では Thread クラス、もしくは、Runnable インタフェースを利用することでスレッドプログラミングを

実現することができる。Thread クラスの主なメソッドを以下に紹介する。

* run()

スレッドで実行される処理。このメソッドを終了すればスレッドも終了する。

* start()

スレッドをスケジュールに登録する。実行のタイミングは OS に任される。

* sleep()

指定した時間だけスレッドを停止し、処理を他のスレッドに渡す。

* join()

指定したスレッドが終了するまで、もしくは、指定時間まで待つ。

3) 同期

同一プロセス内であれば、それぞれのスレッドはメモリなどのリソースを共有している。メモリが節約

できる、共有データへのアクセスが容易であるなど利点がある一方で、非同期的にデータを操作す

るとデータの内容が破壊される可能性がある。複数のスレッドが影響してデータを破壊する可能性

がある処理を、クリティカルセクションと呼ぶ。

* synchronized

クリティカルセクションに対して synchronized 指定を行うことにより、同時に 1 つのスレッドのみ実

行可能とする。これはオブジェクトのロックで実現される。synchronized 指定された範囲では、オ

ブジェクトに対して処理を行う前にロックを取得する必要がある。ロックは 1 つのスレッドしか取得

することができず、処理中のスレッドがロックを解放するまで、他のスレッドは処理の実行を待た

される。synchronized は、メソッド、もしくは、ブロックに対して指定することができる。

* wait()/notifyall()

synchronized 指定された処理の中で待機を行う必要がある場合には、wait()を使用する。wait()

を呼び出すと、そのスレッドは処理の実行権を他のスレッドに渡し、オブジェクトのロックを放棄

する。notifyall()はそのオブジェクトに対して待機している全てのスレッドを再開させる。

Page 10: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 7

スキル区分 OSS モデルカリキュラムの科目 レベル

プログラミング分野 4-1-応 Java に関する知識 応用

習得ポイント 4-1-応-4. ネットワークプログラミング

対応する

コースウェア

第 5 回 ネットワーク

4-1-応-4. ネットワークプログラミング

Java によるネットワークプログラミングの概要、特徴を説明する。ネットワークプログラミングの基礎で

あるソケットを用いたセッション管理について、Java を例題として説明する。

【学習の要点】

* ネットワークプログラミングとは、複数のサーバーやクライアント間で情報をやり取りする働きを持

つアプリケーションを作ることである。

* Java によるネットワークプログラミングの特徴は、豊富なライブラリにより比較的短いコードでネッ

トワークアプリケーションを作ることができる。

* ソケットを用いたセッション管理とは、クライアントとサーバーの間の接続を開始から終了まで確

立するものである。

図 4-1-応-4 ソケットによる通信

Page 11: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 8

【解説】

1) ソケットを用いたセッション管理

ソケットは、ホスト名または IP アドレスと、TCP ポート番号とを利用して、リモートホストに接続するた

めの仕組みである。

接続が確立されてから切断されるまでの間を、セッションという。TCP/IP の通信においては、サー

バとクライアント間の通信が、他のクライアントとの通信と混じらないように、セッション管理の機構が

必須である。

2) Java によるネットワークプログラミング

URL、IPアドレスなどのネットワークの基礎知識は、Java を用いてネットワークプログラムを書くときに

必要になる知識である。これらを扱うクラスライブラリが、java.net パッケージである。ソケット関連の

クラスは以下のようなものがある。

* ServerSocket

サーバーソケットのクラス。ポート番号を指定して生成すると、そのポートに対してサーバーソケ

ットが作られる。

* Socket

ソケット接続のクラス。サーバでは ServerSocket クラスの accept()メソッドにより待ち受けとして生

成される。クライアントではホストとポート番号とを指定して生成する。

* InputStream

入力ストリームのクラス。Socket クラスの getInputStream()メソッドにより生成される。

* InputStreamReader

入力ストリームからの読み取りのクラス。InputStream クラスのオブジェクトを指定して生成する。

* BufferedReader

読み取りバッファのクラス。InputStreamReader クラスのオブジェクトを指定して生成する。

* OutputStream

出力ストリームのクラス。Socket クラスの getOutputStream()メソッドにより生成される。

* OutputStreamWriter

出力ストリームへの書き込みのクラス。OutputStream クラスのオブジェクトを指定して生成する。

* BufferedWriter

書き込みバッファのクラス。OutputStreamWriter クラスのオブジェクトを指定して生成する。

3) RMI によるネットワークプログラミング

Java を使ってネットワークプログラミングをするには、RMI(Remote Method Invocation)を用いる方法

もある。RMI を使うことによって、トランスポート層を意識しなくてもネットワークプログラミングができる

ようになった。

Page 12: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 9

スキル区分 OSS モデルカリキュラムの科目 レベル

プログラミング分野 4-1-応 Java に関する知識 応用

習得ポイント 4-1-応-5. Java を利用した GUI アプリケーション

対応する

コースウェア

第 6 回 GUI アプリケーション開発・1

第 7 回 GUI アプリケーション開発・2

4-1-応-5. Java を利用した GUI アプリケーション

GUI プログラミングのためのフレームワークと、その利用方法を紹介する。各コンポーネントの解説と

ともに、イベントドリブンの考え方の説明を行う。

【学習の要点】

* Swing は、Java Foundation Classes(JFC)に含まれる、GUI を作成するためのツールである。

* GUI を構成するコンポーネントには様々な種類があり、用途によって使い分ける。

* コンポーネントはユーザに操作されるとイベントを発行する。開発者はイベントに対応した処理

を作成すればよい。

図 4-1-応-5 GUI コンポーネントとイベントドリブン

Page 13: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 10

【解説】

1) Swing とは

Swing は Java における GUI を構築するためのツールであり、JFC に含まれている。JDK1.1 までの

Java では GUI の構築には AWT(Abstract Window Toolkit)が使われていたが、JDK1.2 でこれを拡

張し改良したものが Swing である。Swing は、GUI の描画をプラットフォームに依存せずに、自身で

行っている(このようなコンポーネントを軽量コンポーネントという)。これにより、動的に変更可能な

Look&Feel を実現している。

2) GUI コンポーネント

Swing の主要な GUI コンポーネントを以下に紹介する。

* JFrame

アプリケーションのメインフレーム。他の GUI コンポーネントを格納するほか、メニューバーを加

えることができる。

* JApplet

アプレットのメインとなり、他の GUI コンポーネントを格納する。

* JLabel、JButton、JCheckBox、JRadioButton、JTextArea など

GUI を構成する様々な部品であり、それぞれ、固定テキスト、ボタン、チェックボックス、ラジオボ

タン、テキストエリアを表す。他にも一般的な GUI コンポーネントが用意されている。

3) イベントドリブン

イベントドリブン(イベント駆動)とは、ボタンが押されたなどのイベントをトリガにして、対応した処理を

実行するプログラムの形式。Swing をはじめとする GUI で採用されていることが多い。

Swing では次の 4 つの要素で実現されている。

* イベントソース

イベントの発生源。主に GUI コンポーネントとなる。

例: 一般的なボタンであれば、JButton クラス。

* イベント

発生したイベント。イベントソースで作られ、イベントリスナへ渡される。

例: ボタンのクリックであれば、ActionEvent クラス。

* イベントリスナ

イベントに対応したインタフェースを実装したクラス。イベントソースは、自身に登録されたイベン

トリスナへイベントを発行する。

例: ActionEvent に対応するリスナは、ActionListener インタフェース。

* イベントハンドラ

行うべき処理。イベントリスナ中のメソッドである。

例: ActionEvent に対応するのは、ActionListener インタフェースで定義された actionPerformed

メソッド。

Page 14: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 11

スキル区分 OSS モデルカリキュラムの科目 レベル

プログラミング分野 4-1-応 Java に関する知識 応用

習得ポイント 4-1-応-6. MVC アーキテクチャの基本と特徴

対応する

コースウェア

第 8 回 MVC モデル

4-1-応-6. MVC アーキテクチャの基本と特徴

Java アプリケーションを例題として、Web アプリケーションの基本アーキテクチャとして想定される

MVC (Model-View-Controller)モデルの内容とメリットについて解説する。それぞれを構成する要素

技術を示し、モデルとの対応関係について説明する。

【学習の要点】

* MVC モデルとは、プログラムをモデル(Model)、ビュー(View)、コントローラー(Controller)という3

つに分けて設計する手法のことをいう。

* Web アプリケーションを作る際にも、MVC モデルが適用できる。

* MVC モデルを用いることで、作業の分業が明確になり、開発効率の向上が望める。

図 4-1-応-6 Java における MVC モデルの概要

Page 15: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 12

【解説】

1) MVC モデルとは

MVC モデルとは、プログラムをモデル(Model)、ビュー(View)、コントローラー(Controller)という3つ

に分けて設計する手法である。

2) Model、View、Controller

* Model (EJB)

Modelはアプリケーションの根幹をなす部分である。アプリケーションの主たる処理内容とデータ

を表す。特定の環境に依存しない部分のため、EJB の担当箇所とする設計が適切である。

* View (JSP)

Viewはアプリケーションのユーザーインタフェースを定義する部分である。Webアプリケーション

を例にとるならば、フォームやボタンなどの配置を決めてデザインを作る作業が、この View に当

たる。View は HTML を生成しクライアントに送るもののため、JSP 担当の設計が適切である。

* Controller (Servlet)

Controller は View と Model の間を取り持つ部分である。View のフォームなどから入力された値

を受け取り、それを Model に送る。クライアントからの入力は JSP でも担当することができるが、

Controller にもロジックが必要なので、サーブレットに担当させる設計が適切である。

3) MVC モデルのメリット

このような手法を採用するメリットは、以下のようなものがある。

* デザイン作り、アプリケーションの根幹、表示とアプリケーションの根幹の間を取り持つ部分とい

ったように開発作業の分業が明確にすることで、開発効率が上がる。

* Model、View、Controller のそれぞれの独立性が高いので、仕様変更に対しても柔軟に対応す

ることができる。

* ユーザーインタフェース部分を変更するのが容易である。

4) MVC モデルで作られたプログラムの動作の流れ

A) クライアントからのリクエストを Controller が受け付ける。

B) Controller が該当する Model に処理を依頼する。もし必要があれば View にも表示の書き換えを

指示する。

C) Model が処理結果を View に渡す。

D) View は出力(表示)用のデータを整える。

E) クライアントにレスポンスを返す。

Page 16: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 13

スキル区分 OSS モデルカリキュラムの科目 レベル

プログラミング分野 4-1-応 Java に関する知識 応用

習得ポイント 4-1-応-7. EJB によるアプリケーション開発の基本

対応する

コースウェア

第 10 回 EJB によるアプリケーション開発

4-1-応-7. EJB によるアプリケーション開発の基本

EJB (Enterprise Java Beans)を活用したアプリケーション開発の概要を説明する。EJB コンテナの仕

組みやトランザクション処理の手順など、実際のプログラミング事例を示しつつ具体的な手法につい

て解説する。

【学習の要点】

* EJB はモジュール化されたエンタープライズアプリケーションを構築するためのアーキテクチャ

であり、トランザクションやセキュリティ等、ビジネスロジックの実装に有用な機能が提供される。

* EJB はビジネスロジックを記述した Enterprise Bean を EJB コンテナにデプロイすることで利用可

能となる。

* EJB コンテナは、Enterprise Bean の実行環境を提供し、JSP や Servlet を始めとする外部コンポ

ーネントからの呼び出しに応じて Enterprise Bean に記述された処理を実行する機能を持つ。ま

た、データベースへの接続機能やトランザクションの管理機能を提供する。

* EJB それ自体には、ユーザインタフェースを提供する機能が存在しないため、プレゼンテーショ

ン層の機能を提供するソフトウェアと組み合わせて利用されることが多い。

図 4-1-応-7 EJB のトランザクション制御

Page 17: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 14

【解説】

1) EJB とは

EJB はエンタープライズアプリケーションにおけるビジネスロジックの実現を容易にすることを目的と

して策定されたアーキテクチャ仕様である。Java EE の仕様の一部として作成され Java Community

Process の元で改良が進められている。EJB を利用することで、トランザクションやセキュリティ等、ビ

ジネスロジックの実装に有用な機能が提供されるほか、エンタープライズアプリケーションのモジュ

ール化を推進し、再利用を容易にする効果があると考えられている。

2) EJB3

EJB1.x および EJB2.x では、仕様が複雑で実装がしづらいなどの要因により、EJB を利用した開発

は必ずしも開発者に支持されてこなかった。2006 年に発表された EJB3.0 では、その反省を踏まえ

開発のし易さ(Ease of Development)が重視されており、POJO(継承を伴わないシンプルな Java オ

ブジェクト)とアノテーションを中心とした仕様となっている。

3) EJB の実行環境

EJB の実行環境を EJB コンテナと呼び、プロプライエタリな製品のほか、JBoss や Apache Geronimo

などの OSS も公開されている。EJB コンテナは Servlet や JSP などの呼び出しに応じて Enterprise

Bean を動作させ、ビジネスロジックを実現する。さらに、トランザクション管理機能やデータベース接

続機能などがコンテナから提供される。機能の多くは、アノテーションや設定ファイルによる宣言的

な記述により利用することが可能である。

4) EJB のトランザクション管理機能

EJB ではトランザクション管理の方式として CMT と BMT の 2 種類がある。どちらを利用するかは

Session Bean クラスに対する@TransactionManagement アノテーションによって指定し、指定しなか

った場合は CMT となる。

* CMT(Container Managed Transaction)

トランザクションの開始と終了は EJB コンテナによって制御される。基本的な動作は、メソッドの

開始時にトランザクションが開始され、メソッドが正常終了した際にコミットを行う。メソッドが例外

をスローした場合にはロールバックする。EJB のクラスまたはメソッドに@TransactionAttribute ア

ノテーションを付加することにより、制御方法を指定可能である。

* BMT(Bean Managed Transaction)

トランザクションの開始と終了は JTA(Java Transaction API)の UserTransaction インタフェースを

利用して、プログラムによって制御する。

- トランザクションの開始は UserTransaction インタフェースの begin メソッドによって行う。

- コミットは UserTransaction インタフェースの commit メソッドによって行う。

- ロールバックは UserTransaction インタフェースの rollback メソッドによって行う。

5) EJB のインタフェース

EJB それ自体には、ユーザインタフェースを提供する機能が存在しないため、プレゼンテーション

層の機能を提供するモジュールと組み合わせて利用されることが多い。クライアントとなるモジュー

ルが同一 JVM 内である場合はローカルインタフェース、別 JVM である場合はリモートインタフェー

スを通じてアクセスする。

Page 18: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 15

スキル区分 OSS モデルカリキュラムの科目 レベル

プログラミング分野 4-1-応 Java に関する知識 応用

習得ポイント 4-1-応-8. EJB によるビジネスロジックの実装

対応する

コースウェア

第 11 回 Java による Server 処理実装の特徴と設計方法

第 12 回 Java による Web アプリケーションの設計/実装

4-1-応-8. EJB によるビジネスロジックの実装

3 層アーキテクチャにおけるビジネスロジック、およびデータアクセス部分の実装について解説す

る。具体的な例として EJB3.0 仕様に基づいた Entity クラス、および Session Bean のプログラミング例

を示す。

【学習の要点】

* EJB3.0 では、POJO にアノテーションを付加することで、Enterprise Bean を記述する。

* EJB3.0 仕様の一部である JPA(Java Persistent API)では、Entity クラスを利用した O/R マッピン

グ仕様が規定されている。

* 3 層アーキテクチャにおけるビジネスロジック部分の処理は Session Bean に記述する。

図 4-1-応-8 Session Bean と Entity クラスのソースコード例

Page 19: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 16

【解説】

1) Entity クラス

Entity クラスはデータベースに保存されるオブジェクトを実装するためのクラスであり、EJB3.0 仕様

の一部である JPA(Java Persistent API)に仕様が規定されている。Entity クラスとして実装したクラス

は、EJB コンテナによってデータベーステーブルと関連付けられる。レコードの検索、保存は JPA の

EntitiyManager インタフェースを利用して行い、検索結果は Entity クラスのインスタンスセットとして

取得できる。なお、EJB2.x 以前の仕様では、Entity Bean がデータベース接続技術として用いられ

ていた。EJB2.x 以前の Entity Bean と、EJB3.0 の JPA 仕様に基づく Entity クラスは全く別の仕様で

あるが、後者を「EJB3.0 における Entity Bean」と表現する場合もある。

2) Entity クラスの実装

Entity クラスは POJO にアノテーションを付加することで定義する。

* クラスに@Entity アノテーションを付加することにより Entity クラスであることを示す。

* 属性または getter メソッドに、@Id アノテーションを付加することにより、この属性が主キーである

ことを示す。

* @Id アノテーションを付加した属性または getter メソッドに、@GeneratedValue アノテーションを

付加することにより、主キーの値が自動生成されることを示す。

* 属性または getter メソッドに、@Column アノテーションを付加することにより、カラム名や nullable

か否かなど、データベースのカラムに関する情報を指定できる。

* 属性または getter メソッドに、@ManyToOne、@OneToOne、@OneToMany、@ManyToMany アノ

テーションのいずれかを指定することにより他の Entity クラス(テーブル)との関連を指定できる。

3) Session Bean

Session Bean はビジネスロジックを実装するための Bean である。トランザクション属性やセキュリティ

属性は Session Bean に対して指定する。内部状態を持つ Stateful Session Bean と持たない

Stateless Session Bean が存在する。

4) Session Bean の実装

Session Bean はクラスおよびインタフェースにアノテーションを付加することにより定義する。

* クラスに@Stateful アノテーションを付加することにより Stateful Session Bean であることを示す。

* クラスに@Stateless アノテーションを付加することにより Stateless Session Bean であることを示

す。

* Session Bean は、外部インタフェースを実装する必要がある。@Local アノテーションをインタフェ

ースに付加することにより、同一 JVM 内からアクセスするためのインタフェースであることを示す。

@Remote アノテーションを付加することにより、別 JVM からアクセスするためのインタフェースで

あることを示す。

* クラスまたはメソッドに@RolesAllowed アノテーションを付加することにより、メソッドの実行が可能

な Role を制限することができる。

Session Bean 内に EntityManager 型の属性を定義し、@PersistenceContext アノテーションを付

加することにより、EntitiyManager オブジェクトが Inject され、Session Bean 内でデータベース操

作を行うことが可能になる。

Page 20: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 17

スキル区分 OSS モデルカリキュラムの科目 レベル

プログラミング分野 4-1-応 Java に関する知識 応用

習得ポイント 4-1-応-9. JDBC によるデータベースの操作

対応する

コースウェア

第 9 回 JDBC によるデータベースアクセス

第 13 回 Java による Server Side Java/Web アプリケーション実装

4-1-応-9. JDBC によるデータベースの操作

JDBC (Java DataBase Connectivity)の基本と歴史、特徴について示し、JDBC を利用したデータベ

ースの操作方法について解説する。JDBC によるデータベース操作の具体的な方法やプログラミン

グ例を示し、データベース操作の基本手順を紹介する。

【学習の要点】

* JDBC は Java プログラムからデータベースにアクセスする方法を定義した API である。

* JDBC は JDK1.1 から標準 API に含まれており、JDK6 には JDBC4.0 が含まれている。

* JDBC を利用してデータベースにアクセスする際には、接続方法、および接続先データベース

に応じた JDBC ドライバを必要とする。

* JDBC にはデータベース接続、トランザクションの管理、SQL の実行などの操作を行うための標

準的な方法が用意されている。

図 4-1-応-9 DataSource インタフェースを利用したデータベース操作の例

Page 21: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 18

【解説】

1) JDBC

JDBC は Java プログラムからデータベースにアクセスする方法を定義した API であり、標準化された

手順で各種データベースに対するアクセスを行うことができる。JDBC は JDK1.1 から標準 API に含

まれており、version 3.0 からは Java Community Process により仕様の策定が行われている。JDK6

には JDBC4.0 が含まれている。

2) JDBC ドライバ

JDBC を用いて各種データベースに接続する場合には、データベースに対応した JDBC ドライバが

必要となる。詳細は「I-13-9. JDBC によるデータベースアクセス方法」を参照のこと。JDK6 には

Java DB と呼ばれる Java 言語により実装されたデータベースが含まれており、外部のデータベース、

および JDBC ドライバを導入することなくデータベースプログラミングを行うことが可能となっている。

なお、Java DB は Apache プロジェクト内で開発されている Apache Derby を Sun Microsystems 社が

サポートしたものである。

3) Java EE におけるデータベース接続

JDBCの最も基本的な使い方である、DriverManagerクラスを利用したデータベースアクセスの方法

については、「I-13-9. JDBC によるデータベースアクセス方法」を参照のこと。Java EE では

DriverManager クラスの代わりに DataSource インタフェースを利用してデータベース接続を取得す

る方法が推奨されている。

* DataSource インタフェースの実装は JDBC ドライバの提供元や、フレームワーク、Java EE コンテ

ナなどから提供されている。

* DataSource インタフェースを経由してデータベース接続を取得することにより、接続プーリング

など、高度な機能が利用可能になる。

* 利用する DataSource クラスや JDBC ドライバ、および各種接続情報やパラメータは、コンテナの

指定する設定ファイルに記述し、プログラム内からは、JNDI で取得する場合が多い。

* DI(Dependency Injection)の機能を提供するコンテナを利用している場合、DataSource クラスの

取得はコンテナによって自動的に行われる。

4) DataSource インタフェースを利用したデータベース接続手順

* JNDI リソースの登録

登録手順は、コンテナのドキュメントを参照のこと。

* JNDI を利用した DataSource オブジェクトの取得

- new javax.naming.InitialContext()により、Context オブジェクトを取得する。

- Context オブジェクトの lookup メソッドにより、DataSource オブジェクトを取得する。

* DI を利用した DataSource オブジェクトの取得

EJB コンテナでは、Session Bean クラスに@Resources アノテーションを付加することにより、

DataSource オブジェクトを DI を利用して取得することができる。

* Connection オブジェクトの取得

DataSource オブジェクトの getConnection メソッドにより Connection オブジェクトを取得する。

Page 22: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 19

スキル区分 OSS モデルカリキュラムの科目 レベル

プログラミング分野 4-1-応 Java に関する知識 応用

習得ポイント 4-1-応-10. コードリーディング

対応する

コースウェア

第 14 回 コードリーディング

4-1-応-10. コードリーディング

オープンソースソフトウェアを読み解くことの意義を説明し、コードリーディングに有効な手法として、

関連するドキュメント類の参照方法や、データ構造と処理の流れを読み解く方法を説明する。更に

解析に有用な統合開発環境やツール類の紹介を行う。

【学習の要点】

* OSS 開発コミュニティの様々な資料を参考に、データ構造と処理の流れをソースコードから解析

することで、開発者の意図する動作を理解し、改善策を講じられるようになる。

* OSS 市場で実際に使用されている多数のソースコードが入手可能であり、個人の目的に合わせ

てリーディングすることで実践的な技能を修得できる。

* OSS の統合開発環境が充実し、その豊富な機能を利用することにより、効率的にコードを読む

ことができる。

* コーディング規約とは、ソースコードを記述する際の決め事であり、可読性や保守性などが向上

する。

図 4-1-応-10 コードリーディング

Page 23: 4-1-応 Javaに関する知識OSSモデルカリキュラムの学習ガイダンス 4-1-応 Javaに関する知識 ※ 1. 科目の概要 Java 言語が利用されるWeb アプリケーション開発を題材として、Java

独立行政法人 情報処理推進機構

4-1-応- 20

【解説】

1) ソースコードリーディング

オープンソースソフトウェアの市場が拡大した現在、SourceForge を代表とするホスティングサイトか

ら、実際に市場で使用されている、あらゆる種類のソースコードを入手することができる。ソースコー

ドリーディングの目的は様々あるが、個人の目的に合わせて、ソースコードが示す内容を理解する

ことで、実践的な技能を修得することができる。更に、解析したソースコードをもとに、改善策を講じ

られるようになる。

2) コード解析手法

ソースコードを解析するには、ただ漠然とコードを目で追うだけでなく、解析ポイントにあわせた的

確な手法を用いる必要がある。

* ツールの活用

コード解析の手法には、動的解析と静的解析がある。動的解析は、実際にプログラムを動かし

て解析する手法であり、デバッガやプロファイラなどを利用して解析を行う。シンボリックデバッガ

は、デバッグの作業に限らず、コードリーディングの動的解析でも効力を発揮する。プロファイラ

は、プログラムの実行結果として、メソッドごとの実行回数や実行時間などを分析するツールで

あり、代表的なものにhprofがある。静的解析は、ソースコードそのものを読んで解析する手法で

あり、テキストエディタやクロスリファレンサなどを利用して解析を行う。クロスリファレンサは、ソー

スコードに記述されているメソッドを洗い出し、メソッドの呼び出し元を検索するツールであり、代

表的なものとして GNU GLOBAL がある。また、Eclipse などの統合開発環境(IDE)を使用すれ

ば、動的解析と静的解析の両方を行うことができる。

* 解析手順

初めに全体像をつかむために、入手したソースコードをコンパイルし、実際にプログラムを実行

してみて、プログラム全体の動作を概観することは有効な方法である。また、ソースファイルがど

のような意味合いで分割され、フォルダに配置されているか、フォルダ構成の概要を把握してお

くことも有効な手段である。更に、オープンソース開発コミュニティにある開発者ドキュメント、変

更履歴、バージョン管理システム、バグトラッキングシステムなどを参考にして、開発者の意図を

理解することはとても重要である。

詳細分析では、実際にソースコードを読み、クラスの継承階層やメソッドの呼び出し関係を明ら

かにし、検索やトレースを行いながら、データ構造の変化と処理の流れを解析する。このとき、

動作を予測し、問題点の仮説を立てて解析することが有効な手法である。

3) 読みやすいコード

読み手が理解しやすいソースコードを記述するには、命名規則やコメントのルールといった、ソース

コードを記述する際の決め事を定めた、コーディング規約に則って記述する必要がある。ソースコ

ードリーディングを行った結果、問題があるソースにパッチ(修正プログラム)を当てる場合は、コー

ディング規約に則って記述すれば、可読性や保守性といったソースコードの品質を向上することが

できる。