ホーム » 2011 » 7月 (ページ 3)

月別アーカイブ: 7月 2011

2011年7月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

検索・リンク

2011年7月10日(第224回)

  • 高専地区体育大会の結果について
  • マニアックタイムズ 第6回 2年電子情報工学科 山田さん
    新しいカードゲームについて

北陸地区高専大会バドミントン会場

1107101032_960x640.JPG

ソフトウェア開発工程とアジャイル

UMLの説明により、オブジェクト指向プログラミングでの設計の方法を解説し、 UML作成の課題にも取り組んでもらっているので、 残りでソフトウェア開発工程の説明を行う。

ウォーターフォールモデル

ウォーターフォールモデルは、トップダウン型の ソフトウェア開発において古くから用いられている手法で、 「要求定義」「外部設計(概要設計)」「内部設計(詳細設計)」「開発(プログラミング)」 「テスト」「運用」などの作業工程に分割する。 原則として前工程が完了しないと、次の工程に進めず、設計中にプログラミングを始めるなどの並行作業は行わない。

原則として並行作業を行わないので、ガントチャートなどでプロジェクト管理などを 行うことが多い。

スパイラルモデル

ウォーターフォールモデルは、前工程に戻らないことから、 細かな仕様変更に対して対応が困難となる。 このため、内部の詳細設計をある程度決めて全体を開発するといった、 ボトムアップ方式もある。 しかしながら、全体像の設計の詰めの甘さから、外部設計段階で内部設計の見直しが 発生することも多く、単純なボトムアップ方式は困難である。

このトップダウンとボトムアップの両方の良さをとる方式として、 スパイラルモデル がある。この方式では、設計とプロトタイピングを繰り返し行いながら 開発をしていく反復型開発方式である。

スパイラルモデルは、組織の改善でのPDCAサイクルと同じものと考えられる。 この方式は、プログラム規模やスケジュール予測もある程度でき、 要求仕様の変更があっても対応がしやすいことから、 大規模プロジェクトでもよく利用されている。

アジャイルソフトウェア開発

アジャイル(agile:機敏な)とは、敏速かつ適応的にソフトウェア開発を行う、 軽量な開発手法である。スパイラルモデルのPDCAサイクルよりも小さな、 反復(イテレーション)とよばれる短い開発単位(1W〜4W)を採用し、 1反復で1機能を開発する。 この反復では、他の古くからの開発手法と同じく、 計画、要求分析、設計、実装(コーディング)、テスト、文書化を行う。

アジャイルでは、動くものがあるという点で、利用者に使ってもらって 反応・感想を踏まえて改善ができる。 この方法をさらに推し進めた物に、 エクストリーム・プログラミング(XP)がある。 XPでは、自動テストなどを取り入れ、短期のイテレーションを推し進める。 一般的には完成に近づくにつれ、仕様変更は困難となるが、 オブジェクト指向プログラミングを取り入れ、 クラスの細部を変更しても全体に影響が及ばないような設計となっていることが 重要となる。

XPでは、コミュニケーション・シンプル・フィードバック・勇気・尊重といった5つの 価値で開発をとらえる。 開発にあたり、次のようなプラクティス(習慣)を与える。

  • テスト駆動開発(実装の前にテスト方式を明確化)
  • ペアプログラミング(2人1組でコーディング役とチェック&ナビゲート役を交代しながら行う)
  • リファクタリング(完成済みのコードでも随時改善を行う。外部動作が変わらないように内部構造をより良いものにする)
  • ソースコードの共同所有(バージョン管理システムの併用が重要:CVS,Subversion,RCS,Gitが有名)

リスト構造の演習

先週にリスト構造への先頭挿入型の追加と、末尾追加型のリスト処理を説明したので、 今週は演習。 テーマは以下のデータ構造にてデータを入力し、何らかの簡単なデータ処理(特定データの検索など)。

  • 名前と電話番号のデータ
  • 名前と誕生日のデータ
  • 名前と年齢のデータ

コマンドプロンプトで絶対PATH,相対PATHの演習

コマンドプロンプトで相対PATH,絶対PATHの説明をした後、 以下の演習の内容をレポートとして提出してもらう。

ミニ課題

以下に示すファイルやディレクトリの生成を、コマンドプロンプトを用いた作業で行い、その際にタイプした命令と出力された内容を記載せよ。 ただし各作業では、絶対PATHを使用するとか相対PATHを使用するといった条件を満たすこと。

  1. Z:ドライブ上に、以下のような構造を作成せよ。 作成の際には、絶対PATHのみを使用すること。
  2. 上記のファイルbirthday.txt,like.txt の内容を表示せよ。 ディレクトリの移動には絶対PATHを使用、ファイルの表示には相対PATH。
  3. "cd Z:\20110705\saitoh"でディレクトリを移動した後、自分のbirthday.txt,like.txt を表示する命令を、相対PATHを使用して。 ただしディレクトリの移動はしないこと。
  4. 作成したディレクトリの内容を、すべて削除せよ。相対PATHや絶対PATHの方法は問わない。
