動的型言語は静的型言語に比べてテストが増えるのか?

自分も合っているかどうか分からない話で、それなりに重要だと思うので編集自由でまとめてみます。 とりあえずは、自分とmakotokuwataさんのTLをRT含めてまとめてみました。 時間順なので多少会話が前後します。 他の人の意見が聞いてみたいので、含めるべきツイートがある場合は自由に追加してください。
17
尾野(しっぽ) @tail_y

というか議論の中身について早々に「質問を無視された」「有名人が絡んできたら急に反応してきたよ」「この人いつもこんなことしてるの」とか、技術的な話じゃなくて、属人的な「こうに違いない」を書いてる時点で、まあ。

2014-08-31 10:51:26
尾野(しっぽ) @tail_y

あ、有名人はきっと凄い人だと思うのですが、守備分野が違うだけだとは思うのですよね。それぞれの分野や人にそれぞれの世界があって、そういう世界のプロフェッショナルみたいな人はいるんだろうけど、なにせ世界多すぎるもので、僕もまだまだ全部見るほどのキャパシティが無いので。

2014-08-31 10:57:26
早すぎる最適化オジサン @makotokuwata

@tail_y 『何故かそちらのreplyが表示されなかっただけ』ああ、ブロックやフィルタしてるってことですか。それは仕方ない。 『僕が回答しないことを全員に適用されるとちょっと困ります』別にそちらだけの話ではないし、一例を全体に適用したと解釈されるとちょっと困ります

2014-08-31 11:02:20
尾野(しっぽ) @tail_y

@makotokuwata いや、ブロックなどはしてないのですが、Webクライアント「通知」窓をずっと開きっぱなしにしていると、取りこぼしがあるみたいなんですよね、僕わりかしRT多くされるので長時間開きっぱなしにしてたのが原因っぽいです。リロードしたら直りました

2014-08-31 11:06:17
むねごん @munegon

メンションの通知もれってちょくちょくあるというか、twitterは大体の機能が何度か欠落やらかしてるのでもうそういうものだと思ってる

2014-08-31 11:08:34
わかめ@毎日猫がいる @vvakame

動的型付けにするとテストが増えると思う

2014-08-31 11:08:47
わかめ@毎日猫がいる @vvakame

動的型付けにするとテストで手を抜けないと思う

2014-08-31 11:11:29
早すぎる最適化オジサン @makotokuwata

@tail_y ユーザが入力する項目のテストであれば、それは静的言語でも必要だと思いますが。静的言語だと書かないんでしょうか。 『リファクタリングの安全確保のための「実行する」ことを目的としたテスト』これはどんなテストかわかりませんでした。

2014-08-31 11:33:03
尾野(しっぽ) @tail_y

@makotokuwata ユーザーが入力する項目に関して言えば、入力部分のテストは必要ですが、その後別のメソッドに値が渡される場合、コンパイル前から以後の値が必ず整数であることが保証されるので、例えば他人に渡すライブラリへのテストの量に差が出てくると思います。(後半別ツイート)

2014-08-31 11:35:44
尾野(しっぽ) @tail_y

@makotokuwata リファクタリングのために、というのは、例えばランタイムエラーしか出ないような引数のミスに対して、単体テストが張られていると安全にリファクタリングすることが出来るようになります(ランタイム時にそこを通らない、隠蔽性のエラーを防げる)

2014-08-31 11:38:19
尾野(しっぽ) @tail_y

@makotokuwata この安全性確保のためのリファクタリングに対して、静的型の場合、引数ミスなどはコンパイル前エラーとなるので、テストを動かさずに発見が可能です。なので、単体機能毎のテストの粒度を荒くしても安全性が保たれる場合があります。3ツイートになってすいません。

2014-08-31 11:39:54
早すぎる最適化オジサン @makotokuwata

リファクタリングって、外部からみた振舞いを変えないことが条件だから、テストは変更しないままのはずなんだが。『リファクタリングの安全確保のための「実行する」ことを目的としたテスト』ってなんのこっちゃ。

