• 検索結果がありません。

4-2- 応 C に関する知識 本カリキュラムでは C での OSS 開発において セキュリティを強化し 機能性や信頼性を向上するために必要となる様々な知識や 並 Ⅰ. 概要列処理による効率を考慮した技術 様々なライブラリを通じて可搬性や使用性を向上させる技術などを学習する 更に OSS のソースコ

N/A
N/A
Protected

Academic year: 2021

シェア "4-2- 応 C に関する知識 本カリキュラムでは C での OSS 開発において セキュリティを強化し 機能性や信頼性を向上するために必要となる様々な知識や 並 Ⅰ. 概要列処理による効率を考慮した技術 様々なライブラリを通じて可搬性や使用性を向上させる技術などを学習する 更に OSS のソースコ"

Copied!
8
0
0

読み込み中.... (全文を見る)

全文

(1)

4-2-応 C に関する知識

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

(2)

4-2-応 C に関する知識

Ⅰ.概要 本カリキュラムでは、C での OSS 開発において、セキュリティを強化 し、機能性や信頼性を向上するために必要となる様々な知識や、並 列処理による効率を考慮した技術、様々なライブラリを通じて可搬性 や使用性を向上させる技術などを学習する。更に OSS のソースコード リーディングによる技能向上方法を学習する。 Ⅱ.対象専門分野 職種共通 Ⅲ.受講対象者、 受講前提 • 本カリキュラムの「4-2-基 C に関する知識」を受講済みであるこ と。または、同等の知識を有すること。 Ⅳ.学習目標 • プロセスと仮想アドレス空間に関して理解する。 • アーキテクチャとセキュリティに関する手法を理解する。。 • テストとデバッグの意義と手法に関して理解する。 • ライブラリの概念や、構築方法と利用方法を理解する。 • 並列処理の概念と利用方法を理解する。 • ネットワークプログラミングの概要と実装方法を理解する。 • データベースプログラミングの意義と構築方法を理解する。 • GUI ライブラリやその他開発ライブラリの利用方法を理解する。 • ポータビリティと国際化の概要と手法を理解する。 • コードリーディングの意義と手法を理解する。 Ⅴ.使用教科書、 教材等 『C 実践プログラミング』 Steve Oualline 著、オライリー・ジャパン刊 その他、オリジナル教材やソースコードを教材として用いる。 Ⅵ.習得スキル の評価方法 講義終了後の受講レポート、定量アンケート、知識確認ミニテスト、 演習問題の取り組み状況を総合的に判断して評価を行う。 Ⅶ.カリキュラム の構成 レベル 3(応用) 第 1 回~第 12 回 独立行政法人 情報処理推進機構

2

(3)

講座内容

第1回 メモリアロケートの詳細(講義+ワークショップ 90 分)

プロセスと仮想アドレス空間の概念について理解する。更に、仮想アドレス空間を構成する5つの領域の 特徴を学習し、メモリアロケートの詳細内容を理解する。 (1) メモリアロケートの概要 1 プロセスとは(プログラムの実行単位、プロセス ID、など) 2 仮想アドレス空間とは(物理メモリとの対応、プログラム間での干渉防止、など) (2) 仮想アドレス空間の構成 1 テキスト領域の特徴(機械語命令、読み取り専用、存続期間、など) 2 データ領域の特徴(初期化指定あり、静的変数、グローバル変数、存続期間、など) 3 BSS 領域の特徴(初期化指定なし、静的変数、グローバル変数、0 で初期化、存続期間、など) 4 ヒープ領域の特徴(動的確保、存続期間、など) 5 スタック領域の特徴(自動変数、ブロック、存続期間、など) 6 サンプルプログラム

第2回 アーキテクチャとセキュリティ(講義+ワークショップ 90 分)

CPU のアーキテクチャが異なることを考慮しなければならない項目について学習する。また、メモリを管理 する上でセキュリティに注意しなければならない事項を理解する。 (1) アーキテクチャ 1 アーキテクチャの違いによる諸問題(CPU の違い)