Z:¥--+--[20110705]--+--[自分の名前]--+--(birthday.txt) 内容は誕生日
|              +--(like.txt)     内容は好きな物
|
+--[saitoh]----+--(birthday.txt) 1965/02/07
+--(like.txt)     cats...

C言語でファイル操作

C言語での簡単なファイル操作ということで、下記のようなプログラムを示す。 特に「Windowsのディレクトリ名区切り文字がC言語のエスケープ文字」にあたるため、 問題が発生することを説明する。

#include <stdio.h>
void main() {
FILE* fp ;
fp = fopen( "Z:¥¥abc.txt" , "r" ) ;
if ( fp != NULL ) {
char name[ 20 ] ;
int  age ;
while( fscanf( fp , "%s%d" , name , &age ) == 2 ) {
printf( "%s %d¥n" , name , age ) ;
}
fclose( fp ) ;
}
}

当面はOSと絡んだC言語での注意点を説明するのが目標。 来週は、fopen( … , "r" ) での「テキストモード/バイナリモード」の説明を行う予定。

絶対/相対PATHの演習とファイル処理

先週の講義でPATHの概念を説明したので、 授業前半でコマンドラインを用いてPATHの演習を行い、 後半はC言語でのファイル処理ということでfopen,fclose等の説明。

絶対/相対PATHの演習

簡単な演習ということで、Windowsのコマンドライン(cmd.exe)を起動し、 dir , type , cd , mkdir , rmdir , echo string>PATH などのファイル操作を 説明する。

最初は、C:¥Windows¥Help ディレクトリなどを使って ディレクトリの中を色々と移動しながら、絶対PATH/相対PATHを理解してもらう。 後半は、カレントドライブ(Windows固有の概念)を Z: に移動し、 Z:¥Japan¥Fukui¥Echizen¥yourname.txt といったような ディレクトリやファイルを作ったり消したりしながら、コマンドラインの操作を 理解してもらう。 途中、エクスプローラでGUIも横で見ながら、作業をしてもらう。

fopen() , fclose() などの説明

授業の後半は、fopen() , fclose() の説明として、 以下の様なサンプルプログラムを動かして fopen / fclose を説明。 来週は、説明が不十分だった、バイナリモード/テキストモード、 fgets , fputs , fgetc , fputc といった行入力,文字入力を説明し、 その翌週あたりに実際の演習とする予定。

(( fopen / fclose サンプル ))
FILE * fp ;
if ( (fp = fopen( "hoge.txt" , "rt" )) != NULL ) {
int c ;
// 入力データが無くなるまで、ファイルから1文字入力し、それを出力。
while( (c = fgetc( fp )) != EOF ) {
printf( "%c" , c ) ;
}
fclose( fp ) ;
}

また、fopenでの PATHの指定では、Windowsの場合ディレクトリ区切り文字が "¥"であるため、C言語の文字定数として、"C:¥test.txt" といった書き方を すると、"¥t"の部分がタブ文字として扱われて、ファイルが開けなくなる 可能性があることを説明する。 これらの対応として、WindowsのC言語ではディレクトリ区切り文字に、 "/"も使えることなども補足説明を行う。

FILE* fp ;
if ( (fp = fopen( "c:¥¥test.txt" , "rt" )) != NULL ) {
char name[ 100 ] ;
int  point ;
int  sum = 0 ;
while( fscanf( fp , "%s %d" , name , &point ) == 2 ) {
printf( "%s さんの点数は %d¥n" , name , point ) ;
sum += point ;
}
printf( "合計は %d¥n" , sum ) ;
fclose( fp ) ;
}

evernoteの表の修正

最近、クラウド利用として、DropboxやらEvernoteやらを便利に使っている。 Evernoteは最初、そんなのDropboxやGoogle Docでいいじゃん…って思ってたけど、 使ってみるとエディタと統合されていて、それなりに便利。

ただ、表の編集機能はかなりダメダメ。難しい機能つけるとiPhoneアプリやAndroidアプリが無駄に複雑化しそうだし、妥協点とは思うけど。 丁度、今扱っているデータで、表を使っているんだけど、他の人にデータを見せるときに プロジェクタ投影したら画面幅が狭い状態になり、その時に編集作業を行ってから、表幅が右に余白があるのに狭く表示されるようになってしまった。 しかし、変更しようにも編集機能が無い。

Evernoteはデータは、XML形式のデータに過ぎないらしいので、 Emacs の evernote-mode を使ってみた。これを使うと、Emacs のエディタで、 テキストを編集できる。 んで、今回は、Emacsでノートの表の<table …. width="70%"> の部分を見つけて、 手作業でwidth="100%" への変更を行った。 やっぱり、面倒なんだけど…

2011年7月3日(第223回)

  • マニアックタイムズ 第5回 2年電子情報工学科 山田さん
    シミュレーションゲームについて
  • 2011年半年間を振り返って

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー