クソコードとは何か

■ このスレッドは過去ログ倉庫に格納されています
2021/01/30(土) 17:33:05.78ID:BjNTZWUI
このスレはクソコードとは何かを考えるスレです。

・親クラスが子クラスに依存する処理を持つコード
例...社員クラスを継承した正社員クラスと派遣社員クラスがあり、社員クラスが正社員クラスの知識を持つ状況

・staticにするべきではないモデルにまでstaticにする人
例...社員クラスのメソッドを全てstaticにしたり、社員クラスにシングルトンパターンに相応するものを適用する人

等、クソコードを見た時に「あっ、これクソコードだ」って認識する根拠を挙げていきましょう。
2021/02/04(木) 18:29:41.03ID:MbXlwikG
詭弁て>>115>>118みたいなやつだろ
2021/02/04(木) 18:30:42.54ID:7BpvnZAj
>>121
> 詭弁の特徴のガイドライン(ム板拡張版)

自分で勝手にオレオレルール作るなよw
124デフォルトの名無しさん
垢版 |
2021/02/04(木) 18:32:23.89ID:DKUfS2zw
>>120
俺も理解できん
2021/02/04(木) 18:34:52.95ID:r1rgzoeR
クソスレ上げんなカス
2021/02/04(木) 18:46:14.74ID:qhstqCrC
>>121
sin関数のくだり(>>43)は質問の仕方が悪かっただけでしょ
2021/02/04(木) 18:52:47.96ID:9Y9XT+dm
ム板拡張版www
2021/02/04(木) 19:04:30.45ID:7BpvnZAj
sin関数のくだりは、明らかにMathオブジェクトだとわかるものを持ってきて
それと同一視させようとしてるから、>>43がアホなだけ
2021/02/04(木) 19:56:09.47ID:plfmR7iV
ム板拡張版ってw
まぁ、時々、該当しそうな人を見かけるけどさw

それはさておき、酷いと感じるコードって

・仕様変更の度に膨大なプログラム変更の工数がかかるコード(人件費が無駄にかかる)
・全く品質の保証されないコード(保証するためのテストにかかる人件費が非現実的な価格になる)

これを満たしているコード全てじゃない?
これを満たすコードを分析していけば、答えが見つかりそう
2021/02/05(金) 18:13:08.64ID:7P5D6x+s
class Rest{
ログインメソッド
ユーザー情報取得メソッド
位置情報送信メソッド
位置情報送信成功通知メソッド
位置情報送信失敗通知メソッド
位置情報以外の情報送信成功通知メソッド
位置情報以外の情報送信失敗通知メソッド
HTTPエラー通知メソッド
private変数のgetterメソッド※全て定義
}

転職前の会社で見つけたAndroidクソコード
こんなコードを渡された時は転職を決意した
2021/02/05(金) 20:09:09.32ID:LvAfdZdW
位置情報送信メソッド

位置情報送信成功通知メソッド

どういう関係なの? 後者は前者に渡されるコールバック関数?
132デフォルトの名無しさん
垢版 |
2021/02/05(金) 20:30:02.05ID:sQbQrry7
位置情報とか必要な時だけは渡すが、終わったら絶対にアプリを落とすようにしてる
2021/02/05(金) 20:59:57.01ID:ywW/HyXt
>>130
1つのクラスでバックエンドAPIのスタブをまとめてるだけなら別にクソコードじゃない
134130
垢版 |
2021/02/06(土) 00:28:38.26ID:rZdEmaWa
>>131
後者は前者を呼んだ後、HTTPレスポンスが返ると引数に渡された関数型が呼ばれる

