基本情報処理を勉強している文系人間です。
ファイル処理-事務処理の基本-コントロールブレイクで
自分なりに取引先コードの集計、商品分類の集計の追加など
擬似言語を使い試してみたのですが
記述がすべてを網羅しているか確証がもてません。
以前仕事でプログラミングをしたときも、
考えられる変化の状況を書き出して、テストしてOKにしてしまって、不安がのこっておりました。
変化する要素とその流れをトレース表にまとめて
は見たものの、それ自体がよくわかっていないようです。
なにか検証する良い手法はありませんでしょうか?
また、やさしい参考資料がありましたらお教え下さい。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
話を混ぜっ返すようで申し訳ないのですが、質問者さんが補足の中で挙げておられる「アルゴリズムが正しいことの証明」に関しては、「一般に、正しいアルゴリズムが存在するとは限らない」という証明が与えられています。
参考:
http://www.itl.dm.u-tokai.ac.jp/~hiroshi/educati …
一般化というのは非常に危険なもので、「一般に・・・存在しない」からと言って「ある特定の問題について存在しない」とは限らないわけですが、少なくともアルゴリズムの正しさについて一般的に論じようとすると、この問題は避けて通れません。
ですので逆に、実務的には「避けて通る」、つまり「アルゴリズムの正しさについて一般的に論じることは避ける」ことが無難であろうと、私は思います。
「アルゴリズムの正しさ」や「有限時間停止性の証明」は、何も非常に複雑なアルゴリズム、あるいはまだ知られていないアルゴリズムについて問題とされているものではありません。
その筋では有名な「与えられた自然数について、偶数なら2で割り、奇数なら3倍して1を足すことを繰り返す。1になったら停止。」というアルゴリズムがあります。(詳細違ってるかも。よくご存知の方ありましたらご指摘ください。)
これは、どんな自然数を与えてもおそらく必ず停止するだろうと考えられているのですが、しかし停止することの証明はまだ与えられていません。
こんな簡単なアルゴリズム(あるいはプログラム)でさえ停止性が判断できないわけですから、ましてや通常の(これより)大規模なアプリケーションに関して、厳密な停止性の議論を行うのは、学術的な興味を除けば、ほとんど実用的でないと思います。
現実的には、モジュールごとに「思いつく限りの」境界条件の周辺を探索(テスト)するというところに落ち着くのかなと思います。この「思いつく限り」というところで主観が入ってしまうのが曲者なわけですが。
(「こういう方法論でやってます」という例示ではなくてすみません。)
この回答への補足
ご丁寧にお答えいただき、ありがとうございます。
xcrOSgS2wY様の適切なご回答、参考になりました。
素人ながらプログラムを多少なりとも書いている者として
不安を払拭する何かが有るのではと、
知識の背景としての基本情報処理を学び、
アルゴリズムの中にその答えがあるのではと考えておりました。
「プログラムの正しさ」に視点を広げるとしたら、
そこには一般論としてのテスト技法に回答を見いだす
ことが正しいのかもしれません。
もう少し、勉強してみたいと思います。
ありがとうございました。
No.1
- 回答日時:
どうも!
で、結局アルゴリズムを検証する方法ですよね?
何をどのように検証したいのですか?
変化する要素をつかむならトレース表が最適でしょうね。
(私の場合滅多に使用しませんが)
解があってるかどうかの検証なら、アルゴリズムによって様々あります。
もうちと詳しく質問したほうがよろしいのでは?
この回答への補足
早速のご回答ありがとうございます。
質問内容をまとめます。
1.きっかけ:
作成したプログラム(アルゴリズム)の正しさをどの様に検証したらよいか疑問に思っていた。
2.今までの作成方法:
1,機能とその順序を箇条書きにする。
2,図に表してみる
3,コーディング
4,変数やデータの境界や真ん中、あり得ない値などで正しさを検証
5,おかしい場合は、デバックをして値の変化を確認、修正
6,4を再度行い、問題がなければOKにする。(なにか不安が残る)
3.質問のあとに自分で調べたこと
・アルゴリズムが正しいことの証明
http://www.comm.musashi-tech.ac.jp/~uehara/ALG/A …
4.3を元に正しさを考えると
1,2.4などのテストをおこない結果の正しさを証明(不足か?)
2,値の変化に着目してトレース表を作成し、ループ不変条件、ループ終了条件を証明
以上が質問と自己回答してみた内容です。
具体的な例でなく申し訳ございません、また、
プログラムの内容により固有の検証部分・方法があることも想像されますが、
一貫した検証方法が、皆さんがコーディングするにあたりあれば、
教えていただきたく思います。
以前、ベテランのプログラマーさんが、2.3まで進み、
「さてこれが正しいことを証明するには・・」と、テストデータを作成して
確認しておりました。きっとOKを出す基準をお持ちであったのだと想像したのです。
よろしくおねがいいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
携帯のパスワードについてです。
-
アルゴリズム習得方法
-
期間重複チェックがわかりません
-
多変数関数の最小値を求めるプ...
-
アルゴリズムの学習サイト
-
ランダムサーチ(改)!!
-
連立方程式を解く
-
ライントレース アルゴリズム
-
プログラミング
-
アルゴリズムとプロトコールの違い
-
退化木をバランス木にしたい
-
最短経路を計算するプログラム
-
詰め将棋をとくのは、アルゴリ...
-
最短経路問題を1つ算出するスク...
-
65536は2の何乗なのでしょうか?
-
VBAにてメール作成した際、一部...
-
ゲーミングPCに入っているAlris...
-
Excelで4096点以上のFFTの方法
-
excelのexe化について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
SNSをやらない理由ってなんです...
-
アルゴリズムとプロトコールの違い
-
[ EXCEL VBA ] 図形を読み込む...
-
BCDについて
-
期間重複チェックがわかりません
-
最大公約数を求めたい!
-
c言語で画像から文字を認識 キ...
-
C♯で電卓を作成しています。演...
-
多変数関数の最小値を求めるプ...
-
画像から文字を認識してテキス...
-
ハッシュアルゴリズム
-
偏りのある乱数のアルゴリズム
-
乗換案内の作り方が知りたいです。
-
JPEG圧縮で8×8に分割する理由に...
-
書籍のソースコードを別言語に...
-
グループを均等に分けるには?...
-
複数の点を最短距離で全て繋ぐ...
-
gooという検索エンジンの後にGo...
-
シードを考慮したトーナメント...
おすすめ情報