2 データのサイズ(32 ビット CPU、64 ビット CPU、long 型、pointer 型、など) 3 エンディアン(ビッグエンディアン、リトルエンディアン、バイエンディアン、など) 4 サンプルプログラム (2) セキュリティ 1 変数とセキュリティ(変数のバインド) 2 バッファオーバーラン(不正な参照、不正な書き換え、scanf、strcpy、など) 3 バッファアンダーラン(不正な参照、不正な書き換え、ポインタの減算、など) 4 メモリリーク(動的領域の解放忘れ、メモリリークの累積、パフォーマンスの低下、malloc、など) 5 二重解放(再利用領域の不正解放、free、など) 6 サンプルプログラム 独立行政法人 情報処理推進機構

3

(4)

第3回 テストとデバッグ(講義+ワークショップ 90 分)

OSS の品質保証活動を支援するテストとデバッグの手順を理解する。また、OSS の単体テストを自動化す るフレームワーク、カバレジ測定ツール、デバッグツールの使用方法を学習する。 (1) テスト 1 テストの概要(品質保証活動、ユニットテスト、カバレジ、OSS のテストツール、など) 2 ユニットテストの手法(テスト対象、テストケース、テスト環境、回帰テスト、カバレジ測定、など) 3 ユニットテスト自動化ツール(CUnit、Cutter、など) 4 カバレジ測定ツール(gcov、lcov、など) 5 サンプルプログラム (2) デバッグ 1 デバッグの概要(テストとデバッグ、テストケースの改修、OSS のデバッグツール、など) 2 デバッグの手順(エラー内容、再現手順、発生箇所、原因、修正方法、修正実施、など) 3 シンボリックデバッガ(gdb、xxgdb、など) 4 メモリエラー検出ツール(ElectricFence、MEMWATCH、など) 5 サンプルプログラム

第4回 ライブラリの構築と利用(講義+ワークショップ 90 分)

汎用性と再利用性といったライブラリの概念と、静的ライブラリや共有ライブラリの特徴を理解する。また、 それぞれのライブラリによって異なる利用方法や、ライブラリの構築方法を学習する。 (1) ライブラリ 1 ライブラリとは(汎用的な関数群、再利用、形式、など) 2 静的ライブラリの特徴(コンパイル時にリンク、構築容易、プログラムの容量大、など) 3 共有ライブラリの特徴(実行時リンク、軽量、配置、共有ライブラリの更新、動的ロード、など) (2) 静的ライブラリの構築と利用 1 構築方法(gcc のオブジェクトファイル生成用オプション、ar の使用方法、拡張子、など) 2 利用方法(gcc でのコンパイル方法) 3 サンプルプログラム (3) 共有ライブラリの構築と利用 1 構築方法(gcc のオプション、soname、バージョン番号、など) 2 インストール方法(配置場所の指定、シンボリックリンク、など) 3 利用方法(gcc の共有ライブラリ指定オプション、など) 4 サンプルプログラム 独立行政法人 情報処理推進機構

4

(5)

第5回 並列処理(講義+ワークショップ 90 分)

並列処理と並行処理についての概念を学習し、逐次処理と並列処理の違いを理解する。更に、並列処理 の技法として、マルチプロセスとマルチスレッドの実装方法を学習する。 (1) 並列処理 1 並列処理の概念(デュアルコアとシングルコア、並列処理と並行処理、SMP、など) 2 マルチプロセス(複数のプロセスと仮想アドレス空間、プロセス間の通信、など) 3 マルチスレッド(プロセスとスレッド、同一仮想アドレス空間、スレッドセーフ、など) (2) マルチプロセスの実装 1 プロセスの生成(fork、親子関係、自プロセスの複製、など) 2 プロセスの制御(プロセス ID、制御の分岐、など) 3 プロセスの待機と終了(wait、_exit、子プロセスの回収、ゾンビプロセス、など) 4 サンプルプログラム (3) マルチスレッドの実装 1 スレッドの生成(pthread_create、メインスレッド、スレッド関数、親子関係、など) 2 スレッドの制御(グローバル変数や静的変数の問題、スレッドセーフ関数、など) 3 スレッドの待機と終了(pthread_join、return、pthread_exit、リソース解放、など) 4 サンプルプログラム