前者の結果を非同期で受け取るイメージ
2021/02/06(土) 13:51:42.40ID:F35+hfeS
クソコードというよりウンコードだろ
2021/02/06(土) 13:59:02.77ID:OoUbdqRB
unicode(ウンコード)
2021/02/09(火) 17:43:42.15ID:oXbJA4gd
httpレスポンス(Json)に1個、新しい項目を追加したらプログラムの書き直しが20箇所近くで発生してワロタ
無駄なラッパーによる地獄の変更作業
2021/02/10(水) 03:51:43.35ID:YKvIUGd6
ほほwww
2021/02/10(水) 23:05:34.63ID:PXY5WDG2
1万行のメソッド
巻物のような一本モノシーケンスで途中の幾多のエラーチェックの度にいろんなフラグを立てまくり、最終的に最後の行まで到達してから関数冒頭で行なったエラーチェック結果を参照、結局エラーでしたで終了
しかもユーティリティクラスのメソッド
2021/02/11(木) 12:29:17.94ID:QNzWdO78
頭の悪い人がMVVM
2021/02/11(木) 16:13:15.21ID:20fgad/C
皆、通る道は同じなんだな
142デフォルトの名無しさん
垢版 |
2021/02/12(金) 00:11:29.55ID:jyO5hUn0
テストコードって必要?
2021/02/12(金) 00:17:10.35ID:tz+82o+A
テストコードがないプロジェクトなんて見たことないレベル
まともにメンテナンスが続いてるソフトで探してみ
2021/02/12(金) 01:50:17.30ID:yHZydEd8
会社コードならテスト無いの山ほどある
145デフォルトの名無しさん
垢版 |
2021/02/12(金) 07:51:11.85ID:kUMRCn77
自社開発のパッケージ製品作ってんだけどテストコードって書いたことないんだよね
自分自身の学習コストはともかくメンバーの学習コストが怖くてね
2021/02/12(金) 08:29:33.79ID:tz+82o+A
メンバーのせいにするな。お前より優秀だろ。
2021/02/12(金) 12:30:09.75ID:qfo2XcRz
>>142
ちょっと前までテストコードの無い会社で働いてたけど、地獄だったよ

詳細設計の妥当性確認ができない点がヤバイ
上司やリーダーに単体テストをしていないことの危険性を説明したが...テストコード書いてもどうせ無駄になる的な事を言ってた

そもそも、そのテストコードが些細な変更で無駄になるような設計をしている事がマズイのだが...そこには触れてほしくないみたいな感じだったよ

地獄の住人は地獄しか知らない
逆に、テストコードを書く会社の人達も地獄を知らない
148デフォルトの名無しさん
垢版 |
2021/02/12(金) 22:53:23.25ID:jyO5hUn0
でもなー単体テストの品質はどこで保証されるん?
テストコードもコードレビューするんけ?
2021/02/12(金) 23:11:03.49ID:0z7QwFq3
>>148
当たり前だろ。
2021/02/12(金) 23:12:24.97ID:P801lvm7
業務によらね?
頻繁に仕様が変わっちまうのに変えるのが悪いって言われてもね
それで金もらってんだし悪いもクソもないんだよ3日後には変更履歴がすだれみたいに色付いてるのに
のんびりテストコードなんて書いてたって無意味は無意味だろ
2021/02/12(金) 23:13:45.01ID:0z7QwFq3
だいたいテストコードに限らずレビューするだろ


手動のテストでもレビューしなければ

お前何のテストした?
これらのテストをしました。スクショがテストした証拠です
いや、テストしたかどうかじゃなくて、そのテスト内容は問題ないのか?
しりません。テストしました。信じてください

ってなるやろが?
2021/02/12(金) 23:14:36.71ID:0z7QwFq3
>>150
仕様が頻繁に変わるからテストしてません
でリリースするつもり?
アホなの?
2021/02/12(金) 23:15:27.50ID:jxDcSv/l
ひょっとしてテスト項目レビューとかしたことないのか?
2021/02/12(金) 23:15:50.20ID:P801lvm7
テストコード書いたからOKとはならんよな
重要なのは仕様から見たテストコードが適切かどうかであって書きゃいいってもんじゃない
2021/02/12(金) 23:17:20.91ID:P801lvm7
>>152
いや別にテストコードなんか時間かかるやん
デバッガの計算後の値をエクセルにコピペするだけでええやん
2021/02/12(金) 23:19:19.72ID:v8f20fWB
>>152
まあ、あるんじゃね?
うちも大学の研究室に納めるやつとかはバグあったらごめんね、連絡くれたら直すから
なんて契約のものもあるし
まあ向こうに直せるぐらいの能力持ってる人いるけど
2021/02/12(金) 23:20:27.11ID:0z7QwFq3
>>154
当たり前じゃん。ただしテストコードは実際に動くから、それでテストしたということがはっきり記録される