2014-08-31 11:45:07
尾野(しっぽ) @tail_y

AS3からHaxeに移行したことで一番大きかったのは関数に型があることで、今までAS3ではコールバックとか引数怖くて入れられなかったし、イベントハンドラの引数がevent1個で固定なのもそういう理由だろうし、他人の作ったコールバックとか死ねよって思ってたけどHaxeで無くなった。

2014-08-31 11:47:52
尾野(しっぽ) @tail_y

結果的にHaxeでは(多分TSとかでも)好きなときに自然体で関数渡せるようになったし、あ、引数増やしたいなと思った時に自由に増やせるようになったと思う。そういうのゲーム作ってると本当に大事。コードが原因でゲームの面白い機能を無意識に避けちゃうと凄いマイナス。

2014-08-31 11:50:39
尾野(しっぽ) @tail_y

@makotokuwata ああ、そのリファクタリングの定義だと、メソッド間まで含めた変更なので、僕が言っているのは日常レベルで発生するの設計変更って言ったほうがいいかもですね。読み替えて頂けると助かります。

2014-08-31 11:51:59
尾野(しっぽ) @tail_y

ゲームのプログラム設計ってほんとすごい勢いで動くことがあって、「んー、敵キャラもアイテム判定が必要だな」みたいなことが途中で出てくると、キャラクタークラスが実はアイテム機能を内部に持つかするとかして、全体のクラス図がガッコンガッコン変化するので、それに耐えないといけない。

2014-08-31 11:57:49
尾野(しっぽ) @tail_y

敵がアイテム判定ってのはあくまで例だけど、ンドゥバ(というか、ンバマ)とかミミックとか、ありえない話ではないので。あの場合はアイテムが敵のIDを持てるようにするんだろうけど。

2014-08-31 11:59:24
むねごん @munegon

@tail_y 面白くなるからという理由だけでガッコンガッコン変化するような追加仕様を完成直前でぶち込んでも許される土壌についての是非はまた別の問題で

2014-08-31 12:03:35
尾野(しっぽ) @tail_y

@munegon それはお前最初のほうで想定できただろ!みたいなのは怒るけど、怒ってもやらないといけないので、耐えられる言語使いたいです。Haxeのenumと、部分的構造型のどちらかを使えば上記の問題に対応できますしね。

2014-08-31 12:05:03
尾野(しっぽ) @tail_y

ちなみに、ゲーム業界に単体テストの文化が薄いのは今言った「んー、敵キャラもアイテム判定が必要だな」が起こって、あっという間にクラス構造とメソッドが移動しまくるからテストが結局ついてこれないからだと思ってるんだけど、どうなんでしょうか。

2014-08-31 12:06:55
尾野(しっぽ) @tail_y

オープンワールドみたいに、ルールと物理(魔法)法則だけ先に決めて、後はイベント配置で何とかするって手法はこういう点では有利になる。イベントがみんなお使い風になっちゃうのが残念な点だけども。

2014-08-31 12:12:03
むねごん @munegon

ゲームは面白バグなら許されるというか、むしろそんなのひとつもないゲームはメタな楽しみが減ってダメみたいな変な前提がありそうなので、バグが最初から潰されてしまうテスト駆動は歓迎されないんじゃないかというひねくれ論

2014-08-31 12:13:28
尾野(しっぽ) @tail_y

@munegon 気にしすぎるなというツイッターさんからのお達しだと思っている。フォロワー1000人超えたらもう気にならない気もするし。

2014-08-31 12:13:44
ながもち @naga3

アジャイル使えば全て解決するって先輩が言ってた

2014-08-31 12:18:38
早すぎる最適化オジサン @makotokuwata

@tail_y 『例えば他人に渡すライブラリへのテストの量に差が出てくる』えっと、tail_yさんは動的言語を使うときそのようなテストを書いているということでしょうか。そしてそれが静的言語と比べて大量に存在するという理解でいいでしょうか。

2014-09-01 09:30:10