もしくはやって欲しくないこと
先輩方のアドバイスをください
前スレ
これからコードを書く人に絶対やって欲しいこと★2
http://kohada.2ch.net/test/read.cgi/prog/1365269189/
探検
これからコードを書く人に絶対やって欲しいこと★3
■ このスレッドは過去ログ倉庫に格納されています
1仕様書無しさん
2013/06/04(火) 22:43:46.92304仕様書無しさん
2013/06/14(金) 00:59:29.44 >>302
出来るできないの二元論ではなく
どれだけできるかという話。
どれだけ静的解析できるかの話をすれば
動的型付け言語は、静的型付け言語に比べて
圧倒的に少ないと言わざるをえない。
LCOMの計算式を見ればわかるが、
・着目しているクラスのj番目のメンバ変数
・着目しているクラスのメンバ変数の個数
・着目しているクラスのメソッドの個数
・メンバ変数Ajにアクセスしているメソッドの個数
こういう値を変数として利用する。
だが動的型付け言語では、着目しているクラスが
動的に決定されるので、着目しているクラスの情報が得られない。
出来るできないの二元論ではなく
どれだけできるかという話。
どれだけ静的解析できるかの話をすれば
動的型付け言語は、静的型付け言語に比べて
圧倒的に少ないと言わざるをえない。
LCOMの計算式を見ればわかるが、
・着目しているクラスのj番目のメンバ変数
・着目しているクラスのメンバ変数の個数
・着目しているクラスのメソッドの個数
・メンバ変数Ajにアクセスしているメソッドの個数
こういう値を変数として利用する。
だが動的型付け言語では、着目しているクラスが
動的に決定されるので、着目しているクラスの情報が得られない。
306仕様書無しさん
2013/06/14(金) 01:04:35.91 >>290
これは言えてると思う
英語に拒絶反応示す人だと、簡単なメソッド名すら理解できなくて
実装のほうにジャンプして中確認しないといけないことに文句言ったりする
メソッド名見るだけで意味はわかるのに、それができないってやつ
実際の職場とかだと糞いメソッド名な事もあるけど、このスレで出てるのって、そういうレベルの話ではないしな
これは言えてると思う
英語に拒絶反応示す人だと、簡単なメソッド名すら理解できなくて
実装のほうにジャンプして中確認しないといけないことに文句言ったりする
メソッド名見るだけで意味はわかるのに、それができないってやつ
実際の職場とかだと糞いメソッド名な事もあるけど、このスレで出てるのって、そういうレベルの話ではないしな
307仕様書無しさん
2013/06/14(金) 01:05:17.99 このコード出せうんたらの流れ、前スレでも見たな
その時はコテついてたけど
その時はコテついてたけど
309仕様書無しさん
2013/06/14(金) 01:09:22.07310仕様書無しさん
2013/06/14(金) 01:11:44.45311仕様書無しさん
2013/06/14(金) 01:16:15.69 動的型付け言語が何なのか知らないバカも登場し、ますますスレは混沌となっていくのであった
312仕様書無しさん
2013/06/14(金) 01:19:52.64 静的解析の静的がわからないんじゃなかろうか
313仕様書無しさん
2013/06/14(金) 01:21:16.55 >>303>>308
> 誰も違うとは言ってないのに
247「アホが「複雑度が低くてもクソなコードはある」とか言いだすんだよ。」
すなわち「複雑度の低いクソなコードはない」と言っている
258「あるというのなら、出せばいい」「複雑度が低くても糞なコード。」「さあどうぞ。証明してくれ。」
すなわち「複雑度が低くても糞なコードは出てこない」という前提でレスしている
> 言わなきゃ困る理由
以上のようにバカは何処にでもいるので、蛇足だろうと過信すべきでないという警告は必要である
必要とする者が要る以上、俺はいらないから不要ってだけの理論は通用しないんだよ
既にあるものを不要としたいなら、必要を上回る欠点なりなんなりが無いとね
> 誰も違うとは言ってないのに
247「アホが「複雑度が低くてもクソなコードはある」とか言いだすんだよ。」
すなわち「複雑度の低いクソなコードはない」と言っている
258「あるというのなら、出せばいい」「複雑度が低くても糞なコード。」「さあどうぞ。証明してくれ。」
すなわち「複雑度が低くても糞なコードは出てこない」という前提でレスしている
> 言わなきゃ困る理由
以上のようにバカは何処にでもいるので、蛇足だろうと過信すべきでないという警告は必要である
必要とする者が要る以上、俺はいらないから不要ってだけの理論は通用しないんだよ
既にあるものを不要としたいなら、必要を上回る欠点なりなんなりが無いとね
314仕様書無しさん
2013/06/14(金) 01:24:20.73315おじゃばさま ◆mpgYduuqtA
2013/06/14(金) 01:24:40.63 君達、基本が出来てないな。
循環的複雑度が低い糞コードは
基本の逆をやればいい。
つまりオブジェクト指向で、
処理で分割したり、
構造化で変数のスコープを無視して、
グローバル変数を使いまくったり
すればいい。
循環的複雑度が高くても問題ない
コードは、分岐が多くても
基本に外れてない物ならいい。
つまり、項目数の多い入力チェック
などだ。
誰かも書いていたが、結局モジュール
分割の基本を知らずに循環的複雑度
がどうとか言っているのが問題
なのだろう。
循環的複雑度が低い糞コードは
基本の逆をやればいい。
つまりオブジェクト指向で、
処理で分割したり、
構造化で変数のスコープを無視して、
グローバル変数を使いまくったり
すればいい。
循環的複雑度が高くても問題ない
コードは、分岐が多くても
基本に外れてない物ならいい。
つまり、項目数の多い入力チェック
などだ。
誰かも書いていたが、結局モジュール
分割の基本を知らずに循環的複雑度
がどうとか言っているのが問題
なのだろう。
316仕様書無しさん
2013/06/14(金) 01:24:58.45 あら、また馬鹿がw
317仕様書無しさん
2013/06/14(金) 01:29:17.36318仕様書無しさん
2013/06/14(金) 01:29:43.41319仕様書無しさん
2013/06/14(金) 01:32:37.70 おっと、二人称まで同じ似たような発言が・・・。
まあ、俺はまた暫く黙るから安心してくれ。
まあ、俺はまた暫く黙るから安心してくれ。
321仕様書無しさん
2013/06/14(金) 01:52:25.97 循環的複雑度の人が言う循環的複雑度の低いソースと高いソースを
俺らにサンプルとして出すよう言ってから24時間経ってるのに出てないのね。
なんか書き込みはすごいことになってるけど。
俺らにサンプルとして出すよう言ってから24時間経ってるのに出てないのね。
なんか書き込みはすごいことになってるけど。
323仕様書無しさん
2013/06/14(金) 02:27:07.14 レスする価値があるような相手、内容であるか見極めてからスレに投稿する、ということを、
これからコードを書く人には絶対にやって欲しいな。
これからコードを書く人には絶対にやって欲しいな。
324仕様書無しさん
2013/06/14(金) 03:54:22.34 途中全く読んでないけど、レスが50も増えたと思ったらまだやってたのか
たぶん名無しで書いてるけど中身はおじゃばだな…
このスレも終わったな
たぶん名無しで書いてるけど中身はおじゃばだな…
このスレも終わったな
325仕様書無しさん
2013/06/14(金) 04:33:31.11 読めば判るが、おじゃばはさらに斜め上に飛んでるから多分別口だ。
326仕様書無しさん
2013/06/14(金) 09:27:56.97 ここに書かれてるのは量産型おじゃばか
327仕様書無しさん
2013/06/14(金) 13:14:40.54 絶対やって欲しいこと
スルー能力を鍛えて欲しい。
スルー能力を鍛えて欲しい。
328仕様書無しさん
2013/06/14(金) 15:34:58.73 Warning とか Exception はスルーしないでほしい。
329仕様書無しさん
2013/06/14(金) 18:19:36.66 >>328
それに付け加えて、静的解析ツールが出力するError/Warningも極力取って欲しいよね。
自分では問題無いと分かってる場合でも、他人がツールを使うと、それらが問題あるかどうかなんてわからないから。
htmllintで-100点とか出してて、<div>の対応がおかしいことに気づかない奴とか良くいるし(Webアプリを
引き継いでlintかけると大量のメッセージが出る場合多し)。
それに付け加えて、静的解析ツールが出力するError/Warningも極力取って欲しいよね。
自分では問題無いと分かってる場合でも、他人がツールを使うと、それらが問題あるかどうかなんてわからないから。
htmllintで-100点とか出してて、<div>の対応がおかしいことに気づかない奴とか良くいるし(Webアプリを
引き継いでlintかけると大量のメッセージが出る場合多し)。
330仕様書無しさん
2013/06/14(金) 18:34:57.16 (スルー力鍛錬中)
331循環的複雑度
2013/06/14(金) 22:17:56.64 おじゃば降臨祭り実施中
332おじゃばさま ◆mpgYduuqtA
2013/06/15(土) 01:46:33.40 単体試験の基本も知らずに、試験の自動化を勧める人。
オブジェクト指向の基本も知らずに、
DIコンテナやデザインパターンを勧めるの人。
今度はモジュール分割の基本も知らずに、
複雑度測定ツールを勧める人か?
何で基礎が欠落してるのに、高度な
事に詳しいのだ?
ニセコンサルか、提灯記者か?
オブジェクト指向の基本も知らずに、
DIコンテナやデザインパターンを勧めるの人。
今度はモジュール分割の基本も知らずに、
複雑度測定ツールを勧める人か?
何で基礎が欠落してるのに、高度な
事に詳しいのだ?
ニセコンサルか、提灯記者か?
333仕様書無しさん
2013/06/15(土) 02:37:57.52 >>328-329
警告無視する奴結構多いよなぁ
必要な無視もあるけど、そういうのはプロジェクトの設定の見直しとかも考えればいいのに
ただひたすら無視して警告出したままソース管理にコミットしてくるオッサンとかめっちゃいる
IDEの出してる警告が気にならない人間がどうも理解できないわ
これからコード書く人は、警告は問題がある可能性の通知だから
どうか無視せず適切な対処をとるようにしてほしいな
警告無視する奴結構多いよなぁ
必要な無視もあるけど、そういうのはプロジェクトの設定の見直しとかも考えればいいのに
ただひたすら無視して警告出したままソース管理にコミットしてくるオッサンとかめっちゃいる
IDEの出してる警告が気にならない人間がどうも理解できないわ
これからコード書く人は、警告は問題がある可能性の通知だから
どうか無視せず適切な対処をとるようにしてほしいな
334循環的複雑度
2013/06/15(土) 04:14:22.02 煽っていくスタイル
336仕様書無しさん
2013/06/15(土) 08:39:41.32 プログラマに最も向かないのは、意外にも神経質すぎる奴だったりする
337仕様書無しさん
2013/06/15(土) 08:43:50.39 というより神経質になるべき箇所を正しくコントロールできる
無能なやつは全てに於いて神経質、要するに根っからの性格だな
無能なやつは全てに於いて神経質、要するに根っからの性格だな
338仕様書無しさん
2013/06/15(土) 11:08:04.74 未熟なプログラマは経験豊富なプログラマへの対抗心が常にあり、身の丈も考えず背伸びをしようとする。
未熟ゆえ、ググった情報が正しいのか間違っているのか判断が付かず鵜呑みにして、もはや洗脳状態に。
なので理解してるふりをして間違った解釈で人に伝える、致命的な伝言ミスを実務でもやらかすことが多い。
対抗できないと悟ってもプライドが許さず、何かしらで蹴落とすことを考えはじめる。
経験が豊富なプログラマは、あまりハマることもなくスムーズに仕事を遂行できる。
わからないことがあっても、割と素早く正しい情報だけを検索できる。
未熟なプログラマにあれこれ教えるのは好きだが、背伸びしてくる人間には容赦ない。
だから仕事を教えて欲しかったら、本当の自分を隠すなってことだな。
未熟ゆえ、ググった情報が正しいのか間違っているのか判断が付かず鵜呑みにして、もはや洗脳状態に。
なので理解してるふりをして間違った解釈で人に伝える、致命的な伝言ミスを実務でもやらかすことが多い。
対抗できないと悟ってもプライドが許さず、何かしらで蹴落とすことを考えはじめる。
経験が豊富なプログラマは、あまりハマることもなくスムーズに仕事を遂行できる。
わからないことがあっても、割と素早く正しい情報だけを検索できる。
未熟なプログラマにあれこれ教えるのは好きだが、背伸びしてくる人間には容赦ない。
だから仕事を教えて欲しかったら、本当の自分を隠すなってことだな。
339仕様書無しさん
2013/06/15(土) 11:09:38.23 ごくごくまれにバケモノじみた能力のプログラマがいるけど、そういうのは別次元。
興味範囲が広く、一度興味を持つととことん追求するから知識が広いだけでなく深い。
ダビンチのようなオールラウンダータイプに多い、ここまでくると天性の領域。
成功経験だけじゃなくあらゆる失敗も自ら試して経験にする。
発想が自由自在で時々人が考えつかないようなアイデアを実行する。
自由かつ正しく組み合わせられるため、とにかく仕事が尋常じゃなく早い。
まさにプログラマをやるために生まれてきたような人間。
但し納得いくまで追求しきると熱が一気に冷めるので、飽きっぽく見える。
仕事のことしか興味がなく、なにも考えてない時間が勿体なさすぎるので
切羽詰まってるわけでもないのにメシを食べながら仕事したり常に何かを考えてる感じ。
なので普通の人には付き合いにくいイメージがある。
興味範囲が広く、一度興味を持つととことん追求するから知識が広いだけでなく深い。
ダビンチのようなオールラウンダータイプに多い、ここまでくると天性の領域。
成功経験だけじゃなくあらゆる失敗も自ら試して経験にする。
発想が自由自在で時々人が考えつかないようなアイデアを実行する。
自由かつ正しく組み合わせられるため、とにかく仕事が尋常じゃなく早い。
まさにプログラマをやるために生まれてきたような人間。
但し納得いくまで追求しきると熱が一気に冷めるので、飽きっぽく見える。
仕事のことしか興味がなく、なにも考えてない時間が勿体なさすぎるので
切羽詰まってるわけでもないのにメシを食べながら仕事したり常に何かを考えてる感じ。
なので普通の人には付き合いにくいイメージがある。
340仕様書無しさん
2013/06/15(土) 11:11:19.26 > 未熟なプログラマにあれこれ教えるのは好きだが、背伸びしてくる人間には容赦ない。
これは人間的な意味でレベル低いタイプじゃ
先に書いてる奴と同類じゃね
これは人間的な意味でレベル低いタイプじゃ
先に書いてる奴と同類じゃね
341仕様書無しさん
2013/06/15(土) 11:38:10.09 できるプログラマーはこんなスレで人間性的な物を語ったりはしない、かな
342仕様書無しさん
2013/06/15(土) 12:53:32.67343仕様書無しさん
2013/06/15(土) 15:02:16.18 スレタイくらい読み解ける日本語力を身につけて欲しい。
344仕様書無しさん
2013/06/15(土) 20:57:16.84 >>339
これはまさに天才だったころの俺。
飽きっぽく見えるというか実際飽きる。
> なので普通の人には付き合いにくいイメージがある。
上手に付き合えばいいのに仲間内だけでしか付き合わないからそう見えるんだよな。
>>340
>>176
> レベルが低い奴は、レベルが低いということすら自覚できない。
> 循環的複雑度を計測するのは簡単だから、とりあえずやってみろと言うしか無い。
> 自分らのレベルが低いとか高いとかどうでもいい、とりあえずやってみて、その結果を受け入れろ。
循環的複雑度を計測した結果を受け入れろとか意味わからんし。
機械語レベルの命令を組み合わせれば長くなるけど
高機能な言語では短くなる。
だから言語やライブラリが違うのに単純比較はできないはずだが。
これはまさに天才だったころの俺。
飽きっぽく見えるというか実際飽きる。
> なので普通の人には付き合いにくいイメージがある。
上手に付き合えばいいのに仲間内だけでしか付き合わないからそう見えるんだよな。
>>340
>>176
> レベルが低い奴は、レベルが低いということすら自覚できない。
> 循環的複雑度を計測するのは簡単だから、とりあえずやってみろと言うしか無い。
> 自分らのレベルが低いとか高いとかどうでもいい、とりあえずやってみて、その結果を受け入れろ。
循環的複雑度を計測した結果を受け入れろとか意味わからんし。
機械語レベルの命令を組み合わせれば長くなるけど
高機能な言語では短くなる。
だから言語やライブラリが違うのに単純比較はできないはずだが。
345仕様書無しさん
2013/06/15(土) 21:10:43.52 >>344
お前のほうが意味わからん。
誰も機械語の話なんかしていないし、
言語やライブラリが違う場合の話もしていない。
仮に機械語や言語やライブラリが違っていたとしても一緒。
単純比較できる。
なぜなら、「言語によってシンプルに書ける」ということは実際にありえる話だし、
「ライブラリを使った結果シンプルになる」というのも実際にありえる。
最終的には複雑なのをシンプルにする=テストが簡単になるようにすることが目的なので
ライブラリを使って、シンプルにしてテストが簡単になるのは卑怯でもなんでもない。
それが現実的な開発で用いられている手段。
お前のほうが意味わからん。
誰も機械語の話なんかしていないし、
言語やライブラリが違う場合の話もしていない。
仮に機械語や言語やライブラリが違っていたとしても一緒。
単純比較できる。
なぜなら、「言語によってシンプルに書ける」ということは実際にありえる話だし、
「ライブラリを使った結果シンプルになる」というのも実際にありえる。
最終的には複雑なのをシンプルにする=テストが簡単になるようにすることが目的なので
ライブラリを使って、シンプルにしてテストが簡単になるのは卑怯でもなんでもない。
それが現実的な開発で用いられている手段。
346仕様書無しさん
2013/06/15(土) 21:11:08.74 飽きるのが悪いかというと、そんな悪いことでもない。
無駄に頭を使わないことは重要だ。
頭の悪いやつに頭のことを言っても分からないから運動で例えるといい。
早く走れるからと言って一日中走っていられるのかと。
がんばればいくらでも早く走れるのかと。
短距離で走れる速さで長距離は走れない。
だけど、使う筋肉の違う運動なら続けて出来る。
今朝の番組でボディビルダーが出てた。
週5で鍛えていると言ってた。
筋肉をつけるには程よい運動と養生が必要だ。
無駄に負荷をかけ続けても壊れるだけ。
だから睡眠時間を削らせてまで働かせるやつは殺人鬼。
無駄に頭を使わないことは重要だ。
頭の悪いやつに頭のことを言っても分からないから運動で例えるといい。
早く走れるからと言って一日中走っていられるのかと。
がんばればいくらでも早く走れるのかと。
短距離で走れる速さで長距離は走れない。
だけど、使う筋肉の違う運動なら続けて出来る。
今朝の番組でボディビルダーが出てた。
週5で鍛えていると言ってた。
筋肉をつけるには程よい運動と養生が必要だ。
無駄に負荷をかけ続けても壊れるだけ。
だから睡眠時間を削らせてまで働かせるやつは殺人鬼。
347仕様書無しさん
2013/06/15(土) 21:13:01.18 循環的複雑度が低くても、テストしやすいとは限らないよ。
って、何回言わせるんだよ。
って、何回言わせるんだよ。
348仕様書無しさん
2013/06/15(土) 21:22:10.27349仕様書無しさん
2013/06/15(土) 21:29:04.13 複雑度が高い関数ってのは
一つの関数で複数の仕事をしているから。
例えば二つの仕事(n、m)をしている関数では、
そのテストの組み合わせはn×mになる。
これを単純な二つの関数nと関数mに分けることで
テストの数もn+mになる。
一つの関数で複数の仕事をしているから。
例えば二つの仕事(n、m)をしている関数では、
そのテストの組み合わせはn×mになる。
これを単純な二つの関数nと関数mに分けることで
テストの数もn+mになる。
350仕様書無しさん
2013/06/15(土) 21:48:52.16 同一の値に対し境界値の異なるメソッドを副作用を含む形で呼んでるとか、
複雑度の低いメソッドが複雑度が高い外部のメソッドを呼んでる場合とか、
そういう事情でテストの複雑さがメソッドの複雑さに比例しない事はあるかな。
ただ、比例しないからといって相関がないわけではない。
循環的複雑度が高いコード⊆テストが複雑なコード。
そもそも、循環的複雑度は悪いコードを見つける一助であって、
テストの複雑さを推定する指標でもなければ、
良いコードを規定する唯一の指標でもない。
複雑度の低いメソッドが複雑度が高い外部のメソッドを呼んでる場合とか、
そういう事情でテストの複雑さがメソッドの複雑さに比例しない事はあるかな。
ただ、比例しないからといって相関がないわけではない。
循環的複雑度が高いコード⊆テストが複雑なコード。
そもそも、循環的複雑度は悪いコードを見つける一助であって、
テストの複雑さを推定する指標でもなければ、
良いコードを規定する唯一の指標でもない。
351仕様書無しさん
2013/06/15(土) 21:55:19.89 まだ具体的なコード出てないな。
やっぱり逃げたか。
やっぱり逃げたか。
352仕様書無しさん
2013/06/15(土) 22:11:56.16353仕様書無しさん
2013/06/15(土) 22:13:43.20 戻って参りました!
354仕様書無しさん
2013/06/15(土) 22:17:09.35 循環的複雑度の計測っていうのは、
これからコードを書く人に絶対やってほしいことだもんな。
このスレであってるよ。
これからコードを書く人に絶対やってほしいことだもんな。
このスレであってるよ。
355仕様書無しさん
2013/06/15(土) 22:20:22.62 計測することにデメリットはないしな。
確固たる自信があって数値のほうが間違ってるといえるのなら
そうなんじゃない?
でも高い数値を出す人は、たいてい技術力が低いから
そんな自信は勘違い以外ではありえない。
まあ、いいからとりあえず計測しな。
話はそれからだ。
その数値とコードを示せば、正しい解釈をしてあげよう。
まあ殆どがコードが汚いという結果だろうけどね。
確固たる自信があって数値のほうが間違ってるといえるのなら
そうなんじゃない?
でも高い数値を出す人は、たいてい技術力が低いから
そんな自信は勘違い以外ではありえない。
まあ、いいからとりあえず計測しな。
話はそれからだ。
その数値とコードを示せば、正しい解釈をしてあげよう。
まあ殆どがコードが汚いという結果だろうけどね。
356仕様書無しさん
2013/06/15(土) 22:21:23.90 計測してどうすんの?
無理やり行単位で分割すんの?
無理やり行単位で分割すんの?
358仕様書無しさん
2013/06/15(土) 22:29:28.69 >>357
正しい方法って何を基準にするの? 循環的複雑度?
正しい方法って何を基準にするの? 循環的複雑度?
359仕様書無しさん
2013/06/15(土) 22:39:10.96 >>358
えーとね。循環的複雑度は単に複雑度を図るだけ。
正しい方法ってのは、コードがやってることをの意味を考え
正しい場所にコードを配置すること。
何が正しいかは設計によるが、処理の責務を考えれば答えが出る。
計測して高い数値が出た=一つの関数で複数の責務を持っているってことだから
正しい所にコードを配置する=複数の責務を分割するから
自ずと循環的複雑度は下がる。
えーとね。循環的複雑度は単に複雑度を図るだけ。
正しい方法ってのは、コードがやってることをの意味を考え
正しい場所にコードを配置すること。
何が正しいかは設計によるが、処理の責務を考えれば答えが出る。
計測して高い数値が出た=一つの関数で複数の責務を持っているってことだから
正しい所にコードを配置する=複数の責務を分割するから
自ずと循環的複雑度は下がる。
360仕様書無しさん
2013/06/15(土) 22:41:05.19361仕様書無しさん
2013/06/15(土) 23:08:10.00362仕様書無しさん
2013/06/15(土) 23:18:00.39 よくあるのが
function foo() {
// ○○の処理
:
// △△の処理
:
// □□の処理
:
}
みたいなもの。
コメントからわかるように、処理が内部で分かれているのに
それを一つの関数でやろうとしている。
こういうのが、ひとつの関数で複数の責務を持っているし、
もちろん複雑度はそれぞれの処理の合算になるから計測して高い値が出る。
こっからは、なんとかの処理をするなんてコメントを書きたくなったら、
それは関数にすべきと考えたほうがいい。
function foo() {
// ○○の処理
:
// △△の処理
:
// □□の処理
:
}
みたいなもの。
コメントからわかるように、処理が内部で分かれているのに
それを一つの関数でやろうとしている。
こういうのが、ひとつの関数で複数の責務を持っているし、
もちろん複雑度はそれぞれの処理の合算になるから計測して高い値が出る。
こっからは、なんとかの処理をするなんてコメントを書きたくなったら、
それは関数にすべきと考えたほうがいい。
363仕様書無しさん
2013/06/15(土) 23:28:49.07 >>362
こうやれば関数増やす必要なくね?
再利用できない関数はこれでよくね?
function foo() {
// ○○の処理
do{
:
} while( false )
// △△の処理
do{
:
} while( false )
// □□の処理
do{
:
} while( false )
}
こうやれば関数増やす必要なくね?
再利用できない関数はこれでよくね?
function foo() {
// ○○の処理
do{
:
} while( false )
// △△の処理
do{
:
} while( false )
// □□の処理
do{
:
} while( false )
}
364仕様書無しさん
2013/06/15(土) 23:32:20.68 >>348
テストしづらい例:
・メソッド内で直接現在時刻を取得し、その時刻に基づいて判断している場合
・メソッド内で直接物理デバイスをオープンしている
・メソッド内でConcrete Classをインスタンス化している
・マルチスレッドのテスト
等々。
循環的複雑度が高いコードをリファクタリングすれば以前よりテストはしやすなるのは
その通りだが、必要十分条件のように言われると、それは違うと言わざるを得ない。
テストしづらい例:
・メソッド内で直接現在時刻を取得し、その時刻に基づいて判断している場合
・メソッド内で直接物理デバイスをオープンしている
・メソッド内でConcrete Classをインスタンス化している
・マルチスレッドのテスト
等々。
循環的複雑度が高いコードをリファクタリングすれば以前よりテストはしやすなるのは
その通りだが、必要十分条件のように言われると、それは違うと言わざるを得ない。
365仕様書無しさん
2013/06/15(土) 23:40:17.41 > 必要十分条件のように言われると
誰もそんなこと言っていない。
だが概ね正解だろうな。
循環的複雑度が高いのはクソコード。
誰もそんなこと言っていない。
だが概ね正解だろうな。
循環的複雑度が高いのはクソコード。
366仕様書無しさん
2013/06/15(土) 23:44:38.22367仕様書無しさん
2013/06/15(土) 23:49:31.55 >>363
変数と引数と戻り値、そしてテストコードを忘れている。
たしかにその例には書かなかったが、実際には変数と引数と戻り値がある。
関数は普通シンプルなものから少しづつ処理を付け加えて複雑になる。
最初は○○の処理しかなかったものにたいして、△△、□□を付け足す。
その時、たいていは○○で計算した結果を△△、□□で使う。
結果、グローバル変数と同じように、どこで何を触っているかわからなくなる。
次第に変数の使い方はごちゃまぜになり、分けようと思った時に簡単に分けられなくなる。
分けようと思ったときに、君に言うように都合よく分けられることは少ない。
修正の影響を避けてまた少しコードを追加する。ということを繰り返す。
最初のうちに、関数に分けておくという習慣を持っていれば、このような歴史を辿らなくて済む。
そして重要なのがテスト、関数の中で小さく分けられていても、その単位ではテストできない。
単純に呼び出せないというものもあるし、doなんて使ったやり方では関数のインターフェースである
引数と戻り値が明確にならない。
変数と引数と戻り値、そしてテストコードを忘れている。
たしかにその例には書かなかったが、実際には変数と引数と戻り値がある。
関数は普通シンプルなものから少しづつ処理を付け加えて複雑になる。
最初は○○の処理しかなかったものにたいして、△△、□□を付け足す。
その時、たいていは○○で計算した結果を△△、□□で使う。
結果、グローバル変数と同じように、どこで何を触っているかわからなくなる。
次第に変数の使い方はごちゃまぜになり、分けようと思った時に簡単に分けられなくなる。
分けようと思ったときに、君に言うように都合よく分けられることは少ない。
修正の影響を避けてまた少しコードを追加する。ということを繰り返す。
最初のうちに、関数に分けておくという習慣を持っていれば、このような歴史を辿らなくて済む。
そして重要なのがテスト、関数の中で小さく分けられていても、その単位ではテストできない。
単純に呼び出せないというものもあるし、doなんて使ったやり方では関数のインターフェースである
引数と戻り値が明確にならない。
368仕様書無しさん
2013/06/15(土) 23:50:32.90370仕様書無しさん
2013/06/15(土) 23:56:51.11372仕様書無しさん
2013/06/16(日) 00:01:50.42 >>364
http://kohada.2ch.net/test/read.cgi/prog/1370760670/6
6 名前:仕様書無しさん[sage] 投稿日:2013/06/15(土) 21:37:15.97
なかなかレスが来ないから先に書いておくわ。
それは「テストがしにくい処理」であって
「テストがしにくいコード」じゃねぇよ。
http://kohada.2ch.net/test/read.cgi/prog/1370760670/6
6 名前:仕様書無しさん[sage] 投稿日:2013/06/15(土) 21:37:15.97
なかなかレスが来ないから先に書いておくわ。
それは「テストがしにくい処理」であって
「テストがしにくいコード」じゃねぇよ。
373仕様書無しさん
2013/06/16(日) 00:03:12.30 >>369
http://kohada.2ch.net/test/read.cgi/prog/1370760670/6
テストがしにくい処理と
テストがしにくいコードを
ごっちゃにしている人いるよね。
だからコード出せって言ってるのに。
http://kohada.2ch.net/test/read.cgi/prog/1370760670/6
テストがしにくい処理と
テストがしにくいコードを
ごっちゃにしている人いるよね。
だからコード出せって言ってるのに。
374仕様書無しさん
2013/06/16(日) 00:23:12.22 例えば
bool foo()
{
now = systemtime(); // systemtime()はマシンの時刻を戻す
return now.hour < 9;
}
みたいなことなんだが、これがテストしづらい処理なのかテストしづらいコードなのかに
カテゴライズすることに何の意味があるんだろうか。
bool foo()
{
now = systemtime(); // systemtime()はマシンの時刻を戻す
return now.hour < 9;
}
みたいなことなんだが、これがテストしづらい処理なのかテストしづらいコードなのかに
カテゴライズすることに何の意味があるんだろうか。
375仕様書無しさん
2013/06/16(日) 00:23:30.83376仕様書無しさん
2013/06/16(日) 00:24:33.01 理由が書いてない(納得出来ない)
コーディング規約はゴミだ。作るな。従うな。
初心者のためのコーディング規約は糞だ。
(難しくてわからないから)○○機能は使わないこと。
糞な規約の例として
三項演算子は使わない。
クラスは作らない。
継承は使わない。
等がある。
コーディング規約はゴミだ。作るな。従うな。
初心者のためのコーディング規約は糞だ。
(難しくてわからないから)○○機能は使わないこと。
糞な規約の例として
三項演算子は使わない。
クラスは作らない。
継承は使わない。
等がある。
377仕様書無しさん
2013/06/16(日) 00:42:53.30 >>374
> カテゴライズすることに何の意味があるんだろうか。
すごく重要。
テストしにくいコードは、リファクタリングで直すことが出来る。
リファクタリング=処理の内容は変わらない。
処理の内容がどうこうではない。処理はやらなきゃいけないんだからやるしか無い。
同じ事を実現する処理ならば、複雑ではない書き方(コード)にした方がいいだろ。
処理ではなくコードが重要。
http://kohada.2ch.net/test/read.cgi/prog/1331998580/27 (当時日時に注意)
> 27 名前:仕様書無しさん[sage] 投稿日:2013/06/15(土) 21:39:58.61
> そのコードがテストしにくいかしやすいかが焦点なんじゃねーかよ。
> だから具体的なコードを出せと言ってるのに
> 処理だけ言ってコード出さないとか、頭悪いな。
>>375
> だけど変数をできるだけ狭いスコープ内で宣言するようにしたらいいんじゃないかな。
普通に関数でいいじゃねーか。
なんでテストしにくい方法にこだわる?
> カテゴライズすることに何の意味があるんだろうか。
すごく重要。
テストしにくいコードは、リファクタリングで直すことが出来る。
リファクタリング=処理の内容は変わらない。
処理の内容がどうこうではない。処理はやらなきゃいけないんだからやるしか無い。
同じ事を実現する処理ならば、複雑ではない書き方(コード)にした方がいいだろ。
処理ではなくコードが重要。
http://kohada.2ch.net/test/read.cgi/prog/1331998580/27 (当時日時に注意)
> 27 名前:仕様書無しさん[sage] 投稿日:2013/06/15(土) 21:39:58.61
> そのコードがテストしにくいかしやすいかが焦点なんじゃねーかよ。
> だから具体的なコードを出せと言ってるのに
> 処理だけ言ってコード出さないとか、頭悪いな。
>>375
> だけど変数をできるだけ狭いスコープ内で宣言するようにしたらいいんじゃないかな。
普通に関数でいいじゃねーか。
なんでテストしにくい方法にこだわる?
378仕様書無しさん
2013/06/16(日) 00:47:20.96 他人に見せるコードでタブ文字を使って桁合わせすると、タブ幅不一致の時に表示が崩れる。
インデントはスペースでもタブでも良いが、どちらか片方に統一しておかないと以下同文。
なので、桁あわせはスペース、インデントはタブ文字またはスペースのどちらか一方が良い。
読みやすいインデント幅が人による事を考えるとタブ文字インデントが望ましい。
但し、人に読ませる気のないコードや文法的にインデントルールが決まっている場合は除く。
最悪フォーマッタ通せば問題ないしね。
インデントはスペースでもタブでも良いが、どちらか片方に統一しておかないと以下同文。
なので、桁あわせはスペース、インデントはタブ文字またはスペースのどちらか一方が良い。
読みやすいインデント幅が人による事を考えるとタブ文字インデントが望ましい。
但し、人に読ませる気のないコードや文法的にインデントルールが決まっている場合は除く。
最悪フォーマッタ通せば問題ないしね。
379仕様書無しさん
2013/06/16(日) 00:49:43.69380仕様書無しさん
2013/06/16(日) 00:54:49.07381仕様書無しさん
2013/06/16(日) 01:00:40.78 >>380
しにくいな。
○○、△△、□□
それぞれでテストが出来ない。
これだと必要なテストの数が
○○の数 × △△の数 × □□の数に
膨れ上がってしまう。
それぞれでテストしていれば、
○○の数 + △△の数 + □□の数 で十分なのに。
しにくいな。
○○、△△、□□
それぞれでテストが出来ない。
これだと必要なテストの数が
○○の数 × △△の数 × □□の数に
膨れ上がってしまう。
それぞれでテストしていれば、
○○の数 + △△の数 + □□の数 で十分なのに。
382仕様書無しさん
2013/06/16(日) 01:09:20.07383仕様書無しさん
2013/06/16(日) 01:13:15.34 なんか一人だけ、複雑度が低くてもテストがしにくいって
話をしている人がいるな。
循環的複雑度を計測した時、複雑度が低いものを見るか?
普通は高いものを見て、落ち込むものだろ?w
話をしている人がいるな。
循環的複雑度を計測した時、複雑度が低いものを見るか?
普通は高いものを見て、落ち込むものだろ?w
384 忍法帖【Lv=9,xxxP】(1+0:5)
2013/06/16(日) 01:16:07.25 オブ指が理解できない俺はプログラマ向いてないのかな
388仕様書無しさん
2013/06/16(日) 01:27:50.35 間違っているという自分の意見を言っただろ。
間違ってないという自分の意見を言っただろ。
間違ってないという自分の意見を言っただろ。
389仕様書無しさん
2013/06/16(日) 01:28:06.50 ここまでスレタイすら読めない馬鹿がお送りしました
390仕様書無しさん
2013/06/16(日) 01:36:02.69 ここからはご覧の馬鹿の提供でお送りします
391循環的複雑度
2013/06/16(日) 02:02:03.25 このスレからの派生スレっていくつあったっけ
一文字変数は覚えてる
一文字変数は覚えてる
392仕様書無しさん
2013/06/16(日) 02:02:07.49 じゃあ、話を戻して、
コードを書く人に絶対循環的複雑度の計測をやって欲しい
コードを書く人に絶対循環的複雑度の計測をやって欲しい
393仕様書無しさん
2013/06/16(日) 02:08:16.22 コード書いてる本人はそんなの計測しなくても複雑かどうかわかるだろ。
いらんわ。
いらんわ。
394仕様書無しさん
2013/06/16(日) 02:17:49.44 >>386
コードカバレッジ(コード網羅率)のC2網羅(条件網羅、経路網羅)って試験をするとそうなるよ。
だから、循環的複雑度が高いコード⊆テストが複雑なコード、となる。
C2網羅でないとチェック漏れしうる現象というのはあるにはあるがC1のそれより少ないし、
C2網羅でも完璧ではないしC2コストも高いことからC2自体省略されることも少なくなかったり。
しかし循環的複雑度が低いならばC2のコストも下がるわけで、それでC2すれば品質に繋がる。
363の様なコードがC1網羅で十分かを一々考えて合理的にC2除外を決めるのもナンセンスだしな。
>>393
「計測しなくても複雑かどうかわかる」は同感だが、意識に留めておくとかプロジェクト管理の一助にするのはアリだと思う。
「それを問題とも思わない奴の書いた無意味に複雑度の高いコード」が見つけやすくなるだろうから。
コードカバレッジ(コード網羅率)のC2網羅(条件網羅、経路網羅)って試験をするとそうなるよ。
だから、循環的複雑度が高いコード⊆テストが複雑なコード、となる。
C2網羅でないとチェック漏れしうる現象というのはあるにはあるがC1のそれより少ないし、
C2網羅でも完璧ではないしC2コストも高いことからC2自体省略されることも少なくなかったり。
しかし循環的複雑度が低いならばC2のコストも下がるわけで、それでC2すれば品質に繋がる。
363の様なコードがC1網羅で十分かを一々考えて合理的にC2除外を決めるのもナンセンスだしな。
>>393
「計測しなくても複雑かどうかわかる」は同感だが、意識に留めておくとかプロジェクト管理の一助にするのはアリだと思う。
「それを問題とも思わない奴の書いた無意味に複雑度の高いコード」が見つけやすくなるだろうから。
395仕様書無しさん
2013/06/16(日) 06:15:53.38 このスレの奴らとスタンドアップミーティングしたら、いつまで経っても終わらなさそうw
場をわきまえていない議論だとしても、相手が言い返してくる限りこちらの反論も許される、みたいな
オレオレルールを勝手に作ってそれ基準で行動する様は、まさに昨今のゆとり
場をわきまえていない議論だとしても、相手が言い返してくる限りこちらの反論も許される、みたいな
オレオレルールを勝手に作ってそれ基準で行動する様は、まさに昨今のゆとり
396仕様書無しさん
2013/06/16(日) 06:25:17.26 ほんと見苦しいスレ
こいつらバグってんじゃね?
こいつらバグってんじゃね?
397仕様書無しさん
2013/06/16(日) 08:15:14.80 循環的複雑度君が言ってるテストや規模って、俺の考えてたテストと微妙に違う気がする
なんつーか、えらく低水準な領域のコードについて書いてるような
サンプル出さないから未だ平行線だけど
何にせよいい加減ウザイので別スレだな
循環的複雑度
http://kohada.2ch.net/test/read.cgi/prog/1371301844/
なんつーか、えらく低水準な領域のコードについて書いてるような
サンプル出さないから未だ平行線だけど
何にせよいい加減ウザイので別スレだな
循環的複雑度
http://kohada.2ch.net/test/read.cgi/prog/1371301844/
399仕様書無しさん
2013/06/16(日) 09:01:30.12 結局どのくらいの数値だと高いの?
400仕様書無しさん
2013/06/16(日) 09:29:14.58 平均より上が高い
401仕様書無しさん
2013/06/16(日) 09:31:06.38 平均バカ
402仕様書無しさん
2013/06/16(日) 10:49:55.21 >>399
http://www.slideshare.net/MoriharuOhzu/ss-9224836
5以下 単純な構造
10以下 良い構造
30以上 構造に疑問
50以上 テスト、デバッグ困難
75以上 変更時に誤修正を生む原因を作る
32を超えているとバグを含んでいる確率が高くなる by IBM
http://www.slideshare.net/MoriharuOhzu/ss-9224836
5以下 単純な構造
10以下 良い構造
30以上 構造に疑問
50以上 テスト、デバッグ困難
75以上 変更時に誤修正を生む原因を作る
32を超えているとバグを含んでいる確率が高くなる by IBM
403仕様書無しさん
2013/06/16(日) 10:54:19.63 Javaだとこんなツールもあるんだね。
http://www.ibm.com/developerworks/jp/java/library/j-eaed6/
> 循環的複雑度に関してよくある質問には、「自分が作成したコードを
> 他のコードと比較するにはどうすればよいのか?」、「ある特定のクラスに
> 望ましい数値は何か?」というものがあります。これらの質問に答えるのが、
> iPlasma プロジェクトです (「参考文献」を参照)。
> 数値は比率を示し、色は、その比率が業界の標準範囲 (多数のオープンソース・
> プロジェクトを基に算出された範囲) のどのあたりに収まるかを示します。
> 各比率の色は、緑 (範囲内)、青 (範囲未満)、赤 (範囲超過) のいずれかとなります。
http://www.ibm.com/developerworks/jp/java/library/j-eaed6/
> 循環的複雑度に関してよくある質問には、「自分が作成したコードを
> 他のコードと比較するにはどうすればよいのか?」、「ある特定のクラスに
> 望ましい数値は何か?」というものがあります。これらの質問に答えるのが、
> iPlasma プロジェクトです (「参考文献」を参照)。
> 数値は比率を示し、色は、その比率が業界の標準範囲 (多数のオープンソース・
> プロジェクトを基に算出された範囲) のどのあたりに収まるかを示します。
> 各比率の色は、緑 (範囲内)、青 (範囲未満)、赤 (範囲超過) のいずれかとなります。
404仕様書無しさん
2013/06/16(日) 11:05:38.49 > 11 名前:仕様書無しさん[sage] 投稿日:2013/06/16(日) 09:47:31.39
> 分割が適当でテストしやすいメソッドなら、意識する必要ないんじゃないの
> そもそも循環的複雑度なんて言葉、あのスレ見て初めて知ったわ
そこが日本のソフトウェア業界の低さを表しているんだよ・・・。
IBMでも使われてるし、色んな所で研究されてる。
探せばずっと前から色んな所で話題になってるだろ。
> 分割が適当でテストしやすいメソッドなら、意識する必要ないんじゃないの
> そもそも循環的複雑度なんて言葉、あのスレ見て初めて知ったわ
そこが日本のソフトウェア業界の低さを表しているんだよ・・・。
IBMでも使われてるし、色んな所で研究されてる。
探せばずっと前から色んな所で話題になってるだろ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【スクープ】敏腕プロデューサーSKY-HIが未成年女性アイドル(17)を深夜に自宅呼び出し、〈かわいすぎる死ぬ〉〈だぁいすき〉などのLINEも [Ailuropoda melanoleuca★]
- 胸を強調した女性アニメキャラをファミレスがコラボ企画で起用。「この表現はどうなのか」SNSで疑問の声 ★3 [少考さん★]
- 【芸能】新幹線で『弁当にビール』はニオイが気になる 鈴木福「どこまで許容していくのか...難しい」 [冬月記者★]
- 【スクープ】新木優子、元Hey! Say! JUMP中島と極秘交際 外ではデートせず同じマンションで“一つ屋根の下”生活 [Ailuropoda melanoleuca★]
- 11月物価、3.0%上昇 食品が高止まり [少考さん★]
- 【芸能】谷原章介、有名牛丼チェーン店の生卵の単品価格に言及 「僕の記憶にある限り…50円だった。今、倍ですよ」 [冬月記者★]
- ネトウヨは理解できない風刺画、ガチでセンスがエグいと話題に [329329848]
- Vtuber「ATMで5万円引き出したら4万円と1枚が千円札だったんだけど…😰」→炎上。 [153490809]
- お昼休みなので>>2のキャラをかいてあそぶ
- 日銀さん 歴史的利上げ(0.75%)を迎えるにあたりお漏らしが止まらなくなるwwwwww [405019576]
- 参政党神谷との握手&神谷キーホルダー、20万円 [165981677]
- 【悲報】性欲強すぎて困ってる
