基礎情報技術 ー第2日目ー

基礎情報技術
ー第2日目ー
平成24年4月27日(金)
担当:亀田
確認
• 授業で使用した資料は授業終了後に
Web(http://kameken.clique.jp/)にて
公開します。
• 授業中はノートにメモを取ってください。
(キーワードや図だけでも結構です。)
• レポート課題や小テストがある?
2
© 2012年 東京工科大学 Hiroyuki Kameda
それでは始めましょう
3
© 2012年 東京工科大学 Hiroyuki Kameda
ウォーミングアップ問題
問題:プログラミングに必要な才能は何?
3つ以上答えなさい。
4
© 2012年 東京工科大学 Hiroyuki Kameda
本講義のポイントの確認
• ITのプロになるためには何が必要か?
これを考えるための素材をお話します。
5
© 2012年 東京工科大学 Hiroyuki Kameda
前回のポイントの確認
•
•
•
•
SEの仕事はプログラミングだけではない
ソフトウェアのライフサイクル
オブジェクト指向
モデリング言語 UML など
(これらは回を追ってさらに詳しく話します。)
6
© 2012年 東京工科大学 Hiroyuki Kameda
授業概要(確認)
• ITエンジニアのプロフェッショナルになるためには、プロとして
の嗜み(たしなみ)と作法を身につけることも大切である。本
授業では、今後プロとしてソフトウェアかかわる人たちにとっ
て避けて通ることのできない嗜み・作法を簡単な演習を通じ
て紹介するとともに、学生の皆さんにそれらの必要性・重要
性を身を持って理解してもらうことを目指す。
• 具体的には、ソフトウェア開発を上流工程から下流工程へ向
けて実際に体験してもらいながら、UML(Unified Modeling
Language)やプロジェクト管理等の紹介を行う。
• ITシステム ≠ プログラミング であることや、ソフトウェア開発
におけるコミュニケーションの意義、プロジェクト管理の重要
性についてなど、多くのことを学生の皆さん自らが気づくこと
を期待する。
7
© 2012年 東京工科大学 Hiroyuki Kameda
今日の内容
• イントロの続き
– プログラミング言語
– プログラミング
– プログラミング工学
– ソフトウェア開発
– ソフトウェア工学
8
© 2012年 東京工科大学 Hiroyuki Kameda
ソフトウェア開発過程の概要
• 「ソフトウェアは実際にどのような作業工程を
経て作れば良いのか?」 ということ。
9
© 2012年 東京工科大学 Hiroyuki Kameda
ソフトウェア開発過程の確立
これは未解決問題
の1つです!
10
© 2012年 東京工科大学 Hiroyuki Kameda
よいプログラムは
どうやって作れば良いのか?
•
•
•
•
•
•
•
バグのない
動作効率のよい
開発コストがかからない
メンテナンスがしやすい
急な修正・変更にも対応できる
拡張性のある
汎用性のある などなど
こんなプログラムって
どうやって作る
のだろうか?
11
© 2012年 東京工科大学 Hiroyuki Kameda
例えば、プログラミング言語
これにもいろいろな工夫がなされてきた
• 事務処理計算向き言語
• 科学技術計算向き言語
• 人工知能研究向き言語 など
(こんな分類のもと、さまざまな言語が考案さ
れてきた。)
疑問:プログラミング言語の分類は今後もこれでいいのだろうか?
12
© 2012年 東京工科大学 Hiroyuki Kameda
要求仕様としては…
• 対象としている処理(機能・サービス)を記述・
実現することができなければならない。
• 人間にとって使いやすく、分かりやすいもので
あって欲しい。
Fortran:計算式をそのまま書ける
Cobol:自然言語に近い表現が可能
Pascal: ____________________
C: ________________________
Java: ______________________
考えてみて
ください。
13
© 2012年 東京工科大学 Hiroyuki Kameda
よりよいプログラムをもとめて…
•
•
•
•
機能の整理
モジュール化/階層化
構造化プログラミング
モジュールの独立性
(関数型言語、データ抽象化、
=>オブジェクト指向)
• ソフトウェア開発法
プログラミング
言語側から
開発法側から
14
© 2012年 東京工科大学 Hiroyuki Kameda
具体的に見てみよう
• プログラミングの側面から
• 開発手法の側面から
15
© 2012年 東京工科大学 Hiroyuki Kameda
プログラム工学Ⅲ
(ダイジェスト版)
工学部情報工学科での講義資料より
担当:亀田弘之(東京工科大学)
C言語の歴史
•
•
•
•
•
•
•
1972年 誕生(Dennis M. Ritchie)
UNIX開発用言語として使用
ハードウェアの発達により新しい機能追加
方言の発生
1989年 ANSI規格制定
1990年 ISO規格制定
1993年 JIS C制定
17
© 2012年 東京工科大学 Hiroyuki Kameda
問題
1. C言語は今後どのような発展の道をたどる
か論じなさい。
2. BASIC、PASCAL、FORTRAN、COBOL、
LISP、PROLOGなどの他の言語の歴史を
調べ、各言語がどのような背景・目的で誕
生し、どのような道をたどっているか論ぜよ。
18
© 2012年 東京工科大学 Hiroyuki Kameda
C言語の特徴
1.
2.
3.
4.
5.
6.
構造化プログラミング向き
ハードウェアが透けて見える高水準言語
豊富なデータタイプ
コンパクトな言語仕様
関数形式によるモジュール化
移植性が比較的高い
19
© 2012年 東京工科大学 Hiroyuki Kameda
構造化プログラミングとは
• 処理手続きをいくつかの単位に分割し、主と
なる処理は大まかに記述とし、細部はサブ
ルーチンとして記述していく方法。エドガー・ダ
イクストラらによって提唱された。ダイクストラ
は、大規模化したプログラムを効率よく記述し
プログラム設計上のミスが起きにくいようにす
るための方法論を検討した。その結果1960
年代後半に、構造化定理を証明し、構造化プ
ログラミングを提唱した。
20
© 2012年 東京工科大学 Hiroyuki Kameda
構造化定理
• 1つの入り口と1つの出口を持つようなプログ
ラムは、「順次・反復・分岐」の3つの基本的な
論理構造によって記述できる(Dijikstra)。
順次
反復
分岐
21
© 2012年 東京工科大学 Hiroyuki Kameda
順次
反復
分岐
S=S+1
X = f(S, 5)
S = g(X) + S
© 2012年 東京工科大学 Hiroyuki
Kameda
22
問題
1. C言語の特徴を、Javaなどの他の言語と比
較して述べよ。
23
© 2012年 東京工科大学 Hiroyuki Kameda
3.プログラムの基本的なパターン
#include <stdio.h>
main( ) {
本体
}
24
© 2012年 東京工科大学 Hiroyuki Kameda
3.プログラムの基本的なパターン
#include <stdio.h>
main( ) {
double fahrenheit; /* 華氏 */
double celsius;
/* 摂氏 */
scanf(“%f”, &fahrenheit);
celsius = ( fahrenheit – 32 )*5.0/9.0;
printf(“%f”, celsius);
}
25
© 2012年 東京工科大学 Hiroyuki Kameda
3.プログラムの基本的なパターン
Cのプリプロセッサ用
#include <stdio.h>
main( ) {
double fahrenheit; /* 華氏 */
double celsius;
/* 摂氏 */
scanf(“%f”, & fahrenheit);
celsius = ( fahrenheit – 32 )*5.0/9.0;
printf(“%f”, celsius);
}
Cのプログラム
© 2012年 東京工科大学 Hiroyuki Kameda
26
3.プログラムの基本的なパターン
#include <stdio.h>
main( ) {
double fahrenheit; /* 華氏 */
double celsius;
/* 摂氏 */
scanf(“%f”, &fahrenheit);
celsius = ( fahrenheit – 32 )*5.0/9.0;
printf(“%f”, celsius);
}
27
© 2012年 東京工科大学 Hiroyuki Kameda
中略
28
© 2012年 東京工科大学 Hiroyuki Kameda
5.構造化プログラミングと制御構造
29
© 2012年 東京工科大学 Hiroyuki Kameda
順次
反復
分岐
S=S+1
X = f(S, 5)
S = g(X) + S
構造化プログラミング
30
© 2012年 東京工科大学 Hiroyuki Kameda
5.構造化プログラミングと制御構造
• 順次
• 反復
– for文
– while文
– do-while文
• 分岐
–
–
–
–
goto文
break文
continue文
switch文 & case文
31
© 2012年 東京工科大学 Hiroyuki Kameda
For文
• Syntax:
for(式1; 式2; 式3)
文
• 例:
for( i=1; i <= 100; i++)
s = s + i;
i=1
i<=100
s=s+i
i++
32
© 2012年 東京工科大学 Hiroyuki Kameda
Flow Chart
こんな具合でした...
• Javaの話と似ていませんでしたか?
33
© 2012年 東京工科大学 Hiroyuki Kameda
今度は、…
• プログラミングの側面から
• 開発手法の側面から
34
© 2012年 東京工科大学 Hiroyuki Kameda
ソフトウェアのライフサイクル(1)
1.
2.
3.
4.
5.
6.
要求分析
設計
プログラミング
デバッグ
評価
運用
⇒再び1へ戻る
35
© 2012年 東京工科大学 Hiroyuki Kameda
ソフトウェアのライフサイクル(2)
1.
2.
3.
4.
5.
6.
何(どんなもの)を作ればいいの?
どう作ればいの?
作成作業そのもの(デバッグもやりながら)
本当にちゃんとできたのかな?
実際に使おう!
ちょっと変更したいな。
36
© 2012年 東京工科大学 Hiroyuki Kameda
ソフトウェア開発モデル
•
•
•
•
•
•
•
ウォーターフォール(water fall)モデル
プロトタイピングによるソフトウェア開発
インクリメンタルモデルとイテラティブモデル
スパイラルモデル
データフローモデル
アジャイルモデル
モデル駆動型
=>一長一短あり
自主問題:
ウォーターフォールモデル , スパイラルモデルおよび
モデル駆動型アーキテクチャ(MDA)について調べよ。
© 2012年 東京工科大学 Hiroyuki Kameda
37
ソフトウェア開発過程の確立
現時点では、経験的・
体験的にtry!
銀の弾丸はあるのだろうか?
38
© 2012年 東京工科大学 Hiroyuki Kameda
問題
• 「銀の弾丸」とはソフトウェア工学の分野では
何を意味しているのでしょうか?調べてみてく
ださい。
39
© 2012年 東京工科大学 Hiroyuki Kameda
銀の弾丸とは
• ソフトウェア開発の現場における諸問題に対
して、あまねく通用する万能解決策のこと。
• このような「万能な解決策(銀の弾丸)は存在
しない」という表現で、ソフトウェア開発の難し
さを表現することがある。
40
© 2012年 東京工科大学 Hiroyuki Kameda
銀の弾丸はなくても…
• あきらめてはいけない!
– 1つの提案が「モデリング」とそれを記述・表現す
るための「モデル記述言語」である。
(以下、その話をしましょう)
41
© 2012年 東京工科大学 Hiroyuki Kameda
クールダウン問題
問題:プログラミングに必要な才能は何?
1.優れた数学者の論理性
2.エジソンのような工学(エンジニア)の才能
3.銀行員のような作業の正確さ
4.推理作家のような発想力
5.ビジネスマンの実務性
6.協働作業をいとわない性格
7.経営的な関心も理解できる能力
8.その他(具体的に:
)
© 2012年 東京工科大学 Hiroyuki Kameda
42