もしくはやって欲しくないこと
先輩方のアドバイスをください
前スレ
これからコードを書く人に絶対やって欲しいこと★2
http://kohada.2ch.net/test/read.cgi/prog/1365269189/
探検
これからコードを書く人に絶対やって欲しいこと★3
■ このスレッドは過去ログ倉庫に格納されています
1仕様書無しさん
2013/06/04(火) 22:43:46.92282仕様書無しさん
2013/06/14(金) 00:06:01.98 循環的複雑度の低いメソッド同士が内容結合してると、それは糞コード。
はい、論破。
はい、論破。
284仕様書無しさん
2013/06/14(金) 00:08:56.89 ひょっとしてあれか、循環的複雑度の定義も理解しないまま平均平均言ってたのか?
286仕様書無しさん
2013/06/14(金) 00:16:25.05 ム板の宿題スレとVBAスレで、外部コード共有サービス使ってコード貼ってる奴の
コードを見れば、循環的複雑度が低いのに糞コードな例を思う存分堪能できます。
コードを見れば、循環的複雑度が低いのに糞コードな例を思う存分堪能できます。
290仕様書無しさん
2013/06/14(金) 00:20:53.60 ああ、自分が読めないコードが糞コードの人か
292仕様書無しさん
2013/06/14(金) 00:22:34.55 承認要求が強すぎる困ったちゃん
293仕様書無しさん
2013/06/14(金) 00:25:12.69 循環的複雑度に凝集度と結合度が加わって、この話題で500までは行くかな。
スレ全部食い尽くすかもしれん。
スレ全部食い尽くすかもしれん。
294仕様書無しさん
2013/06/14(金) 00:28:23.50 ほらな。
結局、コード出せといっても
だせない。
あ、わざとらしいコードはいらんよ。
結局、コード出せといっても
だせない。
あ、わざとらしいコードはいらんよ。
295仕様書無しさん
2013/06/14(金) 00:32:16.63 なにがほらなだよ。
まず結合度をググってこい、アホ。
まず結合度をググってこい、アホ。
296仕様書無しさん
2013/06/14(金) 00:35:39.54 論破されまくってるのに気づかない馬鹿
297仕様書無しさん
2013/06/14(金) 00:38:03.29 凝集度の話が出てるようなので、
今度は循環的複雑度ではなく、LCOM、計測してますか?w
http://www.itmedia.co.jp/im/articles/0510/07/news106.html
LCOMってのは言語によって計測しづらいんだよな。
参照しているメソッドやフィールドの数で計算するから
動的型付け言語だと、何を参照しているか(実行時に決まるので)わからない。
Javaだったらこの記事のようにプラグインがあるんだが。
今度は循環的複雑度ではなく、LCOM、計測してますか?w
http://www.itmedia.co.jp/im/articles/0510/07/news106.html
LCOMってのは言語によって計測しづらいんだよな。
参照しているメソッドやフィールドの数で計算するから
動的型付け言語だと、何を参照しているか(実行時に決まるので)わからない。
Javaだったらこの記事のようにプラグインがあるんだが。
298仕様書無しさん
2013/06/14(金) 00:39:55.94 >>281
わざとらしかろうがクソには違いあるまい。
実際には良かれと思って分割されたり抽象化されたりした関数やクラスが山と連なる、とかだろうけど。
で、細切れにされた関数をインライン展開とかで復元できるフォーマッタってあんの?
レス行数考慮して改行は潰したが、そこは本題じゃないし。
これの健全化は自動処理できたとしてもフォーマッタの仕事じゃないだろ。
リファクタリングツールの仕事で、つまり糞コードの改修という仕事。
わざとらしかろうがクソには違いあるまい。
実際には良かれと思って分割されたり抽象化されたりした関数やクラスが山と連なる、とかだろうけど。
で、細切れにされた関数をインライン展開とかで復元できるフォーマッタってあんの?
レス行数考慮して改行は潰したが、そこは本題じゃないし。
これの健全化は自動処理できたとしてもフォーマッタの仕事じゃないだろ。
リファクタリングツールの仕事で、つまり糞コードの改修という仕事。
299仕様書無しさん
2013/06/14(金) 00:43:13.04300仕様書無しさん
2013/06/14(金) 00:47:03.73 >>299
> ウェブ系でよく使われる言語ののツールって無いんだろうか?
しらない。ぶっちゃけウェブ系の言語(だいたいが動的型付け言語)では
厳密な計測は不可能だと思ってるけどね。
こういうメトリクス計測ってのはソースコードを静的に解析する。
つまり静的に情報がわかれば計測できるが
そうでなければ計測できない。
だから、動的型付け言語の発展に将来はないと思っているが
それはまた別の話だな。
> ウェブ系でよく使われる言語ののツールって無いんだろうか?
しらない。ぶっちゃけウェブ系の言語(だいたいが動的型付け言語)では
厳密な計測は不可能だと思ってるけどね。
こういうメトリクス計測ってのはソースコードを静的に解析する。
つまり静的に情報がわかれば計測できるが
そうでなければ計測できない。
だから、動的型付け言語の発展に将来はないと思っているが
それはまた別の話だな。
301仕様書無しさん
2013/06/14(金) 00:48:51.67 どんなメトリクスでも共通して言えることは、あるコードがそのメトリクスで良い数値を
出しているからといって、必ずしも良いコードではないということ。
メトリクスを収集する目的は、悪い数値を出す悪いコードを検出するのと、そのコードを
改善したときの進行具合を測るのに止めるのが良い。
出しているからといって、必ずしも良いコードではないということ。
メトリクスを収集する目的は、悪い数値を出す悪いコードを検出するのと、そのコードを
改善したときの進行具合を測るのに止めるのが良い。
303仕様書無しさん
2013/06/14(金) 00:56:38.69 >>301
> どんなメトリクスでも共通して言えることは、あるコードがそのメトリクスで良い数値を
> 出しているからといって、必ずしも良いコードではないということ。
誰も違うとは言ってないのに、なぜかここだけゴリ押しする馬鹿
言わなきゃ困る理由でもあるのかね?
> どんなメトリクスでも共通して言えることは、あるコードがそのメトリクスで良い数値を
> 出しているからといって、必ずしも良いコードではないということ。
誰も違うとは言ってないのに、なぜかここだけゴリ押しする馬鹿
言わなきゃ困る理由でもあるのかね?
304仕様書無しさん
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.07■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】山上徹也被告に無期懲役を求刑 ★4 [Hitzeschleier★]
- 【速報】山上徹也被告に無期懲役を求刑 ★5 [Hitzeschleier★]
- 中国外務省「日本への渡航を控えて」→高市内閣の支持率はとくに下がらず…なぜ日本国民がこれほど「高市内閣」を応援するのか★3 [♪♪♪★]
- 胸を強調した女性アニメキャラをファミレスがコラボ企画で起用。「この表現はどうなのか」SNSで疑問の声 [少考さん★]
- 「片脚は人工関節で、ろくに睡眠も取れていない」 激ヤセが不安視される高市首相の体調 | デイリー新潮 [少考さん★]
- 年収の壁で総理と玉木代表が合意 178万円まで引き上げ 年収665万円以下が対象 [どどん★]
- メモリ高騰でXiaomiやHonorがタブレット値上げを発表 サム、どうして [163661708]
- 高市早苗の愛国歯ブラシ、6600円🪥 [485187932]
- 「エヴァンゲリオン」新作アニメ制作決定。庵野秀明氏が企画・脚本・総監修 [886272898]
- 【動画】Z世代、高市早苗を知らない [834922174]
- しょこたん(中川翔子)息子を公開。ギザカワユスww [268244553]
- イギリス、10万人に100人がレイプされる大レイプ帝国になるwwww なお、BBC女記者は約10年前に日本のエロ漫画を非難していた [112948759]
