クソコードとは何か

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

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

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

等、クソコードを見た時に「あっ、これクソコードだ」って認識する根拠を挙げていきましょう。
2021/02/20(土) 09:55:55.93ID:O4DpQFuV
クソコードとは何か
2021/02/20(土) 10:00:30.75ID:xSEyIqRP
テストが手動でテストをするのに膨大な時間がかかるコード
2021/02/20(土) 10:03:35.37ID:EvFy/+SD
>>503
え?モックとか言うやつの話っしょ?
2021/02/20(土) 10:04:35.86ID:EvFy/+SD
むしろこういう複雑な動作されるのはそもそも単体じゃないじゃん
2021/02/20(土) 10:06:03.68ID:xSEyIqRP
>>506
だからお前はモックを使わないで
全部手動で膨大な時間をかけてやるんだって話してるんでしょ?

あ、テストしてないんだっけ?w
プロの仕事じゃないなぁ
2021/02/20(土) 10:07:47.77ID:xSEyIqRP
>>507
複雑なのはたくさん値があってその組み合わせが膨大だから
手動テストも、その組み合わせをテストしないといけない
時間がかかって現実的だからテストしないって言ってる?
手動テストはテストをしないこと・・・意味がわからんw
510デフォルトの名無しさん
垢版 |
2021/02/20(土) 10:24:31.88ID:MdDLRkGY
>>498
ありがとうございます。だけどプロトコルバッファーなどgRPCで生成されるコードにもStubって使うので
もう全部Stubで広義的にはいいじゃんって思います。付加機能があったり、ライフサイクルが複雑であって
テストコードの話に限定できてメインソースじゃない単語だと「モック」と言われてるような気もします。
先輩が見てるといけないので、先輩が嫌いな訳じゃないです、モックモックモックいうのはイライラするので
やめてほしいです。ここで「手動テストは○○○(否定表現)」を連呼する人が先輩に似てます。
2021/02/20(土) 10:32:54.85ID:xSEyIqRP
「手動テストは時間がかかる」
これは否定表現じゃないからセーフだなw
512デフォルトの名無しさん
垢版 |
2021/02/20(土) 10:37:02.86ID:MdDLRkGY
もうこの際だからハッキリ言うと、先輩、それ誰も知ってるから鬼の首を取ったように言われても
ぼくらは困惑ばかりです。正直ウザいです。みんなから嫌われてます
2021/02/20(土) 10:49:31.96ID:EvFy/+SD
でもそこまで作って尚まだ単体テストなんだぜソレw
ぜってーねーよw
もう繋げてテストしようよw
無駄だよw
2021/02/20(土) 10:51:50.41ID:xSEyIqRP
なんだ?今まであれだけ言い返してたのに
今度は何も言い返してないではないかw
2021/02/20(土) 10:56:54.38ID:NUXXCfLF
キチガイの巣窟スレ
2021/02/20(土) 13:03:05.75ID:226xMBL/
もう流れ追うのも面倒になってる奴多いやろこれw
当人同士は必死になっちゃってるんで引けないだろうけど
あとワイの研究結果を勝手に報告するで(`・ω・´)キリッ
適当なソースが思い浮かばなかったんでopenjdkのソースを調査したよ

$ grep --include='*.java' -hroE "new +[^<\( \[]+" jdk-master/src | sed -E 's/new +//g' | sort | uniq -c | sort -nr | head -n 30
5039 String
4884 IllegalArgumentException
3231 Object
3099 ArrayList
2465 byte
2186 int
1718 HashMap
1563 IOException
1548 StringBuilder
1513 UnsupportedOperationException
1465 NullPointerException
1263 RuntimeException
1170 IllegalStateException
976 HashSet
  :(以下略)

結論:Stringクラスはワイ理論ではもっとも再利用性の有る優れたクラス
2021/02/20(土) 13:04:05.48ID:226xMBL/
一応参考までに省略部分も張っとくわ

924 InternalError
886 {@code
755 XColor
742 AssertionError
737 Dimension
710 char
697 Rectangle
632 instance
610 File
594 value
486 DerOutputStream
466 Vector
436 double
408 PrivilegedAction
394 InvalidKeyException
393 Label
2021/02/21(日) 19:53:59.50ID:10q0ACVq
誰か突っ込んでやれよ
2021/02/21(日) 21:30:03.47ID:IppcSdfg
再利用できないコードの特徴
・凝集度が低い
・結合度が高い

この2つがセットだと、自分が使いたい機能に対して無関心な知識まで要求される
そういうのがクソコードの筆頭だと思う

Stringは、上手く実装されている例だな
520デフォルトの名無しさん
垢版 |
2021/02/22(月) 00:29:45.74ID:nzCnkmXH
もしかして文字列出力が多いソフトウェアだと文字列クラスの利用が多くなるんじゃないか?

そうでなくとも5000個の文字列が各所に散らばってるんだろ
どうやって文章を管理して辻褄合わせるんだよ
2021/02/22(月) 00:48:41.83ID:ESOE+x1C
まずさ
別に出来がいいから使ってるわけじゃ無いだろ?
クラスの造りが優秀なのとソースで使用回数が多いことに関連がそんなねぇよ
業務アプリだったらLogってのが簡単にStringをぶっちぎるのなんて簡単に想像できる
2021/02/22(月) 01:24:32.76ID:FgGbi9an
あれ?手動テストの話終わったの?
もっと罵り合えよつまんねーな
2021/02/22(月) 02:20:20.48ID:Vv8+u1qd
最後はこれでおしまい

>>507
複雑なのはたくさん値があってその組み合わせが膨大だから
手動テストも、その組み合わせをテストしないといけない
時間がかかって現実的だからテストしないって言ってる?
手動テストはテストをしないこと・・・意味がわからんw
2021/02/22(月) 02:33:01.98ID:ESOE+x1C
いや、流石にハードの動作知らんやつが設定値7に対して6.997で止まることを想定できんやろ
どんな組み合わせをやっても無理なはずやで
テキトーなことを言うな
2021/02/22(月) 02:59:19.84ID:Vv8+u1qd
>>524
ハードの動作知らんやつが手動でテストしても
何の解決もしないけど?頭大丈夫か?
526デフォルトの名無しさん
垢版 |
2021/02/22(月) 03:09:12.22ID:PA6Gvk4i
ここまでをまとめると、自動テストは暇なら書く程度の価値
って事でおk?
2021/02/22(月) 05:42:49.54ID:Vv8+u1qd
手動テストに膨大な時間がかかるので
自動化してもっと価値が高いことに時間を使いましょうって話だよ
528デフォルトの名無しさん
垢版 |
2021/02/22(月) 05:49:19.42ID:PA6Gvk4i
手動テストに膨大な時間なんかかからないと思うんだが
そもそも
その時間まで積んだうえの開発コストだと思うんだが
529デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:03:54.54ID:2p9yrjmm
コロナウイルス→鳥インフルH5N8→人

もうダメだな、鶏肉も食えない
2021/02/22(月) 06:23:03.40ID:Vv8+u1qd
>>528
俺が作ってる1万行程度のツールはテスト項目数が1000個以上ある
この項目数は多いというほどのものでもないだろう
このテストを全て自動的に実行する時間はに30秒程度

もし手動で実行するなら1つあたり10秒で終わらせられたとしても
1万秒、300倍以上もの時間がかかっている
1万秒といったら、2時間半以上にもなる
開発しながらテストとかやってられないレベル

大きなシステムではテスト項目数は数万、数十万にもなるから
テストに数日かかる。コードを修正するたびにそんな事やってられないから
手動テストはテストをサボることになる
531デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:34:50.69ID:PA6Gvk4i
>>530
毎回やる必要のないテストばかりだろ?
2021/02/22(月) 06:38:20.47ID:Vv8+u1qd
> その時間まで積んだうえの開発コストだと思うんだが

開発コストは低い方がいいだろ?
そうすりゃ請求金額の多くを儲けにできる

1ヶ月かかる仕事を効率化して1週間でできるようにしたから
販売金額も1/4でいいですよなんて、技術料ゼロの儲けが出ない
ビジネスモデルで仕事してるなら可哀想としか言うしかないがなw
2021/02/22(月) 06:40:44.17ID:Vv8+u1qd
>>531
毎回やらなくていいとはどうやって判断したのか?
いつも想定してない所でバグが出るもんだ
コミットのたびにCIで全テストをするのは当たり前

ローカルでは一部のテストだけを行えばいいが
CIで自動的に全テストを行うのは普通の話だ
そこまでの高い信頼性を手動テストでやってるか?
534デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:41:49.22ID:PA6Gvk4i
自動テストで完結しないのに、議論に値しないだろ
2021/02/22(月) 06:42:47.10ID:Vv8+u1qd
>>534
論点はどれだけ時間を減らせるかだ
手動でしかできない部分だけ手動でやる
自動でできる部分も含めて全部手動でやる
どちらが時間がかかるか言うまでもないな
536デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:42:57.10ID:PA6Gvk4i
自動テストはヒマなら書くレベルの価値しかない
2021/02/22(月) 06:43:52.26ID:Vv8+u1qd
>>536
話し終わってねーだろw
手動テストが時間がかかるという話が出た途端
なぜそれまでの話をなかった事にするんだ?www
538デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:45:01.26ID:PA6Gvk4i
自動テスト書くくらいなら他の仕事やれよ
単価テスターの6倍とかなんだから
2021/02/22(月) 06:45:38.77ID:Vv8+u1qd
>>538
ならテスターが自動テスト書けばいいだろwww
540デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:46:59.64ID:PA6Gvk4i
>>539
それはアリ、でもそんな現場は無い
2021/02/22(月) 06:48:25.53ID:Vv8+u1qd
>>540
類は友を呼ぶってことだよw
自動テストがあるプロジェクトはたくさんある
542デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:48:33.24ID:PA6Gvk4i
プログラム分からないほうがテスターとして価値ある
時々すごい操作するし
543デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:49:22.93ID:PA6Gvk4i
メンテしなくなる自動テストのエレジー
544デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:51:06.89ID:PA6Gvk4i
もう丸1年くらいテストコード見てない
2021/02/22(月) 06:51:42.66ID:Vv8+u1qd
はい、手動テストの方が時間がかかるって
結論をそらし始めましたよw
546デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:51:53.08ID:PA6Gvk4i
ヒマなら書いたほうが良いのは認めてる
547デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:52:54.59ID:PA6Gvk4i
社員じゃないんで書きたくないというのもある
2021/02/22(月) 06:53:42.35ID:wMwiRJvv
自動テスト書いた方が早いことは自動テスト書きながら開発してるやつなら分かると思うんだ
549デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:54:15.04ID:PA6Gvk4i
エンドが書けば良いと思うんだが・・オナニーと大して変わらないんだから
550デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:57:07.17ID:PA6Gvk4i
SwaggerとかでAPI自動生成される場合は書いたほうが良いな
2021/02/22(月) 06:58:12.31ID:Vv8+u1qd
自動テストを書く時間まで積んだうえの開発コストだと思うんだが?w
手動でテストをすると、その開発コストが大きくかかる
552デフォルトの名無しさん
垢版 |
2021/02/22(月) 06:59:23.38ID:PA6Gvk4i
手動テスト要らないプロジェクトを知らない
2021/02/22(月) 07:00:39.66ID:Vv8+u1qd
手動テスト要らないなんて一言も言ってないよな
自動テストを書く時間まで積んだうえの開発コスト
全部手動でテストをすると、その開発コストが大きく跳ね上がる
554デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:02:05.20ID:PA6Gvk4i
>>553
そんな事ない、テスト観点の洗い出しが変なだけ
2021/02/22(月) 07:03:27.97ID:Vv8+u1qd
>>554
テスト観点の洗い出しが良くなれば
同じ件数のテストを手動で早く実行できるという
理由を言ってみて

手動テスト要らないなんて一言も言ってないよな
自動テストを書く時間まで積んだうえの開発コスト
全部手動でテストをすると、その開発コストが大きく跳ね上がる
556デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:04:10.61ID:PA6Gvk4i
テストコードの保守工数より手動テストしたほうが確実
557デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:04:42.42ID:PA6Gvk4i
>>555
自分で考えろ
2021/02/22(月) 07:05:28.58ID:Vv8+u1qd
やっぱり話をすり替えようとしていただけだったかw
2021/02/22(月) 07:06:08.80ID:Vv8+u1qd
具体例

俺が作ってる1万行程度のツールはテスト項目数が1000個以上ある
この項目数は多いというほどのものでもないだろう
このテストを全て自動的に実行する時間はに30秒程度

もし手動で実行するなら1つあたり10秒で終わらせられたとしても
1万秒、300倍以上もの時間がかかっている
1万秒といったら、2時間半以上にもなる
開発しながらテストとかやってられないレベル

大きなシステムではテスト項目数は数万、数十万にもなるから
テストに数日かかる。コードを修正するたびにそんな事やってられないから
手動テストはテストをサボることになる
560デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:07:12.30ID:PA6Gvk4i
いちいち理由を聞くな、ここは自分考えだけを言って
ストレス解消する便所の落書きだ
2021/02/22(月) 07:08:35.98ID:Vv8+u1qd
まあ手動のテストで1つあたり10秒って書いたけど
普通そんな時間で終わらせられないよなw

事前準備の手順があって結果のデータを見比べて
画面を注意深く観察してスクショとって
チェック表にチェック入れるんだろ?
1分でも短いかな?
2021/02/22(月) 07:08:55.27ID:Vv8+u1qd
>>560
お前がストレス解消のために書いてるってことはわかったよw
563デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:08:56.10ID:PA6Gvk4i
暇ならテスト書いていいんじゃない
2021/02/22(月) 07:10:09.10ID:Vv8+u1qd
暇だからという理由で手動テストをしてたのか?
手動テストをやめれば暇になるぞwww
565デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:10:31.54ID:PA6Gvk4i
開発工数30日とかテストなんか書けるかハゲ
2021/02/22(月) 07:11:40.21ID:Vv8+u1qd
>>565
だからテストしないと?
プロの仕事じゃないな
567デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:11:58.72ID:PA6Gvk4i
巷には短納期かつトラブル案件だらけ
2021/02/22(月) 07:12:33.00ID:Vv8+u1qd
そして短納期かつトラブル案件は自動テストがない

なるほどなw
569デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:12:50.79ID:PA6Gvk4i
悠々とテストコード書ける案件やりたいな
2021/02/22(月) 07:13:46.16ID:Vv8+u1qd
テストコード書く時間がないなら
それよりももっと時間がかかる手動テストやれるわけがないので
テストサボってるだけなんだろうな
571デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:14:21.10ID:PA6Gvk4i
テストコード工数を認めてもらえる案件やりたいな
もう単体テストはエンドでやる、みたいなのばっかり
572デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:15:19.40ID:PA6Gvk4i
そして仕様変更が来る
573デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:16:26.70ID:PA6Gvk4i
エージェントが20%とか抜いてるからエンドがコストにシビアすぎる
2021/02/22(月) 07:18:04.08ID:Vv8+u1qd
自動テストがないプロジェクトは短納期かつトラブル案件らしいw
575デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:18:22.62ID:PA6Gvk4i
もう60日以上の案件久しくやってないな
2021/02/22(月) 07:18:33.25ID:Vv8+u1qd
プロジェクトの炎上具合を測れるな
自動テストがないプロジェクトは短納期かつトラブル案件
577デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:19:07.55ID:PA6Gvk4i
自動テストとか暇な案件が羨ましいわ
2021/02/22(月) 07:19:23.92ID:Vv8+u1qd
自動テストを書いてないやつは、60日以上の案件をやらせてもらえないらしい
579デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:20:34.85ID:PA6Gvk4i
自動テストあるのにメンテしてなくて炎上するケースが50%くらいある
ずっと自動テスト工数割いてくれよ
580デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:21:38.82ID:PA6Gvk4i
60日以上の案件がほぼ無い
581デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:22:34.66ID:PA6Gvk4i
120日半年くらいあればなぁ
582デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:22:48.08ID:IPejWs3O
>>533
最近の単体テストツールは影響がないテストコードを実行しないものが多くある
583デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:23:43.26ID:PA6Gvk4i
他人の書いたテストコードのメンテが辛いのは分かる
584デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:27:46.33ID:PA6Gvk4i
メソッドを今流にメンテしたらテストコード通らないからギリギリまでママにされていて大規模改修とかやめてくれ
585デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:29:23.41ID:PA6Gvk4i
テストを直すのがめんどくさい時が多々ある
やめてくれ
586デフォルトの名無しさん
垢版 |
2021/02/22(月) 07:52:25.48ID:PA6Gvk4i
テストコードとか書かないに限るな
2021/02/22(月) 08:29:30.69ID:UqVKWzXS
平日にID真っ赤にする手動テストおじさんはNGしとけ
無視して俺らと会話しようぜ
仕事してるからレスは少なくなるけど
2021/02/22(月) 18:49:35.65ID:/OsI7R0n
本日の職場で見たクソコード

class MainActivity implement 機能Aインタフェース, 機能B,インタフェース 機能Cインタフェース...機能Mインタフェース{

}

なんで12個のインタフェース継承してるの?
円卓の騎士かな?
Androidで発生するイベント全部、1個のアクティビティに継承して実装するのやめてください実装者が死んでしまいます
2021/02/22(月) 19:43:16.58ID:FCcJxvZt
それはクソコードと言うよりクソ設計だろ
2021/02/22(月) 22:40:13.49ID:hhtkxh8a
クソコード兼クソ設計だな
2021/02/23(火) 13:35:47.17ID:q1iKZVvs
>>587
なんか話せよ
2021/02/23(火) 13:39:35.37ID:q1iKZVvs
>>559
そのテストコード書くのにかかった時間は仕様変更によりすべて無駄になる世界があるんよ、君はまだ世界の広さを知らない
2021/02/23(火) 14:42:48.42ID:iu17pC6m
>>592
仕様変更によりテスト手順書が全て無駄になる世界はないのか?w
2021/02/23(火) 16:14:44.38ID:5BmsWjYf
こいついっつもテストする時間のことを無視するよなw

テストコードを書く vs テストコードを書かないでしか比べてない
それよりも重要な何度も行うテストの時間を持ち出されたら困るのだろうな
手動で数回テストをするだけであっという間に開発コストが数倍に跳ね上がる
595デフォルトの名無しさん
垢版 |
2021/02/23(火) 16:23:12.42ID:xxo3T1mG
テスト書くのめんどくさいんで俺が抜けた後のやつに任せるわ
2021/02/23(火) 16:58:13.53ID:8QyPv/It
テストコード1回書く間に手動テスト5回はできそうなんだが?
んで1回テスト通したら次の変更までやんねーよな?
597デフォルトの名無しさん
垢版 |
2021/02/23(火) 17:21:41.87ID:0iI/BmGY
ここまでをまとめると、テストコードはSWAGGERとかで自動生成される部分のみでおk?
2021/02/23(火) 17:21:54.85ID:iu17pC6m
>>596
それ、テスト手順書書く時間入れてなくね?
2021/02/23(火) 17:48:25.42ID:q1iKZVvs
>>593
テスト手順書なんて作るん?
2021/02/23(火) 17:49:26.31ID:q1iKZVvs
>>598
テスト手順書って何?
2021/02/23(火) 17:50:39.14ID:q1iKZVvs
仕様変更があるのは手順書作る前だから問題ないのさ、でもテストコードは無駄の極み底辺コーダーの自己満なのさ
2021/02/23(火) 17:51:03.33ID:q1iKZVvs
>>597
オーケー
2021/02/23(火) 17:53:11.25ID:q1iKZVvs
ユニットテスト100回回すより総合テスト1回の方が品質高まる、実装ミスなんて現代のプログラミング環境では無視できる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況