手動だと、テストしたつもりだけどなぁ。もう一回やったらうまくいきません。
テストのやり方を間違えてたかもテヘペロってなる。これが問題

ひどい場合だと、テストの手順に漏れがあったけど
もう一回やるのが面倒だからってキャプチャを作ってごまかしたりできる
テスト項目一覧とかはそれが正しくてもそのとおりにやったことに記録にはならないから

まあ動画にでも取ってりゃ実際に何をやったかは記録できるが
その記録ムービーを全部見なければ意味がないその時間もない
2021/02/12(金) 23:21:27.80ID:P801lvm7
大抵書いた直後の一回だけやん必要なのって
そこでテストできていれば
とりあえずそれでええやん
コードにして引き釣り回す必要ってどこにあるん?
2021/02/12(金) 23:21:48.54ID:0z7QwFq3
>>155
> いや別にテストコードなんか時間かかるやん

手動のテストのほうが時間かかるだろ?
俺が個人で作ってるツールなんか1000を超えるテストを
数秒で終わらせることができるから

コードを修正するたびに全テストを実行できる
それと同じことをやってみ?できるんか?
2021/02/12(金) 23:22:36.21ID:0z7QwFq3
>>158
仕様が頻繁に変わるってことは、そのたびに全部のテストが必要ってことだぞ
2021/02/12(金) 23:23:15.89ID:P801lvm7
>>159
いや、テストコードの作成コストヤバイって
対象コードよりヤバイときのが大半やん
2021/02/12(金) 23:24:15.62ID:P801lvm7
>>160
だからデバッガの値のエクセル貼り付けで駄目な理由って何なん?
2021/02/12(金) 23:26:11.51ID:0z7QwFq3
>>162
エクセルに貼り付ける時にミスする可能性がある
エクセルに記録されるのは結果だけで
その手順が記録されない
2021/02/12(金) 23:26:33.56ID:0z7QwFq3
>>161
> 対象コードよりヤバイときのが大半やん
当たり前だろ。なんでその事がわからないのさ?
2021/02/12(金) 23:31:57.56ID:P801lvm7
てか、君が思ってるほど
無駄にコストかけられないんだよw

まあ、そこでやらなくても
結合とかシステムテストとかあるからさw
そんなに気張ってもらってもどうせ結合で出るようなの取れないし?
2021/02/12(金) 23:33:28.70ID:P801lvm7
それとその段階だと仕様でまずい部分も出るだろうし
あんまりガッツリテストやるよりさっさと出してもらったほうが嬉しいっつーか?
2021/02/12(金) 23:36:39.78ID:0z7QwFq3
>>165
無駄にコストをかけられないというのなら
手動テストを何回やればOKか見積もり立てられるの?

コードを修正したら全部テストいないといけないわけだ
修正した後にまたバグが見つかるかもしれないし
別のバグを入れてしまうかもしれない
そしたらまた全部テストやり直しだ

お前が言うようにコードよりもテストのほうが多くなるぐらいなのに
そのテストに時間がかかる方法を使っていたら
何度もテストできねーだろ
2021/02/12(金) 23:37:47.45ID:0z7QwFq3
>>166
リリース間近の話をしてますが?
2021/02/12(金) 23:38:14.73ID:0z7QwFq3
あと一旦リリースした後のバージョンアップとか
2021/02/12(金) 23:58:17.35ID:P801lvm7
>>168
え?システムテストをテストコードでできないでしょ
2021/02/12(金) 23:59:41.90ID:P801lvm7
>>169
あ、いや、お金にならなかったら今回で終わりなんで
2021/02/13(土) 00:03:54.30ID:xw8mV6Gs
>>170
うーん、お前馬鹿なのかな?

