【Perl,PHP】LLバトルロワイヤル【Ruby,Python】

このエントリーをはてなブックマークに追加
859デフォルトの名無しさん:2008/04/20(日) 17:56:22
>>857
というより、C0テストすら知らない奴が話を混乱させていると思われ。
860デフォルトの名無しさん:2008/04/20(日) 17:57:26
>宣言していない識別子が出ているだけならC0で発見できるだろ。
無理言うなwww
861デフォルトの名無しさん:2008/04/20(日) 17:59:57
全てのコード上の式およびステートメントが1通り以上実行されているのだから、
宣言していない識別子が出ていれば当然発見できるでしょ。
862デフォルトの名無しさん:2008/04/20(日) 18:00:39
ああ、やっぱり知らないのか。
C0君は動的言語について、すこし勉強してから来るように。
863デフォルトの名無しさん:2008/04/20(日) 18:05:40
>>861
宣言されてない識別子を使った時点で、宣言されたことになる言語はごまんとあるわけだが
864デフォルトの名無しさん:2008/04/20(日) 18:06:43
>>848が意図的にtypoという別の変数に入れたものなのか変数名を間違えただけなのかを明確に区別できる方法があるなら教えてほしい
865デフォルトの名無しさん:2008/04/20(日) 18:10:31
条件1: 静的型言語L1で記述されたプログラムP1に対して、
    テスト基準C0を満たすテストケースT1を実行し、エラー0の結果を得る。

条件2:動的型言語L2で記述されたプログラムP2に対して、
    において、テスト基準C0を満たすテストケースT2を実行し、エラー0の結果を得る。

また、P1およびP2は同じ仕様に基く、内容も1対1に対応するものとする。

一般に動的型言語のほうが有意にテスト量が大きくなることを示すためには、
以下の1いずれかを満たす必要がある。

結論1: | T2 | が | T1 | よりも有意に大きくなる。
結論2: P1もP2も未発見のバグを含んでいる可能性は残っているが、
     条件2で未発見のバグが同様の実装をされた条件1で発見されるものが
     条件1で未発見のバグが同様の実装をされた条件2で発見されるものよりも
     有意に大きくなる。

さあ、結論1でも結論2でも、実例なり根拠なりを示してくれ。
866デフォルトの名無しさん:2008/04/20(日) 18:12:01
3行にまとめて欲しい
867デフォルトの名無しさん:2008/04/20(日) 18:13:00
>>863
で、その宣言されていない変数を使っても、仕様通りの結果が得られるわけか?
C0を満たすというのはそういう意味なのだが。

>>864
仕様で求められている結果が得られるかどうか。つまり、>>848の例でいえば、
仕様は「2を印字する」であるはずだから、>>848のコードは仕様を満たさず、
テストでエラーとして検出される。
868デフォルトの名無しさん:2008/04/20(日) 18:13:45
結論: 動的言語でテストが増えると言ってる奴は、C0テストの意味すら知らない香具師だった。
869デフォルトの名無しさん:2008/04/20(日) 18:14:47
>>848が端的に表現してるのに・・・
870デフォルトの名無しさん:2008/04/20(日) 18:16:22
>>869
>>848を通してしまうようなテストはテストとは言わない。
C0テストで一発で発見できる。
871デフォルトの名無しさん:2008/04/20(日) 18:16:52
宣言されていない変数を使っても、仕様通りの結果が得られるパターンなんか無限にあるだろうに
872デフォルトの名無しさん:2008/04/20(日) 18:19:30
>>871
そう。宣言されている変数を使っていても、仕様通りの結果が得られるパターンなんか無限にあるだろうに。
873デフォルトの名無しさん:2008/04/20(日) 18:19:55
しかもC0は条件の組み合わせや通すコードの順番には無頓着だから、
入力と結果の組み合わせは網羅できないんだがな。
C0通ると全ての場合について網羅されると勘違いしてるのかな。
874デフォルトの名無しさん:2008/04/20(日) 18:19:58

宣言されている別の変数を使っていても、仕様通りの結果が得られるパターンなんか無限にあるだろうに。
875デフォルトの名無しさん:2008/04/20(日) 18:22:35
>>873
単純なtypoや実装されていないメソッド叩いたりするのは検出できるだろ。
>>848がまさにいい例だ。
876デフォルトの名無しさん:2008/04/20(日) 18:23:22
877デフォルトの名無しさん:2008/04/20(日) 18:24:20
>>876 >>854読め
878デフォルトの名無しさん:2008/04/20(日) 18:25:59
//ほらよ
type=arg1;//arg1,arg2:入力値
typo=type*arg2;
if(type>200)print('big');
879デフォルトの名無しさん:2008/04/20(日) 18:26:54
今どき境界値すら試さないテストしてるマヌケがいるのか?
880デフォルトの名無しさん:2008/04/20(日) 18:27:40
>>878
で、C0を満たすテストケースは?
881デフォルトの名無しさん:2008/04/20(日) 18:29:23
// これは?
int type, typo;
type = arg1;
typo = arg2;
typo = type * arg3;
if (type > 200) print ('big');

