テストを軽視する者ども

■ このスレッドは過去ログ倉庫に格納されています
1仕様書無しさん
垢版 |
2008/06/28(土) 19:49:20
何だよ、8割方終わった風な顔で、「コーディング終わりました。後はテストするだけです。」
って...
コーディングが終わってやっと3割終わったかどうかってところだろが。
コーディングが終わってからが本番だっちゅーの。テスト仕様書に従い、テストデータ用意して、
正常系、異常系含めて、抜かりなく全網羅テストすること。これがどれだけ大変なことか。
本当に理解してんのか? コーディングが終わってやっとスタートラインに立ったぐらいの気持ち
でいろよ、ってくヘラヘラしやがって。

こういう、テストを軽視する輩共が、プログラミングという作業を軽んじ、工数見積りを誤り、
徒に製造を急かし、バグの混入率を間接的に高めているということに気づかんのか。
どんな優秀な奴だって、人間だもの、間違いを犯す。バグを生み出す。それを極力未然に防ぐのが
テストだろ。いつバグが判明するかとドキドキしながら納品後の時間を過ごすか、自信と満足感を
もって笑顔で過ごすか。どちらがいいか自明のことだろ。

プログラミングはなぁ、テストに始まりテストに終わるんだよ。要件を理解し、その中に潜む異常
パターンを見抜き、どんだけ抜かりなくテストをやれるかが一流とカスを分かつ分水嶺だ。
コーディングなんかできてあたり前、肝心なのはテストだ。テストを極めてこそ、一流のプログラ
マーって呼べるんだよ。

この馬鹿者どもが。
2008/07/02(水) 21:36:21
テスト=設計書という前提だがな。
13780
垢版 |
2008/07/02(水) 21:42:14
>>135
プログラミング可能なテストということなんだろ。
コード化が可能なほど詳細に書かれているテストってどうやって記述
してあるんだ?

設計とテストがイコールということは、設計書のタイトルをテスト仕様書
に変更しても問題ないということか?

テストは、設計からすると客観的な別の存在であるべきではないのか?