自動化できない所が1個あるからって
全部、手動でやるとか馬鹿だよね

手動でやるのが大変だからそれを減らすって話を
してるってその時点で理解できてないの?
2021/02/13(土) 00:04:38.64ID:xw8mV6Gs
>>171
じゃあもうお前の仕事なくなるじゃんw
自分でお金にならないような仕組みにしておいて
仕事なくすとかアホだなぁ
2021/02/13(土) 00:16:07.02ID:gxnJuOwS
>>172
うーん?聞いたことないなぁ?
んなとこまでテストコードなんて役に立たないでしょ
2021/02/13(土) 00:18:40.61ID:xw8mV6Gs
>>174
本気で頭が悪そうw

「そんな所まで役に立たない」=「そんな所以外では役に立つ」

ってお前はいいました。
2021/02/13(土) 00:20:25.46ID:xw8mV6Gs
自分で「そんな所以外では役に立つ」って言ってるのに
気づいてなさそうなんだよなw
2021/02/13(土) 00:20:59.63ID:gxnJuOwS
あー、いや、作るコストまで含めたときはんなもんいらねーわ
どう考えてもテスト対象のコードより時間かけてテストコード作るってのは無意味だろ
2021/02/13(土) 00:22:17.38ID:xw8mV6Gs
お前は実際にテスト対象のコードより時間かけて手動テストしてるだろーが
何を言ってるんだだこいつは?
2021/02/13(土) 00:22:26.90ID:gxnJuOwS
デバッガ機能で値をエクセルに貼るので十分だって
2021/02/13(土) 00:24:07.56ID:xw8mV6Gs
まさかテストコードを書く時間しかみてなくて
テストコードがなければ、テストする時間はゼロになるとでも思ってるのか?

テストする時間の話をしてるんだが?

テストコードを書けば限りなくテストする時間は短くなる
手動テストするとテストする時間が膨大になる
テストする回数は数回程度じゃ終わらない
2021/02/13(土) 00:24:17.75ID:gxnJuOwS
>>178
アホか
ステップ実行して値のプレビューウィンドウをエビデンスに貼るだけだわ
それ以上のもんいらんし
2021/02/13(土) 00:25:20.87ID:gxnJuOwS
>>180
いや、めっちゃ時間かかるやん
いらんわお前
2021/02/13(土) 00:25:36.27ID:xw8mV6Gs
>>181
それを1000回やったら何秒になる?w
2021/02/13(土) 00:27:15.87ID:xw8mV6Gs
>>182
だから手動のテストだと、どれだけ時間がかかるかを
どうやって見積もるか聞いたんだが?
バグがあると修正してテストが必要だが、じゃあ何回テストをやれば終わるんだ?
全体のテストを全部手動でやったら1回のテストで数日は軽くかかるだろうが
見積もりの方法を聞いている
2021/02/13(土) 00:29:26.07ID:zYMuRkWP
テストコードで品質が上がるとか言ってる奴はそのクソみたいなテストコードのテストも書くのか?(笑)
2021/02/13(土) 00:30:01.23ID:gxnJuOwS
>>183
えー、テストコード1000個書くより早いやろw
2021/02/13(土) 00:30:17.08ID:xw8mV6Gs
>>185
テストコードは人が見てコードレビューするので
テストコードのテストは不要
2021/02/13(土) 00:31:44.06ID:gxnJuOwS
まず、時間が掛かりそうなのがテストコード自体の正当性の担保だよね
テストコード自体も時間がかかるけどここの説明がないのもね
2021/02/13(土) 00:31:53.43ID:xw8mV6Gs
>>186
テストコード1000個書いて、1回あたり数秒でテストを終わらせる
手動で1000個のテストを数日かけてやって、バグがあったらまた数日かけて1000個のテストをやる

