今日のお話flute.u-shizuoka-ken.ac.jp/~s-okubo/class/soft2_19/fig/... · 2019-08-31 · 7/43...

7
1 実践ソフトウェア開発概論II 1日目 2/43 今日のお話 ガイダンス この講義で行うこと 復習と演習 3/43 はじめに 4/43 自己紹介 名前:大久保 誠也 学位:博士(工学) 20056月電気通信大学 趣味 計算機をいじること 特に MSX Solaris 静岡には2008年から。 印象深いアルゴリズムは5/43 授業計画 はじめに Python入る前に 練習 (成績管理) 08/03() Python その1 Python その2 Python その3 08/17() 仕様書 とは 課題 課題と 成果発表 08/24() 課題 課題 発表会 09/14() 講義 (状況次第) 課題 課題と 成果発表 08/31() 6/43 成績の付け方 毎回の発表により成績をつける。 また、最終発表は必須とする。 なお、出席回数が足りない場合は不可とする。 講義で使用する資料は、大久保のWebサイトから ダウンロードできます(週明け以降) 「静岡県立大学 大久保 講義」で検索してください。 1

Upload: others

Post on 14-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 今日のお話flute.u-shizuoka-ken.ac.jp/~s-okubo/class/soft2_19/fig/... · 2019-08-31 · 7/43 コンピュータ大貧民大会周辺 の(混沌とした)開発 8/43 ここでのお話

1

実践ソフトウェア開発概論II 1日目

2/43

今日のお話

ガイダンス

この講義で行うこと

復習と演習

3/43

はじめに

4/43

自己紹介

名前:大久保 誠也

学位:博士(工学) 2005年6月電気通信大学

趣味

計算機をいじること

特に MSX やSolaris

静岡には2008年から。

印象深いアルゴリズムは…

5/43

授業計画

はじめに

Pythonに入る前に

練習(成績管理)

08/03(土)

Pythonその1

Pythonその2

Pythonその3

08/17(土)

仕様書とは

課題

課題と成果発表

08/24(土)

課題

課題

発表会

09/14(土)

講義(状況次第)

課題

課題と成果発表

08/31(土)

6/43

成績の付け方

毎回の発表により成績をつける。また、最終発表は必須とする。なお、出席回数が足りない場合は不可とする。

講義で使用する資料は、大久保のWebサイトからダウンロードできます(週明け以降)

「静岡県立大学 大久保 講義」で検索してください。

1

Page 2: 今日のお話flute.u-shizuoka-ken.ac.jp/~s-okubo/class/soft2_19/fig/... · 2019-08-31 · 7/43 コンピュータ大貧民大会周辺 の(混沌とした)開発 8/43 ここでのお話

7/43

コンピュータ大貧民大会周辺の(混沌とした)開発

8/43

ここでのお話

なんで、このような手法とかを学ぶのかは、他の開発をやってみないとわからないと思います

ここでは、開発手法とか考えずに進んだプロジェクトである「コンピュータ大貧民大会」について見ていきます。

コンセプト(になってしまったもの)

設計は適当でも、

エンジンの馬力だけで空は飛べる

個人技の集合体

9/43

コンピュータ大貧民大会 電通大でUECコンピュータ大貧民大会が開催. トランプゲームの大貧民をプレイするプログラムを持ち

寄って貰い,対戦させる大会.

10/43

サーバー – クライアント システム

011010010010011001

011010010010011001① 送信

クライアント

② 処理

③ 返信

010001100010111001

010001100010111001

サーバーにやって貰おう

サーバー

クライアントは,サーバーに処理を依頼します. サーバーは,クライアントの依頼を受け,結果を返信します.

11/43

システム構成図

大貧民サーバー

• 場の管理• 状況のクライアントへの通知• 提出されたカードの判定

クライアント 1 クライアント 2 クライアント 3

クライアント 4

クライアント 5通信

• カードの選択

• カードの選択

• カードの選択

• カードの選択

• カードの選択

• 場に出ているカード• 場の状況• 自分の手札• 提出するカード

等々

12/43

システム構成図

大貧民クライアント 大貧民サーバー

①場の情報場の管理

②提出カード選択

③カード提出

クライアント 1

提出されたカードの判定

クライアント 2

クライアント 3

クライアント 4

クライアント 5

④すべてのクライアントに結果を通知

次のクライアントのターンに

2

