クソコードとは何か
レス数が1000を超えています。これ以上書き込みはできません。
このスレはクソコードとは何かを考えるスレです。
・親クラスが子クラスに依存する処理を持つコード
例...社員クラスを継承した正社員クラスと派遣社員クラスがあり、社員クラスが正社員クラスの知識を持つ状況
・staticにするべきではないモデルにまでstaticにする人
例...社員クラスのメソッドを全てstaticにしたり、社員クラスにシングルトンパターンに相応するものを適用する人
等、クソコードを見た時に「あっ、これクソコードだ」って認識する根拠を挙げていきましょう。 もうレスバの予感しかしない。
産まれたての子鹿のように震えてるよ。 . /⌒ヽ
∩ ^ω^) な ん だ
| ⊂ノ
| _⊃
し ⌒. ___
_/ ⌒ ⌒ \ うん、うん、
/)) (●) (●) ヽ それで?
|∩ (_人_) |
/ ノ、_ヽノ_ノ ̄)
/ / /フ_/
L_/\ \( テストコードが無いのにテストしたとか言うプログラマーの提出するコード コードとコードつなぎ合わせて一つのプログラム作ったけどごちゃごちゃでクソコードになってたw function getPrice(id) {
const price = clothPrice.filter({ id }).first()
return price
}
はい、どこがクソか指摘してみて >>11
getPrice関数いらなくね?
...で合ってる?
理由の指摘の仕方はどうしようかな >>13
理由を言えないならそれはレビューではない まず、このコードを見てクソだと気がつけない人相手だと、言い方が重要。
だから、説明に困ってる。
なぜ、気が付かないのかとか。
考えてるだけだよ。気がついた人は先に理由を述べてほしいが。 >>15
相手のことはまず忘れろ。
理由を言え。
そうすればあとはその理由をどう言えば伝わるかという
次の話に行けるだろ getPrice(id) 関数とclothPrice.filter({ id }).first()
ってやってる事は一緒だよね?
責務も殆ど一緒。
些細な違いと言えばfirst以外を呼べなくしたことだが...
たぶん、インスタンスの名称からしてclothPriceをユーザー側に隠蔽する必要も無いのに隠蔽し、挙げ句に役割のかぶったほぼ無意味な関数を無駄に増やしてしまってる。
だから、クソ...だと思った。 あと、一言で言えば...もしかしてドメインモデル貧血症? > getPrice(id) 関数とclothPrice.filter({ id }).first()
> ってやってる事は一緒だよね?
関数とその中のコードが
やってることが一緒になるのは当たり前です。
関数にする意味は、コードの可読性を上げるためです。
「clothPrice.filter({ id }).first()って何やってるの?」
「Priceをgetしてます!( getPrice(id))!」
という会話がコードレビューであるだろうなと少しでも思ったら
それは関数にすることで可読性が上がっているということです。 >>19
> > getPrice(id) 関数とclothPrice.filter({ id }).first()
> > ってやってる事は一緒だよね?
>
> 関数とその中のコードが
> やってることが一緒になるのは当たり前です。
実装対象の仕様が1行程度のコードで住んでいる点をまず気にして。
> 関数にする意味は、コードの可読性を上げるためです。
可読性は上がったのだろうか?
だって、何のインスタンスのオブジェクトが返されるか名前から想像できますか? > だって、何のインスタンスのオブジェクトが返されるか名前から想像できますか?
逆。「何のインスタンスのオブジェクトが返されるか」を意識してはいけない。
それはかっこいい言葉で言うならデメテル法則に反している
実装の詳細を意識させるな >>11
clothPrice.filter({ id }).first()
だったら...clothPriceインスタンスのPriceが帰ってくるんだなーって一目で分かるけど
getPrice(id)
だったら...え?何が帰ってくるのこれ?
ってなりませんか?
仮にJavaみたいな型宣言が必要な言語だったとしても、何のインスタンスのPriceが得られるのかわからないですよね?
...って、これが本当の理由かっ!?
色々、問題が想像つくから、回答に迷ってる > getPrice(id)
> だったら...え?何が帰ってくるのこれ?
> ってなりませんか?
そのオブジェクトのpriceだろ
そのオブジェクトが内部で使用している〜とかを意識しないといけないのはデメテルの法則違反 >>21
setじゃなくて、getだよね?
それって、つまり...誰かにgetを呼ばせる前提の関数なんですよ。
あなたに問いますけど、getPriceって誰に何の為に呼んでもらう関数だと思いますか? > あなたに問いますけど、getPriceって誰に何の為に呼んでもらう関数だと思いますか?
このコードではそれは書いてないのだから、そこを勝手に想像して
自分の都合の良い解釈をするのは、それ自体が間違い 出題者さんの回答が知りたいな...。
まぁ、二人しか答えてないけど。 >>26
> このコードではそれは書いてないのだから、そこを勝手に想像して
> 自分の都合の良い解釈をするのは、それ自体が間違い
では、clothPrice.filter({ id }).first()は何をしているメソッドだも思いますか?
こっちは...なんとなくわかりませんか?
私はstiftを触ったことないですが、似たような言語で似たような記述をしたことがあるので推測できます。わかりやすいですね。 > では、clothPrice.filter({ id }).first()は何をしているメソッドだも思いますか?
getPriceをしてるメソッド って、よく見たらjsか!?まぁ、どっちでもいいや。
何となくでわかる記述って大切じゃないですか? >>30
理由が言えないのを「何となくこっちが良いと思った」でごまかすなよ
それは理由がないという 理由は必死に説明しているつもりなんだけどなぁ...。
こうなるから慎重に説明を考えていたんだけどなぁ... 何となくでわかるの意味が分かってないことが分かった...。そもそも、filterの意味が分かってない? 何となくこっちが良い
じゃなくて
コードを見たとき、記述から実装内容を察することができることが重要と言うべきだったかな...
言葉選びを間違えるとこうなるから慎重に説明をしないとなんだが...うーん、説明下手orz 実装者の視点しか持ってないんだよな。
クラス設計というのは、どういうインターフェースにすれば
クラスが"使いやすいか" というクラスの利用者からの視点で設計する
getPriceというメソッドではなく、その中のコードの実装の
話をしてる時点で視野が狭いのは明らか
テストコードも書いたことないだろ?
テストコードは必然的に使いやすいクラスであることが要求されるからな > コードを見たとき、記述から実装内容を察することができることが重要と言うべきだったかな...
実装の詳細は隠蔽しろって習わなかったのか? 別に、実装者だけではなくライブラリユーザーの事を考えてますよ。
実際、ライブラリ開発者ですしお寿司。
じゃなければ、getPriceって誰か何のためにーなんて質問をする発想はないよ。
たしかに、実装の詳細は隠蔽するべきだね。
でも、私が注目しているのは、まさにユーザビリティに相当する部分です。 じゃあ実装の詳細を無視して話をしよう
function getPrice(id) {
・・・隠蔽。1行かもしれないし100行かもしれない・・・
} 1.getPriceが必要な場面を想像できますか?
→想像すること自体が間違いだと回答しましたが、はいorいいえ でお願いします。
2.それが想像できないのはなぜですか? 1.getPriceが必要な場面を想像できますか?
いいえ。
2.それが想像できないのはなぜですか?
出題に書いてないからです。
逆に出題に「これは商品オブジェクトです」と書いてあれば
getPriceが必要な場面を想像できます。 >>38
もしかして...getPriceがクラスメソッドの実装ではない事に気がついていない? >>41
わかってるから"実装を取り除いて"、実装"以外"を書いたんですが?
その質問の意図はなんですか? じゃあ、もしもですよ?出題内容が
sin関数だったらどうですか?
>>40と同じノリで答えてください。 >>43
何オブジェクトのsin関数ですか?
https://ejje.weblio.jp/content/sin
主な意味 (宗教・道徳上の)罪、罪業、過失、違反、ばち当たりなこと、ばかなこと >>44
いえいえ、ただのsin関数ですよ。数学の。 >>45
同じノリで答えろと言われたから、同じノリで答えただけですが?
出題に、何オブジェクトのsinか書いてないから想像できない。
数学オブジェクトのsinと出題に書いてあれば想像できます。
>>40と全く同じノリで答えましたが? ...もしかして、三角関数知らない?
もうギブアップ。 >>47
sinという言葉には色んな意味があります。
出題に書いてないことを勝手に想像しないように
同じノリで答えてますw 面白すぎるだろこのやり取りw
最初から相手の話を聞く気がない人に説明をしても無駄無駄 sin関数は一目で具体的な用途が判るが、getPriceはそうじゃないし使い勝手もイマイチだって言いたいんだろ
察してやれ >>50
ずっと答えてますが?
数学オブジェクトと出題に書いてないのに
想像で数学オブジェクトだと決めつけるのは良くないですよ?
違いますか?
厳密な定義ができるのはプログラマの能力の一つでしょう >>53
だから、getPriceには出題に書いてないからわからない。
これが商品オブジェクト、 product.getPrice() と
出題に書いてあればわかると答えたんですが? >>55
> だから、getPriceには出題に書いてないからわからない。
↑これが問題なの。 >>56
俺の答えが正解っていいたいのか?w
俺が答えを言ってから、後出しで同じだって言うなよwww function getPrice(id) {
const price = clothPrice.filter({ id }).first()
return price
}
これが一行(二行)だから関数にすべきでないとか
中身を直接書けば何やってるかわかるから関数にすべきでないというならば、
tan(数学のタンジェント)関数はなぜ用意されているのでしょうか?
double tan(double x) {
return sin(x) / cos(x);
}
たった一行です。中身を直接書けば何をやってるかわかります。
同じ理屈であれば、不要なはずです。
そういう結論になるはずです。
tanを関数にする理由は明らかですね。最初に言った理由と同じです
「clothPrice.filter({ id }).first()は何やってるの?」という質問が出るのであれば
それを関数にすることで可読性が上がるのです。中で何をやってるかは
意識させないようにするのが正しい設計です。 >>58
だって貴方、>>12でどこもクソコードじゃないって答えたじゃん コードはクソじゃないですが?
出題に書いてないって言うのは、出題がクソという意味ですが?
いい加減諦めたら?w 風呂入ってたら議論が白熱してた
俺どうすればいい? おかえり
もう、疲れたよパトラッシュ...
ところで、パトラッシュ、答えが知りたいな てゆーか、答え言っていいの?
一応想定してた回答はあるけど せめてデメテルの法則ぐらいはわかった上で発言してくれな 一応俺の想定では>>22が正解
ただ俺はデメテルの法則違反とか知らんから色々勉強になった
一概にこれが正解とは言えないんだなーと >>70
補足すると関数名ね
getPrice -> getClothPrice
にした方がいいんじゃないかなってこと >>71
それはgetPriceが属するオブジェクトによる
一概にそう言えないし、それは出題に書いてない >>71
ありがとう。
まぁ、俺も一部、知らんことあったから勉強にはなったよ。 >>72
まぁ思い付きの出題だから、その辺はすまんかった class Box {
private int h;
private int w;
public int getHeight(){
return this.h;
}
public int getWidth(){
return this.w;
}
public int setHeight(int value) {
this.h = value;
}
public int setWidth(int value){
this.w = value;
}
}
俺も出題しよっと
俺は上記、箱クラスを作った
カプセル化もしてるし、インスタンス化もできるし、まさにオブジェクト指向(キリッ)
さて、何が駄目でしょうか
前提...命名規則やインデント等の書き方の問題ではない
考えるべきこと...クラス設計的な問題点を見つけよ 初期値書き忘れた
Javaの言語仕様で0が入るって事で >>76
クラスレベルでhやwといった一文字は使うべきではない
座標としての意味のxやyなら問題ないが 一文字変数が許されるのは、広くても関数レベル
可能ならそれよりも小さいブロックレベルまで 理由は「パッっと見」でクラス全体を見ることは普通は無理だから。
一文字変数は変数名から意図がわからないのでパッっと見でコードも同時に見れることが前提 問題文に「命名規則は関係ない」って書いてあるのになぁ 脳がバグってるのか?
どうみても...ビジ...面白いから黙っておこう >>76
hとwを高々保持するのが目的のようなやつをクラスにする必要あるやろかとは思う
あとプライベートにしてアクセッサを用意するのはいかにもなんだけど
これは言うほど嬉しくも無いと結論づけてもういいんじゃないかな
こーいうデータ保持クラスおまえらも山ほど書いてきたと思うけど
嬉しかったことあるかこれ?
結局これを受け入れる側のクラスライブラリとべったりの未来しか見えないし >>85
素晴らしい!正解!!
理由説明も、その通り!
まぁ、解決するとしたら、そもそもこんなクラスを作るなorドメインロジックをしっかり記述しましょうってところか。
オブジェクト指向(キリッ)とか言いつつ、完全にオブジェクト指向の本質を無視したプログラムでした。 でも教科書にはこういう例しか載っていないんだよな・・・ たしかに
Box box = new Box();
box.setHeight(10);
box.getHeight();
box.setWidth(7);
こんなことやってても虚しいなw
せめて
Box box1 = new Box(10, 7);
Box box2 = new Box(10, 5);
if( box1.area() < box2.area() ){}
くらいのことはできてほしいな
あと、コンストラクタで変な値(マイナスとか)を入れたら例外を出すとか
教科書はまだ未開拓なところがあるからしゃーない
最近の学生がどんな教科書を読んでるかは知らないけど 実装ありきでそれに対するアクセッサという順にしか考えないし
実装ではなくてインタフェースに対してプログラミングするとかも分かってない
インタフェースを設計する上で見るべきところに思考がフォーカスされてない
C#はプロパティがあって簡潔で嬉しい!これでアクセッサ書き放題ぐへへってなもん あ、流れ読んでなかった
>>89はどれに対するレスじゃなくて雑感ね ふう。やれやれ
アクセッサにするのは将来の拡張性のためだろ
Javaであればプロパティが存在しないから
そうしないとインターフェース互換性を保ったまま
継承することができない。
言われてコードを書いてるだけで、その理由を知らないんだな 自分か継承をしたことがないからって
クソコードというのはコードの話をしてない
自分の経験の話になっている IDが赤くなるのはレスが多いからなだけだぞ?
それ以外に意味はない クラス利用者の事を考えずに実装したクラスは全部クソコード説 >>96
このスレで語られている内容を理解できない96はクソコードしか書けないニート説 >>11
コードの良し悪しは用途と仕様が不明確ならまともな判断はできないから
どちらもわからない状態じゃコーディングプラクティスの指摘だけになる
- clothPriceはどっからやってくるの? それでいいの?
- idを指定して複数の値が返されるようなデータ構造を使うべきなの?
- filter(id).first()よりfind(id)のほうがいいのでは?
- clothPriceが1000万件になっても問題ない?
- 俺の知ってるJavaScriptでは({ id })とは書けないけど?
- .first()はどこにどういう仕様で定義されてるの?
- idに対応する値がclothPriceに存在しなかった場合にどうなるの?
- テストコードも一緒に出してね >>99
書いてないことをいちいち質問したらきりがない
タブの数は2でいいの?とかまででてくるだろ
それらの質問は「問題ない」として扱えば
クソコードではないという答えが正しい お前ら(>>26 >>99)、国語の問題で「告白された○○君はなぜ顔を赤らめたのですか」と問われたら、「そんなのどこにも書いて無い!!もしかしたら唐辛子ガムを噛んでいたら予想以上に辛くて顔を真っ赤にしただけかもしれないだろ!!!」とか真顔で言い出しそうだな。
なんなんだこのスレは >>101
国語の問題と科学の問題は分けて考えないといけない
実際、顔を赤らめた理由は風邪だったかもしれないわけだ ここまで詭弁が病気を疑うレベル
論理学が発展しそうだ ここまで詭弁が酷いと病気を疑うレベル
論理学が発展しそうだ >>103
そんな滅茶苦茶な日本語を書くほど興奮してるのか?何が導火線に火を着けたんだw >>11はせっかくお題を出してくれたんだから建設的に行こうや
あら探ししてても成長が無いぞ
> getPrice(id)
IDから価格を引くようなことするんなら
DBMS側で全部管理しておいて
コード上にはDM操作API(※)の操作のみがあるほうがスッキリすると思う
※例えばJavaで言ったらJDBC呼び出し
> clothPrice
あとこれ
fooPrice, barPriceってどんどん増えてきそうだけど大丈夫か?って思う
データの中身を区別したあとのものを変数に入れるのが不気味
クエリのパラメータ側にあったほうが自然に思える
なるべく細かくないものから指摘した >>109
毎回DB読まなくてもいいようにマスタデータをメモリ上にロードしてるのかもしれない
const makeCloth = function(repository) {
const clothPrice = repository.load(…)
return {
getPrice(id) {
const price = clothPrice.find(id)
return price
}
}
}
const Cloth = makeCloth(repository)
Cloth.getPrice(id) 明示的にポインタ型で変数宣言したらauto&にしろって指摘受けたけど型推論にメリットってあるのか
聞くのも面倒だから言う通りに修正したけど 自分の場合、型推論は
var x = 何か
var y = x
var z = y
var a = z
...
「何か」の部分に扱う型の決定を委ねたい場合に使う
でも、「何か」に任せたら不具合になりかねない場合は使わない クソコードは存在しない。
クソプログラマがいるだけだ。 普通のコードを解釈と言う名の詭弁で棄損している
ケチを付けるためだけに延々と持論を展開したりな
すると普通のコードがゴミというレッテルを貼られる
そりゃあそうだ、そいつはアラを見つけて如何にしてレッテルを貼り付けるかだけに終始してるからだ
だからそいつには「ゴミ化」の手法がある 詭弁の特徴のガイドライン(ム板拡張版)
・理解できる事を理解できないフリをして論点をずらす
例)sin関数を使って計算してください→sinって何?w罪?w
・議題を否定して論点をずらす
例)アンパンマンは何故、バイキンマンに勝つのか→アンパンマンなんて存在しねーよバーカバーカ
・直感と感覚を否定し、理由が言えなければ事実ではないと決めつける
例)地震が怖かった→なんで地震が怖かったの?理由が言えないのなら怖いなんて嘘だ
このスレみてたら、こんなのが思い浮かんだ
議論をもとに戻す前に、二度とこんな書き込みすんなと警告しとく >>121
> 詭弁の特徴のガイドライン(ム板拡張版)
自分で勝手にオレオレルール作るなよw >>121
sin関数のくだり(>>43)は質問の仕方が悪かっただけでしょ sin関数のくだりは、明らかにMathオブジェクトだとわかるものを持ってきて
それと同一視させようとしてるから、>>43がアホなだけ ム板拡張版ってw
まぁ、時々、該当しそうな人を見かけるけどさw
それはさておき、酷いと感じるコードって
・仕様変更の度に膨大なプログラム変更の工数がかかるコード(人件費が無駄にかかる)
・全く品質の保証されないコード(保証するためのテストにかかる人件費が非現実的な価格になる)
これを満たしているコード全てじゃない?
これを満たすコードを分析していけば、答えが見つかりそう class Rest{
ログインメソッド
ユーザー情報取得メソッド
位置情報送信メソッド
位置情報送信成功通知メソッド
位置情報送信失敗通知メソッド
位置情報以外の情報送信成功通知メソッド
位置情報以外の情報送信失敗通知メソッド
HTTPエラー通知メソッド
private変数のgetterメソッド※全て定義
}
転職前の会社で見つけたAndroidクソコード
こんなコードを渡された時は転職を決意した 位置情報送信メソッド
と
位置情報送信成功通知メソッド
は
どういう関係なの? 後者は前者に渡されるコールバック関数? 位置情報とか必要な時だけは渡すが、終わったら絶対にアプリを落とすようにしてる >>130
1つのクラスでバックエンドAPIのスタブをまとめてるだけなら別にクソコードじゃない >>131
後者は前者を呼んだ後、HTTPレスポンスが返ると引数に渡された関数型が呼ばれる
前者の結果を非同期で受け取るイメージ httpレスポンス(Json)に1個、新しい項目を追加したらプログラムの書き直しが20箇所近くで発生してワロタ
無駄なラッパーによる地獄の変更作業 1万行のメソッド
巻物のような一本モノシーケンスで途中の幾多のエラーチェックの度にいろんなフラグを立てまくり、最終的に最後の行まで到達してから関数冒頭で行なったエラーチェック結果を参照、結局エラーでしたで終了
しかもユーティリティクラスのメソッド テストコードがないプロジェクトなんて見たことないレベル
まともにメンテナンスが続いてるソフトで探してみ 自社開発のパッケージ製品作ってんだけどテストコードって書いたことないんだよね
自分自身の学習コストはともかくメンバーの学習コストが怖くてね >>142
ちょっと前までテストコードの無い会社で働いてたけど、地獄だったよ
詳細設計の妥当性確認ができない点がヤバイ
上司やリーダーに単体テストをしていないことの危険性を説明したが...テストコード書いてもどうせ無駄になる的な事を言ってた
そもそも、そのテストコードが些細な変更で無駄になるような設計をしている事がマズイのだが...そこには触れてほしくないみたいな感じだったよ
地獄の住人は地獄しか知らない
逆に、テストコードを書く会社の人達も地獄を知らない でもなー単体テストの品質はどこで保証されるん?
テストコードもコードレビューするんけ? 業務によらね?
頻繁に仕様が変わっちまうのに変えるのが悪いって言われてもね
それで金もらってんだし悪いもクソもないんだよ3日後には変更履歴がすだれみたいに色付いてるのに
のんびりテストコードなんて書いてたって無意味は無意味だろ だいたいテストコードに限らずレビューするだろ
手動のテストでもレビューしなければ
お前何のテストした?
これらのテストをしました。スクショがテストした証拠です
いや、テストしたかどうかじゃなくて、そのテスト内容は問題ないのか?
しりません。テストしました。信じてください
ってなるやろが? >>150
仕様が頻繁に変わるからテストしてません
でリリースするつもり?
アホなの? ひょっとしてテスト項目レビューとかしたことないのか? テストコード書いたからOKとはならんよな
重要なのは仕様から見たテストコードが適切かどうかであって書きゃいいってもんじゃない >>152
いや別にテストコードなんか時間かかるやん
デバッガの計算後の値をエクセルにコピペするだけでええやん >>152
まあ、あるんじゃね?
うちも大学の研究室に納めるやつとかはバグあったらごめんね、連絡くれたら直すから
なんて契約のものもあるし
まあ向こうに直せるぐらいの能力持ってる人いるけど >>154
当たり前じゃん。ただしテストコードは実際に動くから、それでテストしたということがはっきり記録される
手動だと、テストしたつもりだけどなぁ。もう一回やったらうまくいきません。
テストのやり方を間違えてたかもテヘペロってなる。これが問題
ひどい場合だと、テストの手順に漏れがあったけど
もう一回やるのが面倒だからってキャプチャを作ってごまかしたりできる
テスト項目一覧とかはそれが正しくてもそのとおりにやったことに記録にはならないから
まあ動画にでも取ってりゃ実際に何をやったかは記録できるが
その記録ムービーを全部見なければ意味がないその時間もない 大抵書いた直後の一回だけやん必要なのって
そこでテストできていれば
とりあえずそれでええやん
コードにして引き釣り回す必要ってどこにあるん? >>155
> いや別にテストコードなんか時間かかるやん
手動のテストのほうが時間かかるだろ?
俺が個人で作ってるツールなんか1000を超えるテストを
数秒で終わらせることができるから
コードを修正するたびに全テストを実行できる
それと同じことをやってみ?できるんか? >>158
仕様が頻繁に変わるってことは、そのたびに全部のテストが必要ってことだぞ >>159
いや、テストコードの作成コストヤバイって
対象コードよりヤバイときのが大半やん >>160
だからデバッガの値のエクセル貼り付けで駄目な理由って何なん? >>162
エクセルに貼り付ける時にミスする可能性がある
エクセルに記録されるのは結果だけで
その手順が記録されない >>161
> 対象コードよりヤバイときのが大半やん
当たり前だろ。なんでその事がわからないのさ? てか、君が思ってるほど
無駄にコストかけられないんだよw
まあ、そこでやらなくても
結合とかシステムテストとかあるからさw
そんなに気張ってもらってもどうせ結合で出るようなの取れないし? それとその段階だと仕様でまずい部分も出るだろうし
あんまりガッツリテストやるよりさっさと出してもらったほうが嬉しいっつーか? >>165
無駄にコストをかけられないというのなら
手動テストを何回やればOKか見積もり立てられるの?
コードを修正したら全部テストいないといけないわけだ
修正した後にまたバグが見つかるかもしれないし
別のバグを入れてしまうかもしれない
そしたらまた全部テストやり直しだ
お前が言うようにコードよりもテストのほうが多くなるぐらいなのに
そのテストに時間がかかる方法を使っていたら
何度もテストできねーだろ >>168
え?システムテストをテストコードでできないでしょ >>169
あ、いや、お金にならなかったら今回で終わりなんで >>170
うーん、お前馬鹿なのかな?
自動化できない所が1個あるからって
全部、手動でやるとか馬鹿だよね
手動でやるのが大変だからそれを減らすって話を
してるってその時点で理解できてないの? >>171
じゃあもうお前の仕事なくなるじゃんw
自分でお金にならないような仕組みにしておいて
仕事なくすとかアホだなぁ >>172
うーん?聞いたことないなぁ?
んなとこまでテストコードなんて役に立たないでしょ >>174
本気で頭が悪そうw
「そんな所まで役に立たない」=「そんな所以外では役に立つ」
ってお前はいいました。 自分で「そんな所以外では役に立つ」って言ってるのに
気づいてなさそうなんだよなw あー、いや、作るコストまで含めたときはんなもんいらねーわ
どう考えてもテスト対象のコードより時間かけてテストコード作るってのは無意味だろ お前は実際にテスト対象のコードより時間かけて手動テストしてるだろーが
何を言ってるんだだこいつは? まさかテストコードを書く時間しかみてなくて
テストコードがなければ、テストする時間はゼロになるとでも思ってるのか?
テストする時間の話をしてるんだが?
テストコードを書けば限りなくテストする時間は短くなる
手動テストするとテストする時間が膨大になる
テストする回数は数回程度じゃ終わらない >>178
アホか
ステップ実行して値のプレビューウィンドウをエビデンスに貼るだけだわ
それ以上のもんいらんし >>180
いや、めっちゃ時間かかるやん
いらんわお前 >>181
それを1000回やったら何秒になる?w >>182
だから手動のテストだと、どれだけ時間がかかるかを
どうやって見積もるか聞いたんだが?
バグがあると修正してテストが必要だが、じゃあ何回テストをやれば終わるんだ?
全体のテストを全部手動でやったら1回のテストで数日は軽くかかるだろうが
見積もりの方法を聞いている テストコードで品質が上がるとか言ってる奴はそのクソみたいなテストコードのテストも書くのか?(笑) >>183
えー、テストコード1000個書くより早いやろw >>185
テストコードは人が見てコードレビューするので
テストコードのテストは不要 まず、時間が掛かりそうなのがテストコード自体の正当性の担保だよね
テストコード自体も時間がかかるけどここの説明がないのもね >>186
テストコード1000個書いて、1回あたり数秒でテストを終わらせる
手動で1000個のテストを数日かけてやって、バグがあったらまた数日かけて1000個のテストをやる
どっちが速いかって、明らかにテストコードじゃんw テストコード不要って言ってるやつは
手動のテストにかかる時間を考慮してないってのがわかったなw >>187
もうバリバリヤバイ時間かかりそうだなw
これは何納品するなら許される重厚感?w テスト作業の時間を減らすためにテストコードを書くってことを
理解してないってのが驚きだったわw >>191
手動のテストは時間がかかるよ
テスト仕様書を書く→テスト仕様書のレビューする
この時点でテストコードのレビューをしたほうが速いんだが
しかも手動テストの場合テスト仕様書のレビューがOKでも
実際に作業者がその仕様書通りにテストしてることが担保できない
テストしたけどちゃんとテストできてませんでしたってのが頻発する テストコード書かない奴にはどれだけ説明しても大抵無駄。
あいつら野菜毛嫌いするホリエみたいなもんだから。 テストコードが何故正しいと言えるのか?
こんなもの作る工数は含まれてないし
単体テストなんかやらんからな(笑)
やりたいならテスターが書けよ(笑)
結合やらやればどうせバグがあれば出るんだし、まさかとは思うけどテストコード教の奴は単体だけで品質が担保されてますとか言うのか?(笑)
コミットした時点で動作チェックぐらいしてるやろ
なんか最近の出来ない奴はテストコード以前に動かないものを平気でコミットするからな テストコードなかったらテスト作業に膨大な時間がかかるって話だろ?
テスト作業にかかる時間を無視するなよ >>196
> なんか最近の出来ない奴はテストコード以前に動かないものを平気でコミットするからな
開発にテストの時間を含めてないからでしょ?w >>197
比較するのもバカらしい
テストコード書いてる時間に5回はできそうだなw いつの間にか盛り上がっててワロタ
流れを読まずに言わせてもらうと
テストコードって趣味で書くわけじゃなくて、品質を維持するため或いは開発費の無駄を無くすために書くものなんだぜ テストコード頑張るぐらいなら結合テストで頑張ればいいじゃんどうせ画面絡みとかの方がバグ多いし >>201
テストコードを書けば、ビルドする度にテストが自動的に実行される
これが強み
手動で動作確認もやるけど、テストコードはあくまでのソースコードの質をチェックするための工程だし、目的が違う >>202
目的が違うのは分かるけどテストコード書くコストも結合テストにかかるコストも両方出せるないなら結合テスト頑張る、又はseleniumとかでそっちの自動化頑張った方がコスパいのかなと あと、俺は画面がらみのテストも自動化してるよ
タッチとかの操作をテストフレームワークを使ってコンピュータにやらせてる
だから、同じテストを手作業でやらずに済む
最終チェックは念の為手作業でやるけど、バグが直るまで何百回でも自動的にテストができるのが強み
まぁ、それができない事情も知らないことはないけどね...static上司...ウッ頭が >>201
俺もそう思う
結合で頑張ろうよね
こんなのそもそもスタンドアロンでなんか動くに決まってんじゃん >>203
不具合はなるべく早く見つけ出した方が修正が楽
もしも、手動テストで不具合が発覚しても原因分析に時間がかかってしまうから...そこが問題
一方、テストコードだと行レベルで不具合の箇所がわかる
まぁ、単体テストをすり抜けることもあるから手動チェックもするが... まぁ、現場判断が一番だ
今、テストコードを書いても無駄だと感じるのなら、その通りなのだろう
ただ、へぇー
そんな職場もあるんだー程度に参考にしてくれれば ごめん、Selenium無視してた
まぁ、ほとんどUIとフレームワークのコードしか書かないのならテストコードを書こうとしても何をテストすればいいんだよwってなるかも >>201
テストコードでできるようなことを、結合テストで全部やるとかアホだろw
結合テストにどれだけ時間がかかると思ってるんだ? >>205
> 結合で頑張ろうよね
なんで同じことを時間がかかる方法でやろうとするの?
時間泥棒が目的なわけ? >>199
> テストコード書いてる時間に5回はできそうだなw
テスト回数5回って少なすぎるだろw
5個のバグを1個ずつテストしたら終わりじゃんw > 結合やらやればどうせバグがあれば出るんだし
とか言ってるやつに単体テストの重要性を説いても無駄
何回か痛い目に会えばいいんだけど無職みたいだからそれも無理だしw >>212
いや、もし単体で動いたとしてもUIがどういうタイミングでどの頻度で欲しいのか?
よくわかってないんだよ
奴らバカだから
どうせ進捗率出せないと困るとか
中断とリスタートができないと駄目だとか
うっせからそんな決まらねぇぞどうせ 単体テストの重要性がわからなくても
テスト時間がどれくらいかかるかぐらいわかると思うがな
何日かけて総合テストしてますか? 全部結合テストでやればいいって言ってるやつは
結合テストも適当にしかしてないだろうな
数ヶ月かけて開発して、まとめて2、3回テストをするとかそんな感じだろ
時間がかかってそれ以上やれるわけがないんだから テスト対象がテスト済みのオープンソースライブラリだらけだったら、テストコードを書かないのはわかる
まぁ、ごりごりドメインロジックを記述する人がテストコードは不要とか言うと困るけど テストコードを書かないでいいなら
テストもしないでいいってことになるんだが? 開発者達とリーダー「単体テスト?テストコード?そんなのやっても開発費が無駄にかかる」
リーダー「開発者全員のコードを結合ッ!」
開発者達「ぐぁあああああ!!!」
リーダー「ど、どうした!?」
開発者達「4,294,967,295項目の不具合が発生した!しかも、どこのコードで不具合が起きてるのかよくわからん!!」
リーダー「お、お前ら落ち着け!」
リーダー「そ、そうだ...こんな時こそリファクタリングだ!」
リーダー「開発メンバーッ!開発メンバー全員集まれ!!」
リーダー「お前らッ!ここに4,294,967,295項目の不具合内容を書いた!各自、怪しいところを直せ!いいなッ!?」
リーダー「一斉に治すぞ...!いっせーのーせ...!」
開発者達「ぐぁあああああ!!今度はさっきと違う不具合が74,173,389,081ヶ所で発生したぁああああああああ!!」
リーダー「何やっとんじぁあああああ!!!お前らぁぁぁあああ!」
リーダー「ヤバイ!プロジェクトが炎上した!!」
全員「ぐぁぁぁあああああ!!」
→(チーン) ということを懸念してるからこのスレで単体テスト&テストコードの話で盛り上がったのだろう(たぶん) テストコードを書く時間 vs テストコードを書かない時間
で比べてるからアホなんだよなw
「テストコードがある場合のテストする時間」
vs
「テストコードがない場合のテストする時間」
テストする時間で比べないと意味がないだろ
テストコードがないと何千回(例 1日15回×3ヶ月)とかテストやってられない
テストコード書いて90%のバグを修正していれば
何日もかかるような手動テストは10%だけでよくなる
バグ修正時のエンバグも防げる まさかテストコード書く書かないでこれほど盛り上がるとは >>226
でそのテストコードは何故必ず正しいと言えるの?
そもそもまともなコード書ける人は単体なんかやる必要無いんだよね
その後のテストは結局手動やろ >>228
正しいと言えるかどうかじゃなくて、
やったテストがちゃんと再現できるのが重要
テストした?→やりました、ほら証拠のスクショがあります!
いやスクショあったって、手順間違えてたら意味ないでしょ
これを防ぐためにある
手動で数千もあるテストを間違いなく実行できるんか?
そしてそれを短時間で再実行できるんか?
手動だとテストに時間がかかってしょうがないと言ってるだろ >>230
エビデンス(エクセルにスクショ貼り付け)とってその後Gitに更新がなければそれで終わりや
実行なんてできる必要ないでどうせ時間が経ったらWindows Updateで動かんなるし >>230
そもそもそれWindows Update後も動くんか?
動かんとき、その動かん原因がWindows Updateの類やライブラリ更新の類なのか元から動かんのか
テストコードしか書いてないとき判別できるんか?
できないならスクショもとってもらうで >>226
だから
>> 結合やらやればどうせバグがあれば出るんだし
>とか言ってるやつに単体テストの重要性を説いても無駄
なのよ
リグレッションテスト?なにそれ?美味しいの?
って言う現場は実存する >>228
ネタで書いたであろう>>223をマジでやってそう ていうか単体テストコードを起こせる設計書や仕様書が重要なんであって
単体テストコードすらWindows Updateの前には無力よな
やっぱりドキュメントが重要なんだよ よくわかってないんだけど、windows updateが単体テストにどう関係してくるの? 単体テストをアプリかなんかと勘違いしてるんじゃねw
むしろWindows updateの時なんかに威力を発揮するんだけどね プラットフォームの仕様がwinアップデートで変わったせいで不具合がでるってこと?
もし、それが当たり前だと思っているのなら認識を改めた方がいいよ
単体テストしろ テストコード厨って結局そのテストコードが正しいか証明出来ない上に
書くのが当たり前と脳死しているだけというwww
マジでいらんから
その程度の脳だから底辺プログラマーから抜け出せないのだよw >>239
> テストコード厨って結局そのテストコードが正しいか証明出来ない上に
→算数のテスト問題は間違ってるかもしれないから算数のテストは無意味と同じ主張
> 書くのが当たり前と脳死しているだけというwww
→脳死してるのお前じゃね?
> マジでいらんから
→お前がいらん
> その程度の脳だから底辺プログラマーから抜け出せないのだよw
→お前だろ >>239
手動で実行してるテストのテストケースが正しいかどうかどうやって証明するの? >>231
> エビデンス(エクセルにスクショ貼り付け)とってその後Gitに更新がなければそれで終わりや
いつにエビデンス取るんだよ?
テストしたあとにエビデンス取るんだよな?
つまりテストでバグが出ることがあるだろ
そのバグを修正するんだから、エビデンス取った後に更新あるだろ
エビデンスとってgitに更新ないときは
テストですべてOKだったときしかありえないだろ
何いってんだお前 >>232
> そもそもそれWindows Update後も動くんか?
Windows Update後動かなかったらどうするんだよ?
修正しないのかよ?
テストする時に時間がかかるのは
全部を手動テストするのか
一部だけ手動テストして残りはテストコードによる自動再テストなのか
どっちのほうが時間かかるのか言ってみて
もちろん手動テストは全部スクショ取ってもらうで(笑) >>239
> テストコード厨って結局そのテストコードが正しいか証明出来ない上に
手動テストでテスト内容が正しいか証明する方法と同じ方法が使える
手動テストでテスト内容が正しいか証明する方法を言え 客:何もしてないのに動かなくなりました!
(アプデは勝手にされてても気付かないパターン) 今から手動テストしますので1ヶ月ぐらいかかります
なにせ手動ですからね。ふっふっふ >>241
>>244
たぶん、まともなテストコードが書けない...そもそも、まともなクラス設計ができないから、そういう疑問を抱くんじゃないかな
>>76で、クソコード事例として挙げたコードみたいなクラス設計とかしてそう こんな単体テスト仕様書厨が居るんだからそりゃ老害老害言われるよ
頼むから60代だと言ってくれ
同じ世代にこんなん居たら怒鳴り散らすわ 29だけど
誤解があったかもしれないから確認するけど、単体テスト仕様厨って何?
俺は必要だから単体テストの自動化を導入しているだけだけど、何か問題がありました? おまえらはすぐそうやって議題からすら遠ざかってしまうんよ
何かと何かの区別がつかない
手段が目的化してても平気 やっぱり単体テストはいいや
なんかやろうとか言ってた奴の手が一番遅いし >>240
底辺が大発狂(笑)
こういう奴ってテストコード(笑)書いているのに低品質なクソコードしか書けない上にバグっているのに
テストコードが通ったから大丈夫とか平気で言いそう(笑)
こういうゴミが残業して給料だけはいいんだよな
優秀な奴は残業なんかしないしな 手動テストってテストした結果が曖昧なんだよな
「ちゃんと動くこと」
複数ある結果を全て書いてるところなんて見たことない >>252
実際には「手動テストしたから大丈夫」なんだろ?
何が大丈夫なのか全くわからない
スクショだけじゃ、データベースの中身なんてわからんだろうに >>239
> テストコード厨って結局そのテストコードが正しいか証明出来ない
もちろん完全にはできない
ただ単体テストのコードって
・値の設定
・被テストコードの呼出
・戻り値等のチェック
だから個々のテストコードは短いし普通は分岐ロジックないからレビューでバグを摘出するのは容易
もちろんそれでもテスト項目数は膨大なのでテストコードのステップ数もバカにならないからバグは作り込まれる
ただ作り込まれたテストコードのバグの大半はテスト失敗の形で現れるので修正することでバグを排除できる それで手動テストで、やったテストが正しいか証明する方法はまだ?
スクショは正しいか証明する方法ではない 唐突に「底辺」って言葉を使う人は大抵、底辺コンプレックスを抱えている奴だから>>256に反論はできない
だって底辺だから >>258
底辺と自覚しているようで(笑)
そもそも単体テストなんていらないから
その後のテストで何もなければokだろ
証明とかテストという形式でやらないし残さないのだから(笑)
クソプログラマは必死でテストコード書いて通ってるから安心(笑)と思って後のテストでボコボコに指摘されそもそも仕様すらまともに理解してなかった(笑)ということが日常茶飯事やろ >>259
お前の底辺コンプレックスとお前の日常とかどうでもいいから質問に答えたら?
その後のテストが正しいことってどうやって証明するんだ?
>>228書いたのお前だろ? >>259
> その後のテストで何もなければokだろ
だからその後にやった手動テストが正しくテストしたと
どうやって証明するんだって聞いてるんだが? >>259
テストコードない人は、仕様をわかってないで完成しましたって言って
その後の手動テストで、ボロクソに言われるだろw > クソプログラマは必死でテストコード書いて通ってるから安心(笑)と思って後のテストでボコボコに指摘されそもそも仕様すらまともに理解してなかった(笑)ということが日常茶飯事やろ
修復不可能なクソコードを必死にテストしてそうだなコイツw
お前のコードは今更、単体テストしても手遅れだから諦めろ
他のお前らは、こんなふうにならないように最初からテストを自動化して、常に品質を保証できるようにしておけよ >>263
お前と違って結合やらその後のテストで俺が作ったものは、ほとんどバグなんて無いんだよ
要望がでて対応するくらい
お前の場合はスキルが低過ぎてバグだらけな上に仕様すら満たしてないものしか作れないだろ(笑)
こういう奴のことを俺はマイナスしか生産しないゴミとよんでる(笑) 今の所一箇所しか当たったことないな
単体テストの自動テスト
すげー無駄作業感すごかった >>264
底辺コンプレックス君、さっきからなんで>>260や>>261の質問を無視するの?
オブジェクト指向アンチのイキリ底辺君と同じ匂いがする >>266
なぜ、無駄だと思ったのか理由を述べてほしい
興味がある いいんじゃないの、優秀な人が揃っててバグがないならサイコーやん
超優秀なグーグルの技術者さんが単体テストツールとか作ってるのが現実だけどw >>268
ソースに基づいて機械的に書いてるだけでテストが何のテストにもなってないことが多かったとかじゃなくて
すべてのテストコードがそうなった
少なくとも網羅されてなくては意味がないので
複雑な分岐のあるコードを通すときは同じコードをテストコードに貼り付けてすべての取りうる値をループで回すように組んだ
switch caseのような文ね
それの更に上の階層のコードも
結局subルーチンの取りうる値が結局わからないというか数が多過ぎていちいち調べてられないので
サブルーチンのテストコードを貼り付けてさらに本ルーチンのテストを加える形で追加していった
こんな手順でやるので一番うえの階層に行く頃には超巨大スパゲッティテストコードができていた ホントテストが有用な説明を一切出来ないんだよなぁw
テストコード厨ってwww
頭が悪いからテスト書かないとボクのコードが正しいかわかりましぇーんwww
みたいなレベルなのかもしれんがw
こういう奴らって自分で動作確認しないでコミットしたりマジでしそうなんだよなぁw
普通はデバッグとかして大丈夫なものを上げるやろ
あ、デバッグの仕方やコールスタックとか全く知らんのかwwwwwwww
マイナスしか生産しない奴の場合、ちょっとパラメータ変えただけで動かないとか
エラー処理が無いとかそんなのばかりなんだよなw
それで、テストコードwも当然そのエラー処理に関するものは一切ないというwwwww wが多いほど余裕がなくて必死になってるように見えるぞ >>223で、すげー分かりやすい説明してるんだけどなぁ 芝の数は知能指数の低さを表す定期
池沼だから周りの指摘が理解できないのだろう
というかさ、単体テストができないレベルは論外なので他スレ逝ってください
お願いします 単体テストが必要ない→テスト済みのライブラリを使っており独自定義のモデルが無いから なら耳を傾けてやったが、流石に単体テストそのものの否定は論外
もし、これでテスト済みのフレームワークであるRailsやAndroid SDK、Django、Electron等を使ってたら嗤う
まぁ、フレームワークを一切使わない上、単体テストもしないとかだったらもっと嘲笑ってやるが >>270
> ソースに基づいて機械的に書いてるだけでテストが何のテストにもなってないことが多かったとかじゃなくて
> すべてのテストコードがそうなった
あなたはもう一人の頭おかしい人とは別人と見なして回答するけど、そもそもソースに基づいてテストケースを書くのが間違い
ソースを書く段階で既に正しいソースの答えが存在しないといけない
テストコードを書く→コード実装する→ビルドする→テストコードが自動で実行→コード修正する→ビルドする→テストコードが自動で実行
これを繰り返すから不具合の無いプログラムが書ける
もしも、これを否定するのなら、是非、もっと素晴らしい開発ノウハウを教えてほしいものだ
「俺がつくったものはほとんど不具合を出さない」とか、そういうイキリ情報だけ吐き出すのはどうでもいいから >>277
ソースがおかしかったらテストもおかしくなるの? >>278
本来の単体テストでは、ソースがおかしかったらテストもおかしくなってはならないのだが...ソースに基づきテストコードを書くと、ソースがおかしいとテストコードもおかしくなる可能性はある
まぁ、ソースに基づきの本質的な意味にもよるけど
文面と自分の過去の経験(単体テストの無意味化)から、書き直しながら設計をする「書き直しプログラミング」という良くない実装をしているんじゃないかなーとも感じられたけど、そこら辺は大丈夫? 自動テストの欠点は
1. 時間がかかりすぎる。自動テストの数千倍
2. 正しくテストをしたという証拠が残らない 間違えたw
手動テストの欠点は
1. 時間がかかりすぎる。自動テストの数千倍
2. 正しくテストをしたという証拠が残らない テストが要らんと言う人の意見のほうが聞きたい
テストが要ると言う人の意見には興味は無い
PGとSEの区別も仕様書と要件定義書の区別も
人月も工数計算も俺にとっては興味が無いから
どうやって人類はクソコードを避けていくのかの意見だけが聞きたい 頑張ればできる。みたいな根性論はいらんで
何千人も人を投入すればできる。みたいな人海戦術もいらんで >>282
「〜すればクソコードを避けられる」という意見があったとして
それが本当にクソコードを避けられるかどうか
どうやって確認するの? >>284
確認も何も
本当に避けられるかどうかがまずどうでもいい
もっと気楽にもっと率直に
「こういう糞を俺はこう避ける」の生の意見を聞きたい >>284
それを聞いてる
「手動テストすればクソコードを避けられる」という意見があったとして
それが本当にクソコードを避けられるかどうか
どうやって確認するの? クソコード避けたいなら、まずクソなプロジェクトを避けることだな 元は>>228の発言なんだろうけど、もう触れるのはやめようぜ
俺ももっと建設的な意見が聞きたいよ 結局手動テストで、正しくテストを行ったことを
担保する方法は出ないで終わりか
結果のスクショだけじゃ役に立たないからね コードがクソでもプログラマーがクソじゃなければ簡単に浄化できる
クソコードを避けようとするのは浄化スキルを持たないクソプログラマー 浄化が何を示すのかよくわからんけど単体テストコード無しでリファクタリングする勇気は俺にはないわ 俺もテストコードが無い上、手遅れなソースは直せる自身がないや
ほぼ作り直しになる未来しか見えない
テストコードを作れば済む話なら直せるけど、手遅れコードは無理 具体性皆無
どうやって浄化(リファクタリング?)するのだか
たったの2行から嫌な予感しかしないけど、一応聞いてやろう テストコードが無いなら書けばいいじゃん
クソコードを放置して新たなクソを付け足すのもクソプログラマーだな >>295
クソコード呼ばわりするレベルに至る時点で、テストコードを追加して直せばいいじゃんで済むレベルじゃないと思うのだが
まぁ、俺の想像するクソコードと貴方の想像するクソコードが乖離している可能性はあるけど >>295
テストコードがないのに、どうやって正しいテストがわかるのかね?
テストが本当に正しいという担保はどうやって取るのかずっと聞いてる >>300
仕様があればテストコードがなくても何が正しいかわかるよね?
仕様がないなら仕様を作ればいいよね?
何が正しいかを決めればいいだけ
できない言い訳ばかりしてクソにクソを積み重ねる君たちがクソコードの現況だから >>301
> 仕様があればテストコードがなくても何が正しいかわかるよね?
その仕様が正しいという担保は?
仕様が間違ってるなんてよくある話 はいはい、この話はやめやめ
頼むから【隔離】文字を入れた隔離スレで議論してくれ >>302
それは仕様書が間違ってるんであって仕様が間違ってるのとは違う
仕様書が間違ってると判断できる術があるなら何が正しいかわかるということ
結局テストと同じ話なんだけどあれこれ言い訳してクソを放置してるだけだよね 継続的イ...継続的な品質維持を破壊するようなコードを列挙していこうぜ
スレの趣旨的にはアンチパターンの研究が本来の目的だろうし
「構造が理解できないコード」とか
「責務を見失ったクラス」とか
「コピペしたような共通のコードが複数箇所あって、一部のソースを変更したら114,519箇所のコード書き直しが要求されるコード」とか クソコード:大概が自己満足のオナニーに起因する
自動テスト:出来ているやつはホトンド居ない、なぜなら自動テストで致命的な問題が
出てこないで後から発見されるから、セキュリティ・ホールも右に同じ
大概が自己満足のオナニー
だが自動テストは必要悪である。テスト原理主義者はカバレッジが100%で無ければ教義に反する異端者として
処分され、変数の代入さえテストを要求するが、致命的な問題が後から発見された場合にはテストすら破壊する
破壊的なリファクタリングを必要とし、テストコードの修正と二重苦の責めを負う >>305
視野が狭すぎてちょっと引く・・・
君みたいなプログラマーが継続的な品質維持を破壊する1番の原因 >>310が空気読んでなくて引く
どう考えても継続的イとか言いかけているあたりがで、荒らしを相手にすんなという意味なのにそれを解説しないと伝わらないことに引くわ
あっ言っちゃった >>295
テストコードがない時点でろくな仕様書がない可能性が高いと思う
コードからテストコードを作るのはめっちゃ大変だし テストコードはあって当たり前の前提でスレタイの話がしたかった... まぁ、意味のあるテストコードがあればクソコードと言われるレベルのものはなくなるけどさ、そうじゃなくて
クソコードと良いコードを知った上でテスト駆動やるべきだからこそ、クソコードの分析がしたかったよ... むしろ時代の流れは既にテストコードを「書く」という流れではなく、既に外部ソフトウェアを利用して
テストする段階に来ている。これは日本では「単体」しないのですか?と受け止めれれるがそうではない。
例えばテストしづらいソフトウェアにはLinux-KernelがあるがリリースはTorvaldsが十分に安定していると
「感じ」たときにリリースされる。ではLinuxは全くテストしていないですか?と思うがそうではない。
Kernelはテストコードが書きづらいため、様々な工夫がされる。外部ツールとして静的コード分析、
継続的インテグレーションツール、テスト自動化など様々なツールが使われる。もちろん単体テストもある。
現在のソフトウェアの主流において(ランダムな引数を渡す)ファジングテストツール(Fuzzer)なども
使われる。日本では一向に使われる気配は無い(誰も使わない・知らない企業独自のプロダクトのような
自動ツールが使われるのみである)ストレステストツールは何も知らない営業のアホが書いた根拠不明の
性能要件を満たすためのツールではないのである。フェイクデータを用意してテストするのが一部では
流行っているがそれでは網羅性はない。
例えば、1ファンクション/メソッド/スコープの変数の数、分岐の数、ループ、演算子の数の増えれば
増えるほど複雑度は増大しバグが発生しやすくなるはずである。そう言った統計的な手法を見ないで
宗教のようにテストコードばかりに注目するのは悪である。 >>312
むしろテストコードがないからこそ仕様書をきっちり更新してる可能性のほうが高いやろ
それにコードからテストコードを作るのはアンチパターンだぞ >>316
自分がクソコードだと思う例をあげて解説してみればいいんでない?
クソだと思ったものが意外とそうでもない場合もあればその逆もあるから 再利用性の無いクラスは糞
お前らもあるやろ?
アプリ全体で一箇所でしかインスタンス化されないようなクラス
邪魔だなぁと思いつつも
それを書く事で若干の整理と局所化が得られるから作っちゃうようなクラス >>317
嘘つくな(笑)
オープンソースでなんか証拠持ってきてみ >>321
いろいろ書いてますが、どの辺が嘘だと言っていますか?全て? >>318
> むしろテストコードがないからこそ仕様書をきっちり更新してる可能性のほうが高いやろ
ないない、世の中にはテストコードも仕様書もちゃんとしてる組織とテストコードもないし仕様書もちゃんとしてないクズ組織しかないと思っていい
> それにコードからテストコードを作るのはアンチパターンだぞ
そんなことはみんなわかってる
やむを得ずのケースな 仕様書をきっちり更新しているとして、
ちゃんとその通りにテストしたことを担保するのはどうすればいいの?
なんでこの質問に答えられないの? パーフェクトRuby on Rails には、
毎週モジュールを更新してテストするように書いてある
こういうのが出来るのは、Ruby/Rails コミッターのいるような技術力のある自社開発系だけ。
普通の会社は、できた後は放置するだけw
一切、更新しない
会社全体で、AWS の800資格と、
全12資格を持つ、ジェダイマスターが7人いる、クラスメソッドの動画を見ると、
全部、Lambda などのサーバーレス
自社で毎週、OS・アプリ・モジュールなどを更新してテストできる、会社は無い。
だから、AWS がOS・Aurora などのデータベースなどを更新する、サーバーレスを使う
サイボウズのkintone は、Kubernetes で毎日すべてのシステムを破棄して、作り直している。
これが究極のTDD・継続的インテグレーション
毎日、全システムをrolling update する >>323
>そんなことはみんなわかってる
>やむを得ずのケースな
やむを得ずのケースもやっちゃダメ
わかってるつもりでわかってないパターン >>324-325
まあ暇だから相手するけど、「その通りにテストしたことを担保する」っていうのはテストコードを
流しただけでは出来ませんよ。なぜならテストにもバグが介在するからです。イテレーションテストでも
反復回数が足りなければデグレします。極限値テストでもその中にバグを起こす特定値が無ければ
何の意味もありません。多くの人があんたの質問には答える価値があんまりないからじゃないかな?
「ソースを持ってきて」という表現方法もプログラミングに置き換えると非常に曖昧で解釈が不明です。
情報源のURLを提示しろ、元のオープンソース(笑)を証拠を持ってこいよ」どちらにも取れますが
プログラミングには向かない人だと思います。マウントポジション取りたいだけなら話は良く分かりますが
煽りたいだけであれば、幼稚園にでも通いなさい >>328
初っ端から論点をすり替えるなよ
もう一回やり直し
「手動テストでどうやってちゃんと書いてあるとおりにテストしたと担保するの?」 手動テストなんて1回も書いた事無いのに、すべての人があんた以外の同一人物じゃないんだから
あんたの脳内が正常に回ってるかテストしたほうがいいんじゃないですか? >>328
わかりやすく言えば
一人目「なんか手順を省いちゃった気がするけど、次の人がちゃんとやるだろうからヨシ」
二人目「正しく動いてない気がするけど、前の人がスクショとってOKって言ってるからヨシ」
三人目「前の二人がOKって言ってるからヨシ」
こんなたくさんのスクショあっても見る時間ねーよヨシ
これをどうやって防ぐの? >>330
論点をすり替えて答えた気になるなって言ってるだけ
「手動テストでどうやってちゃんと書いてあるとおりにテストしたと担保するの?」 こいつは相手にしちゃダメな人だったか、テスラでもトヨタでも自動運転のテストを公道でやってますが
担保するために何をやっているかと言えば色々な現実的な状況や環境、人の動きなど特殊な例外パターンを
実地でチェックシートを用意してテストしてます。コードを書いて自己満足しているわけではありません。
そもそも自動運転というか自動学習のようなモデルでは何が正しいのかを定義することさえ困難です
「論点をすり替えて答えた気」といっていますがあなたが何を「論点」としているのか、まったくもって
説明していません。とても残念な方だと思いますが同僚や仲間には迷惑をかけないようにしましょう >>333
だから論点すり替えるなって言ってるだろ
自動運転の話なんかしてないんだわ
「手動テストでどうやってちゃんと書いてあるとおりにテストしたと担保するの?」
これに答えればいい。色々やってます!は答えじゃないからな 「手動テストでどうやってちゃんと書いてあるとおりにテストしたと担保するの?」
「(手動テストでは)テスト項目を作成し、(完璧な)テスト要員はテスト(それに完全に従い)した結果を記録します」
この時、不良なテスト要員やテスト抜け、人間らしいヒューマンエラー許容しません。これはテストコードを
作成した場合についても同じです。だからあんたの脳内に大事にしまってある「論点」を語りなさい 自動テストだと手動テストでできない説明ができるって? >>335
> 「(手動テストでは)テスト項目を作成し、(完璧な)テスト要員はテスト(それに完全に従い)した結果を記録します」
完璧なテスト要員なんて存在しません。
書いてあるテスト項目通りに、人間が作業したことを担保(記録)する方法を聞いています。
「完璧に記録するにはどうすればいいですか?」という質問に対して
「結果を記録します」は答えになっていません。
それが質問です。 >>336
> 自動テストだと手動テストでできない説明ができるって?
今の論点は「テスト項目通りに間違いなくテストを行ったか?」です
人間がやる以上、間違い(ミス)すること作業することはできないので、それを防ぐのが自動テストです。
もし手動テストでやる場合「書いてあるテスト項目に従い人間が間違いなく行動する」
または「人間の行動を後から再現できるように完璧に記録する」のどちらかが必要になるはずです
これだけやって、ようやく自動テストと同等の信頼性が得られますが、
それでも実行速度(テスト実行時間)はコンピュータにはかないません。 人間がやる以上、間違い(ミス)することなく作業することはできないので、それを防ぐのが自動テストです。 やっぱマウントポジション取りたいストレスだらけの無能ハゲやったか
手動テストって上の方でも書いてるけど、ほんまもんの気狂いだなww
同様にテストコードも完璧なテストなんてありませんし書けません >>341
いやちゃんと>>339に書いたんだからレスしろよ
マウント取るんじゃなくて、お前がマウント取られに行ってるじゃんw
言い返す言葉はなにもない。だがレスだけはしたいんだって > 同様にテストコードも完璧なテストなんてありませんし書けません
だーれも完璧なテストがあるなんて言ってない
完璧なテストがない=必ず後で修正が入るからこそ、
何度も高速に同じテストを実行できることが重要なんだわ 何度も高速に同じテストを実行できることが重要だから
それを人間の手動テストでどうやるの?と聞いてる
無理。だから自動テストが重要
って答えになるやろが? は?全く苦労に見合った見返りが見えないんだが?
あとサブルーチンの戻り値で分岐しまくるコードが入りまくってるときに
テストコードってどうやって書くの?
戻り値を意図的に制御できないじゃん? >>345
> あとサブルーチンの戻り値で分岐しまくるコードが入りまくってるときに
手動テストってどうやるの?
それを書くのが先だ 手動テスト vs 自動テストで
ドロー(引き分け)になる項目を持ってきて
勝てると思ってるんだろうか?
手動テストは、高速に同じテストを何度も実行できない
手動テストは、正しくテストをしたという担保がない
この項目で負けてるだろうが
そこに引き分け項目持ってきても勝てねーよw なんかもう、テストコード書く書かないのスレ立ててそこでやれば?いつまでこのネタ引っ張るの? >>342
思い込みのハゲしい人ですね。最初からいいますよ?私は自動テストも手動テストも否定してない。まず上の方の
人たちと同一人物視をやめなさい。あなたは「担保するの」と書いていて「速度」のことなんて、ID上は今まで
1回も言っていません。ちゃんと質問するなら
「手動テスト”だけ”で仕様通りにテストを行い、変更があったら”同じテストを繰り返した”と
担保して、素早いテストの繰り返しによる開発を継続するのでしょうか?」ですよね
もちろん手動テスト”だけ”でも時間と費用があれば無理ではありませんが、当然時間がかかります。
この質問であれば、「素早い開発」の要件を満たせないのでテストコードによるイテレーションテスト「も」
必要になります。「無理」というのはあんたの頭の中でできてるストーリーに無理ができているだけです。
「嘘つくな(笑) オープンソースでなんか証拠持ってきてみ 」
このような会話は5chだから通用しますが、現実世界ではあなたは爪弾きでしょう。何を言いたいのか
サッパリ分かりません。日本語が不自由な方かと思いましたが、思考が不自由な方だ
1.聞きたいことが質問にまとめられていない
2.聞きたいことを回答する人を馬鹿にして遊んでる
3.最初から(自分だけの)結論ありきで語っている
また頻繁に変更が入るコードで何度も同じテストを実行することはありますが、変更が入らないコードでは
同じテストを実行する事は無駄です。一部のツールはテスト結果で省略すらします。
自動vs手動という考えはあんたの頭の中にしかない初めて披露された考えです。この両者は対立構造では
ありませんし、ましてや勝つとか負けるとかどーでもいい事です。それがマウントと言っているのですよ 結局の所、手動テストは時間がかかって
信頼性もないってことだろ >>353
それはシートベルトでは衝突事故は防げないだろ論法?w
手動テストは、高速に同じテストを何度も実行できない
手動テストは、正しくテストをしたという担保がない
自動テストで解決できてるだろ >>348
ごめんね、引数が100個あればクソコードかと言えば、そうでもなく可変引数展開するような言語では
配列渡しになったりするので「テストコード」も「開発手法」もここのタイトルだと何も関係ないね 自動テストってコードありきで作っちゃったゴミカステストしか見たことないよ >>356
それをいうなら、
「自動テストは、正しくテストをしたという担保があるの?」
だよね。
コンピュータは書いたとおりに動く
だから、テストコードで書いたテストを
正しく行ったことが担保されている
それに対して人間は、いくらテスト指示書にこうしろと
書いてあったとしても間違えることがあるしサボることもある
なんかおかしい気がしたけど気づかずにスクショ取ってOKと記入してしまうこともある
だがあとになって調べようとしても、その時のテストが
間違っていたり手抜きしたことがわからない >>357
OSSなら基本的にテストファーストはしてないね、プロトタイプ作って0.1にバージョニングして
後からテストコード追加ですね。業務コードだとTDDを最初からやろうとする企業もあるけどさ
作ったテストが要件や機能に合わなくなることはあるあるネタだ >>359
普通、一つのコミットの中にテストコードと実装コードが含まれるけど
テストファーストしてないという根拠は?
後からテストコードが追加されたことがあるからといって、
それはテストファーストしてない理由にはならない >>360
何か言い返せよw
言い返せないのにレスだけするから恥をかくんだぞw >>362
だってないもん
単体テストなんか仕様書ビルドしてできたわけでもねーのにそんな正しさがいきなり入る前提なのが気が狂ってる バカが作ればバカなりな正常が定義されるだけだろ
夢みんな >>363
ああ「正しさ」だけ書いて論点をすり替えようとしてるのねw
俺がずーっと言ってるのは
「手動テストでどうやってちゃんと書いてあるとおりにテストしたと担保するの?」 手動テストではいくらテスト項目が書いてあったからって
そのとおり正しくテストしたという保証がまったくないんだわ
人間は間違えることがあるから >>365
いや、それ自動テストと手動テストに違いないじゃん
自動テストの間違ったテストコードで正常になっちゃったも
手動テストで間違ったエビデンスのとり方して正常になっちゃったも
違いねーし
頭おかしんちゃう?お前 >>367
自動テストの間違ったテストコードで正常になっちゃった場合は
テストコードを見れば、テストコードが間違っていたとあとからわかる
手動テストでは、テスト作業が間違っていたのかどうかもわからない
あとから見た所で、作業内容自体までスクショ取ってないから。
それとも監視カメラで作業員の行動を動画で撮って
あとからその動画を眺めるつもりか?
コンビニの監視カメラの映像を確認するように
一体何時間時間がかかると思ってるんだ >>368
え?わかるやり方もあるでしょ?バカなん? だから手動テストでは
もう一回やったら再現できませんでしたとか
ちゃんとテストしたのに実際は動きませんでした
とか発生した時に、その原因の追求ができない
うごくからヨシっていう
適当な仕事をしてる >>369
その分るやり方を書けよw
お前議論できねーな
言い返す言葉がないならレスしなくていいんだぞ? >>368
あとテストコード見たってわかんないよ
仕様書見るんでしょ?
それは手動テストだって同じだよね? >>370
は?
自動テストだって同じでしょ?
デバイス絡みがコードだけで動くわけ無いじゃん >>372
テストコードみれば、実際にやったテストがわかるだろ?
馬鹿なのか?
手動テストでは、何が書いてあっても
実際にどういうテストをやったかがわからない
人間が間違えたかもしれないって話をしてるのだが
ついてこれてる? 俺がつないであるプリンタを踵落としで叩き割ったらもう動かないよね? >>373
> 自動テストだって同じでしょ?
なにが同じなんだよ?
自動テストなら実際にやったテストがわかる or 手動テストではわからない
って話をしてるんだが、ついてこれてる? >>363
「普通、一つのコミットの中にテストコードと実装コードが含まれる」間違い、0点です。
OSSでもクローズドソースでも普通はコミットの中には、偏在が生じます。TDD推進や原理主義者では
テストコード比率は80%だと主張する方もいます。一般的にOSSではテストコードがほとんどない方が
多いです。もちろんこれの正当性を主張するわけでもありませんが、何故そうなるのかと言えば多くが
個人開発だからです。いい加減な自動テストが含まれていて、それをテストファーストと主張するなら
主張すればいいですよw >>375
その点テストコードは、バージョン管理するから
動いていたものが動かなくなった原因までしっかり記録される >>374
は?それが正しいかどうかは仕様書見ないとわからないだろ?
仕様書とテストコードとコード見るんやな
なんか無駄じゃねぇの?
仕様書とコード見るだけでよくね?
なんでテストコード書く必要あったんだっけ? そもそも仕様書とコードを見比べてどうして正しいかわからないんだっけ? >>377
> 「普通、一つのコミットの中にテストコードと実装コードが含まれる」間違い、0点です。
ん?証拠を持ってくればいいわけ?
例なんていくらでもあるけど、一つのコミットの中にテストコードと実装コードが含まれてます。
https://github.com/facebook/react/pull/20813/files >>379
いい加減「正しい」の意味をすり替えるのやめろ
「書いてあるとおりに正しくテストした」ことが
自動テストならわかるって言ってるだろ >>382
そうだよね。そうやって嘘を付くしかないもんねw >>383
え?それは仕様書通りって意味でないとビジネスで役に立たないよね? 自動テストでどうやって仕様書通りかどうかわかるの? お前のテストコードがクソコードだったら終わりじゃん さっきからなんの正しい説明にもなってないじゃん
自動テストも手動テストも仕様書通りかどうかテストすんだろ
何度も言わせるなクソが >>381
js系の人ですか(笑)reactの場合、ver17.0.0になってもissueのOpen数が500あります。明らかにデグレを
生んでいますが、issueのClose数も1万近くです。テストが完璧だとどうやって担保しているでしょうか?(笑)
リリース数は数えたら137回です >>381
ん?ショーコですか?誰もそんな事言ってないと思いますが?w
参考までにそのコミットの1つ前にはテストコードが含まれてませんが?w2つ前も含まれてませんw
対象コードはCIのコードですがwよくあるFix typo も多くはテストコードとやらは含まれませんね。 >>387
”「書いてあるとおりに正しくテストしたことが自動テストならわかる」って言ってるだろ ”
上の方を見ても1回もそんな事はいってませんね・・・それと、日本語の区切りがおかしいので
直しておきました。「書いてあるとおりに正しくテストした」これを一言で言えばオナニー猿です。
逃げてしまったのか >>327
はいはい、どうしようもない現実を知らないとか幸福な人生で何よりですw テストの内容(文章 or コード)が、仕様書通りかは、手動テストも自動テストもわからない
この勝負はドロー(引き分け)
テストの内容(文章 or コード)が仕様書通り正しいと仮定する
手動テストは、テストの内容を正しく実行したとは限らないが
自動テストであれば、テストの内容を正しく実行したことが保証される
なぜならコードは書いたとおりに動くから
この勝負は自動テストの勝ち >>393
だからテストコードのテストを行わなければ完結しない
ということだね >>394
テストコードのテストというのは意味不明
お前の理屈だと、テストのテストが必要になるだろ
テストのテストのテストも必要になるだろ
アホらしい
テストコードに必要なのはコードレビュー
テストコードのレビューが必要なように
テスト実行手順書のレビューも必要
この勝負はドロー
そしてテストコードのレビューがOKだった場合
書いてあるテストコードの通りテストは行われるが
テスト実行手順書のレビューがOKでも
手動でテストすると、そのとおりにテストが行われるとは限らない
ということで、手動テストの負けになる 俺が折角>>305で流れ戻してやろうと思ったのに馬鹿を刺激すんな
もう手遅れだけど
馬鹿は詭弁を並べて相手にならねーから会話するな
馬鹿と会話しようとするから疲れる
テキトーに流しとけ 推奨するやつの頭が悪いから
テストの自動化自体も悪く見えるパターンだなこれ
ルビきちパターン >>1や>>305の中身がペラいから欲しい反応を貰えないだけやろ >>320の"再利用性の無いクラスは糞"でトライしてみたんだろうけどペラすぎて役に立たないから誰も反応しない そう?
むしろさり気なくanemic domainの話をしてる奴らがいたから、良スレの予感したのに一人の馬鹿が荒らした挙げ句に単体テストの必要性の有無とかいう低レベルスレになってがっかりしてる俺がここにいるけど?
内容がペラいってか、本当の経験者なら察せるし、一言二言から深堀すればいいのに 単体テストの話で流れるせいで誰も手が出せん
何なら、隔離スレいる? ペラいとか言うけど、そもそも>>320の言ってることわかる?
他人を批判する前に貴方の実力チェックがしたいのだが、なんで再利用できないクラスがクソなのかわかる? >>406
>なんで再利用できないクラスがクソなのかわかる?
その考え方がペラいって言ってんのにわかんないやつだな
これ全部同一人物じゃなきゃありえんな >>407
その考えとは?わからないから教えてくれや >>407
まさか再利用できないクラスが普通だとか思ってる?流石にそれはレベル低すぎてその発想はなかったけど、そういうこと?
たのむから伝わるように文章を書いてくれ
お前の文章こそ情報量がない
あるのは相手にマウントを取ろうとする意気込みだけ >>408
一般常識を持たず
自分の半径5cmの出来事の一側面だけを見て
コンテキストを無視して一般化しようとする考え方 >>410
一般常識?ID変えながら、こんな時間に2chやる俺らが?w
発言元からコンテキスト境界を読み取れずに他人を批判するお前こそ薄ペラ野郎だわ まず再利用性とは何かをまるで理解していない
アプリ全体の一箇所でしかインスタンス化されないからといって再利用性が無いとは言わない
再利用には様々な形があるにもかかわらずインスタンス化される箇所の数という著しく狭い一つの側面だけしか見えていない
そもそもインスタンス化される箇所の数と、そのクラスがクソかどうかとは何の関係も無い
ないない尽くし クラスの再利用性の度合いが低ければそのクラスがクソかと言えば全くそんなことは無い
クソがどうかは再利用性の度合いとは関係ない
クラスベースのOO言語を使ってるならどんなアプリでそのアプリ特有の処理はそのアプリの用途に特化したクラスで実現する
当然、一般的に言うところのクラスとしての再利用性は無い
それだけでクソだと言い出したらGoogleが作るものでもMSが作るものでも世の中のアプリはほぼ全てクソの塊 >>413
> クラスベースのOO言語を使ってるならどんなアプリでそのアプリ特有の処理はそのアプリの用途に特化したクラスで実現する
> 当然、一般的に言うところのクラスとしての再利用性は無い
そんなの当たり前じゃん
殺人事件が起きて殺人は駄目だと訴える遺族の前で死刑囚は殺してはいけないと言うのか?とか言い出すようなもの
それくらい察してやれ って、アプリ特有ってまさか業務特有の処理とかじゃないよな?
フレームワーク特有だったらわかるけど 組込してるけど、USBクラス、SDカードクラスのインスタンス化が封じられていて、しかもUSBクラスの中にMCUのポートに依存する処理が書かれてたらクソだと思う
なんで、回路構成変わるたびにいちいちUSBのロジックを実装しなきゃなんねーんだよクソがって言いたい >>417
なんで修正しないの?
staticなメソッドとメンバーのみを使うとしても必要なところを入れ替えるように作れるでしょ >>418
文面だと伝わりづらいと思うからコード書くけど
USBポートが2ポートある場合
USB usb1 = new USB(port1)
USB usb2 = new USB(port2)
で済むのに、インスタンス化を封じられたら
USB1 usb1 = USB1.getSingleton()
USB2 usb2 = USB2.getSingleton()
みたいにUSB1クラス、USB2クラスを自分で定義しないといけなくなるからやめた方がいいよって話
なぜかというと、USB1と2に同じコードを書かないといけないし、もし、USBの処理に仕様変更が生じると、今後はUSB1と2を変更しないと駄目だから
面倒でしょ?2個程度なら...という油断は命取り
>>419
ご自由に >>395
それで?
仕様書通りであると説明できたん? >>421
何度も言ってるが
仕様書通りのテストコード(or テスト手順書)になってるかはレビューで確認する
その点ではテストコードも手動テストの手順書も差はない
差があるのは
テストコードの通りにコンピュータが実行したか(実行したと保証される)
テスト手順書のとおりに人間が実行したか(実行したと保証されない)
この点で、手動テストは劣っている
>>421
なにか言い返す言葉があるならどうぞ >>420
インスタンス化しとるやーん
USBに共通する処理をコンポジションで切り出してれば1箇所の修正で済むよね
シングルトンにするメリットがある前提ならそのコードの形だけでクソコードだとは思わないな >>422
え?コードレビューの他にテストコードのレビューやるの?
何がよかったんだっけ? 反応してくれるやつがおっただけでも嬉しいわ(ヽ´ω`) >>412
ワイはそれをあると言っている
インスタンス化された個数こそがそのクラスの価値だと言っている
抽象クラスやインタフェースについてはこの主張では扱わない
アホらしいと思うのなら聞き流してくれていい >>404
単体テストがどうのこうのってもう心底どうでもいいよなw
俺もそれの結論について興味が持てない >>420
インスタンス化を封じて苦しくなってくるのあるよなw
最初のうちはそれでよさそうに思えるんだけどね >>426
インスタンス化された個数と
インスタンス化される箇所の個数は全然違うと思うんだが?
コード上では1箇所でしかインスタンス化されないがリクエスト毎にインスタンス生成されるクラスとか ごめんね下のほうの意味が本来言いたかったこと
実行時のことは考えず単にコード上での評価 >>430
そうすると何か特殊な前提を置いてるかインスタンス化する箇所という言葉の定義が全く違うかだな
インスタンス化がnewしたりファクトリメソッドを呼ぶ事だとしたら
Webでもモバイルでもデスクトップでもコード上の1箇所でしかインスタンス化されないクラスが結構な割合で存在するほうが普通
わかりやすいところで言えばコントローラクラスやアプリケーションクラス >>420
USB io = USB.create(port1)で物理的なUSBが重複する可能性があり、排他制御が必要ならそうすると思うよ。
USB io = new USB(port1)で個別にインスタンス作って、マルチスレッド・マルチプロセスで動くなら必要ないけど
自然的なコンストラクタでメンバー変数は初期化されることに意味があるだけで、それ以外の構築初期化を
しようとしたらファクトリーメソッドが必要になる。もちろんnewの後にメンバーメソッドを毎回自分で
呼び出して初期化しても良いわけだけど、ま、言いたいことは確かに安易な設計でシングルインスタンスは
避けるべきだけど、近代的なクラス型の言語によるメンバーの隠蔽とファクトリーメソッドは無関係 >>424
> え?コードレビューの他にテストコードのレビューやるの?
当たり前だろ
お前コードレビューをするのは当然として、
お前、テスト手順書のレビューしないのか?
だからお前がやったテストはいつも抜けがあるんだろうがw
すいません、テストが漏れてましたじゃねーよ、いっつもいっつも >>433
じゃあテストコードのテストもいるよね? >>434
お前の真似をすると
テスト手順書のテストもいるよね?
当然、答えは「はい」になるよねw >>434
いらない、レビューで足りる
理由は>>255に書いてある >>435
え?設計書のテストが?
テストコードってもんにしたから特有の手順が増えちゃってるんだろ 設計書
→コード→テスト
→テスト手順書→レビュー
で済むはずが
設計書
→コード→テスト
→テストコード
→レビュー
→テスト
になってるんだろ
テストコードがソースコードである以上テストしないわけにはいかんだろ >>423
伝わりにくくてすまん
紛らわしい言い方だったか
>>428
分かってくれてありがとう クソ言語とは
PHP、Swift、Python
JavaScriptも昔はかなりクソだったが完全に復活した
Obj-CはSwiftに取って代わられることは無かった、コード効率が良すぎる >>438
レビューのあとの「テスト」ってビルドボタンを押す度に走るテストのこと?
それとと、gitとかにcommitする度に走るテストのこと?
作業をカテゴリ分けすると増えているように見えるだけで、作業量は減っているように見えるが
途中からこのスレ来たから、流れがわかっていない >>438
あと、よく見ると手順が間違ってる
> 設計書
→コード
→テストコード
→レビュー(?)
→テスト(自動化)
if 自動化のテストにすべて合格したら
→結合テスト以降のテスト
だよ >>438
> 設計書
> →コード→テスト
> →テスト手順書→レビュー
もうこの時点で意味不明w
普通は
1) 設計書 ⇒ コード(⇒ レビュー)
2) 設計書 ⇒ テスト手順書 ⇒ レビュー
3) 手動テスト(工数大)
だろ
で、自動テストなら
1) 設計書 ⇒ コード
2) 設計書 ⇒ テストコード ⇒ レビュー
3) 自動テスト(工数ほぼ "0")
要するにテストコードは計算機に対するテスト手順書だから手間は変わらんよ
むしろプログラマーだと仕様書よりコード書く方が楽と思う奴もいっぱいいるしw
あとどっちもテストと書いてるけど手動テストと自動テストでは工数が全く違うから同じ「テスト」という言葉でごまかすなよ
なおテストコードはデバッグが必要と主張するなら>>255にちゃんと反論しろ テストコードは暇なら書くレベルの価値しかない。
テスト仕様書に漏れがない事が最も重要。
実データで実動作で検証するのが納品条件。 実機繋がってないと無意味なテストにしかならんの多いのよな >>438
> テストコードがソースコードである以上テストしないわけにはいかんだろ
だからいらない
馬鹿なのかな?
テストコードのテストなんてお前したことないだろ?
世の中の誰もしたことないわw
そんなものありはしないんだから
> 設計書
> →コード→テスト
> →テスト手順書→レビュー
> で済むはずが
だめでしょ?レビューが正しいかをテストしなきゃwww >>448
まて、そのレビューは本当に大丈夫なのか?
レビューが適切かどうかも検証しよう(名案) 間違えた
レビューが正しいかのテストが適切かどうかもテストしよう
だった レビューした結果もちゃんと記録しないといけないからな
レビューの結果をドキュメントとして残すなら
そのドキュメントのレビューも必要になる
当然の帰結だ 単体テストの範囲でこんな凝った仕組みいらんよ
一番やりたい結合は今度セッティングのが時間かかるんで 「結合テストはすごく時間がかかる」
え?なんで?
「単体テストでやるべきことも
全部結合テストで手動でテストやってるからさ!」
↑馬鹿じゃね? 敢えて皆と同じくらいテストコードの書き方を知ってる自分が弁護するけど
class クソクラス
頻繁に仕様が変わるメソッド
クソコード
不具合が生じると仕様が変わるメソッド
クソコード
思考停止でプライベート変数のgetter
思考停止の変数リターン
思考停止でプライベート変数のsetter
思考停止の変数代入
みたいなクラスを単体テストするところを考えてみよう
他の皆の無駄じゃない主張は疑いもなく事実だろうけど、テストコードは無駄という主張はある意味では事実なのだと思う
これは...扱うコードの質の違いが生んだ悲劇
そう、事故だったんだ
テストコード厨呼ばわりについては...うん(諦め) >>454
テストコードが無駄なケースでは
手動テストも無駄になる
頻繁に仕様が変わるメソッドがあったとして
手動テストをしたら時間の節約になるとでも?
ああ、テストしないってことね(笑)
プロの仕事じゃねーよ >>455
> ああ、テストしないってことね(笑)
たぶん、彼の言う手動テストは俺らの言う「テストしない」のレベルだと思う
ややこしいのは主張している本人は「テストしたつもり」になっている点 >>455
TDD前提で語ってた
クソコードのテストコードを書こうとしたら、直ぐに設計は是正されないとだぞ まず、クラス設計する際にテストコードみたいなコードを書いたりしない?
クラス利用者から見たクラスの使い勝手を確かめる意味で
で、何度も試行錯誤して、素晴らしいクラスモデルができたらテストコードを書いて、その後、実装をして...
この作業プロセスができていないから単体テストは無駄だという主張が生まれたと思っていた >>458
abstractクラス<T>から頭の中で書いてるよ、それで十分
テストコードが必要なケースは、mockableAPIから全ケース流す時くらい、実データだとめんどくさいから >>456
そうなんだよな。テストしたつもりになってるんだろうなって思うよ
「手動テストでテストできる!
リリース前に、人を大量に集めて人海戦術でテストするんだ!」
なんて言われたら、バグ出たらどうするの?って聞きたくなる
「バグを直して(そこだけ)テストするだけじゃないか!」っていうだろうな
たぶん、そこだけしかテストして無くて全体の再テストをしないだろう
最後にもう一回テストすればいい? いやいやバグはなくならないんだから
最後なんてありえないだろ
時間がないときは小さいバグは運用でカバーとかいってリリースするんだろ?
そしてあとから修正するんだろ?再テストするだろ?
何回小さいバグを修正する?そのたびに人を大量に集めて人海戦術でテストする?
どんだけ時間とコストがかかるんだよ?
たぶんその答えは
「小さいバグの修正なんだから、たぶん他に影響してないはずだ。動いていればヨシっ」
なんだろ?
プロの仕事じゃねーよ
自動テストしてるプロジェクトでは、一日数回のリリースと全テストを行うことだってある
このスピードに手動テストでは追いつけない 自動テストじゃほとんど何もできない。
日本語/フォント間違えてるとか色違うとかカクカク動くとか。 しばらくぶりに見たプロジェクトの自動テストが通らないことぐらい
開発現場じゃ常識なんだよ!(パプリカ:DCmini) >>461
> 日本語/フォント間違えてるとか色違う
それはクリティカルなバグじゃないですねw
正しくデータが処理されることをテストしたことありますか?
どうやってやりましたか? >>462
> しばらくぶりに見たプロジェクトの自動テストが通らないことぐらい
それを手動テストして動いたら面白いなw
まあよくあるよね。本当はバグってるのに
表面上は動いてるように見えちゃう
だから手動テストは駄目なんだよ >>463
直接変数に値入れればいいじゃん
コード変わったらまたやる
毎回テスト回すとか無駄 直接変数に値入れるとは?
まさかデバッガ経由でやってんの?
デバッガを使うと挙動が変わるからテストにならない 客を自動テストして欲しいわ、言うことコロコロ変わるからw >>468
mockやデバッガーでどうやって
何千ものテスト項目を実行するの?w 要件を確定させずレスバってプログラマどころじゃないな
しかも平日の昼間から真っ赤ってまともじゃないの自己紹介しているようなもの 自分はアプリ開発と組み込み開発の経験があるけど、Web開発って単体テストやらんの?
Webは、Python+Django、node、古いPHPの入門書を読んだ程度にしか触れないからリアル開発事情に興味がある(開発経験が無い) web開発ってユーザーが入力欄に何を入れてくるかの組み合わせが
膨大になるから、テストも困難になるな。 単体テストをやらないのはSIerだよ
ああ、いや、エクセルに単体テスト報告書を書くとか
そういう意味でなら単体テストをやってるよw
テストコードを書かない手動テストのことをSIerは単体テストって言ってる ああ、わかりやすいのが見つかった。これがSIerのいう単体テスト(手動テスト)
【Web系最高って言うけと゛本当なの?】siの5次請けから離脱したエンシ゛ニアか゛話してみた
https://www.slideshare.net/yuukinakajima794/websi-67526868#8
8. てすとほうほう winshot、エクセル、人間 スクショ一枚取り忘れただけでも
テストがやり直しになるプレッシャーと進捗表.xls との戦い テスト結果.xlsが
不要なのでめんどくささがない 開発者が目で見ておk
https://www.slideshare.net/yuukinakajima794/websi-67526868#12
12. ソース修正とかテスト バグが出た!→単体テスト障害報告書.xlsを書く→
必要に応じて単 体テストケース.xlsを直す→上司にお話して単体テスト障害報告
書を確認して貰う→テストをする バグが出た!→直す→必要に応じてテストパターン を
増やす→テストする あまりに、あまりにめんどくさい、進捗表.xlsには障害数も書くのでバグゼロは困るらしい 田中勇←口だけテストコード大好き変態老人
技術力はゼロwww >>476
まあそういうテストが必要なフェイズは確かにあるが、その前に自動テスト入れるべきではある。 >>478
どちらにしろ手動テストするなら
全部、手動テストでやっても同じ
テスト時間も変わらない
と思ってるらしいよw >>473
Ruby on Rails では、minitest/RSpec という2種類のテストフレームワークがある。
単体/システムテストの2つある
Rails 6 からは、環境を丸ごとコピーして、並列テストもできる
TDD では、テストが仕様書。
Excel で管理したりしない >>454
それ扱うコードの質の違いが問題じゃないだろ
テストコードの変更が必要になるのは「頻繁に仕様が変わる」のが原因で当然手動テストでもテスト手順書の変更が必要になるだろ
根本がわかってなさ過ぎ >>481
おお、なんかスピード感あって楽しそうだな
TDDいいよね!本業の組み込み自社開発でも導入した
何で長年気が付かなかったのか不思議なレベル
この手のノウハウは組み込みより圧倒的にWebの方が進んでるから、俺にとっては上位レイヤーの開発ノウハウが新鮮に感じる やっぱり単体テストでそこまで用意する意味ねぇって
時間がかかってるのデバイス周り出し及びじゃねぇよコレ 伊藤淳一などが翻訳してる「Everyday Rails - RSpecによるRailsテスト入門」は有名な本
テストに関しては、ソニックガーデンの伊藤淳一の動画・Qiita などを読めばよい >>484
デバイスはモックを使いましょう
ソフトウェアのテストをするのに
本物のデバイスは必要ありません >>487
いや、それだとレスポンスも早過ぎるしリトライも起きないから何のテストにもなってない
あと何よりデバイス出ないから返ってきて欲しい値を手動で設定するとか苦痛過ぎる
ソフトでset○○って入れた値が次のget○○に反映されるみたいなとこまで作れないやろ 何のためにモック使ってるんだ?
素人かなぁ
レスポンスの時間を自由に変えられるのがモックの利点だし
リトライする状態を自由に再現できるのもモックの利点だし
デバイスから帰ってきてほしい値を自由に設定できるのもモックの利点
うーん、わかってない人が、意味不明な答えをしてる状態だw
まずそもそもモックはお前が行った問題点を解決するための
ものだということを知りましょう まあ正確にはスタブだけどね
みんなごっちゃにして使ってるから俺もごっちゃにして使ってるw 組み込みでは単体テストよりも実機テストが鬼門
どのプロジェクトでも最初は自動化を夢見ても、実現できたプロジェクトは少ない
自動化ぶん回してたら発熱して煙出てたり電源不足で再起動しちゃったり他の開発機器のノイズ拾ってコケまくったり・・・ MartinFowlerのMocksAre n't Stubsなど、テストでのモックとスタブに関するさまざまな記事を
読みましたが、それでも違いはわかりません。モックvsスタブ=行動テストvs状態テストと言われ
ますし、ライフサイクルが違うと言われますが、それでも違いはわかりません。
先輩がいつもモックモックモック言うので、すこし嫌になりました。 >>491
組み込みのハードの部分が多いのかソフトの部分が多いのか
ハードの部分が多いなら、そりゃソフトウェアのテストじゃなくてハードウェアのテストだ
だが組み込みでもソフトウェアは多いだろ?
そっちはハードウェアなしでテストできる
めんどくさいからソフトウェア部分も
ハードウェア使ってテストするんだよ
時間がかかってしょうがない
っていうのならソフトウェア部分も
ハードウェア使ってじゃないとテストできないのなら
そりゃそうだろうよとしかw >>489
いやーやめた方がいい
値1つとってもそう単純じゃない
例えばある値を3.223から増加量0.005で7まで変化させたいと
その時6.997で装置は処理を止めましたと
これはソフトからしたらクソでも多分バグじゃねぇんだわ
じゃあ、増加量0.001にしたら7になるのかと?
今度は6.995で止まったと
まだ足せんじゃん足せよゴミカスと言いたいが
デバイスのハード的なもんを無理矢理デジタルに直してるようなのはこんなのが限界のときあるんだわ
精度も条件によって変わったりね
多分ハードの値って一つ一つこういう変な癖があって何でもかんでもうまくはいかないと思うよ
ってなるとやっぱり重要なのって結合なんだよね
デバイスと絡んだ値があるとこはすんなりいかないことが多い >>493
落ち着け、後半日本語めちゃくちゃだぞ・・・ >>494
それ実機でテストする段階にならないとわからないことなの?
COCOAみたいなのもあるし実機テストは必須だとは思うが
それ以前にインターフェース仕様に準じたテストしといたほうがよくない? >>496
そこに金くれる会社ねーな
よくあることだし
でもやってみないと具合がわからん >>492
マーチンさんはその記事を出すのが遅かったよねw
モックという言葉が広く普及してしまった後だった
rspec界隈?ではテストダブルという言葉を使って言葉を整理しようとしたが
一部でのみ使われて広く普及していない
俺的には、ダミーの値を返すオブジェクトがスタブ
スタブの反対はスパイで、スパイは呼び出された回数や引数を記録しておいて
あとで検証できるもの
スタブとスパイをあわせてモックとしたほうが良かった気がするな
世間的には、スタブ vs モック(スパイはモックの高機能版)と考えればいいよ
スパイは後から検証できるように便利なオブジェクトになってるが
モックはそんな機能がない、もしくは低機能。
だから「テスト対象のコード」から「モック」を呼び出した時に渡されたデータの検証ぐらいしかできない
またスパイもモックも結局はダミーの値を返さないとテスト対象は動かないので多くの場合スタブの機能も兼ねてる
スタブ・・・テスト対象がスタブを呼び出し、スタブはダミーの値を返すだけ
モック・・・テスト対象がモックを呼び出し、その内容をテストする+スタブ(必須ではないが多くの場合必要)
スパイ・・・テスト対象がスパイを呼び出し、その内容を記録しておいて後からテストする+スタブ(必須ではないが多くの場合必要)
テストダブル・・・上記の総称 >>494
> いやーやめた方がいい
やめた方がいい理由は?
> 値1つとってもそう単純じゃない
> 例えばある値を3.223から増加量0.005で7まで変化させたいと
> その時6.997で装置は処理を止めましたと
> これはソフトからしたらクソでも多分バグじゃねぇんだわ
バグじゃないなら、その値でテストするだけのこと
お前は、6.997でテストしたか? 6.995でテストしたか?
してないよな。だって装置が都合よくそんな値で止まってくれないんだから
ハードウェアを使って手動でテストすると 6.995 や 6.997 で止めるのが難しいから
テストの時間がかかる。そういう場合にモックを使うと 6.995 や 6.997 の値を作り出すことができる
単体テストであればデバイスの値を自由に作ることができる >>497
> でもやってみないと具合がわからん
やってみれば具合がわかるだろ
そしたらそれをテストコードにするだけだろ
おまえはやってみて、その場でコード修正して終わりか?
リグレッションテストはしないのか?当然するよな
別の機種のための修正が、別の機種で不具合を起こす場合
Aでうまく行かない→修正
Bでうまく行かなくなった→修正
Aでまたテストして→修正
Bでも大丈夫かな?→修正
って機種を何度も変更して、同じテストを何度も「手動」で繰り返すんだろ?
テストコードにしてれば、この繰り返しを
自動でできるって言ってるんだよ >>499
ええ、いくつ値あると思ってんねん
その一つ一つにデバック用動作つけんの?無理っしょ? >>502
はっきり言えよ。たくさん値があって大変だから
手動テストではテストしませんって
テストしてないんだろ?いくつ値あると思ってんねん(笑) テストが手動でテストをするのに膨大な時間がかかるコード むしろこういう複雑な動作されるのはそもそも単体じゃないじゃん >>506
だからお前はモックを使わないで
全部手動で膨大な時間をかけてやるんだって話してるんでしょ?
あ、テストしてないんだっけ?w
プロの仕事じゃないなぁ >>507
複雑なのはたくさん値があってその組み合わせが膨大だから
手動テストも、その組み合わせをテストしないといけない
時間がかかって現実的だからテストしないって言ってる?
手動テストはテストをしないこと・・・意味がわからんw >>498
ありがとうございます。だけどプロトコルバッファーなどgRPCで生成されるコードにもStubって使うので
もう全部Stubで広義的にはいいじゃんって思います。付加機能があったり、ライフサイクルが複雑であって
テストコードの話に限定できてメインソースじゃない単語だと「モック」と言われてるような気もします。
先輩が見てるといけないので、先輩が嫌いな訳じゃないです、モックモックモックいうのはイライラするので
やめてほしいです。ここで「手動テストは○○○(否定表現)」を連呼する人が先輩に似てます。 「手動テストは時間がかかる」
これは否定表現じゃないからセーフだなw もうこの際だからハッキリ言うと、先輩、それ誰も知ってるから鬼の首を取ったように言われても
ぼくらは困惑ばかりです。正直ウザいです。みんなから嫌われてます でもそこまで作って尚まだ単体テストなんだぜソレw
ぜってーねーよw
もう繋げてテストしようよw
無駄だよw なんだ?今まであれだけ言い返してたのに
今度は何も言い返してないではないかw もう流れ追うのも面倒になってる奴多いやろこれ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クラスはワイ理論ではもっとも再利用性の有る優れたクラス 一応参考までに省略部分も張っとくわ
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 再利用できないコードの特徴
・凝集度が低い
・結合度が高い
この2つがセットだと、自分が使いたい機能に対して無関心な知識まで要求される
そういうのがクソコードの筆頭だと思う
Stringは、上手く実装されている例だな もしかして文字列出力が多いソフトウェアだと文字列クラスの利用が多くなるんじゃないか?
そうでなくとも5000個の文字列が各所に散らばってるんだろ
どうやって文章を管理して辻褄合わせるんだよ まずさ
別に出来がいいから使ってるわけじゃ無いだろ?
クラスの造りが優秀なのとソースで使用回数が多いことに関連がそんなねぇよ
業務アプリだったらLogってのが簡単にStringをぶっちぎるのなんて簡単に想像できる あれ?手動テストの話終わったの?
もっと罵り合えよつまんねーな 最後はこれでおしまい
>>507
複雑なのはたくさん値があってその組み合わせが膨大だから
手動テストも、その組み合わせをテストしないといけない
時間がかかって現実的だからテストしないって言ってる?
手動テストはテストをしないこと・・・意味がわからんw いや、流石にハードの動作知らんやつが設定値7に対して6.997で止まることを想定できんやろ
どんな組み合わせをやっても無理なはずやで
テキトーなことを言うな >>524
ハードの動作知らんやつが手動でテストしても
何の解決もしないけど?頭大丈夫か? ここまでをまとめると、自動テストは暇なら書く程度の価値
って事でおk? 手動テストに膨大な時間がかかるので
自動化してもっと価値が高いことに時間を使いましょうって話だよ 手動テストに膨大な時間なんかかからないと思うんだが
そもそも
その時間まで積んだうえの開発コストだと思うんだが コロナウイルス→鳥インフルH5N8→人
もうダメだな、鶏肉も食えない >>528
俺が作ってる1万行程度のツールはテスト項目数が1000個以上ある
この項目数は多いというほどのものでもないだろう
このテストを全て自動的に実行する時間はに30秒程度
もし手動で実行するなら1つあたり10秒で終わらせられたとしても
1万秒、300倍以上もの時間がかかっている
1万秒といったら、2時間半以上にもなる
開発しながらテストとかやってられないレベル
大きなシステムではテスト項目数は数万、数十万にもなるから
テストに数日かかる。コードを修正するたびにそんな事やってられないから
手動テストはテストをサボることになる > その時間まで積んだうえの開発コストだと思うんだが
開発コストは低い方がいいだろ?
そうすりゃ請求金額の多くを儲けにできる
1ヶ月かかる仕事を効率化して1週間でできるようにしたから
販売金額も1/4でいいですよなんて、技術料ゼロの儲けが出ない
ビジネスモデルで仕事してるなら可哀想としか言うしかないがなw >>531
毎回やらなくていいとはどうやって判断したのか?
いつも想定してない所でバグが出るもんだ
コミットのたびにCIで全テストをするのは当たり前
ローカルでは一部のテストだけを行えばいいが
CIで自動的に全テストを行うのは普通の話だ
そこまでの高い信頼性を手動テストでやってるか? >>534
論点はどれだけ時間を減らせるかだ
手動でしかできない部分だけ手動でやる
自動でできる部分も含めて全部手動でやる
どちらが時間がかかるか言うまでもないな >>536
話し終わってねーだろw
手動テストが時間がかかるという話が出た途端
なぜそれまでの話をなかった事にするんだ?www 自動テスト書くくらいなら他の仕事やれよ
単価テスターの6倍とかなんだから >>538
ならテスターが自動テスト書けばいいだろwww >>540
類は友を呼ぶってことだよw
自動テストがあるプロジェクトはたくさんある プログラム分からないほうがテスターとして価値ある
時々すごい操作するし はい、手動テストの方が時間がかかるって
結論をそらし始めましたよw 自動テスト書いた方が早いことは自動テスト書きながら開発してるやつなら分かると思うんだ エンドが書けば良いと思うんだが・・オナニーと大して変わらないんだから SwaggerとかでAPI自動生成される場合は書いたほうが良いな 自動テストを書く時間まで積んだうえの開発コストだと思うんだが?w
手動でテストをすると、その開発コストが大きくかかる 手動テスト要らないなんて一言も言ってないよな
自動テストを書く時間まで積んだうえの開発コスト
全部手動でテストをすると、その開発コストが大きく跳ね上がる >>553
そんな事ない、テスト観点の洗い出しが変なだけ >>554
テスト観点の洗い出しが良くなれば
同じ件数のテストを手動で早く実行できるという
理由を言ってみて
手動テスト要らないなんて一言も言ってないよな
自動テストを書く時間まで積んだうえの開発コスト
全部手動でテストをすると、その開発コストが大きく跳ね上がる テストコードの保守工数より手動テストしたほうが確実 具体例
俺が作ってる1万行程度のツールはテスト項目数が1000個以上ある
この項目数は多いというほどのものでもないだろう
このテストを全て自動的に実行する時間はに30秒程度
もし手動で実行するなら1つあたり10秒で終わらせられたとしても
1万秒、300倍以上もの時間がかかっている
1万秒といったら、2時間半以上にもなる
開発しながらテストとかやってられないレベル
大きなシステムではテスト項目数は数万、数十万にもなるから
テストに数日かかる。コードを修正するたびにそんな事やってられないから
手動テストはテストをサボることになる いちいち理由を聞くな、ここは自分考えだけを言って
ストレス解消する便所の落書きだ まあ手動のテストで1つあたり10秒って書いたけど
普通そんな時間で終わらせられないよなw
事前準備の手順があって結果のデータを見比べて
画面を注意深く観察してスクショとって
チェック表にチェック入れるんだろ?
1分でも短いかな? >>560
お前がストレス解消のために書いてるってことはわかったよw 暇だからという理由で手動テストをしてたのか?
手動テストをやめれば暇になるぞwww >>565
だからテストしないと?
プロの仕事じゃないな そして短納期かつトラブル案件は自動テストがない
なるほどなw テストコード書く時間がないなら
それよりももっと時間がかかる手動テストやれるわけがないので
テストサボってるだけなんだろうな テストコード工数を認めてもらえる案件やりたいな
もう単体テストはエンドでやる、みたいなのばっかり エージェントが20%とか抜いてるからエンドがコストにシビアすぎる 自動テストがないプロジェクトは短納期かつトラブル案件らしいw プロジェクトの炎上具合を測れるな
自動テストがないプロジェクトは短納期かつトラブル案件 自動テストを書いてないやつは、60日以上の案件をやらせてもらえないらしい 自動テストあるのにメンテしてなくて炎上するケースが50%くらいある
ずっと自動テスト工数割いてくれよ >>533
最近の単体テストツールは影響がないテストコードを実行しないものが多くある メソッドを今流にメンテしたらテストコード通らないからギリギリまでママにされていて大規模改修とかやめてくれ テストを直すのがめんどくさい時が多々ある
やめてくれ 平日にID真っ赤にする手動テストおじさんはNGしとけ
無視して俺らと会話しようぜ
仕事してるからレスは少なくなるけど 本日の職場で見たクソコード
class MainActivity implement 機能Aインタフェース, 機能B,インタフェース 機能Cインタフェース...機能Mインタフェース{
}
なんで12個のインタフェース継承してるの?
円卓の騎士かな?
Androidで発生するイベント全部、1個のアクティビティに継承して実装するのやめてください実装者が死んでしまいます >>559
そのテストコード書くのにかかった時間は仕様変更によりすべて無駄になる世界があるんよ、君はまだ世界の広さを知らない >>592
仕様変更によりテスト手順書が全て無駄になる世界はないのか?w こいついっつもテストする時間のことを無視するよなw
テストコードを書く vs テストコードを書かないでしか比べてない
それよりも重要な何度も行うテストの時間を持ち出されたら困るのだろうな
手動で数回テストをするだけであっという間に開発コストが数倍に跳ね上がる テスト書くのめんどくさいんで俺が抜けた後のやつに任せるわ テストコード1回書く間に手動テスト5回はできそうなんだが?
んで1回テスト通したら次の変更までやんねーよな? ここまでをまとめると、テストコードはSWAGGERとかで自動生成される部分のみでおk? >>596
それ、テスト手順書書く時間入れてなくね? 仕様変更があるのは手順書作る前だから問題ないのさ、でもテストコードは無駄の極み底辺コーダーの自己満なのさ ユニットテスト100回回すより総合テスト1回の方が品質高まる、実装ミスなんて現代のプログラミング環境では無視できる >>596
> テストコード1回書く間に手動テスト5回はできそうなんだが?
たった5回って少なすぎだろw
バグ5個見つかったらそれで終わりじゃん flutterとかJITでガンガン テスト→修正→リファクタリング を繰り返すからテストコード要らないんだよね。 >>605
Flutter標準のやり方でテストしてるってことかな?
どの方法を使ってるの?
Testing Flutter apps
https://flutter.dev/docs/testing
Automated testing falls into a few categories:
- A unit test tests a single function, method, or class.
- A widget test (in other UI frameworks referred to as component test) tests a single widget.
- An integration test tests a complete app or a large part of an app. >>606のページに書いてあった
Unit Widget Integration
Confidence Low Higher Highest
Maintenance cost Low Higher Highest
Dependencies Few More Most
Execution speed Quick Quick Slow
俺が言っていたことと同じだけど翻訳すると
・信頼性
ユニットテスト:低い ウィジット:高い 統合テスト:最高
・メンテナンスコスト
ユニットテスト:低い ウィジット:多い 統合テスト:最も多い
・依存関係
ユニットテスト:低い ウィジット:少し依存する 統合テスト:たくさん依存する
・実行速度
ユニットテスト:速い ウィジット:速い 統合テスト:遅い
統合テストはメンテナンスコストが悪くて遅いんだよね >>599-600
テスト手順書知らない体なのに>>601で手順書の前とか意味不明
テスト語る前に自分の頭のデバッグしろよw テストコードは暇なら書くレベルの価値しかない
AppleもGoogleも特に推奨してないし はいはい、議論の負けたから続きじゃなくて
前の話に戻して逃げるとw >>610
それ言うなら「議論に」かな?
日本語を勉強しよう! Flutterが自動テストを推奨していることをどう思うのか?
Testing Flutter apps
https://flutter.dev/docs/testing
Automated testing falls into a few categories:
- A unit test tests a single function, method, or class.
- A widget test (in other UI frameworks referred to as component test) tests a single widget.
- An integration test tests a complete app or a large part of an app. テストコード自動生成ツールとかあったな・・
今どこいったんだろ・・ >>614
使えないものは消えるだけの話
自動テストに、テストコード自動生成とかいう眉唾ものは必要ない >>613
どこで推奨してる?五万とあるプラグインのほとんどにテストコード無いけど。 >>616
一番最初に書いてある
The more features your app has, the harder it is to test manually.
Automated tests help ensure that your app performs correctly
before you publish it, while retaining your feature and bug fix velocity. >>619
手動テストやれって書いてある?
書いてないね テストコード書け、ってwarningでも見たことないし >>621
カバレッジがそれに相当する
テストされてる範囲が低ければエラーになったりするし つまり暇なら書くレベルなんだよ。
「テストコード工数が嵩んで納期を守れません」
なんてPJ無いし。 >>623
根拠は?
俺はURL示したけど
あと、Developerサイトに書いてあることが推奨じゃなかったらなんなの?必須? Xcodeとかでもテストコードカバレージ出るけどエラーになるかな・・ >>625
そのURLは自動テストはこうやったら良いですよ。っていう紹介ページだよ。
秋葉原のテスト専門会社に出したほうがトラブル少ないし安いし。 >>627
手動テストはこうやったらいいよっていう紹介はないんですね
やっぱり紹介するに値しないものだからなんでしょうね >>629
その意見はなんかズレてる気がするけど・・ジジイ? > そのURLは自動テストはこうやったら良いですよ。っていう紹介ページだよ。
> 秋葉原のテスト専門会社に出したほうがトラブル少ないし安いし。
TDD知らないの? 時間ないから自動テスト作りながら開発するんじゃないの? >>632
あ、もういいです。テストコードは基本書きません。
暇なら適宜書きます。 >>634
お前はそうなのだろうけど、他所スレでやってくれない?
ここのスレタイ読める? >>602
で、結論が出てるので自動テストの話は終了するか自動テストスレを立てて下さい。 モジュール仕様書って作る?javadocみたいな
cだから開発環境では作ってくれなくて、自前で用意するしかなさそうな雰囲気なんだけど自動生成してくれるツールとかない? >>634
テストコードを書いてないあんたが忙しいというのはよくわかった
自動テストをしてないプロジェクトが炎上するのはよく聞く話だ
やっぱり忙しくなるんだね 職場のクソコード
永続化する必要のない変数、全てをSQLightで管理
O/Rマッパー?何それ?
男は黙ってSQL文の文字列を埋め込め
データの取り出し方? SELECTを書け
こうして、各種コードからSQLでアクセスするというグローバル変数共有化より恐ろしいクソコードができあがった
上司が勝手に外注に丸投げして作らせたコードが、プロジェクトメンバーでもない筈の俺の手元に何故か回ってきて発狂中 今日の心がけ◆丸投げはやめましょう
一般社団法人クソコード研究所 コメントを無駄に装飾するのやめてほしいわ
2行以上の全コメントが枠で囲ってあんの ポインタで挫折するってよく言われてるけど
アドレスの意味がわかってないだけ
int a = 1;
int* b= a;
a = 2;
int c = *b;
これでcに2が入ってないことがわからないとか論外だろ >>608
手順書がかりにあるとしてもという話だよアホが >>652
手順書が何かを知らないのに仮にあるとしてとかアホすぎ
恥の上塗りかよw >>653
何か知らなくても仮定することできるよ
ブラックホールがあるとしても僕たちが吸い込まれることを恐れることはない、のように 知ってるってことだけでマウンティングしようとしてるアホが君だよ、浅はかなのだよ テスト手順書という言葉は君の造語だと僕は思ってるけどね、一般的なものだとは思えない 自動テスト1万回回すより手動テスト一回の方が品質高い >>654
手順書が何かも知らないなら前とか分からんだろw
論理的思考能力 "0" の無能乙 >>659
ははーん君は仮定が何かを知らないようだねえw 君は手順書wを知っていると言ってるだけの虚ろなテープレコーダーとなり下がった テスト手順書という言葉自体一般社会では通用しない代物だから知らなくていいものだとは思ってるが仮にそのような下賤なものがあるとしても問題ないと言ってるのだよ、ここまで噛み砕かないとわからないかな 相変わらずキチのままだな
存在の仮定には反論してないぞ
そんなことも分かってないだろw >>664
あれ、でもこれ2が入ってないことと言ってるからアンドなくていんじゃね >>667
もちろんそうなんだけど、そもそもexceptionじゃね?
とかw >>664
C言語すら怪しいのにドヤってるやつの相手しろってか?w >>665
反論はしてない、お前のアホさを指摘してるだけw なんだ反論してなかったのか
僕の主張が全面的に正しくて反論の余地が一切なかったということか 2であることは保証されないよねって論旨だからOSによる動作の違いは些末なものさ 自動テストは底辺コーダの自己満です、システムの品質は一切上がりません、自動テストは80年代の手法 >>668
未定義動作だからそもそもcがないとかw >>673
アホさの指摘には触れられないってか?w int a = 1;
int* b= a;
2行目の暗黙的変換がエラーにならないのって相当古い実装だよね。今でもあるのかな? >>676
それは環境依存だから保証されないよねってことさ >>682
>>682
まあ、もうそう言うレスしかできないんだろうけど…
可哀想にw >>679
constraint violationなので実装依存
標準に準拠してれば最低限警告は出す >>686
返してどうするw
指摘に対してなにも言えないのは君ね
ちなみに反論はできないんじゃなくてする必要がないからしてないだけだから
>>663にその理由も書いてあるけど理解できてないでしょ? >>680
int c = *b; の時、b = 1だから、1番他のint型の内容をcに入れてるよ >>689
はいはいまとめると反論ありませんってことな 僕の鉄のような正論の前で反論できなさすぎて悔しくて僕の人格を貶めようと頑張っておられるところ恐縮ですが反論ないのな あわしろ氏は、 >>692 は勉強しなおすべきと言ってたな。 >>691-692
する必要のない反論はなくて
アホさの指摘にはぐぅの音も出なくてクヤチー
ってことなw >>693
あわしろってLinux板で叩かれてるやつだろ >>695
バカはレスできなくなると同じ内容をひたすら繰り返すようになるのな
もちろん反論は(必要ないから)ないし、アホと言う指摘に触れられたくない必死のアホがいるという事実も変えられないw >>697
> バカはレスできなくなると同じ内容をひたすら繰り返すようになるのな
↓これなw
675 名前:デフォルトの名無しさん[sage] 投稿日:2021/02/25(木) 12:18:43.21 ID:2DtRWZ66 [17/27]
自動テストは底辺コーダの自己満です、システムの品質は一切上がりません、自動テストは80年代の手法 Googleのエンジニアに「自動テストは時間の無駄だから手動テストにしろ」って言えたら本物だよ 炎上の現場からお送りします。
「自動テストサイクルが回ってるの見たことない。テストする時間がない。」 >>699
権威にすがった時点で論理的に間違ってると認めたようなもんなんだよ >>702
僕はテストコードにこだわって破綻したプロジェクトを経験したことある、手段にこだわって目的を見失ったパターンですわ、それ以来僕はテストコードはにわかコーダの自己満だと思うようになったのだねえ >>704
そのプロジェクトは権威がある所のプロジェクトですか?
それとも権威がない所のプロジェクトですか? 一回のテストで確認してるものが多すぎるのだ
ひとつの結果をチェックって
DB更新するのにレコード全体がチェック対象になんねん 手動テストなら、レコード全体をチェックしなくても
動いてるからヨシでリリースできるのだ >>707
良いこと言った、君は現場をよくわかってる >>710
うるせえ!今何時だと思ってんだ!馬鹿野郎が! テストコードなんか書かせてくれるエンドなんか
もう無いだろ、・・・ リクルートで10年アプリ作ってたけどテスト書いたことない >>715
見てるところか小さすぎる
製品の使い勝手をねじを眺めることで見極めようとするようなものマイクロテストは時代遅れの遺物
大事なのは全体品質ということ システムを使うのは人間なんだから人間が最初から最後まで使ってみて品質を研ぎ澄ましていくんだよネジの造形を眺めて悦に入ってるようじゃダメだね
現代の開発環境では実装ミスなんて起こらないからそこを一生懸命テストしてどうするのってこと 一所懸命テストしてるから実装ミスが起きてない
因果関係がおかしい 仕様バグじゃなくて、実装上のバグのことだろ?
それ以外に考えられない >>709
頼むから、お前のレベルの低い職場を基準に語るのやめろ
あと、いい加減に隔離スレ行け、池沼 まるちゃん、まともな仕事をしている人はまともな仕事であればあるほど
守秘義務があって仕事のことは何も話せないから、
SNSでそれっぽいことを大声で言っているアカウントは大抵偽物なんだよ。
https://twitter.com/kitty_lifehack/status/1357857702836281348
https://twitter.com/5chan_nel (5ch newer account) 自己満テストコード君
興奮スレ建て君
君たちに日本の未来を任せた なんでスレ立て直すかな...
自演封じられると不都合あるの? クソスレから派生スレ立てた上にその重複スレまで立てるとかマジ頭おかしい >>731
いいんじゃねーの
自分しか使わんツールをシコシコ作ってたのかも知れんし 隔離スレがIPアドレス丸出しだから
こっちでやるか 前にいた自称(手動)テストのプロが
バグがあるバグがある!エビデンスもある!って
叫んでいてトラブルになったんだが
結局そいつがテスト手順を間違えていただけというオチだった
テスト手順書にしっかり書いてありますよねって問い詰めたらそいつやめたわwww
データを削除するって書いてるんだから、全部のデータを消すに決まってるだろと
購入データだけ消すなよアホかってな テスト毎にぜんぶDBデータ消すこと。ただしDBはチーム共通。規約違反はテストと認めない。
チーム20人もいれば簡単ですよね テストコードを書かないとクソコードになるという話題でもする?
テストコードを書くなどをして、自作のクラスを必要としているところ以外から呼び出さないと、気が付かない内に他のクラスとベッタリ依存するコードを書いたりしそうだが、そこら辺はどう? >>743
テストコード書かないんだから問題ない
テストコードは目的ではない じゃあ目的は?そしてその目的をよりよい方法で解決する手段は?
目的と手段の2つをお答えください(笑) テストコードこそがクソコード、これがこのスレの結論でしょうな >>745
プログラムの目的とはユーザを満足させること
そのための手段として実際に人間が使ってみること
こんなこと聞いてる時点でダメだよね >>747
料理の目的は、客を満足させること
料理の手段は、実際に人間が食べてみるとと
さて?料理はどうやって作るんですか?w テストコード実行することが目的の皆さんは底辺コーダです >>709
>>748
あんた、オブジェクト指向はクソとか言いまわってた挙げ句に厶板住民から総攻撃を食らって知的障害を起こしながらID真っ赤にして人が罵倒してた人でしょ?
文章がソックリだし、知的障害者を起こして人の話を聞かなくなるところもそっくりだわ
まぁ、1つだけ言えるのは、自分の非を認めず、是正する気のないお前のクソコードなんてテストしても時間の無駄だな
お前がテストは無駄だと感じるのは無理もない
クソコードスレなんで、是非、あんたのコードを晒してほしいものだ
良いクソコード事例として貢献できるぞ >>749
実食を重ねて試行錯誤していくに決まってる
料理の鉄人という番組がありましたね
実食によってどちらが優れた料理か決めてましたね >>752
> 実食を重ねて試行錯誤していくに決まってる
ではきこう。試行錯誤を1日に1000回やるにはどうしたら良いか? >>751
それただの人格攻撃ですね
はあ、論理的に議論できない人プログラマーにもいるんですね >>753
1000回やる根拠がないので質問の意味がない、ナンセンスの塊 >>755
自分で実食を重ねると言っておきながら
実食の回数を否定するのか?w >>756
よく読んでください、1000回という数字に根拠がないと言ってます、また手段と目的を見誤ってますね >>757
1000回という回数にこだわってるのはお前
試行錯誤の回数は多いほうが良いと言っている
より多く試行錯誤をするにはどうすればいいか
実食を重ねて試行錯誤していくに決まってる(笑) こんなんだから日本はまともなソフトウェアを作れないんでしょうね >>759
おやおやそれは無理がありすぎでしょうw
1000回という数字を出してそれを達成するにはどうすればよいかを聞いたのはあなたでしょう、他人のせいにしないでください 反論できなくなったらこれだから日本は〜ってださすぎるだろ
そもそもIT先進国の方がテスト文化進んでるだろうに 日本からユーチューブやツイッターが生まれないのはユーザを見ずにコードを見てるからです >>761
単体テストってビルドする度に実行するものだけど、理解できてます?
まさか、そんなことも理解せずに単体テスト批判してたの?
あと、クソコードスレなんで、是非、クソコード事例書いてみて
生産性のないお前の愚痴とか相手を挑発するだけで中身のない批判とかどうでもいいから あと、クソコードの話と絡めることができないのなら、隔離スレ行ってくれませんか? >>765
いつ実行するかをあなたは話してますね、ふーんって思いました、なんでそんな話をしてくるんだろう >>768
理由は?
あと、俺が最初に挙げたテスト対象コードの依存の話は? あれを知ってるかこれを知ってるか、そんなことも知らないのか、民主党の国会質疑みたいですね >>769
テストコードを書くとテストコードを実行することやテストコードをきれいに書くことが目的なってしまうからです、このスレの議論を見ればよくわかりますね はあ、論理的に議論できない人プログラマーにもいるんですね(皮肉) 言うに事欠いて僕の真似をするとは、良いでしょう、あなたがその言葉を発言することを許諾します >>742
クソコーダーはクソスレ建てるのがお上手ですね! まずこのスレがクソスレじゃん
どんなジャンルで悪いお手本をあげつらって技術磨くってのが成り立つんだよ
状況によって対応が細かく変わりうるプログラムってジャンルだと尚更ねーよ は?アンチパターンも知らないのなら引っ込んでろ底辺プログラマー。 愛と勇気だけが友だちという歌詞も深いですよね、大人の心にも響きます >>777
スレ主がコンテキストを理解しない底辺プログラマーだから許してあげてね コンテキスト?
Device Contextとか、Android Activityとかのコンテキスト? 多分コンテキストって言いたかっただけなんだろうと思う… 俺は、あわしろ氏を信じる。
お前の言うことは信用しない。 >>791
天ぷら前提なんだが、レスがハエーから許す 最初は有意義になるかなと思ったのにクソスレになったな >>797
そう思ってたのはスレ主だけだろw
スレタイ & 1スレでどっちみちクソスレになるのは確定してた Qiitaでもクソコード云々言って炎上してる記事があったな >>800
試しにクソコードでQiitaを検索してみたがポエムばっかりで面白いのなかったな
↓これが視点としては面白かったけど処理分割のアプローチ間違ってるから新たなクソコードが出来そう
https://qiita.com/teradonburi/items/6483e51d5f9d47f5c22a >>798
いや、スレ主じゃないけどアンチパターン研究スレは厶板に必要だとは思うよ
文脈から察せない人が暴れただけで >>802
アンチパターンを集めたかったんなら
スレタイと1スレをそうなるよう書けって話だろ
アンチパターンとクソコードは全く別物なんだよ
コンテキストを理解してないと言われてる理由と合わせて最低限パターン・ランゲージくらいは学んでこい
ちなみに「いや」から書き始めるレスはクソレス・パターンだからな >>804
そうやって自分でクソスレにしてんだよな
クソスレ主あってのクソスレ(ム板拡張版w) アンチパターンを取り上げてる本でオススメある?
SQLアンチパターンを読んで得るものが多かったので >>805
おいお前話を広げろ、今のお前は他人のヘイトやってるだけのクソ野郎だからそうじゃないところを見せろ あ、間違ってたも
>>805は僕に同意してたわけね
でも僕は敏感な人間だから僕に言われてることだと思った、だけれども紛らわしい言い方した君が悪い、僕は絶対に悪くないからこの件は以後言及することを禁止します、以上 上に出てるパターン・ランゲージってアレクザンダーの都市計画理論だろ、プログラミングの本じゃない、そんなたとえ話のようなものでわかった気になるのは危ない
Twitterでも建築の本読んでオブジェクト指向がどうとか言ってる人いるけどポストモダンなソーカル野郎としか思えないんだよなあ、関係のないことを関係づけてそこに気づいた自分が賢いと思いこんでしまうクルクルパー、地頭の良い人が陥りやすい穴のように見える 40年近く前の本だしFORTRAN, PL/1が題材だから今の言語に合わない箇所もあるけど名著だと思う
プログラム書法 第2版 / Brian W.カーニハン P.J.Plauger 著 木村 泉 訳 | 共立出版
https://www.kyoritsu-pub.co.jp/bookdetail/9784320020856 >>803
まーた、詭弁デメテルバカが発狂してるよ
一番勉強が足りてないお前が勉強してないっていうねw
頼むから、一生ROMってろ コードとはまた違うけど
javaのインターフェースとインプリメントはクソだなと思う
無駄にファイル数増えてクソうざい interfaceがクソってw
オブジェクト指向知らないのではw これだからJava脳はw
言語周りで幼稚な愚痴垂れ流してるやつのJava率の高さったらない >>811
GoFのデザインパターンも、ファウラーのリファクタリングも、エリックエバンスのDDDもみんなパターン・ランゲージ
それぞれのパターン・ランゲージに共通する要素は何なのか?
なぜパターンがソフトウェア開発に有用なのか?
この辺を学んで出直してくるといいんじゃね クソコードと言うのは単なるBad Practiceの一種であってアンチパターンとは違うもの
アンチパターンの意味を理解せずにアンチパターンの研究とかまあ無理よね >>818
abstractだけでいいって事では? C#やるとJavaのいろいろ足りてない部分はめちゃくちゃ実感する >>818
そのインターフェース本当に必要?ってのが大半
他クラスとは何も関係無い孤立したクラスなのにインターフェース実装されてるの見たことある?
javaやってる感出すためだけにファイル数が2倍になるゴミ >>827
ポリモーフィズム
Storage storage
storage = new USBMemory()
or
storage = new SDCard()
以下、storageを使って読み出し
storage.read()
これができなくなるとか論外 1メソッド1インタフェイスのペアで作れば解決するじゃないか!
interface Writer{
void write(Data data);
}
interface Reader{
Data read();
}
interface Eraser{
void erase();
}
abstract class Storage implements Writer, Reader, Eraser{
abstract void write(Data data);
abstract Data read();
abstract void erase();
} >>829
そうやって複数クラスで使う前提じゃなくて
自身にしか提供しないくせにインターフェースにするクソコード見ても同じこと言えんの?
その例で言うと
Interface USBMemoryと
Implements USBMemoryImplementsと
Interface SDCardと
Implements SDCardImplementsの4つファイルが作られるんだよ
もちろんStorageクラスなんて作られないからな、覚悟しとけ? >>831
それはどうかと思うけど、それを根拠に>>817みたいな言語機能を批判しちゃだめだろって話
Java脳とか言い出す人が湧いてるし
まぁ、そのコードは確かに問題だな 脱線したが、無意味にインタフェースと実装部を分けるクソコードは俺も見たことがある
俺も初心者時代はやらかした事はあったな
無駄にコードが増えるだけでメリットが無いというね
初心者時代は、>>831のコードを書けば
class XXXImplement
から
class XXXImplement2
に乗り換える時が楽だなんて思ってたけど、実際はXXXImplement2なんて作らずにXXXImplementを直接編集してた
変な突っ掛かり方をして悪かったな 仕様と実装をどこで切り離しておくかという設計選択の話なのでコードだけでは判断できない
>>831のようにインターフェースに対して実装が1種類しかなくてもそれが望ましい状況もあれば望ましくない状況もある >>834
望ましい状況って例えば何なんw
教えてプロjavaプログラマーさん インターフェース作ってもいいけど同じファイルに押し込んで欲しい
こんなくだらない内容でファイル数が倍は勘弁してほしい >>835
Storageの例と一緒だよ
共通した仕様を使いたいレイヤーと複数の実装を使いわけたいレイヤーがあって
それを分離することで結合度を下げときたい場合の選択肢の一つ
USBの例で言えばSDカードや他のストレージとは異なるUSB特有の仕様に依存したコードを書く必要がある場合に
実装が変更されても利用者側のプログラムを変更しなくてもいいようにしたかったり
複数の実装を実行時に切り替えて使えるようにしておきたい場合
面倒臭さと将来の柔軟性とのトレードオフ
切る場所が適切かどうかは要件次第なのでコードからは判断できない >>835
実装を変えられるってことさ
オープンクローズプリンシパルを守ろうとしたらインタフェイス切るしかない クラスは分けてなんぼ、理想を言えばメソッドごとにクラスを分けるべき 同じ階層のものがたくさんあると
全体を把握しにくくなるんじゃないかなあ Java脳のレスはインターフェースなくてもオブジェクト指向できるっつう話でしょ
引数に関数をとることでインターフェースの代替にできる時もあるしね >>831
あの例だと
interface IStorageにread()などの必須メソッドを追加
class USBMemory implements IStorage
class SDCard implements IStorage
やろw
Storage抽象クラス又は親クラスで定義してoverrideでもいいけど
設計次第やな >>845
違うんだよなぁw
Interface USBMemory
class USBMemoryImplements implements USBMemory
Interface SDCard
class SDCardImplements implements SDCard
こんなのが爆誕してるというかほぼ全クラスこんなので統一されてる絶望感分かる? >>833
まあ仕様が悪いというより簡単に悪用される実態が問題なんだよね
そのパターンもあるあるやと思ってる
だけどもし仮に2に乗り換えたところで、何かあった時に戻れるようにって無印が残されて結局ファイル数は増える地獄なんだなぁw 親クラスが子クラスに依存する処理を持つコード例
https://stackoverflow.com/a/29907649/
Eric Lippertの書いてるコードがクソなのか?
それともその認識がクソなのか? 普通にクソってことでいいんじゃね?
クソだけど処理が小さく、まともにするには
過剰気味な設計が必要になるならそのままにするけど
良いとは思わないけど必要十分 短絡的にクソコード認定したがるやつの脳みそがクソってことだよ
>>1のようなプログラマーは自分の見方がクソなのかもしれないと考えられるようにならない限り
いつまでたってもクソプログラマーのまま 短絡的にクソプログラマー認定したがるやつの脳みそがクソってことだよ
>>853のようなプログラマーは自分の見方がクソなのかもしれないと考えられるようにならない限り
いつまでたってもクソコードのまま >>854
クソプログラマー認定も含めて自分の見方がクソかもしれないと考えてないようなら
そいつ自身がクソプログラマーの可能性はそれなりに高いだろうね
ただコードとプログラマーにはクソかどうか判断する基準に決定的違いがある
その決定的違いが分かってないから君はクソプログラマーなんだよ > クソコードを見た時に「あっ、これクソコードだ」って認識する根拠を挙げていきましょう。
スレ主は短絡的にクソコード認定をしていないと思うけど
むしろ、なぜクソコードを見てクソコードだと感じたのか哲学するスレだろ
クソプログラマーの定義とかスレ違いだし、どうでもいいわ >>855
底辺に何言っても無駄
他人からは学べないから 根本的な原理が分かってない人が意外なぐらい多い
情報の多重化、DRY原則からの逸脱を誘発するものがとにかく駄目
突き詰めればダメなものは間接的でもそこにつながっているから被害を受けるのだと分かる
いろんなデザインパターンなんて結局は
いろんな状況でDRYを遵守する手練手管が99%だろう
重複実装も必要な時があるが
どんなものをどんな風に重複させるかで
状況はかなり異なるので短絡的な判断は禁物
1が言ってる一つ目の例は
もっと文脈をはっきりさせないと
何がクソなのか断定出来ないし
これで伝わると思ってるなら難アリ そもそもデザインパターンみたいなのは、こうすれば良いのでは?みたいな物だし
正直そういう所から入った層よりは、ある程度組めるようになってから見て納得出来た方が良いかと
つまりは最初に読むものでは無いと バックグラウンドとデザパタへの反応
複雑でも無く大きくも無いプログラムで遊んでた人
→自分のコードに対してデザパタの概念が大きい
→無意味にデザパタ導入してコード無意味に膨らます
→あるいはデザパタは無価値だと騒ぎ出す
ある程度複雑で大きいものを作ろうとして糞の山量産した人
→自分のコードに対してデザパタの概念が小さい
→デザパタ導入して部分的に見通し良く場面が見える
→必要に応じてデザパタを無言で使用 オブジェクト指向を理解するにはデザインパターンを理解するのが近道
言語の基本文法を学んだ後すぐデザインパターンを学ぶと上達がはやい
パターン熱にかかるのも早い方がいい このスレすげえ面白えな
>>11からの流れは思わず引き込まれてしまった
下手なラノベよりよっぽど読めるわ そう言えば「名前がクソ」というクソパターンは
DRYとあまり関係ないな
あまりに基本過ぎて盲点だった
使ってる言葉や概念がそもそもおかしいのは
あまりに基本的な問題だが一番有りがちかもしれない
特に日本では戯言過ぎて英訳なんか不可能なぐらいの
曖昧模糊とした言葉を話す人が多いので…
コードを書くずっと前から間違ってることが多い コードがクソかどうかはコードを見ただけでは判断できない
一見名前がクソっぽくても本当にクソなのかどうかは分からない コードを見る以外の何をやって判断するんだ?
煮るのか焼くのか食べるのか? 重複には悪性のものとそうでないものがある
明らかに悪性なものの見極めは簡単だかそうでないものは重複を除去すべきかどうかそう簡単には見極められない
accidental duplicationなのかactual duplicationか
重複を除去して抽象化することが望ましい状況なのかどうか
最低でもこの2点の判断が必要 片方だけの変更が妥当なら良性、両方に変更を入れないとダメなら悪性、ぐらいでだいたい見分けられるんじゃね? 例えばこれ
https://mevius.5ch.net/test/read.cgi/tech/1610137345/570
似たようなこと3回繰り返してるけど重複を除去すべきかどうか?
除去すべきならどうリファクタリングするか? 具体的なコードが出てくると途端にヒヨるマウントスレ民 >>872
3行3回程度ならそのままにするかな
breakしないとダメなので関数化しても条件判断が要るし
行数が増えるなら関数化する
回数が増えるなら関数をテーブルにしてforで回すかな それは要件次第って言えてしまうからなあ
関数作れない時もあるし、仮に1回でも要件で拡張の余地をとか言われたら関数にしなきゃだし
クソコードって分かってもそうしなきゃいけないときもある 関数化すらしないやつがいるのはちょっと驚き
このケースで関数化する動機は繰り返し同じことをしてるからというより意図を明確にするため
行数やbreakの有無みたいな表面的な形よりも意味が重要なので
この書き方が組織内で標準化されてる等の特殊な理由がない限り関数化する
ループにするかどうかは処理順序やcssをコードに固定化すべき状況なのかどうかによる
これも形じゃなく意味
使い捨てじゃなく長期的にメンテするコードで
hrml要素の検索順や検索条件をコードに固定化したほうが望ましい状況は少ない >>878
そういうのが特殊な理由
Pythonのような高レベル言語使ってるのに
ヘルパー関数を自由に作らせないのは控えめ言って異常だけどな 作らせないってのもあると思うな
MSDNはドキュメントあるけど
派遣社員ってドキュメント書かないじゃん
ドキュメントないメソッドなら作らんほうがマシになるときもある >>881
ドキュメントが必要だと思うなら書いてもらえばいいだけでは?
必要なドキュメントをきちんと書かせないのは依頼主の責任 ドキュメント必須のレイヤーとドキュメントは任意で十分なレイヤーがあるから
全部同じ扱いをするのは非効率
コーディング規約と同様に指針を決めておくのが普通 ドキュメントはちゃんとメンテしないとむしろ害を及ぼすよ メンテと言ってる時点でおかしいんだよね
本来はドキュメント変更してからコード直すべき
まあ不具合対策とかでいちいちドキュメントまで直してられっかって言うのはよくあるけど… ドキュメントを修正するのは不可能
すでにそれでOKがでてるんだから 関数化すべき
→勝手に関数作れないもん
→関数作ったらドキュメントが必要になるもん
→作ったドキュメント維持できないもん
コードを評価する方法よりも職場やプログラマーを評価する方法を身につけた方が
圧倒的に効率よくクソを避けられるといういい見本だな このスレで得られた教訓
クソプログラマーが「こういうコードはクソ」と言った場合、十中八九その認識のほうがクソ >>889
その理論でいくとコード修正するのも不可能では? 引き継ぎしてドキュメントを読む。
ソースをあまり読まずに修正する。
ドキュメントを直す。
システムが死ぬ。 >>893
コードは最終工程なので動かなければバグとして修正される
ドキュメントは動かなくても、コードを直せば動くので
ドキュメントの修正をする必要はない >>888
コードがテストされるまで設計フェーズは終わらないので
その後のフィードバックで設計書の修正は当然
他のエンジニアリング分野で言う「製造」は
コンパイラとリンカーがやってしまうのであり
実装という実験によって設計の妥当性が証明されるまで
設計は終わらない ロジックをドキュメント化するのは無駄。
コード読んで分からないものに手を入れてはいけない。 >>891
このスレを見返してみると「こういうコードはクソ」というレスが15〜16あった
その中で「確かにそれはクソだな」と思ったのは1つだけ
それ以外は・・・ どういう人が書いたのがわからんのが問題だと思う
バカが書いたとか間違ってるのが断定できればなんとかできるもん 竹内関数は、WEB+DB vol.121 のRuby 3 特集で、
平行・並列処理、Ractor のベンチマークで使っている
マルチコア用の並列処理は、まだ数年は掛かりそう >>900
竹内関数は関数の仕様を定義したものなので
コードではなく仕様がクソかどうかという話になる
それはクソコードかどうかという話とは少し種類が違う まずは、使われない無駄なコードを減らして欲しい!
「無駄だらけのプログラムを効率化して、1万行→500行に。それを見た上司が激怒して『あいつは三流』と言いふらし始めました」(エンジニア・50代男性)
2021年1月26日 06:00
https://j-town.net/tokyo/column/allprefcolumn/317613.html?p=all とくぎ「パニパニハニー」を完全抹消コメント 1件
アイミョン
[KS108-054]
テーマ:キャラクター育成・強化2020/06/14 06:15
宝珠「パニパニハニーの技巧」とか、不要なオブジェクトは煩わしく誤動作の原因にもなります。
こうした旧バージョンのゴミは片づけて整理して、コマンド表示をわかりやすくしてほしいです。
https://i.imgur.com/IReXk4Q.png >>904
50代にもなってこんな所でしょうもない憂さ晴らししてるほうもたいがいやな >>904
条件分岐するたびに重複コードを書く初心者は必ずいる。サブルーチンの概念がないというよりは、変数の使い方がおかしいのが最大の理由だと思う。 プログラムもドキュメントも常に作りかけかと思う物を作る50代を知っている。 サブルーチン=クソコードだよ
関数は原則として引数から戻り値を求めるものでテストが容易
もちろん副作用をもった関数もあるけど、わざわざ副作用と言ってるように
副作用は避けるべきものとして考えられてる
サブルーチンは戻り値がなく副作用がメイン
コードの責務とか考えなしに、似たようなコードがあったら
とりあえずサブルーチンにまとめちゃえってなる
その結果テストが容易ではなくなる サブルーチンと関数を別キーワードで定義&コールするFortran流もありだと思うけどなあ >>910
クソプログラマーが「こういうコードはクソ」と言った場合、十中八九その認識のほうがクソ
サンプルが追加されたな クソプログラマーは自分がクソだという自覚ができない
自覚ができないからこそクソプログラマーとして生き続ける >>910
サブルーチンに戻り値はないというのは勝手な思い込み
プログラミングにおける副作用という言葉は薬の副作用や副反応と違って一般的に望ましくないものという意味は全く無い
主張の中心となる用語をよく理解せず勝手な思い込みでオレオレ理論をふりかざすやつがクソプログラマーでなくなんなのだろうか?
自分の認識が間違ってるかもしれないとは考えないクソプログラマーの特徴がよく表れている 関数呼び出しは遅いから関数しか無いCは使えないという恐ろしいFortran使いが結構たりするけどな… まあインライン化やマクロ駆使してオーバーヘッド削ったCよりは絶対読みやすいので、一理ないこともない 今時FORTRAN使いとかいるのか・・・
どこで使っているんだ?w たぶんおじさんの想像するFORTRANとは随分違う言語だぞ >>918
母数がわからんけど、HPC分野だとまだまだFORTRAN優位
次世代スパコン「富岳」の重点課題で開発するアプリのうち,Fortranでないのは一つだけ.
https://qiita.com/implicit_none/items/ad4c556c043a91fa0dc4 サブルーチン・副作用は、状態を持つから、ややこしい。
Ruby 3 のマルチコア並列処理・Ractor でも問題になっている
状態を持つと、共有変数の排他処理が難しいから、
関数型のElixir みたいに、immutable にしないといけない デッドコードは、見つけて、取り除く必要がある。デッドコードを残しておくと、プログラマの理解と行動を
妨げることがあり、コードが実行されて、重大な問題を引き起こすリスクもある。 デッドコードの削除は、
技術的な問題ではない。Kevlin Henney氏によると、それは考え方と文化の問題だ。
https://www.infoq.com/jp/news/2017/03/dead-code/ 仕様変更でなくてもよくなった箇所は、削除より、いったんコメントアウトで対処した方がいい。外国人はコードを変えて失敗する能天気だから、あいつらの言うことに従ってはいけない。 必ずそういうことを言い出すやつがいるが、経験不足だと思うよ。いちいち見比べる方が効率が悪い。 すぐに削除しない方がいいと書いてあるのに、早とちりさんが多いね。 >>928
> いちいち見比べる方が効率が悪い。
差分ツールも知らない爺乙 削除するなとは言ってない。ガンガン削除してもいいが、残ったコード内でこう作った意図がわからなくなるくらいなら、システムの作り直しの時点で変えるべきた。
元のデッドコードの話自体は初心者の話だし、コードの書き換えに躊躇がなく、バグだらけにするのは外国人に多いわけで、有名な製品をアップデートするとおかしくなる最大の理由。 YAGNI (You Ain’t Gonna Need It) 直訳は「そんなモン要らんって!」
YAGNIの原則は「機能は実際に必要となるまでは追加しないのがよい」とすること。後で使うだろうという
予測の元に作っても、実際に使われるのはほんの一部。ソフトウェア実装において「予期しない変更」は常
についてまわり、できるだけ設計をシンプルにするべき。現実の問題に集中して余計なモノを足さない。
それがヤーグニ。
https://www.jabba.cloud/20180119204314/ >>937
仕様変更を想定しないといけないとわかっていながら、そのときの仕様で最適化するのは、その方が周囲から理解をえやすいから。 外国人の言うことをありがたがっているようでは話にならない。 >クソコードとは何か
スマホ アプリの6割未利用!不要なアプリの大量保有はバッテリー消耗の一因。不要アプリは定期的に削除を。
https://prtimes.jp/main/html/rd/p/000000049.000005362.html
Androidスマホのキャリアアプリが1GB以上データ通信!?削除・無効化できるアプリ一覧
https://sp1.jp/career-appli/ 詫びソースコードコメント 1件
アイミョン
[KS108-054]
テーマ:冒険者の広場・DQXショップ2020/02/17 16:22
今月になってから急にシステム障害が多発しており、運営としては説明責任を果たすべきと考えます。
https://hiroba.dqx.jp/sc/news/category/3/
不具合を出した個所とその修正箇所の両方を「詫びソースコード」として開示するのです。
ソースコードも企業の重要な著作物ですが、だからこそ開示して詫びることが大切です。
それと同時にシステムの不具合がなぜ多発しているのかを、プレイヤーも一緒に考えるのです。
バンダイナムコゲームスの『ドラゴンボールZ ドッカンバトル』を見習うべきです。
https://i.imgur.com/s2RHkxT.png ここに書かれた罵詈雑言と不要な議論の文字列
これがまさにクソコードだ >>921
2008以降になるとまともな和書殆ど無いよな、Amazonで見たら★2でわろた
英語なら20冊くらい引っかかって高評価だけど学術系出版社だから¥10000〜
俺もコンパイラマニュアルしか読んでないわ クソコードの例
変数を取り違えて値を設定し、途中で本来の値を設定し直すコードが存在する。 >>948
デッドコードの一種だね
値を取り違えて設定してることや
本来の値を設定し直してることが分かるようなら
たいしたクソではなさそう フォートラン並みの配列演算記述ができるJuliaやPython/scipyが出てきたから、ガチる人以外はそっちに流れたんだろ
Matlabもフォートラン並みに高級だけどかなり高いし、プラットフォームが限られる
特にJuliaはCじゃなくフォートランの慣習に合わせてるし移行の敷居が低い Matlab, R → Python → Julia
Matlab, Rは、もうダメ。
MIT は、Julia へ行ってる >>949
10万行のコードを解析してわかったことだけどね。 >>952
それがほんとなら根本の問題は別の所にあるよね
根本原因を究明できて再発防止策がとれたなら役に立ったクソコードということになる 覗いただけだけどテストコード不要論を唱えるプログラマがこの世に存在するとはな..
プログラマつっても世の中には色んな奴いるんだな >>955
JS知らないやつだからほっといてあげて >>956
いやいらんでしょ
そのテストコードのテストはしなくてレビューでとか言ってる奴いたけど(笑)
結局それが正しいとはなぜ言えるのか? テストコードがかなりのプログラムだとしらないやつがいるから仕方ない。 >>958
正しいと言える必要なんてないからね
テストの基本 そもそもテストって想定どうりの動きをしてくれるかを確かめる為に書くんでしょ
テストコードなんて書く必要ないと思うならそれでいいし、テストなんて手動でいいと思ってる現場と規模感ならそれでいいんじゃない? あとテストコードのテストって何?
テストコードを走らせて想定通りに動けば完了だよ
コードレビューはするでしょう
テストコードのテストコードを書けよという意味で言ったの? >>961
テストは手動でいい・・・現場の方針でしかない
自動テストしないと再テストに時間がかかる・・・事実
再テストに時間がかかるがテストは手動でやる・・・アホな現場の方針でしかない
というだけだよ >>963
その程度のことデバッグすれば分かるやん
テストコードを書くだけ無駄 >>965
一回のデバッグの時間はどれくらいですか? もう降参かな?テストをしないでデバッグだけしてると
時間が膨大にかかるからねw
なによりテストしてないってことだから
エンバグしたことがわからない >>965
例えば千項目毎回テストするの?
そんな項目数がないような小規模案件ならなくてもいいかもねw
まさかリグレッションテストは不要だっていう主張なのかな? >>968
落ち着け。>>964はデバッグすると言ってる
テストしないでデバッグだけするんだ
テストはしないからテスト時間は0なのだ
やつはテストしないで製品をリリースしてるんだよ!
そしてバグが見つかったときに製品をリコールしてるんだよ
やつは組み込み系開発者だからな テストコード組むのが上手いヤツはクラッカーに向いてる テストは甘えと、あわしろ氏が言ってたけどな。
間違えなければテストする必要が無い。 間違えなければテストする必要が無い。
そしてテストしなければ間違えたことがわからないのだ
「バグは見つかりませんでした!」 テストするってことは間違える前提で書いてるんだろ?
甘えすぎだわ。 それよりも手動の総合テストを頑張ったが良い、自動テストはコーダの自己満でしかない、ユーザと向き合ってないコミュ症の底辺がやること 俺たちはシステムをデザインしてるんだという大局感が大事 >>977
手動の総合テストにどれだけ時間がかかりますか?
まだこの質問に答えてもらってませんよ? ロケット打ち上げて爆発させるのがシステム開発のイテレーションなんだよ 底辺コーダはスコープと聞いて変数しか思い浮かばんだろwww >>981
スコープによるなら
○○の場合は、これぐらいとか
答えられるだろw
お前の実際の話をすればいいんだよ
手動テストしてないのか? >>984
自分でスコープによるといっただろ
何も思いついてないのにスコープって言ったんか? >>985
スコープがなんなのかわかってないようだねwww スコープをまず説明してみwwwきちんと説明できたらなぜ○○に入れられないか自ずとわかるから 981 名前:デフォルトの名無しさん[sage] 投稿日:2021/03/15(月) 20:14:03.52 ID:+SM2oHa/ [5/8]
>>979
スコープとかものによるんじゃないかな
↑「じゃあ○○(スコープ)の場合はこれぐらいと言ってください。」
986 返信:デフォルトの名無しさん[] 投稿日:2021/03/15(月) 20:19:31.02 ID:+SM2oHa/ [8/8]
>>985
スコープがなんなのかわかってないようだねwww
↑「わかってるお前が言ってください。」 >>990
お前がスコープが何なのかわかってないのがはっきりしたなw 答えられないならもうスコープについては答えなくていいよ
お前の実際の話をすればいいんだよ
実際の手動テストにどれくらいかかってるのか言え
スコープはどれでもいい >>992
〇〇を言ってくださいと君は言ったわけだがスコープの定義によりそのようなことはできないと述べたよ
なぜできないかはスコープの定義から自明なんだけど、君はスコープを何だと思ってるのかな?おん? あと逃げるなよ?
実際の手動テストにどれくらいかかってるのか
いうだけなんだから簡単だろ >>993
君は答えなくてはいけないよ、スコープとはなにか!!(一喝) >>994
もうすでにスコープの話は不要と言いました。
実際の手動テストにどれくらい時間がかかってるんですか? どうして実際の手動テストにどれくらい時間がかかってるか言えないんですか?
膨大な時間がかかってるからですよね 手動テストは時間がかかることが証明された
反論あるならどーぞ(笑) このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 44日 2時間 52分 19秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。