どっちが速いかって、明らかにテストコードじゃんw
2021/02/13(土) 00:32:35.09ID:xw8mV6Gs
テストコード不要って言ってるやつは
手動のテストにかかる時間を考慮してないってのがわかったなw
2021/02/13(土) 00:33:24.95ID:gxnJuOwS
>>187
もうバリバリヤバイ時間かかりそうだなw
これは何納品するなら許される重厚感?w
2021/02/13(土) 00:33:38.50ID:xw8mV6Gs
テスト作業の時間を減らすためにテストコードを書くってことを
理解してないってのが驚きだったわw
2021/02/13(土) 00:35:20.12ID:xw8mV6Gs
>>191
手動のテストは時間がかかるよ

テスト仕様書を書く→テスト仕様書のレビューする
この時点でテストコードのレビューをしたほうが速いんだが

しかも手動テストの場合テスト仕様書のレビューがOKでも
実際に作業者がその仕様書通りにテストしてることが担保できない
テストしたけどちゃんとテストできてませんでしたってのが頻発する
2021/02/13(土) 00:35:34.83ID:gxnJuOwS
あ、はい、もういいですw
2021/02/13(土) 01:16:16.14ID:uGwTnb+S
テストコード書かない奴にはどれだけ説明しても大抵無駄。
あいつら野菜毛嫌いするホリエみたいなもんだから。
2021/02/13(土) 01:24:52.43ID:zYMuRkWP
テストコードが何故正しいと言えるのか?
こんなもの作る工数は含まれてないし
単体テストなんかやらんからな(笑)
やりたいならテスターが書けよ(笑)
結合やらやればどうせバグがあれば出るんだし、まさかとは思うけどテストコード教の奴は単体だけで品質が担保されてますとか言うのか?(笑)
コミットした時点で動作チェックぐらいしてるやろ
なんか最近の出来ない奴はテストコード以前に動かないものを平気でコミットするからな
2021/02/13(土) 05:47:34.87ID:scVpGKPS
テストコードなかったらテスト作業に膨大な時間がかかるって話だろ?
テスト作業にかかる時間を無視するなよ
2021/02/13(土) 05:50:27.48ID:scVpGKPS
>>196
> なんか最近の出来ない奴はテストコード以前に動かないものを平気でコミットするからな
開発にテストの時間を含めてないからでしょ?w
2021/02/13(土) 09:16:03.51ID:gxnJuOwS
>>197
比較するのもバカらしい
テストコード書いてる時間に5回はできそうだなw
200147
垢版 |
2021/02/13(土) 09:47:02.97ID:9XqVPVy+
いつの間にか盛り上がっててワロタ

流れを読まずに言わせてもらうと
テストコードって趣味で書くわけじゃなくて、品質を維持するため或いは開発費の無駄を無くすために書くものなんだぜ
201デフォルトの名無しさん
垢版 |
2021/02/13(土) 09:52:35.14ID:32jiSkKt
テストコード頑張るぐらいなら結合テストで頑張ればいいじゃんどうせ画面絡みとかの方がバグ多いし
202147
垢版 |
2021/02/13(土) 09:54:50.29ID:9XqVPVy+
>>201
テストコードを書けば、ビルドする度にテストが自動的に実行される
これが強み

手動で動作確認もやるけど、テストコードはあくまでのソースコードの質をチェックするための工程だし、目的が違う
203デフォルトの名無しさん
垢版 |
2021/02/13(土) 10:01:23.85ID:32jiSkKt
>>202
目的が違うのは分かるけどテストコード書くコストも結合テストにかかるコストも両方出せるないなら結合テスト頑張る、又はseleniumとかでそっちの自動化頑張った方がコスパいのかなと
204147
垢版 |
2021/02/13(土) 10:03:01.57ID:9XqVPVy+
あと、俺は画面がらみのテストも自動化してるよ
タッチとかの操作をテストフレームワークを使ってコンピュータにやらせてる

だから、同じテストを手作業でやらずに済む
最終チェックは念の為手作業でやるけど、バグが直るまで何百回でも自動的にテストができるのが強み