Page 3: 今日のお話flute.u-shizuoka-ken.ac.jp/~s-okubo/class/soft2_19/fig/... · 2019-08-31 · 7/43 コンピュータ大貧民大会周辺 の(混沌とした)開発 8/43 ここでのお話

13/43

開発前夜

開発の動機:

西野先生が大貧民をやると言ったから

ディスカッション時の学生の状況

ゲームの大会がどう開かれているかとかは、まったく知らなかった。そして、調べなかった。

「ソケットで通信できるらしいぞ」という知識がある学生が3名ほどいたので、ソケットを用いた通信をすることに決まった

知らなくても、最後には案外なんとかなる14/43

通信部分の開発時

大貧民クライアント 大貧民サーバー

①場の情報場の管理

②提出カード選択

③カード提出

クライアント 1

提出されたカードの判定

クライアント 2

クライアント 3

クライアント 4

クライアント 5

④すべてのクライアントに結果を通知

次のクライアントのターンに

開発中、ここらへんの詳細は、

口約束で決めた

これは混沌を深めた(詳細な仕様は後で書いた)

15/43

関数の説明

void makeJKaidanTable(int tgt_cards[][15], int my_cards[][15])

渡されたカードのテーブルmy_cardsから、階段で出せるかどうかを解析し、 結果をテーブルtgt_cardsに格納する。

そこにソースファイルがあるじゃろ

tgt_cardsは、どういう表現なの?

この大会の参加者は、どの層を目指しているのか16/43

完成したもの

紙のトランプ 対戦環境

デザイナーを入れるという発想はなかった

17/43

Python をはじめる前に

18/43

計算機とは

計算機は、ざっくりと言って、CPUとメモリ、入出力装置からなる。

CPU メモリ入出力装置

計算機

データを保存する

データを処理する

外部とデータを

やりとりする

3

Page 4: 今日のお話flute.u-shizuoka-ken.ac.jp/~s-okubo/class/soft2_19/fig/... · 2019-08-31 · 7/43 コンピュータ大貧民大会周辺 の(混沌とした)開発 8/43 ここでのお話

19/43

ビットとバイト

日常、人は、値(数)は10進数で、文字は文字として使用している。

一方、計算機の内部では、すべてのデータは 0,1 で管理されている。0,1 しか取り扱うことができない!

また、計算機は、メモリにデータを蓄えている。単位は、

bit

byte1byte 1bitが8つ集まっている。

1bit 0 もしくは 1 のどちらかを保存。

20/43

メモリとアドレス

基本的に、byte単位で

データを取り扱う。 メモリは、1byteを保存でき

る場所が大量にある。

それぞれの場所には、アドレスがふられている。

0000000100020003000400050006

アドレスがふられている

メモリの概念図

21/43

昔のプログラミング

人間は、曰く人間語を話す。

計算機は2進数しか理解できない!

昔は、人間が計算機に合わせて、2進数を話していた。

00000001000200030004

了解。理解した。

計算機

処理

こういう処理をやりたい

なぁ

10001001011010101011101011011011 22/43

上級言語

人間は、2進数を会話するようにできていない!

人間が計算機に指示しやすく、つまり、プログラミングしやすくしたものが、上級言語。

00000001000200030004

了解。理解した。

計算機

処理

こういう処理をやりたい

なぁ

printf()get()put()

while()

10001001011010101011101011011011

変換

23/43

種々の上級言語 色々な計算機言語があります。 C言語 :この演習であつかう言語 C++ :C言語の拡張として作られた Java :機種に非依存 BASIC :昔は、パソコンで一番メジャーだった。

:構造化言語でなく、スパゲッティーなソースを:書きがち。

forthや :基本的に、すべての命令はスタックをpostscript :操作する命令。

awkやperl :スクリプト型の言語。手軽に書ける。

等々 他の文法の言語を勉強することは、理解や技量の幅

が広がる(と思います) 24/43

例え話(1) ブロックの組み方をマスターするには?

個々のブロックの形を把握する。

組み上がったブロック例を学ぶ

自分で組んでみる

4

Page 5: 今日のお話flute.u-shizuoka-ken.ac.jp/~s-okubo/class/soft2_19/fig/... · 2019-08-31 · 7/43 コンピュータ大貧民大会周辺 の(混沌とした)開発 8/43 ここでのお話

25/43

例え話(2) プログラミングと対応させると......個々のブロックの形を把握する。

→ 個々の命令を理解する。

組み上がったブロック例を学ぶ→ 他のサンプルプログラムを理解する。

自分で組んでみる→ 自分でプログラムを組んでみる。

26/43