2008/07/02(水) 21:44:10
世の中には外部設計と内部設計とがあってだな(ry
13980
垢版 |
2008/07/02(水) 21:53:46
>>138
外部設計と内部設計は、誤った用語で今は死語になっている。

設計に内部も外部もない。
作りたい対象の詳細が書かれているものが設計書。
外部と内部の区別はない。
14080
垢版 |
2008/07/02(水) 22:16:44
>>130
>それは、システムテストのカバレッジが100%でも
>ユニットテストのカバレッジは100%ではないということ。
>つまり、バグがあったとしても、システムテストの
>カバレッジが100%になるということを意味する。
システムテストのカバレッジが100%=ユーザーに発見できるバグは0個と
言う定義なので、もしバグが見つかったらシステムテストのカバレッジ
が100%ではなかったということになる。

ユーザーがバグを発見できるということは、それは、システムテストで
テスターでも発見できるはずのバグと言える。

ユニットテストをちゃんとしておくとテスターは楽になる。
でもユーザーには関係がない。
2008/07/02(水) 22:29:57
>>139
顧客に言えよw
142124
垢版 |
2008/07/02(水) 23:27:10
うーんと、とても100人で1000万行のシステムを作ってる人の発言とは思えないんだよなぁ。
反論するのもアホらしいというか。
かまってちゃんの学生さんって気がしてきた。
2008/07/02(水) 23:34:18
100人で1000万行が本当だとしても、多分>>80は、まともにコードが書けなくてVBScriptくらいでしか
テストが書けない10人いるテスターの下っ端だろ。
しかも、派遣テスターwww
2008/07/02(水) 23:54:15
アナログ(エンドユーザ) と デジタル(プログラム)
の間をとりもつのがテスト。
それぞれ言い分や希望、得手不得手、好き嫌いが異なるのは
当り前。そこはお互いを尊重し譲歩すべきは譲歩し、テスト
という愛の証、いわば結婚指輪があってこそ両者は結ばれる。
テストのない結納(納品)は、すぐに破局を招くのが必定。
ワハハハハハハハッ なんのこっちゃ
2008/07/03(木) 00:06:52
100人で1000万行のシステムで、外部設計も内部設計もない設計書しか作らないってどういうこった。
クライアントとレビューして承認してもらうというマイルストーンは無いのか?
仮にあったとして、実装仕様てんこ盛りの仕様書をレビューしてもらってるとかか?
それとも、実装仕様がほとんど書かれてない仕様書しか作らないのか?
それで、スキルがばらばらなプログラマ90人で、ちゃんとしたユニットテストも行われず、
どうやって品質を担保してんだよ。

その回答が、プロ10人によるシステムテスト?
2008/07/03(木) 00:24:57
>>117
> システムテストのカバレッジは100%必須。未達成ならリリースはない。

>>140
> システムテストのカバレッジが100%=ユーザーに発見できるバグは0個と
> 言う定義なので、もしバグが見つかったらシステムテストのカバレッジ
> が100%ではなかったということになる。

カバレッジが100%に達成したことを証明できる人は誰もいないので、
リリースは永遠にないのですね。わかります。
2008/07/03(木) 00:53:15
プログラマの心理とすれば、テストってめんどくさいんだよね。
特に結果が分かりきってる(と自分で思い込んでいる)メソッドのテストコード
をいちいち書くのがね。
で、俺がこの前ミスったのは、Cのコードで

double some_calc(int a, int b) {
return d = a / b * 12.34;
}

みたいな感じの奴。 こんな四則演算なんて間違えようがないだろって高を括ってた。
ちょっとした油断でバグって生まれるんだよなぁ。
上の書き方だと、
some_calc(6, 2) だと問題無いが、
some_calc(2, 6) だと期待した結果にならないわけで。当り前だけど。

正解は、return d = (double)a / (double)b * 12.34;
などとキャストするか、引数をdoubleにしとくべきでした。

と、あらためてユニットテストの重要性を認識したしだい。デグレを起こさないため
にもね。
2008/07/03(木) 00:55:48
うわ、間違ってた。
return d = a / b * 12.34;
じゃなくて、
return a / b * 12.34;
ね。下の奴も同じく。
2008/07/03(木) 00:58:01
投下するレスのユニットテストも必要だな
2008/07/03(木) 01:02:24
面目ない。。。。
2008/07/03(木) 01:06:44
>>80のおかげでユニットテストの重要性を再認識できました。
ありがとう!!>>80
2008/07/03(木) 20:39:02
>>149
俺たちがバグ出しするから問題ないよ
15380
垢版 |
2008/07/03(木) 23:58:00
>>151
いったんユニットテストを頑張って本当にバグが無くなるかを
試せばいい。経験は大切だと思う。
そのためには、ユニットテストのおかげでバグが減ったことを証明する
方法、つまり指標を決定しなくてはいけない。

まさか闇雲にユニットテストを行うわけじゃないだろ。


>>147
プログラミング能力の低さを、ユニットテストで補うつもりなら
よした方がいい。プログラミングスキル向上の方に力を注いだ方がいい。

> double some_calc(int a, int b) {
> return (double)a / (double)b * 12.34
> }

問題点1:
 関数の仕様がありえない。
 int -> double

問題点2:
 b の 0 かどうかのチェックが必要。0 除算くらいは避けよう。

問題点3:
 掛け算から先にする。説明が面倒だからググれ。浮動小数点
で演算する場合は、精度を意識しよう。

以上3つの問題点は、ユニットテストでは見つからない。
なぜかって?プログラマーのレベルを超えるユニットテストが行われる
事は不可能だからだ。
2008/07/04(金) 00:03:14
>問題点3
>掛け算から先にする。

え?
2008/07/04(金) 00:04:08
つかユニットテストコードは先に書け
2008/07/04(金) 00:08:45
なんかとんでもないこと言い出したな・・・
調子に乗らずにちょっと前までのレスで終わりにしてれば締まってたのに
15780
垢版 |
2008/07/04(金) 00:13:45
>>155
テストファーストの事だな。

>>154
よーく考えてみよう。
ちなみに掛け算から先にする理由は2つある。
158仕様書無しさん
垢版 |
2008/07/04(金) 00:14:57
>>147
プログラミングを軽視する者ども
というスレ立てても良いですか?
2008/07/04(金) 00:19:57
>>158
「マを侮るなかれ」
ってスレがいいと思います
2008/07/04(金) 00:29:17
80さんよ
一応言っておくが>154は「かけ算から先」がコードの解説と勘違いしてると思われ
俺もそう勘違いしたけどね

問題点と書きながらいきなり修正案を書くのはアホだろ
16180
垢版 |
2008/07/04(金) 00:37:43
>>160
なるほど。そこまで意識していなかった。
確かにその通りだ。

一応、掛け算を先にする理由を書いておく。
掛け算を先にするとたとえ引数がintでもキャストする必要がなくなる。
演算子は、暗黙のうちにオーバーロードされるからね。

あと、割り算してすごい小さな値になったらその時点で精度が
落ちてしまうから先に掛け算をする方が良いのだ。

分かっている人からすると「何をいまさら・・・。」だろうけど
念のためにね。
16280
垢版 |
2008/07/04(金) 00:43:03
話はそれたけど、結局、プログラマーがユニットテストで解消される
バグは、プログラマーの能力に依存することは分かったと思う。
それでも、ユニットテストは必要だ。ただし、あまり依存しすぎては
いけない。

アジャイルとか、テストファーストとか言っているカリスマプログラマーの
意見は、「天才プログラマーだからこそできる芸当である。」という事を
念頭に置くべきだ。

ユニットテストで成果を出すための前提条件は「高度なプログラミング
能力に裏付けされた分析・設計能力を備えた人材が揃うこと。」
だと俺は思う。
2008/07/04(金) 00:44:22
どっかの糞コテの文体に似てきたなあ・・・
2008/07/04(金) 00:45:08
おれは3.5流PGだけど、
だからこそ
作ることよりちゃんと仕様を満たすことの確認こそに命をかける



もってっけー
2008/07/04(金) 00:59:16
正常系なんて客にやらせる
異常系は自分でやる

これだけやりゃ十分
166仕様書無しさん
垢版 |
2008/07/04(金) 02:24:20
>>162
>話はそれたけど、結局、プログラマーがユニットテストで解消される
>バグは、プログラマーの能力に依存することは分かったと思う。

そこが、まず間違えで、ユニットテストはバグを解消するモノではなくて、
外部仕様(入力・出力・副作用の具体例)そのもの。

今時、テストファーストではない開発は、「ゴールの決まっていないマラソン」
とおなじようにナンセンスだと思うけど、、、

>ユニットテストで成果を出すための前提条件は
>「高度なプログラミング能力に裏付けされた分析・設計能力を
>備えた人材が揃うこと。」

仕様を網羅するユニットテストを作れないということは、
設計できないということと同義。

ユニットテストを作れるくらい全然「高度な人材」ではないと思う。

# 最後はレビュアーの腕次第とはいえ、コード・カバレッジの自動計測
# など網羅性をはかるツールもいろいろ出てきているし、、、
2008/07/04(金) 02:40:19
>話はそれたけど、結局、プログラマーがユニットテストで解消される
>バグは、プログラマーの能力に依存することは分かったと思う。

テストファーストという言葉があるように、
バグが発生する前から、テストを書くことができるわけなんだよな。
バグが発生する前というのは、コードをかくまえってこと。

ということは当然、コードを書く人ではなく、
仕様を書く人がテストを書いて、あとは実装者に任せるということも可能なわけだ。

だから仕様書を作る人が、テストコード書けばいいんじゃね?
プログラミングができない人が、設計をするのがどれだけナンセンスなことか。
2008/07/04(金) 02:47:02
携帯電話なんて、発売後に顧客が実地テストさせられてるよなw
2008/07/04(金) 02:49:50
あれは顧客じゃない
βテスター
2008/07/04(金) 02:53:07
いや、あの製品とか、あの製品とか。あの製品とかの話だよ。
2008/07/04(金) 02:54:15
金払ってまでβテスタに立候補するなんてステキ
2008/07/04(金) 03:00:04
カネ貰ってもお断りしますってカンジだな
2008/07/04(金) 05:16:42
>>80
>>145にコメントしろ、カス
2008/07/04(金) 05:26:42
携帯なんて所詮おもちゃ。品質は一番あとまわし。
軍事・航空宇宙・医療機器・発電所とかだと品質が命。

80は何作ってるんだろうね?候補は大体想像つくけど。
2008/07/04(金) 05:46:53
1000万行のうち、スケルトン・自動生成が700万行なので、UnitTest軽視なんですよ。
2008/07/04(金) 07:23:13
80はユニットテストは属人性が高いと言っているが、なぜだかシステムテストは属人性が高くない
ような前提になっている。
ユニットテストが成功する前提条件として高度な能力を持ったプログラマが必要としておきながら、
なぜだかシステムテストさえやれば、テスタの能力は関係ないような記述になっている。
また、もっとも効率の良いテストケースを導き出せるのはホワイトボックスの視点を持ったプログラマ
であるにも関わらず、それを全く無視してる。
単体テストは必要であると言いながら、どのように実行しているかを曖昧にして具体的な説明を
避けている。
バグはできるだけ早く解決するのが、もっともコストが低いのは常識なのだが、システムテストまで
解決を遅延させても平気なのはなぜだろうか。
プログラマを育てる気はないのだろうか。全員派遣かSESなのか。
2008/07/04(金) 20:44:02
> することは分かったと思う。

この辺りの言い回しが非常にうさんくさい
某アホコテっぽいし
2008/07/04(金) 21:21:15
1000万行ってのが胡散臭いんだよな。
システムテスト件数30万件で、バグは3〜6万件くらいか?
10人じゃさばけないよなぁ、コミュニケーションコスト的に。

ちなみに、Windows 2000は2900万行で、出荷前のバグ件数は数十万件だったらしいぞ。
80のシステムは多分業務系だろうから件数は甘めに見積もった。
2008/07/04(金) 23:17:16
早めにバグを潰した方がトータルコストが安くなる

プログラマはうれしい

テスターもうれしい

でも会社はぼったくるよ

クライアントのためにならない
2008/07/05(土) 01:38:16
> クライアントのためにならない
ここちょっと違くね?
時間を金で買うクライアントもいるよ
2008/07/05(土) 08:05:40
トラブルシステムを経験してるクライアントは
品質面についての時間、工数をちゃんと理解してくれることが多いけど

「ハァ?品質?金払ってるんだから問題ない
システム入れんのは当然だろ?スケジュール見直し?
ふざけんな、こっちはお客様だぞ!」
というお客様は多い。
182仕様書無しさん
垢版 |
2008/07/05(土) 11:57:14
同じ物作りでも、H/Wは徹底的にテストするんだよなぁ。
ちゃんとスケジュールを確保し、テスト項目をドキュメント化し、
何回も精査を重ね、それこそ、しつこいぐらいにテストする。
要件や性能の確認ははもちろん、耐久性、動作限界(温度、湿度、
etc..)、危険の可能性はないか、等々。
それにH/Wの場合は、テストだけでなくマニュアルもしっかりして
いる。人命に関わるケースも多いし、法令化されているから当然と
いえば当然なんだけど。
しかし、これほどの徹底したテストを実施しても、品質不良や車の
リコールなどたまにあるわけだけど。

S/W、特に受託型アプリケーション開発の場合は、何故かねぇ...
テストをやらないわけじゃないけど、個人の技量に依存しちゃって
る場合が多いよなぁ。
2008/07/05(土) 16:05:21
>>162
お前のとこのプロジェクトはテストケースレビューしないのか?
低能一人じゃ無理でも、低能三人集まれば1.5倍の能力にはなる
184仕様書無しさん
垢版 |
2008/07/05(土) 16:14:06
>>183
テストケースレビューって必要か?仕様書がこなれてないだけじゃね?
テストに落とせない仕様書は悪い仕様書。

「URLが開けなかったら、エラーを吐く」←悪い仕様書
「200〜206番以外のステータスコードが返ってきたらエラーを吐く」←良い仕様書
良い仕様書は「おいおい、じゃあタイムアウトは別か?俺が担当すんのか?」みたいなツッコミに繋がる。
2008/07/05(土) 16:15:12
>>183
低能一人増える毎に0.5倍なので0.75倍です。1.5倍になるんなら紛れもなく有能な方です。

ちなみに−倍になるのは無能です。

-倍は成果物が0もしくは、焼き直しの仕様が無い成果物しかつくれないって事ね。
低能は一応引き継ぎ出来る。無能は無駄な作業してから結局破棄して一からやり直すので−倍。

落ち目の会社で人が減っていくのは一番有能な連中が消えて低能や無能が増えるので作業効率が落ちる。

それはまだ言いのだが、上が人月取りたい為にさらに人を増やして作業効率を落とす事するので次に有能な連中が消える。

これのスパイラルが有能が一人もいなくなるまで続く。
(ちなみに、低能が有能に化けるので意外に長く続く 無能は低能にも有能にもならない)




いえ、そのスパイラルの最終段階に移行中なんで > 給料遅配。
186仕様書無しさん
垢版 |
2008/07/05(土) 16:17:58
>>185
会社潰れるとgdgdになるから、今のうちに転職した方が良いよ
責任感から動くと、周りを巻き込んで崩壊するぜ
2008/07/05(土) 17:48:19
>>184
良い仕様書から作り出すテストって
ほぼ全てがユニットテストで書けるんだよね。

ユニットテストが苦手だといわれていたGUIでさえ、
GUI操作の自動化により、かなりのことが可能になっている。

出来ないのは見た目のデザインぐらいじゃないかな。
(ここの背景はもっと明るい色でとか)

システムテスト? よくわからないな。
それはユニットテストで出来ないものなのかね?
188仕様書無しさん
垢版 |
2008/07/05(土) 17:54:19
>>187
単なる名称とかやりかたの違いで、システムテストもユニットテストも同じ様なもんだよ。
いくつかのチームで作ってると、単体同士では良くても、全体としてパフォーマンスがでなかったりするから。

デザインのテストみたいな感性系は、テスターが大量にいるからなあ
2008/07/05(土) 17:55:26
仕様書のテストはどうやるんだ
2008/07/05(土) 18:17:43
>>189
その仕様書には、どんなことが書いてあるの?

そして、その書いてあることが正しいかどうかは
誰が判断できるの?

この二つの質問に答えることができれば、
おのずとどうやるかがわかると思う。
2008/07/05(土) 18:32:10
ところで、仕様書の内容だけで、バグが無いソフトが作れるのかな?

理想としてはそうあるべきなのだろうが、仕様書を書く人に聞きたい。
本当に漏れの無い(全ての例外的な事象を考慮している)仕様書を書いていますか?

結局はプログラマがユニットテストという形で仕様書を書いていませんか?
こういう場合にはこうなるという仕様書がユニットテストの中にしか無いってことありませんか?

たぶんね。仕様書の内容を変更があるたびに短時間で
全て見直すことが出来ない限り漏れが無い仕様書を書くことは
出来ないと思うよ。

ユニットテストのように、OK/NGって表示されないのなら、間違っていてもいいもんね。
だから絶対仕様書のテストをサボるでしょ? 漏れの無い仕様書書かないでしょ?

だからプログラムコードではない自動的に何度も検証できない仕様書は、
あくまで参考資料のために作るのであって
ユニットテストを本当の仕様書&テストコードにするべきだよ。

時間は限られているからね。何万とある検証項目を何度もする時間は無いんだよ。
2008/07/05(土) 18:34:03
ユニットテストを書く人をプログラマーと呼ぶか
テスターと呼ぶか設計者と呼ぶかはこの際問題じゃない。

ユニットテストを書く人が一番重要なのさ。
2008/07/05(土) 18:50:33
シングルタスクのプロセスのテストはまぁ簡単。
だけど、これがマルチタスク、マルチユーザの環境になるととたんに
複雑になる。
排他のことやら、負荷の集中や、リソース不足やら、アクセス制御や
セキュリティー関連やら、想定されるケースが指数関数的に増える。
ファイルひとつアクセスするのにも、DBのトランザクション処理の場合
でも、いろんなケースを想定し、異常ケースでどう振舞うのが正しい
のか考えないといけない。そして普通、仕様書にはそこまで細かく書
いてなく、「このファイルのここをこの値で更新する」ぐらいしか書
いてない。ファイルが無かったらどうするのとか、オープンで失敗した
ら?とか、書き込みで失敗したら? とか。人によってそこを確認する人
もいるけど、だいたいエラーメッセージ出すとか、例外を投げるとか、
アボートさしちゃうとか、PG任せなケースも多いわけで、仕様書とプロ
グラムのギャップってどうしてもあるのよねぇ。ま俺から言わせれば設
計者の怠慢なんだけど、それをいちいち突っ込むのも、時間がなかった
り、面倒くさかったり、人間関係に気を使ったりとかいろいろあってで
きなかったりとか。はぁーとにかくめんどいよ、この業界。
自分でスケジューリングして、自分で設計して、自分でつくって、自分
でテストして、全部自分で責任持つのが一番楽だね。
2008/07/05(土) 18:51:43
>>193
どこを盾読み?w
2008/07/05(土) 19:02:30
>>194 14行目の31列目から2行分だ。
2008/07/05(土) 21:48:53
仕様書のテストなんて恐ろしくて提案出来ないw
197仕様書無しさん
垢版 |
2008/07/05(土) 23:57:14
テストデータをどのくらい作ればいいのか迷う。
2008/07/06(日) 00:07:11
>>197
顧客が満足するくらい
19980
垢版 |
2008/07/06(日) 00:09:16
>>166
外部仕様書に相当するものは、うちではインターフェース仕様書と
呼んでいる。
インターフェース仕様書は、その実現を記した「設計書」と区別される。
さらに、インターフェース仕様書の実現方法は複数あるので、
インターフェース仕様書1つに対して、複数の設計書が存在することもある。

外部仕様書と内部仕様書という言葉を使っているということは、
オブジェクト指向とか使ってないの?言語は何?

>>178
1000万行ってどうも行数が多いから嘘だと思われているようだな。
俺は逆に、少ないから馬鹿にされているかと思った。
でも、うちの業界では別に多い部類じゃないんだけどね。。。。
ちなみに、業務系じゃないよ。





20080
垢版 |
2008/07/06(日) 00:15:21
>>198
良いことを言うな。
うちの顧客は、ユニットテストにまったく興味がない。
説明しても絶対に理解できないし、説明を聞く気持もない。

顧客に説明しなくてはいけない事は、要求(ユースケース)を正しく実
現出来ているかどうかである。

20180
垢版 |
2008/07/06(日) 00:22:15
>>191
設計書にないコードを書くのは禁止されている。
設計書に間違いがあってもそのままコーディングされる。
設計書に不備があったら、設計者に戻され修正される。
そして、レビューが開催される。

責任関係があいまいになるような開発スタイルは、うちではありえない。
外資系なのでそのあたりはかなりドライ。
2008/07/06(日) 00:33:54
っていうかどこのシステム。
銀行とか証券とか知っているけど、全システムあわせないとそれ位いかんぞ。
漏れのところは総計10万行で、×20で200万行。

1000万行ってどんな無能が作ってるんだ!?って意味合いでも疑わしい。
2008/07/06(日) 00:41:55
多分、糞コード、糞仕様オンパレードの携帯の話じゃね?
204166
垢版 |
2008/07/06(日) 01:49:39
>199,200,201
>良いことを言うな。
>うちの顧客は、ユニットテストにまったく興味がない。
>説明しても絶対に理解できないし、説明を聞く気持もない。
>
>顧客に説明しなくてはいけない事は、要求(ユースケース)を正しく実
>現出来ているかどうかである。

なんか、根本的に誤解していない?
誰もこのことに反対しているわけではないですよ。

そもそもシステム「製造」の目的が、
 顧客の提示した仕様を満たすモノを作り
 そのモノが顧客の提示した仕様を満たすことを証明すること。
であることには議論の余地はない。

で、その最終目的にアタックする足場として、
7合目あたりに強固なベースキャンプ(自動ユニットテスト)
が絶対に必要というのが、80さんの以外のほぼ全員が言っていること。

>設計書にないコードを書くのは禁止されている。
>設計書に間違いがあってもそのままコーディングされる。
>設計書に不備があったら、設計者に戻され修正される。
・・・
>責任関係があいまいになるような開発スタイルは、うちではありえない。

だから、設計にテスト仕様の洗い出しを含めろとあれほど・・・
なんか 191 さんの論旨が全く伝わっていないような希ガス。

>外資系なのでそのあたりはかなりドライ。

今日日むしろ外資系(特に米系、特に"I")はAgile一色。
205166
垢版 |
2008/07/06(日) 02:10:28
>>199
>外部仕様書に相当するものは、うちではインターフェース仕様書と
>呼んでいる。
>インターフェース仕様書は、その実現を記した「設計書」と区別される。
>さらに、インターフェース仕様書の実現方法は複数あるので、
>インターフェース仕様書1つに対して、複数の設計書が存在することもある。

だから何?

テストケースは、インターフェース仕様の一部にすべきという
のが私の論旨なのだが・・・

なぜに、80さんのプロジェクトのドキュメント体型の話をなさる?

>外部仕様書と内部仕様書という言葉を使っているということは、
>オブジェクト指向とか使ってないの?言語は何?

オブジェクト指向だろうが何だろうが、

−プログラムには外部仕様と内部仕様とがある
−−外部仕様はこのプログラムをどう使うかを定義するモノで、
   入力・出力・副作用(+前提条件・例外)で表される
−−内部仕様は外部仕様の実現手段

というのは変わらないと思けど、、、

何が言いたいのかよく分かりません。
20680
垢版 |
2008/07/06(日) 08:03:32
>>202
銀行とか証券とかそういうのじゃないよ。って言うか全く違う。
20780
垢版 |
2008/07/06(日) 08:25:39
>>205
ちゃんと整理しよう。

システムの内部=内部仕様書
システムの外部=外部仕様書
だろ。まぁ、一見とてもわかりやすいよな。

では質問
1.システム内部とシステム外部の境界は、どちらの仕様書に書くの?
2.開発するシステムに対しして内部と外部があるわな。
開発範囲=システムとした場合、外部とは、開発範囲の外側と言う
  ことにならないか?
たぶん。
205 の頭の中を整理すると
-> 外部仕様書=インターフェース仕様書、ユースケース仕様書
内部仕様書=設計書
なんだと思う。

問題点1
   システムの外部は、開発対象ではない。
  問題店2
   レイヤー、サブシステムに分割されているシステムの場合、
あるサブシステムの外部仕様は、上位のサブシステムの内部仕様書
になる(全く一緒ではないが)。つまり、外部と内部でわけると
仕様書に重複が生じる。
   また、インターフェースは、レイヤーやサブシステムに縛られない。
   つまり、単に外部仕様とすることはできない。
  問題点3
   インターフェースを誤解している。
インターフェースは、極めて外部に近い内部ということになる。
20880
垢版 |
2008/07/06(日) 08:33:20
>>205
うちは、インターフェースに対するテストを重視している。これを
うちは、システムテスト(サブシステム)テストと呼んでいる。

システムの実現側つまり、ソースコードの隅積みまで
行うテスト(単体テスト、ユニットテスト)は、普通にやってる。
システムテストほど重要視していない。


>>205
の最大の矛盾は、外部仕様書に基づいてテストを単体テストとかユニットテスト
と呼んでいることだ。単体テストは、内部のテストじゃないのか?
外部仕様書が書かれていることがちゃんとできているか=システムテスト
内部仕様書に書かれていることがちゃんとできているか=ユニットテスト

だと思うが?だとすると、205は単体テストをやっていないことになるな。

2008/07/06(日) 09:07:05
としたら、学術系か軍事系か宇宙・航空系か・・・。

まあ

166の言いたい単体・ユニットテストは
>システムのテスト手法の一つで、個々のモジュール(部品)のみを対象としたテスト。
>対象のモジュールが仕様書で要求された機能や性能を満たしているかどうかをテストする。
>複数のモジュールを組み合わせて行なうテストは結合テスト、システム全体を対象に行なうテストはシステムテストという。

80の言いたいのは単体・ユニットテストは
>単体テストとは、プログラムを検証する作業の中でも、プログラムを手続きや関数といった個々の機能ごとに分割し、
>そのそれぞれについて動作検証を行う手法のことである。

大体こんな感じだろ、粒度の問題でその辺変わるので双方間違ってないように見えるけどな。
双方ともシステムやサブシステム”未満”のテストを言っているが、粒度によっては、外部インターフェースとのやり取り
をするレベルだと外部仕様書レベル元に単体・ユニットテストやったりするわけだし。
21080
垢版 |
2008/07/06(日) 09:27:55
仕様書・・・システムが、ユーザー(人、外部システム)に提供する利益
      が記されている。
設計書・・・システムが、仕様をどのように実現するかが記されている

仕様書に基づいたテスト・・・システムテスト
設計書に基づいたテスト・・・ユニットテスト

仕様書や設計書はシステム、サブシステム、コンポーネントといった
開発対象それぞれに対して作成される。
○○システム仕様書、○○システム設計書という具合
で、インターフェース仕様書は、インターフェースのことだけ書いた
仕様書。

仕様書と設計書だと、仕様書の方が重要。
人と人とのコミュニケーションやレビューの対象は、おもに仕様書。

設計書は、開発スタイルによるが、自分で設計書書いてプログラミングする
場合は、事細かに書かずに、ユニットテスト(xUnit)で代用することもできる。

ユニットテストはもろ刃の剣で、プログラマーのレベルが高い事が前提だ。
それに、テストコードを書くのはコスト高だ。

これを解決するのに何年か前から試行錯誤を繰り返している。
その解決方法のひとつが、xUnit以外の専用のテストツールを使ったテスト
と第三者によるユニットテストだ。
21180
垢版 |
2008/07/06(日) 09:31:50
>>209
粒度は、開発範囲(スコープ)と詳細度(レベル)の2次元で定義すると。
今回のケースをとらえやすくなる。

今、ごちゃごちゃになっているのは、スコープを無視して話をしているからだ
。外部と内部という簡単な方法で開発対象を規定しようとしているところに
無理があると思ったから、粒度(スコープとレベル)を物差しに加えてみた。
21280
垢版 |
2008/07/06(日) 10:17:18
>>166 の言ってるユニットテストは、
スコープ=小さなシステム(サブシステム、コンポーネント、ライブラリ)
のシステムテスト(外部から見たふるまいのテスト)だと思う。

21380
垢版 |
2008/07/06(日) 10:18:37
>>209
の言うとおり、粒度に惑わされるが、どんなにスコープが小さくとも
仕様書に基づいたテストは、全部、システムテストだ。
つまり、システムテストは、システム(サブシステム、コンポーネント)の
境界をテストすることだと言える。
システムをサブシステムやコンポーネントに分割すれば、
システムテストの件数が増大する。分割しなければ、ユニットテストの
件数が増大する。
分割していないという事は、システムの詳細を仕様化していない
ことになりテスト工数が増大する。
よーは、システムを適度に分割して、分割した境界についてテストを行う
ことが重要で、単純にユニットテストを強化しても不具合は減らないと
言いたいのだ。
まぁ、よくよく聞けば。同じ事を言っているみたいなので安心した。
要点は、
・テストファースト
 →仕様をテスト可能かどうか検証してから設計する。
・粒度が高い場合
 システムを分割して、分割したサブシステムを仕様化する。
 そして、その際にテストファーストを実施する。
・粒度が低い場合
 一人で切り盛りできるレベルになったら、プログラマーに任せる。

あと、俺のミスだが、
ユニットテストをテスターが行うというのは、厳密には、
「粒度の小さいシステムテストもテスターが行う。」だ。

粒度の小さいシステムテスト=ユニットテストと混同してたな。
2008/07/06(日) 12:44:42
お前はまず開発工程の定義から勉強して出直して来い
2008/07/06(日) 13:20:18
>>214
ウォーターフォールに慣れすぎた古き人々よ

落として焼かねば変わらんのか?
2008/07/06(日) 13:52:45
要求仕様を満たしているかをテストするって考えがまるっきり無いんだな。
自社製品ならまだ知らず、顧客から注文された製品なら、重要な事なのに。
2008/07/06(日) 16:18:27
> 仕様書に基づいたテストは、全部、システムテストだ。

なら、ユニットテストは全部システムテストってことになるな。
2008/07/06(日) 16:23:08
ユニットテスト以外で、
どうやってシステムテストをやっているのだろうか?

いや、果たしてやれるのだろうか?
2008/07/06(日) 16:23:56
> ユニットテストはもろ刃の剣で、プログラマーのレベルが高い事が前提だ。

その点、システムテストは、レベルが低くてもやることができる。と?
2008/07/06(日) 16:24:48
> これを解決するのに何年か前から試行錯誤を繰り返している。
> その解決方法のひとつが、xUnit以外の専用のテストツールを使ったテスト
> と第三者によるユニットテストだ。

残念ながらユニットテストをやることは必須。

システムテストでは、ユニットテストの代用にはならない。

なぜなら、システムテストは適当なテストだから。
2008/07/06(日) 16:26:58
「適当なテスト」の意味は、レベルが低いやつでもできるテストであり
バグがないことを保障していない。
値を入れて、それらしい値がでてくれば、それでオッケー的なもの。
例外的なことを考慮していない。異常な値を入れたときどうなるかは
一切考えていない。
2008/07/06(日) 16:28:48
システムテストでどんな内容をテストしているかを
具体的にいってくれれば、それがユニットテストでやれるってことを
証明できるのになぁw
2008/07/06(日) 16:42:03
>>222
そりゃないんじゃないか?
名前が違うのかも知れないけど、うちのシステムテストって
・チームAが作ったデータベース周り
・チームBが作った入出力周り
・チームCが作った夜間バッチ周り
を、一斉に動かしてどこがボトルネックになってるか調べるテストだけども。
(データベースと入出力のAPIとか応答速度は決めて、その速度出るのはテスト済み)
2008/07/06(日) 16:59:40
システムテストとユニットテストはやることの対象が違うんだから、
システムテストをいくらしたところで
ユニットテストの工数は減らないよ。
そもそも減らしてはいけない。減らす = サボるってことだから。
システムテストはユニットテストの代わりにはならない。

システムテストをさぼることで、無駄なユニットテストをやらされたとしたら、
それはユニットテストが問題なのではなく、システムテストやったやつがヘボで、
そのとばっちりを食らっただけの話。
2008/07/06(日) 17:04:33
>>223
ボトルネックになっているとわかった後どうする?
修正するよね?

そのときユニットテストがあれば、
不具合を入れることなくパフォーマンスのみを
あげることができたって自信が持てるよね?

ほらどうだい。ユニットテストってすばらしいだろう?

それにボトルネックになっているのを見極めるために、
同じ条件で同じ操作を何度も繰り返すものだ。
どうだい。ユニットテストで自動化されていればそれも可能だろう?
2008/07/06(日) 17:06:18
>>225
だからよ。ユニットテストはやってるって書いてるだろう?
>(データベースと入出力のAPIとか応答速度は決めて、その速度出るのはテスト済み)

>システムテストでどんな内容をテストしているかを
>具体的にいってくれれば、それがユニットテストでやれるってことを
>証明できるのになぁw
↑は、おかしいだろ。
ユニットテストで出来ることと、システムテストでできることは別じゃね?
22780
垢版 |
2008/07/06(日) 17:20:08
>>217
そもそも、ユニットテストという言葉が微妙なんだ。

>>219
システムテストは複数のテスターによって実行できる。
テスターは単価が安い。


22880
垢版 |
2008/07/06(日) 17:26:31
>>225
の言っているユニットテストはなんなの?
「テスト用のプログラムと結合して自動的にテストを行う」事か?
22980
垢版 |
2008/07/06(日) 18:10:30
>>225
>システムテストでどんな内容をテストしているかを
>具体的にいってくれれば、それがユニットテストでやれるってことを
>証明できるのになぁw
もし証明できるなら、逆も証明することになる。
システムテストとユニットテストは等価変換できるという、
相当、大それたことを言っていることに気づこう。
2008/07/06(日) 18:47:53
80は色々いっているけどプログラムの動作レベルに関して言及していない、
テストは概ねブラックボックスに関して述べている。

よりはっきりいえば、詳細なホワイトボックステストをテスターがやるのは意味が無いといっているとも思われる。

設計がパーペキなら問題ないし(バグはプログラマーの問題)
設計にバグがあるなら差し戻ししてそこからグラマーが直せばよいとの事。
設計通りにすればとりあえずうまくいうと言う考え。

ホワイトボックスのテストはテストツールでやるとかともいっているねー。

それだけの話。
23180
垢版 |
2008/07/06(日) 19:01:54
>>230
残念ながら全然違う。

俺が言ってるのは、ホワイトボックステストを最小限にするという戦略。
部品化を進めて、各部品の仕様書を書く。仕様書に基づいて各部品の
ブラックボックステストを行うのだ。

ホワイトボックステストを最小限にするのに部品化のほかに
「インクリメンタル型の開発」がある。簡単に言えば一気に作り上げて
一気にテストをするのではなく、少しづつ作って少しづつテストをする
のだ。そうすることで、ブラックボックステストとホワイトボックステストの
乖離を最小限にする。

以下の2つを実現したのち、ブラックボックステストが効果的になる。
1.ホワイトボックステストの規模を最小化する。
2.ホワイトボックステストとブラックボックステストの乖離を最少化する。

「問題の難しさ」を「問題の量」に転化したのだから、当然、
ブラックボックステストの件数がかなり多くなる。
これを、テスト自動化によりコストを減らしているわけだ。

まぁ、全部が完全にうまくいっているわけではないが、これ以外に
良い方法を俺は知らない。勉強不足かもしれないので、ヒントを
探しているところさ。
2008/07/06(日) 20:23:46
一言で言えば、粒度を上げて問題の均質化を狙ったわけね。
でもそれって、改良やパフォーマンスチューニング等で崩れそうなもんだけど。
マルチスレッドに起因するバグ発生したら地獄だな。
2008/07/07(月) 03:22:05
テストを軽視するのは御役所もいっしょ。
特殊なケースと無理矢理な変数当てはめて机上ではうまくいく。
うまくいくから道路作れ。それ、レッツらゴーってなもんでしょ。

日本という体質そのものがテスト軽視の傾向があるんだよ。
2008/07/07(月) 05:35:05
>>231
机上の空論。

実戦経験をつめ。
2008/07/07(月) 08:11:18
おまいら一生懸命語ってるけどテストなんて
そんなに重視してないよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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