まぁ、それができない事情も知らないことはないけどね...static上司...ウッ頭が
2021/02/13(土) 10:04:08.61ID:gxnJuOwS
>>201
俺もそう思う
結合で頑張ろうよね
こんなのそもそもスタンドアロンでなんか動くに決まってんじゃん
206147
垢版 |
2021/02/13(土) 10:07:00.21ID:9XqVPVy+
>>203
不具合はなるべく早く見つけ出した方が修正が楽

もしも、手動テストで不具合が発覚しても原因分析に時間がかかってしまうから...そこが問題
一方、テストコードだと行レベルで不具合の箇所がわかる

まぁ、単体テストをすり抜けることもあるから手動チェックもするが...
207147
垢版 |
2021/02/13(土) 10:13:57.11ID:9XqVPVy+
まぁ、現場判断が一番だ
今、テストコードを書いても無駄だと感じるのなら、その通りなのだろう

ただ、へぇー
そんな職場もあるんだー程度に参考にしてくれれば
208147
垢版 |
2021/02/13(土) 10:26:37.18ID:9XqVPVy+
ごめん、Selenium無視してた
まぁ、ほとんどUIとフレームワークのコードしか書かないのならテストコードを書こうとしても何をテストすればいいんだよwってなるかも
2021/02/13(土) 11:17:00.74ID:scVpGKPS
>>201
テストコードでできるようなことを、結合テストで全部やるとかアホだろw
結合テストにどれだけ時間がかかると思ってるんだ?
2021/02/13(土) 11:18:03.19ID:scVpGKPS
>>205
> 結合で頑張ろうよね
なんで同じことを時間がかかる方法でやろうとするの?
時間泥棒が目的なわけ?
2021/02/13(土) 11:19:19.42ID:scVpGKPS
>>199
> テストコード書いてる時間に5回はできそうだなw

テスト回数5回って少なすぎるだろw
5個のバグを1個ずつテストしたら終わりじゃんw
2021/02/13(土) 11:29:32.31ID:PYtZn7CJ
> 結合やらやればどうせバグがあれば出るんだし
とか言ってるやつに単体テストの重要性を説いても無駄
何回か痛い目に会えばいいんだけど無職みたいだからそれも無理だしw
2021/02/13(土) 11:53:52.62ID:gxnJuOwS
>>212
いや、もし単体で動いたとしてもUIがどういうタイミングでどの頻度で欲しいのか?
よくわかってないんだよ
奴らバカだから
どうせ進捗率出せないと困るとか
中断とリスタートができないと駄目だとか
うっせからそんな決まらねぇぞどうせ
2021/02/13(土) 15:05:52.87ID:scVpGKPS
単体テストの重要性がわからなくても
テスト時間がどれくらいかかるかぐらいわかると思うがな
何日かけて総合テストしてますか?
2021/02/13(土) 15:06:38.25ID:scVpGKPS
何日かけて結合テストしてますか?
2021/02/13(土) 15:10:25.52ID:scVpGKPS
全部結合テストでやればいいって言ってるやつは
結合テストも適当にしかしてないだろうな
数ヶ月かけて開発して、まとめて2、3回テストをするとかそんな感じだろ
時間がかかってそれ以上やれるわけがないんだから
2021/02/13(土) 16:01:22.66ID:ePSMeSNb
テスト対象がテスト済みのオープンソースライブラリだらけだったら、テストコードを書かないのはわかる

まぁ、ごりごりドメインロジックを記述する人がテストコードは不要とか言うと困るけど
2021/02/13(土) 16:05:55.90ID:scVpGKPS
テストコードを書かないでいいなら
テストもしないでいいってことになるんだが?
2021/02/13(土) 16:07:53.04ID:ePSMeSNb
>>218
まぁ、落ち着け
あと、誰に言ってる?
220デフォルトの名無しさん
垢版 |
2021/02/13(土) 19:53:19.20ID:EpdeqUps
テストがどうよりクソコードを語れよ
221デフォルトの名無しさん
垢版 |
2021/02/13(土) 20:16:55.86ID:Hi5efe9w
テストはビジネスロジックだけ書くのが普通
■ このスレッドは過去ログ倉庫に格納されています