何故にプログラミングを学ぶのか

極端な話、単に"既存のものを使うだけ"なら、プログラミングを学ぶ必要は無いかもしれない。

何か、"新しいものを作り上げる"ことをやりたい場合、計算機とプログラミングは、非常に強力なツールに!

既存のものを使用する世界 新しいものを創造する世界

ソフト

知識

手法

ソフト

知識

手法

27/43

他のことへの波及効果

プログラムを勉強すると...

実際にプログラムを書いてみることで、他の講義でやった内容を整理する。

物事を実現するときにに必要な、データ構造とか処理方法とかの考え方を身につける。

手法の理屈だけじゃなくて経験も積む

何をどのように、どういう順番でやればよいかを、整然と考えられるようになる(はず)

28/43

Pythonについて

1991年に初版が公開。

グイド・ヴァンロッサムによって開発された。

スクリプト言語で、以下の特徴を持つ。

オブジェクト指向言語

簡潔に書けるソースファイル

種々のライブラリ。一部はバイナリファイルで高速。

オープンソース

機械学習とかの分野で大流行

29/43

Pythonだと

欠落データがあるcsvファイルを、線形補間したい!

みかん,りんご10,2015,30,50

みかん,りんご10,2015,30,50

#! python

import pandas as pd

df = pd.read_csv('data.csv')df.interpolate(inplace=True)print(df)

#! python

import pandas as pd

df = pd.read_csv('data.csv')df.interpolate(inplace=True)print(df)

Pythonだと5行(コマンドラインだと4行入力)

ここを補間

30/43

練習課題(成績管理)

5

Page 6: 今日のお話flute.u-shizuoka-ken.ac.jp/~s-okubo/class/soft2_19/fig/... · 2019-08-31 · 7/43 コンピュータ大貧民大会周辺 の(混沌とした)開発 8/43 ここでのお話

31/43

事務との相談(1)事務 教員

はい

新カリキュラムになって、コース制が始まりました

コースの条件を満たしているか、判定する必要があります。

場合によっては、学生に、なんらかの連絡とかも必要になると思います

32/43

事務との相談(2)事務 教員コース制って、あれですよね。

付け加えるなら、入学年度によって必修科目が異なったりします

情報コースと通信コースがあって

各分野にあるコース必修科目と、各分野の科目から一定の単位数を

取得すると合格っていう

33/43

事務との相談(3)事務 教員で、何か問題が?

うちの教務システムは、コース判定の機能はないです

手作業ですか?

やめましょう

ちなみに、お金はありませんので、システムの拡張とか無理です

34/43

事務との相談(4)事務 教員システムは、何を出力できるんですか

成績一覧の出力となると.....

1行に、[学籍番号,氏名,科目名,科目コード,科目分野,分野コード,成績,単位数, ….]とかをcsvで出せます

これが、1履修ごとにあるので、1人が100科目履修していて、1学年130

人だと、13000行になります

35/43

事務との相談(4)事務 教員分野は、英語とか、コースに関係な

いのもありますね

全然、整理とかされてないんですね

事務(と学生)を満足させなさい

36/43

やること

先ほどの事務とのやりとりを元に、解決策(システム)を提示しなさい。

考えるポイント

事務の台詞から、判定する側の立場として、何をやるべきか考える

判定される側の立場として、何が提供されればよいかを考える

6

Page 7: 今日のお話flute.u-shizuoka-ken.ac.jp/~s-okubo/class/soft2_19/fig/... · 2019-08-31 · 7/43 コンピュータ大貧民大会周辺 の(混沌とした)開発 8/43 ここでのお話

37/43

提供される情報

csvファイル

1行が1履修。すべての学生のデータが1ファイル。

各行には、以下の情報が含まれている。

学籍番号、氏名、科目名、科目コード、科目分野、分野コード、成績、単位数

コースの条件

情報と通信の2つのコースがある

情報分野と通信分野があり、一定数の履修が必要

各コースに必修科目がある。入学年度により異なる。

38/43

来週までにやること

次回からは、PCを持参してください。

次回までに、Pythonの3.x系をインストールしておいてください。素のPythonでなく、Anacondaでも良いです。

UTF-8を扱えるテキストエディタも必要です。

本講義で作成するソフトウェアも考えておいてください。

教科書を購入してください。次々回から使用します。

“ビジネスルールを可視化する要件定義の図解術”NTT ソフトウェアイノベーションセンタ、NTTデータ (著)

ISBN-10: 4822271870

7