第6回 ネットワーク(講義+ワークショップ 90 分)

TCP/IP でのクライアントプロセス・サーバプロセスといった、ネットワークプログラミングの概要を理解し、 ソケット利用したネットワークプログラミングの実装方法を学習する。 (1) ネットワークプログラミング 1 ネットワークプログラミングとは(TCP/IP、IP アドレス、クライアント、サーバ、など) (2) ソケット 1 ソケットとは(ソケット API、セッション管理、ストリーム、など) 2 ソケットの生成と解放(socket、bind、ポート番号、close、など) 3 サーバ側での同期の確立(接続要求受付開始、listen、同時接続可能数、accept、待機、など) 4 クライアント側での同期の確立(接続要求、connect、など) 5 データの送受信(ストリームに書き出し、ストリームから読み込み、など) 6 サンプルプログラム 独立行政法人 情報処理推進機構

5

(6)

第7回 データベース(講義+ワークショップ 90 分)

データベースシステムの構成要素として、アプリケーションと DBMS の関連性などについて理解する。また、 C によるデータベースプログラミングの実装として、DBMS ライブラリの使用方法を学習する。 (1) データベースプログラミング 1 データベースプログラミングの概要(大量で複雑なデータ、DBMS、安全性、効率性、など) 2 様々な DBMS(PostgreSQL、MySQL、SQLite、ほぼ共通の SQL 文、CRUD 操作、など) 3 C によるデータベースプログラミングの特徴(処理速度、エンベデッド系、エンタプライズ系、など) (2) DBMS ライブラリの使用 1 SQLite3 の導入(パッケージマネージャでのインストール、など) 2 データベースハンドルの取得(sqlite3_open、データベース名、など) 3 データベースの CRUD 操作(sqlite3_exec、SQL 文指定、コールバック関数、並列処理、など) 4 データベースハンドルの解放(sqlite3_close、など) 5 サンプルプログラム

第8回 GUI(講義+ワークショップ 90 分)

GUI アプリケーション開発の概要を理解する。更に、GTK+の導入方法、基本的な構造、特徴について学習 し、GTK+で使われるシグナルとコールバックの概念を理解する。 (1) GTK+ 1 GTK+の概要(GIMP、GLib、GDK、シグナルとコールバック、など) 2 GTK+の導入(パッケージマネージャでのインストール、など) (2) Glade 1 Glade の概要(インタフェースビルダ、コールバック関数のスケルトン、など) 2 Glade の導入(パッケージマネージャでのインストール、など) (3) 代表的なウィジェット 1 ウィジェットとは(ウィンドウ、ボタン、メニュー、コンテナ、など) 2 ウィンドウ・ウィジェット(GtkWindow、GtkDialog、など) 3 ボタン・ウィジェット(GtkButton、GtkToggleButton、など) 4 メニュー・ウィジェット(GtkMenu、GtkMenuItem、など) 5 コンテナ・ウィジェット(GtkTable、GtkToolbar、など) 6 サンプルプログラム 独立行政法人 情報処理推進機構

6

(7)

第9回 演習Ⅰ(ネットワーク・マルチスレッド)(ワークショップ 90 分)

ソケット API を使用してチャットを行うクライアントとサーバを作成し、マルチスレッドの利用方法や、各種ラ イブラリの使用方法を学習する。 (1) 演習の要件 1 ソケット API を使用して同期を確立する。 2 受信したメッセージをターミナルに表示する。 3 ターミナルでユーザのメッセージ入力を受け付ける。 4 入力されたメッセージを相手に送信する。 5 EOF が入力されるまで、2から4を繰り返す。 6 発展演習:送受信のブロッキングをマルチスレッドで回避する。 7 発展演習:送受信のブロッキングを select で回避する。