これと>>878との本質的な違いは何だ?
882デフォルトの名無しさん:2008/04/20(日) 18:30:11
>>878
それは境界値テストで発見されるだろ。テストの初歩だよ、初歩。
883デフォルトの名無しさん:2008/04/20(日) 18:32:57
存在する境界値を網羅するのは、C0の範疇じゃ無いんだが・・・
884デフォルトの名無しさん:2008/04/20(日) 18:35:26
(arg1='2',arg3=5)なんてのが飛んで来るかもしれないのが動的言語。
885デフォルトの名無しさん:2008/04/20(日) 18:35:48
>>883
そうだね、C0の範疇じゃないね。でも実際には境界値はまっさきにテストする項目だよね。
886デフォルトの名無しさん:2008/04/20(日) 18:38:36
お、C0で全部検出できるって言ってたのにいつの間にか話を変えてるな
887デフォルトの名無しさん:2008/04/20(日) 18:38:47
>>884
可変長パラメータは静的型言語はデフォルト値が与えられるけど、どのみちC0じゃ検出できない。
ところでいつから動的言語が比較対象になったんだ?
てっきり動的型言語が比較対象だと思っていたのだが。
888デフォルトの名無しさん:2008/04/20(日) 18:39:22
>>886
全部検出できるなんて言ってないよ。必要なテストの量に有意な差は出ないとは言ってるが。
889デフォルトの名無しさん:2008/04/20(日) 18:40:29
>>843
>typoやメソッドの有無によるバグはC0で完全にカバーされるだろ。
890デフォルトの名無しさん:2008/04/20(日) 18:40:46
>>865
「100%のカバレッジを達成しないと、タイポや実はメソッドが存在しない等の可能性が残る」
もはやこれだけで、結論1を満たしていると思うのだけど。
カバレッジ100%を保証すべきというのは分かるけど、普通は(特に個人だと)そこまでやらんのではないか。

あと、一部の動的言語では
・実行中に関数が定義
できたり
・実行時にメソッドが定義
できたり
・実行中にほとんどのクラスが使っているような基本的なオブジェクトの振る舞い(RubyならNilClassとか)を変える
ことができたりする。
この前提だと、結論1か結論2(もしくは両方)を満たさざるを得ないのではないか?
特にこういう機構をふんだんに使っている(メタプログラミング)場合、テスト自体が困難を極めると思う。
891デフォルトの名無しさん:2008/04/20(日) 18:49:19
>>887
静的型付けの動的言語については考えていなかった。
すこし反省している。
892デフォルトの名無しさん:2008/04/20(日) 18:59:02
> 特にこういう機構をふんだんに使っている(メタプログラミング)場合、テスト自体が困難を極めると思う。

ヤバい箇所が機械的に限られるJavaのほうが
どこが地雷源かわからないRubyよりましだと思うんだ
893デフォルトの名無しさん:2008/04/20(日) 19:03:13
>>884
そして、'2'*5を評価した値が10の実装もあれば、"22222"の実装もあったりする。
894デフォルトの名無しさん:2008/04/20(日) 20:45:52
849がスルーされてワロタ
895デフォルトの名無しさん:2008/04/20(日) 23:56:48
結局のところ小規模か大規模かの問題じゃないよな
896デフォルトの名無しさん:2008/04/21(月) 03:32:41
強いて言えば、型指定のある言語の方が
IDEの補助を受けやすいってのはあるかな。
897デフォルトの名無しさん:2008/04/21(月) 05:31:34
>>890
そうなんだよな。テスト屋殺すにゃevalの1つもあれば十分なんだよ。
898デフォルトの名無しさん:2008/04/21(月) 06:38:01
>>893
俺もC0で型チェックのかわりは無茶だと思うが、
'2'*5が10か'22222'かは言語仕様で一意に決まるだろwww

つーか、どっちになるか知らずにコード書く馬鹿は
どんな言語使ってもどのみちバグまみれだって。
899デフォルトの名無しさん:2008/04/21(月) 07:17:24
>>898
前者は一見して期待した結果になるからやっかいだ。
まぁ、一意に決まらない言語もあるが、それはおいといて。
900デフォルトの名無しさん:2008/04/21(月) 07:54:33
>>898
演算子オーバーロードを忘れてる
901デフォルトの名無しさん:2008/04/21(月) 09:56:43
もう動的型言語とか関係ないな
902デフォルトの名無しさん:2008/04/21(月) 10:32:07
つまり、なでしこ最強
903デフォルトの名無しさん:2008/04/21(月) 16:35:10
scalaに乗り換えますた。
904デフォルトの名無しさん:2008/04/21(月) 16:58:02
まあLLにこだわるこたないからな
erlangとかも面白いしね
905デフォルトの名無しさん:2008/04/21(月) 19:30:09
>>843 C0で全部カバーできると言い
>>847 C0で発見できないバグの実例を見せてくれとまで言ってたのに
微妙にそういう話が出てくると
>>883 境界線は真っ先にテストする項目だろと全部カバーできる発言を覆すあたり
負けず嫌いがこのスレに常駐してるようですね
906デフォルトの名無しさん:2008/04/21(月) 20:27:38
結論は>>890だな。
C0基準でもカバレッジ100%のテストをする香具師なんて滅多にいない。
静的言語はコンパイラさえ通っちゃえばコマンドライン2-3度叩いてヌルポ出なきゃOK。
907デフォルトの名無しさん:2008/04/21(月) 21:44:27
つまりぬるぽが出ない言語ならなんもしなくてOK。
908デフォルトの名無しさん
さすがに引いた