編集可能
2014年9月1日

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

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

そもそも、楽にすぐ書けるって言って動的型付け使ってるのにテスト大量に用意するこの矛盾よ htn.to/FWpDeQ

2014-08-29 15:49:09
早すぎる最適化オジサン @makotokuwata

@tail_y それは静的型付け言語だとテストが少なくて済むという主張ですよね。その根拠がわからないので、理由を教えていただけないでしょうか。静的でも動的でも、テスト項目の数は大差ないと思うんですが…

2014-08-30 08:58:22
早すぎる最適化オジサン @makotokuwata

“特にその副作用と、ステータスが可変なせいで大量のユニットテストを書かされるのにはウンザリだ” postd.cc/sick-of-ruby-d… 副作用がないと、あるいはステータスが不変だと、ユニットテストの量が減るということ?その根拠がわからない。別に減らないと思うのだが。

2014-08-30 09:04:58
早すぎる最適化オジサン @makotokuwata

動的静的に関わらずテストの数は大して変わらないはずなので、「静的言語ならテストの数を大幅に減らせる!」という主張は動的言語の経験が浅い静的言語信者の戯れ言だと思っているが、これ書いた人はそうではなさそうだし、もっと詳しいこと聞きたい postd.cc/sick-of-ruby-d…

2014-08-30 09:10:39
早すぎる最適化オジサン @makotokuwata

“静的型があれば書かなくてもよかったコード(引数の型をチェックするとか)が多過ぎてうんざり” twitter.com/pasberth/statu… 引数の型なんて、通常はチェックしないけどな。静的型やってた人が動的型言語で書くとそんなコードを大量生産するのだろうか。

2014-08-30 10:47:35
早すぎる最適化オジサン @makotokuwata

“一方で、現実問題としてはコンパイル時に自動的に行っていたテストをプログラマ自らが記述する事になるため、(テストコードの)コード記述量は静的型付け言語のそれに比べてどうしても増加する傾向にあります。” d.hatena.ne.jp/tt_clown/20130… そんなテスト書いたことないなあ

2014-08-30 10:57:21
Hideki Kishida @quicy

静的型とテストの関係については、考えてしゃべるべきだとは思うが、物事が実行テストでだけ語れて、コード解析とか静的手法をあまりに軽んじるというか、そもそも静的手法について考えたこともないというなら、あまり語ることもない気はする。

2014-08-30 14:22:45
Hideki Kishida @quicy

要件通りの機能を開発できているかどうかのテストは必要で、そこに静的型の効果を出すのは難しいと思う。でも、設計の矛盾や設計意図通りの実装を確認する手段としては、静的解析の有効性はあり、静的型言語を使うメリットがある。

2014-08-30 14:50:43
早すぎる最適化オジサン @makotokuwata

“そもそも、楽にすぐ書けるって言って動的型付け使ってるのにテスト大量に用意するこの矛盾よ” twitter.com/tail_y/status/… このように「動的言語はテストが大量になる」と主張している人は多いけど、その根拠を聞いても答えてくれることはない

2014-08-30 18:41:25
尾野(しっぽ) @tail_y

ん、スマホでツイッター見ると見てないreplyが。webクライアントのreply表示おかしい?

2014-08-30 22:54:01
尾野(しっぽ) @tail_y

あ、おーけーわかった。Web側の表示は通知ってほうだと取り逃しがあるのか、これちょっと怖いなぁ。

2014-08-30 23:07:31
尾野(しっぽ) @tail_y

@makotokuwata そちらが指しているテストにもよると思いますが、単純な話だとIntを使えば小数を入力した場合のテストが省ける、という例で回答になります?現場ではもっとクラスでのチェックの方が意味を持ってきますが。

2014-08-30 23:08:39
尾野(しっぽ) @tail_y

動的型と静的型のテストの量の違いについて質問されてこう答えたのだけど、あってるだろうか? twitter.com/tail_y/status/… どちらかと言うとリファクタリングの時のエラー箇所のチェックのほうが威力あると思うけどその話は140字に入らなそうだし。

2014-08-30 23:12:27
尾野(しっぽ) @tail_y

@makotokuwata 申し訳ないですが、Webクライアントの「通知」のところを見てたら何故かそちらのreplyが表示されなかっただけなのと、僕が回答しないことを全員に適用されるとちょっと困ります。

2014-08-30 23:13:40
尾野(しっぽ) @tail_y