第10回 演習Ⅱ(GUI・データベース)(ワークショップ 90 分)

GUI でデータベースを操作するアプリケーションを作成することで、シグナルの利用方法や、各種ライブラ リの使用方法を学習する。 (1) 演習の要件 1 データベースは SQLite3 を使用する。 2 GUI の構築には、GTK+と Glade を使用する。 3 ユーザの SQL 文をテキスト・ウィジェットに入力する。 4 実行のボタン・ウィジェットが押されると、SQL 文を実行する。 5 SQL 文の実行結果をリスト・ウィジェットで出力する。 6 終了のボタン・ウィジェットが押されると、プログラムを終了する。 独立行政法人 情報処理推進機構

7

(8)

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

8

第11回 ポータビリティと国際化(講義+ワークショップ 90 分)

OSS のポータビリティとして LSB の概要と、国際化として OpenI18N の概要を理解する。更に、C における国 際化の手法として、ロケールの設定にあわせた変換方法を学習する。 (1) ポータビリティ 1 ポータビリティの概要(異なる環境での動作、移植性、LSB、国際化、など) 2 LSB(標準規格、異なるディストリビューションでの動作、テストスイート、など) (2) 国際化 1 国際化の概要(国や地域によって異なるものへの対応、OpenI18N、など) 2 GNU gettext とは(ソースコードを国際化、ロケール設定で文字列切り換え、など) 3 ソースコードの準備(gettext のマクロ定義、setlocale、textdomain、bindtextdomain、など) 4 po ファイルの作成(xgettext、pot ファイル、po ファイル編集、msgid、msgstr、など) 5 mo ファイルの作成(msgfmt、po ファイルを mo ファイルにコンパイル、ドメイン名、など) 6 mo ファイルの配置(コード内で指定したディレクトリに配置、ロケールの切り換え、など) 7 サンプルプログラム

第12回 コードリーディング(講義+ワークショップ 90 分)

OSS を読み解くことの意義を理解し、コードリーディングに有効な手法を学習する。更に解析に有用な統合 開発環境やツール類を学習する。 (1) ソースコードリーディング 1 ソースコードリーディングの概要(市場で使用されている技術、改善策の考察、など) (2) コード解析手法 1 動的解析とは(デバッガの利用、プロファイラの利用、など) 2 静的解析とは(テキストエディタの利用、クロスリファレンサの利用、など) 3 統合開発環境の活用(Eclipse、など) (3) 解析手順 1 全体像の把握(実行して全体の動作を概観、フォルダ構成、など) 2 開発意図の理解(開発者ドキュメント、変更履歴、バージョン管理、バグトラッキング、など) 3 詳細分析(検索、トレース、データ構造の変化、処理の流れ、動作予測、問題点の仮説、など) (4) 読みやすいコード 1 コーディング規約(可読性、保守性、命名規則、コメントのルール、など) 2 サンプルソース 以上

参照

関連したドキュメント

・ 継続企業の前提に関する事項について、重要な疑義を生じさせるような事象又は状況に関して重要な不確実性が認め

※ 硬化時 間につ いては 使用材 料によ って異 なるの で使用 材料の 特性を 十分熟 知する こと

耐震性及び津波対策 作業性を確保するうえで必要な耐震機能を有するとともに,津波の遡上高さを

はじめに

しかし , 特性関数 を使った証明には複素解析や Fourier 解析の知識が多少必要となってくるため , ここではより初等的な道 具のみで証明を実行できる Stein の方法

すべての Web ページで HTTPS でのアクセスを提供することが必要である。サーバー証 明書を使った HTTPS

ご使用になるアプリケーションに応じて、お客様の専門技術者において十分検証されるようお願い致します。ON

ご使用になるアプリケーションに応じて、お客様の専門技術者において十分検証されるようお願い致します。ON