日本人と インド人 解法 (考え方 違い) ー仕様とプログラム 距離ー
- 仕様整理技術 -
- トレーサビリティ -
20170317 板倉稔
インド人やインドに発注したなど様々な人から刺激を受けた。その中で、10年以上も解けなかった疑問 が最近解けた で紹介したい。
こんなことがあった。 昔、某コンピュータ巨大メーカ 部長氏が、こういうことを言っていた。
(1)インドに発注したソフトを検収したら、全て 試験データが問題なく動いた。 (2)プログラムを見てみたら、何をしているか全く分からなかった。 (3)これで メンテナンス出来ない で、全て日本で書き直した。
一方で、 私 、あるインド人に、こんなことを言われた。
「日本人 仕事 Donky Workだ」。 つまり、ロバ ようにつまらないことをコツコツやっている 。
「 しかし、日本が発展した 、こ コツコツ おかげだ。『おしん』 様に」。 『おしん』 、インドで大人気だったそうだ。
と言われて、インド やり方 違うらしいと思った。その後長い間気になっていたが、それらしい例 が思いつかなかった。やっとそれそうな事例に出会えた。
こ 資料 解 、ナレッジ社でロボット システムを作っている泉谷君とスパイラル社でインターン をしている水野君 両君が出してくれた。私 考えたこともなく、これで書かれていたら確かに理解 出来ないと納得した。数十年にわたる疑問が解けた。両君に感謝する。
こんな問題を考えてみよう
旅費清算 プログラムを作ることにした。近間に出張するとき、出張命令書(下 図1:EXCEL 行 になっている)がある。そこに 、日付と行き先と理由などが書いてある。こ 出張命令書から、交通 費請求を自動的に作れないだろうかと考えた。
出張命令書
(1)出張 殆どが自社発着である。 (2)出張命令 各行 時系列に並んでいる。
(3)行き先と所要交通費 表を用意すれば、行った日付と場所などから交通費レコードを生成出来そ うだ。
(4)出先から別 出先に出かけること めったにない で、手で交通費レコードを挿入する。こ た め、ブランク レコードを挿入する。
以上 機能を整理すると次 ようになる。
(1) そ 日 出張と次 出張 日付が違う時 、交通費がかかった ず。
(2) 日付が同じでも、名前が違う場合 交通費がかかった ず。 同じ日付でも、行った人が違えば交通費 必要。
(3) 同一日に、複数 駅に行ったとき ブランク行を挿入する。
月日 |
出発予定 |
帰社予定 |
氏名 |
出張先 |
理由 |
0303 |
14:00 |
17:00 |
板倉 |
×工場 |
検査 |
0305 |
10:00 |
12:00 |
山田 |
本社 |
会議 |
出張先 |
駅名 |
片道運賃 |
×工場 |
川崎 |
¥420 |
本社 |
大手町 |
¥260 |
同じ日に複数 出張先に行った場合、会社から 交通費で 無い で手で書き込むようブランク 行を追加する。
以上 条件を満足するプログラムを書きたい。下記[1]~[3]を書いてみた。
[1] 仕様書通りに書く
プログラム1 (仕様通りに記述)
[2] 仕様を表に整理する 問題 条件を表1 様に整理する。
if 現出張行 日付 <> 次 出張行日付 then 交通費レコード挿入
if 現出張 日付 = 次 出張 日付 then if (現出張 氏名<>次 出張 氏名) THEN 交通費挿入 else next
if 現出張行 日付 = 次 出張行日付 and 現出張行名前=次出張行 and 現出張行 駅名 <> 次 出張行駅名 then ブランク行挿入
表1 処理決定表
番 号 |
条件 |
指 示 |
意 味 |
||
駅 名 同 じ |
名 前 同 じ |
日 付 同 じ |
|||
0 |
0 |
0 |
0 |
1 |
挿入 |
1 |
0 |
0 |
1 |
1 |
挿入 |
2 |
0 |
1 |
0 |
1 |
挿入 |
3 |
0 |
1 |
1 |
2 |
ブランク挿入 |
4 |
1 |
0 |
0 |
1 |
挿入 |
5 |
1 |
0 |
1 |
1 |
挿入 |
6 |
1 |
1 |
0 |
1 |
挿入 |
7 |
1 |
1 |
1 |
0 |
無し |
指示 凡例) 1: 交通費を挿入する
0: 交通費を挿入しない。
同じ 凡例) 1: 現出張と次 出張が同じ 0: 現出張と次 出張が違う
以下 プログラムで 、・・同じ
「現出張 ・・ = 次出張 ・・」が成立した時と解釈してください。
プログラム2 (表を引いて処理を決定) 表 バイアス(バイアス=駅*4+名前*2+日付*1)を計算して表を引いて処理を決定する (表 表1)
プログラム3 (表自体を整理してプログラムにする)
[3] もっと高度に整理すると(論理式で書くと) プログラム4 (論理式だけで判断させる)
プログラム5 (代数 応用でも解ける・・・参考 ) こ 例 2軸 みで書いている。3軸以上も可能。
if駅名同じ thena=1elsea=0next if名前同じ thenb=1elseb=0next if日付同じ thenc=1elsec=0next d = a * 4 + b * 2 +c * 1
if テーブル,d = 1 Then 交通費挿入 next
if テーブル,d = 2 Then ブランク行挿入 next
if 駅名同じ and 日付同じ then
if 駅名同じ then # ブランク挿入
else # 交通費を挿入しない else
# 交通費を挿入する
d = NOT 日付同じ OR NOT 名前同じ
if d = 1 Then 交通費挿入 next
if d = 0 AND NOT 駅名同じ Then ブランク行挿入
d = - a - b + 1.5
IF d < 0 then ブランク挿入
else 交通費挿入
以下解説
(0,1
(注)プログラム5参考 http://hokuts.com/2015/12/04/ml3-mlp/
評価式(左 点線を満足する関数を見つける) d = -x -y +1.5 (y = ax + b)
左図 点が評価式 上にあれば、ブランク挿入 評価式 下にあれば、交通費挿入
評価結果 正しく判断されている
(1,1
(0,0
(1,0
x |
y |
d |
挿入 |
0 |
0 |
2 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
-1 |
1 |
以上 解を評価してみる。
[1](プログラム1) 要求通りに書いてある でトレース可能だが読みにくい。 [2](プログラム2) 、表だけあれば、何をしているかが分かる。プログラムに実世界(業務) ない で読む必要がない。 [2](プログラム3) 、表1プログラムを整理した上でプログラムにしている。プログラムを読んで、表が
あればトレース可能。
[3](プログラム4) 、業務処理が論理式 中に隠れて待っている で、プログラムを読んでも分から ない。ただ、論理式な で、判断 関係らしいと 見当 つく。汎用的になって、名が体を表すこと が出来れば共通関数として見せられる。
[3](プログラム5) 、いきなり数式か出てきて業務と関係あるかさえ分からない。汎用的になって、名 が体を表すことが出来れば共通関数として見せられる。
一長一短あるが、日本人 [1]を書きがち、インド人 [3]を書きがちということだろう。
インドと日本 違い 日本 算数 教え方 、何度も繰り返して練習して覚える。Donky work風
インド 算数 教え方 、「こ 場合どういうやり方をすると簡単か考えなさい」と言う教え方ら しい。いわば、どうさぼるかを教えている。こ プログラム 問題に当て めると、こ 表 上手 い解き方を考えろと言うことになり、[3] プログラムが書かれる で ないだろうか。 こ 結果、プログラムを読んでも、何をしているか全く分からないということが起きる で ・・・。
板倉 評価
[2](プログラム2)を推薦する(個別機能である で) (1)業務(実世界)仕様が表で整理されている
こ 表に 、業務しかなくプログラムに業務 無い。また、表 抜けが少なく、一覧性が良い。 (2)表がそ ままプログラムに書かれる。仕様とプログラム 距離が短い。
そ まま書かれるとバグが入りにくい。また、見つけやすい。
(3) プログラム部分に 、表を選択する論理が書かれているだけである。業務が入らない。
プログラムで業務を理解する 難しい。 (4)プログラム 、独立したIF文と代数で成り立っている で、過去 条件に左右されない。
板倉語で 、ステートメント独立と言う。ステートメント同士が独立だと、分かりやすく、バグが入り にくく、変更しやすい。
以上書いてみて、こんなことを思った 優れも を使える人材がいるか?
(1) [3]が書ける抽象化能力 高い人が書いたソフト 、分からないがゆえに葬られる可能性があ る。某巨大企業で 、難しくて正しく動くプログラム 捨てられ、書き直された。場合によって 、人そ も が葬られる可能性もある。「あいつ 難しいプログラムを書く」とか・・・。特別先端的でない分 野 プログラム 、中程度 抽象化が求められる。
(2) そういう世界 ソフトを抽象化能力 高い人に書かせて もったいない かもしれない。逆に、 新たな知見がえられる かもしれない
(3) もっと賢い人 、相手 レベルに合わせて書くかもしれない。でも、こうすると能力を殺しているこ とになるな~。
仕様をプログラムにする教育あるい 、研究があるか?
(1) 大学で 、言語教育が主流。
(2) 要求定義 、要求定義に留まっている。
(3) 私 、仕様 整理術と言う言葉を聞いたこと 全くない。
社会に 、圧倒的にDonky向け 仕事が多い。
(1) Donkey Workを脱するに 、優れも がそ 分野に入ってこないと出来ないかもしれない。
トレーサビリティ(思考過程がトレース出来る)と 、抽象化能力 レベル 違いを埋めることかもしれ ないな~
・・・・・・・・・・・・・こ 項未完・・・・・・・・・・・・
以上