例えばAS3って型有りの言語だけど、関数が引数を無視して全部同じ型なのよね。対してHaxeは関数は引数や返り値の組み合わせごとに別の型になるので、コールバックなどの引数をリファクタリングした時に、それが呼び出される箇所全てが分かる。AS3では品質保証にはテストを書くしかないよね。

2014-08-30 23:20:07
尾野(しっぽ) @tail_y

って話あってる?なんか動的型言語でも、型に頼らずこういうの凄い解決する方法があるのかもしれないけど。

2014-08-30 23:21:55
尾野(しっぽ) @tail_y

twitterの通知欄って、ずっと開きっぱなしにしてるとおかしくなるのかな。たまにリロードしたほうがいいのかな。

2014-08-30 23:27:14
尾野(しっぽ) @tail_y

動的型は乱暴なことを言えば「そこの処理を通らなければ間違いが分からない」という部分がある。静的型は幾分かそれを回避する。先の質問はおそらく、納品物等の機能要件のテストか何かで、そのテストは増えないけど、品質保証やリファクタリングの安全確保のためのテストには差が出てくると思う。

2014-08-30 23:42:15
尾野(しっぽ) @tail_y

エディタの力借りずに静的型言語書いちゃって、なんだこれ面倒なだけの言語じゃん、型なんて速度のためだけにあるんでしょ、みたいになっちゃう事故あるような気がする。

2014-08-31 00:09:16
尾野(しっぽ) @tail_y

うーん、やっぱ何度も考えてみたけど、動的型と静的型で、同じテストの数で同じ品質になること無いと思うなぁ…。静的型の場合極論するとテスト0でもtypoの危険性無いはずだし。テストを無限に書き続ける状態を想定すると収束するのかもしれないけど。

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

今まで質問はすべてスルーされてたのに、methane氏がリツイートしたとたん、慌てたように返事が何通もやってきてびっくり。有名人パワーすげー。

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

@tail_y @tail_y 『そちらが指しているテストにもよると思いますが』tail_y氏が考えるテストで結構です 『単純な話だとIntを使えば小数を入力した場合のテストが省ける』動的言語でそのようなテストをいつも書いてるんですか?

2014-08-31 10:41:32
尾野(しっぽ) @tail_y

@makotokuwata 小数やゼロ入力時の挙動は業務システムでは必須では…。あと前後ツイートに書きましたけど、リファクタリングの安全確保のための「実行する」ことを目的としたテストが減りますね。

2014-08-31 10:43:38
尾野(しっぽ) @tail_y

15時間くらい気付かなかったreplyの人が「こういう質問すると返事がない」みたいなこと言っていたので「気づかなかったんですよ」と返したら、「有名人がRTしたら慌てて返事してきた」みたいに言われたんだけど、その有名人さんって人は別に僕フォローしてないし、なんというか…。

2014-08-31 10:48:01
尾野(しっぽ) @tail_y

まあフォロー数が「有名人」の指標ではないとは思うけどね。

2014-08-31 10:50:04
残りを読む(61)

コメント

daishi_hmr @daishi_hmr 2014年9月2日
なんでこの人こんなに攻撃的なんだろう…。まあどうでもいいけど。 「動的言語で静的言語と同じレベルの安全性を確保するためには、(静的言語では必要なかった)テストが必要になる」って話だと思うんだけど違うの?
5
夢乃 @iamdreamers 2014年9月2日
まとめの主題と違うけど、Twitter Webの通知に自分宛のメンションが表示されないことはたまにあるよ(多分、Twitterのバグ)。私も過去3回あって(気付いてないのもあるかも)、1件はフォローしたら表示されるようになった(アンフォローしても)。もう1件は何もしてないけどいつの間にか表示されてた。最後の1件はほっぽらかし(^^)
0
夢乃 @iamdreamers 2014年9月2日
まとめの話だと、コーディング量との比をとると、動的言語の方がテスト件数が多くなりそうな気がする。(仕事では静的言語しか使ってないので、印象だけだけど)
0
堀内紀彰✨𝖲𝖼𝖺𝗅𝖺逆引き解説𝖲𝖼𝖺𝗅𝖺𝗉𝖾𝖽𝗂𝖺 @noriakihoriuchi 2017年11月7日
電話番号を登録してないとか、そういうTwitterの仕様上信頼性が低いとされているアカウントに関する通知は表示されないことがある
0