トップページtech
988コメント450KB

eXtreme Programming

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
12のプラクティスがありますが、
実際実用的と思われるのはTesting, Refactoringの2つだと。
Cording Standardsは常識と考えればね。

XP全般について語ってもいいですが、
むしろTesting, Refactoringの二つをメインに語りましょう。
Testingのテクニックなんざをね。

参考URL:
http://objectclub.esm.co.jp/eXtremeProgramming/
0342DelフサギコNGNG
>>341サンクスコ
 なんかイメージ湧きませんが
 客もテスト作って、すぐリリースされたものを使えや(゚Д゚)ゴルァ
 ってところでしょうか。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧    ベンキョウベンキョウ
  ミ,, ゚Д゚彡
   〃つl⌒|⌒l
 〜ミ,,[ ̄ ̄ ̄.]
      ̄ ̄ ̄
 もっとXPの話題でてこないかな。
0343デフォルトの名無しさんNGNG
>>342
テストケースを作るのはオンサイト・カスタマー
つまり、プログラマ・チームといつも一緒にいて
指示を出してる顧客だよ。ユーザはまた別。
0344DelフサギコNGNG
 ∩∧,,∧∩  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ゙ミ,,゚Д゚彡ノ < スラッシュドットage
  ミ  ミ   \____________
  ミ ,, ミ
 ノ∪ ∪

http://slashdot.jp/article.pl?sid=01/10/29/1719222
0345デフォルトの名無しさんNGNG
ファシリティというのは
日本語訳すると何?
0346デフォルトの名無しさんNGNG
>>345 Facility 辞書で引いてみよう。
0347デフォルトの名無しさんNGNG
http://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi?MT=Facility&sw=0
まぎらわしいな。
0348 NGNG
>>345

オフィスレイアウト、座席配置ってことだと思う。
個人の席を隅、ペアプログラミング用の席を部屋の真中に置いて、
みんなで共同で使うと良いらしい。

うち会社、席が広いのは嬉しいんだけど、
パーティションで区切られてて、人がまばらに居る感じ。
孤独で寂しいし、ペアプログラミングしにくい…。
0349デフォルトの名無しさんNGNG
>>347のリンク先を見ると
設備, 施設という訳が正解みたいだね。

ところで、
継続した結合のインフラが重要と本に書かれてあるのだけど

継続した結合の為のインフラというのはどういうものがありますか?
WinDiffやVSSを思い浮かべますがそういうもののことですか?
0350デフォルトの名無しさんNGNG
>>349
俺の意見。

・いつでもクリーンビルド出来るマシン(高速のものが良い)
・バージョン管理ソフト(CVSがおすすめ)
・自動インテグレーションの仕組み(オプション)

かな。
0351デフォルトの名無しさんNGNG
>>350レスありがとう。

>・いつでもクリーンビルド出来るマシン(高速のものが良い)
クリーンビルドって何?

>・バージョン管理ソフト(CVSがおすすめ)
これはわかるが

>・自動インテグレーションの仕組み(オプション)
自動インテグレって?
0352デフォルトの名無しさんNGNG
>>クリーンビルドって何?

すべてのソースをコンパイル、リンクすることでしょう。大規模な
システムでは高速なマシンでないとやってられませんな。

>自動インテグレって?

最新ソースを落として、ビルドを実行し、できればすべてのテストを
実行してその結果を報告するまでを行う。
0353デフォルトの名無しさんNGNG
タバコが嫌いなので
喫煙所パターンXPとか言ってる輩は殺していいですか?
0354デフォルトの名無しさんNGNG
>>353
喫煙もエゴですが、嫌煙もまたエゴです。
殺すときはあなたももろともに。
0355デフォルトの名無しさんNGNG
分煙のためにプロジェクトを分けてください
0356デフォルトの名無しさんNGNG
嫌煙の方がまだましでは?
0357デフォルトの名無しさんNGNG
>>356
50歩100歩の50歩の方だな。目くそ鼻くその目くその方かな。
0358デフォルトの名無しさんNGNG
目くその方が上か・・・
0359デフォルトの名無しさんNGNG
VC5.0でCppUnit1.5使えてる人います?
今度のプロジェクトはVC5.0を使うことになってしまった。
ちょっと試したんだけど、謎のRuntimeErrorが・・・(泣

使えてるとか、使えないよ、というレベルで良いので、情報が
あったらお願いします。
0360デフォルトの名無しさんNGNG
海老捨て目に聞けば?
0361吾輩は名無しさんであるNGNG
>>359
同志よ。吾輩も使えておらぬ。
いまさらVC6買うのもアレであるし、
気長にVS.NETとサービスパックを待とうぞ。
0362359NGNG
>>361
うう、そうですか。
VC6はあるんですが(仕事なんで)、今回はVC5.0指定なんです。

今まで、JUnit, RubyUnit, PHPUnit, JSUnitを使ってきて、
VCもそのときインストールしていたVC6でcppunit(CppUnitじゃ
ないほう)を試して、「今回のプロジェクトもxUnitは楽勝でしょう」
なんて言っちゃったんですよ。

CUIのほうだったら使えるのかな。来週試してみよう。

エピス氏に聞いてみようかな・・・。
0363デフォルトの名無しさんNGNG
ケントべっ君は本の中で
クライスラーC三のシステムが、ああでこうでこうなっているよ

と度々おっしゃっていらっしゃいますが

そのクライスラーというのは
どの程度の規模の会社で

C3というのは
どのくらい重要度の高いシステムなのでしょうか。

XPを上司に紹介する時に、
クライスラというネームバリューがあったら
XPの実践を説得しやすいかと思いますので

具体的にどのくらいでかいんだぞ。と
枝葉末端に至るまで偉大さを分からせてくださるような
情報キボンヌ。
0364中身を読まずにカキコNGNG
Extreme Programming / Chrysler C3 Payroll article from the October 1998 issue.
http://www.xprogramming.com/publications/dc9810cs.pdf
0365デフォルトの名無しさんNGNG
Chryslerは今はDaimlerChryslerになってるね。
サイト見てみると従業員は 416,501人(2000年末時点) か。でかい…
0366推測NGNG
>>361, 362
VC5.0 は template をまともに使えません。
CppUnit は template を使います。たぶん
VC5.0 では CppUnit をコンパイルするだけ
でエラーになると推測します。
0367デフォルトの名無しさんNGNG
ていうかクライスラーってやっぱ、あのクライスラーだよな・・・
0368デフォルトの名無しさんNGNG
Java で Input/OutputStream を
継承した解凍/圧縮ストリームの
ユニットテスト書きたいんですけど

 ExpandInputStream(InputStream in) extends InputStream {
  read() で解凍された1byte読み出し
 }

 CompressOutputStream(OutputStream out) extends OutputStream {
  write() で1byteを圧縮して書き込み
 }

みたいなストリームって
どうやってテストしたら良いんでしょ…
0369デフォルトの名無しさんNGNG
>>368
まず圧縮して解凍して問題なければもんぢあなし
0370デフォルトの名無しさんNGNG
>>369
やっぱ そーゆーテストの方法しかないっすよね…
0371デフォルトの名無しさんNGNG
手動で圧縮済みデータ作って比較。
0372368NGNG
>>371
手動で圧縮済みデータ作るの大変そうだなぁ…
はっ 良く考えたら手動で作った圧縮済みデータの
正当性検査はどーしたら?

それは良いとして、 それ以外のチェックって
ストリームの補助機能のチェック
ぐらいしか思いつかんのですけど、
read(int data) で data が 256以上でもちゃんと処理されるとか
mark() / reset() のサポート/非サポートが 仕様どうりかとか
available() の戻り値はOKかとか
それ以外ってチェック項目ありますかねぇ…
0373デフォルトの名無しさんNGNG
>>372
Javaは知らんが、圧縮をどうやってやるのかによる。
自前のロジックを組むなら、圧縮されたデータの正当性の検査は出来ると思う。
既存のライブラリを使うなら、圧縮済みデータを作ることは容易だと思うけど。
0374デフォルトの名無しさんNGNG
>>372
>それ以外ってチェック項目ありますかねぇ…

自分が実装しようとする(あるいはしたもの)についてテストすれば良い。
異常データのときに、ちゃんと異常処理されるか、
期待した例外がちゃんとthrowされるか、とか。
0375DelフサギコNGNG
         _________
  ∧,,∧   /
 ミ;゚Д゚彡< 解凍ツールで解凍したら・・・
  ミつ つ  \
〜ミ ,, ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∪∪   って独自の圧縮形式だったらダメだけど...

 圧縮/解凍して元のデータとの整合性を
 チェックすればいいだけでは?
0376デフォルトの名無しさんNGNG
圧縮プログラムなんて、圧縮後のサイズが元より小さくて、圧縮したデータを正しく復元できれば、多少間違ってても要件を満たしてると思うなり。。。
0377デフォルトの名無しさんNGNG
圧縮/伸張処理自体も自分で書いてるものなら、いろんなパターンの
データを食わせてきちんと復元できることを確認しないといかんね…
同じバイトばっかり並んだやつや、欧文、日本語文テキスト、exeファイル、
乱数列、とか。

元が小さい場合、ヘッダ付加の分サイズが膨らむこともよくあるから
常に小さいかどうかってのはアレだが。
0378デフォルトの名無しさんNGNG
ロジックが十分複雑な場合、圧縮解凍して元に戻ればよい
というのはブラックボックステストであって
ユニットテストではない。

ExpandInputStream/CompressOutputStream内部で呼んでいる
メソッドについてテストを書くことを検討してみたら。
テストを書くのが簡単になってその上デバッグが楽になるよ。
0379デフォルトの名無しさんNGNG
結局、誰が翻訳者としてよくて
誰が翻訳者としてダメなわけですか?

ピンク色の本は翻訳はよくても冗長で分厚くなってしまっているのでは?
0380デフォルトの名無しさんNGNG
>>376
>圧縮プログラムなんて、圧縮後のサイズが元より小さくて、圧縮したデータを正しく復元
> できれば、多少間違ってても要件を満たしてると思うなり。。。

圧縮済ファイルをもう一度圧縮するとサイズがでかくなるよ
0381デフォルトの名無しさんNGNG
>>380
たとえば、lhaとかは圧縮結果をまた圧縮して
これ以上小さくならないところまで圧縮を繰り返す
なんて聞いたことがあるんだけど、ホント?
そういうアルゴリズムなら再圧縮しても大きくならない
ような気もするけど、圧縮ロジックの中での再試じゃないから
やっぱりヘッダなりなんなりが付加されて大きくなるかな?
元ファイルがこれからしようとしてる圧縮形式と同じもので
かつ圧縮後もやっぱりちいさくならないようなら
圧縮しない(もしくはしたフリ)でファイルに手を加えない
ってロジックは欲しいかもね
0382名無しさん@EmacsNGNG
>>380
おなじアルゴリズムで2回圧縮したらどうしたって1回目より大きくなっちゃうんじゃないの?
0383359NGNG
VC5でcppunitが使えました!

cppunit-xという奴です。
http://member.nifty.ne.jp/glad/cpp/test/

ただし、USE_LEAK_CHECKERを有効にすると、コンパイルできません。
(oeprator deleteの引数の数が違うと怒られる)

「eXtreme Programming テスト技法」
http://www.shoeisha.com/book/detail.asp?bid=1304
という本が発売されていて、その中でcppunit-xも紹介されているそうです。
(でも、この本、長瀬氏監修なんだよな・・・)

この本は、まだ買ってないので、評価は出来ません。
0384368NGNG
自分が質問したような「変換用ストリームの検査方法」の「確
立した検査方法」とかあるのかな?とか思って質問したんです
けど、やっぱり正攻法でやるしかないみたいですね…
Base64OutputStream とか作ってる人いるみたいだし、
そーゆのあるのかなぁ…とか思ったんですけど。

>>381
>>これ以上小さくならないところまで圧縮を繰り返す
ってのは違います。LHAは名前のとうり LZ77 圧縮した結果を
Huffmanで圧縮して終わりです。
個人的な経験では圧縮2回目は圧縮率9?%で圧縮できます。
でもこの圧縮率はヘッダの大きさ含んでないので書庫サイズ全
体としては1回目の圧縮後より大きくなってる可能性もありま
す。もちろん圧縮失敗する可能性もあり、その場合は「圧縮前
より大きくなる」のでなく無圧縮で格納しなおします。その場
合は確実にヘッダ分だけ書庫サイズは増加します。

普通は解凍に手間と時間がかかるだけで、意味が無いので二重
圧縮は嫌われます。たしか bzip2 だったかは二重圧縮に比較
的強いと聞きましたが自分は試したことが無いので、どの程度
「強い」のかは知りません。
0385デフォルトの名無しさんNGNG
http://www.ogis-ri.co.jp/otc/hiroba/others/OORing/interview05.html
http://www.ogis-ri.co.jp/otc/hiroba/others/OORing/interview06.html
この二人のどっちがいいのかな。
0386DelフサギコNGNG
   ∧,,∧∩   あらためてDUnitのこと効いてもいいですか?
  ミ,,゚Д゚彡 < そもそも、Unitテストの使い方がサパリわからないですー
   U  ミ    猫でもわかるUnitテストを教えてキボーン
 @ミ  ミ
   ∪ ∪
DUnitは二つあるみたいです...

DUNIT Am Xtreme testing framework for Delphi programs
http://dunit.sourceforge.net/
DUnit - Delphi Testing Framework
http://members.jcom.home.ne.jp/monazilla/shortcuts/DUnit/index.htm
0387デフォルトの名無しさんNGNG
下のほうは日本語のチュートリアルついてんじゃん...
それ読め
0388デフォルトの名無しさんNGNG
>>386
>>383 の本を読んでみたら?
0389Delphiを知らずにカキコNGNG
>>386
その二つのHPをちらっと見たところ、前者がxUnitのDelphiバージョン、
後者はUnitTestingの精神にのっとった、独自バージョンつー感じがした。
(ダウンロードして試したわけじゃ無いので違うかも。つーか、Delphi知らんし(藁)

まずやるなら、前者の方がいいかも。xprogramming.comでもpreferredに
なってるし。

いちおう、こんなページも見つけた。
http://www.toymap.net/fightingpg/fighting.htm

しかし、GoogleでDelphi&DUnitで<b>約17件</b>とは・・・。
0390DelフサギコNGNG
>>387さん キビシイですな...

>>388さん
[XP-jp:02767]でさりげなく無視されてたり

>>389さん
xUnitもよくわかなのですが、なんとかやってみます。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧    サンクスコ
  ミ,, ゚Д゚彡
   〃  つ旦~~
 〜ミ,,,n,,n[ ̄ ̄ ̄.]
        ̄ ̄ ̄
0391デフォルトの名無しさんNGNG
んで、何がxUnitの特徴なのかというと(OOPL以外のxUnitは使ったこと
無いので除外)

・TestCaseがクラスになっている
・それぞれのTestCaseの前後で、setUp(), tearDown()というメソッドを
 呼び出すことになっていて、そこで、準備、クリーンアップが出来る。
 なので、それぞれのTestCaseが独立している。
・TestCaseをまとめる、TestSuite(テスト一式)という概念がある
・オブジェクト(クラス)の情報がわかる言語では、Testメソッドを自動的に
 順番に実行してくれる
・テスト実行(TestRunner)はGUIバージョンとCUIバージョンがある。
 GUIのほうは必須ではない。
・テスト結果がオブジェクトである。
 よって、結果に自由にアクセスできる。

つー感じ。
0392デフォルトの名無しさんNGNG
>>390
なるほど。XP-jp で無視されたら読む価値なしか。
0393DelフサギコNGNG
>>392 違うがな!

うーん、いまチュートリアル読んでるけど
http://members.jcom.home.ne.jp/monazilla/shortcuts/DUnit/tutorial/writing_code.htm
なんか説明が難しい。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧   
  ミ,, ゚Д゚彡
   〃つl⌒|⌒l
 〜ミ,,[ ̄ ̄ ̄.]
      ̄ ̄ ̄
0394DelフサギコNGNG
だ、、だめだ
>>386の下の方、どうやってもフサには理解できん..

      ∩,,,,,,,,,,,∩ ,,,_
   〜⊂`'''''''''ミ。Д。ミ⊃
      `'''''''''''∨ ∨    アボーン
0395デフォルトの名無しさんNGNG
つーか、上からやれって。
0396デフォルトの名無しさんNGNG
>>394
無茶苦茶簡単ですが?
サンプルに以下のコード追加したら普通に動きましたよ
Del6Personalで確認

unit testDUnit;

interface

...

function Plus(a, b: Integer): Integer;
function Minus(a, b: Integer): Integer;

type
TMyTest = class(TTest)
published
procedure testPlus;
end;

implementation

...

function Plus(a, b: Integer): Integer;
begin
Result := a + b;
end;

function Minus(a, b: Integer): Integer;
begin
Result := a * b; // バグ有り
end;

procedure TMyTest.testPlus;
begin
Test(Plus(1,2), 3, 'Plus1');
Test(Plus(1,-2), -1, 'Plus2');
Test(Minus(4,2), 2, 'Minus'); // バグ有り
end;

initialization
TestSuite.Add(TTestTest, [TTestNone, TTestSuccess, TTestFailure, TTestError, TTestException, TTestProfile, TTestExecute
,TMyTest]); // <-追加
end.

エラーレポート
Test failed - Minus
TestName: TMyTest
Type: Integer
Actual: 8
Expected: 2
0397デフォルトの名無しさんNGNG
お、Delphi使い登場ですな。

ところでDUnitはテストコードとテスト対象コードを分離することは出来ないの?
0398DelフサギコNGNG
http://members.jcom.home.ne.jp/monazilla/shortcuts/DUnit/tutorial/writing_test.htm
↑ここまではわかるけど

http://members.jcom.home.ne.jp/monazilla/shortcuts/DUnit/tutorial/condition.htm
↑ここで
procedure TestとかTestNとか
fooとかTMyTestとか定義も説明も一切無いのになぜわかるのですか?

   ∧,,∧   / ̄
@,,,ミ,,゚Д゚彡 < うーん、>>396さんの説明とチュートリアルに一切接点がみられないのですが...
⊂,,,,,,,,,つつ.   \_

unit testDUnit; じゃなくて
uses testDUnit??
0399デフォルトの名無しさんNGNG
>>397
一緒に合ったほうが分かりやすくない?
リリースコンパイル時には分離できるのだし。
0400デフォルトの名無しさんNGNG
procedure Test(msg: String=''); overload; // 無条件に成功
procedure TestN(msg: String=''); overload; // 無条件に失敗
右にあるコメント見れば一目瞭然な気が
0401デフォルトの名無しさんNGNG
overloadしまくりなテストメソッドって大丈夫なの?
0402デフォルトの名無しさんNGNG
>>399
俺はDelphiも知らない全くの外野ですけど(汗

一緒にあると、バージョン管理がヤじゃないですか?
テストコードを更新すると、テスト対象のバージョンも上がってしまう。
あと、ドキュメント自動生成をやろうとしたときに、両方一緒だと邪魔だとか。

いや、ただ、それだけなんですけど・・・。
0403DelフサギコNGNG
>>400さん、いやゼンゼンわかりません。

沢山あるソースのどこにTestが定義されているのかもわからないし
そもそも、そのprocedureを自分で書くのか、利用するのか?
という事も伝わらないです。

procedure TTest.Test(Actual, Expected: Integer; msg: String);
begin
  if Actual = Expected then Succeed
  else Fail(IntToStr(Actual), IntToStr(Expected), 'Integer', msg);
end;
かろうじて、このソースを見てからなら意味はわかるのですが...

   ∧,,∧   ムズイ...
\,,,,ミ,,゚Д゚彡  五里霧中の中を突き進むような試行錯誤です。
⊂,,,,,,,,,つつ.

そもそもXPのユニットテストに精通している人間にしか
Test手続きが、評価する関数だって理解できないですよ。

procedure Testって、TTestのメソッドだってのも
どうやって、あのページから類推するのでしょう?

>>401さん、たぶん大丈夫(分かりにくいかもしれませんが)
>>402さん、選択できるといいですよね。
基本的にはテストコードはテスト対象コードと一緒にしておく方が
よいと俺は思っています。
0404デフォルトの名無しさんNGNG
>>401
名前同じで引数だけ違うものを複数書くときにoverloadと記述するんだけど
"大丈夫"って何が心配なの?
0405デフォルトの名無しさんNGNG
>>402
テストコードを含めてのコードじゃないかな。特に XP の test-first な視点では。
typo 一つでも commit するときはしなきゃいけないので
バージョンが上がるのは気にしない。

ドキュメントの自動生成は面倒だね。
これも気にしないことにしてるけど(w、
生成ツールにテストコードを omit するオプションつけてくれると嬉しいね。
0406Delphiを知らずにカキコNGNG
>>403
そのDUnitがxUnitの精神を忠実に実装しているかどうか知らないけど、

xUnitは、
・テストケースを書く仕組み
・テストケースをハンドリングする仕組み
・各種チェックメソッド
・テストを実行する仕組み
・結果をハンドリングする仕組み

を含んでいる。
つーか、本買ってきて読め。
あるいは、Java, C++, VBを知ってるなら、JUnit, CppUnit, VBUnitのドキュメントを
Googleしてみろ。つーか、使ってみろ。
Ruby知ってるならRubyUnitだな。256倍本も出てるし。

xUnitの枠組みは、簡単で、誰にでも分かるもの(OOPLの場合)。
・提供されたチェックメソッドを使って、提供されたTestCaseクラスを継承したテストコードを書く。
・提供されたTestRunnerでテストを実行する。
・提供された結果表示機能を使って、結果を確認する。

ただそれだけだ。
0407デフォルトの名無しさんNGNG
この石井氏の記事はどうよ。
xUnit が理に適った作りをしていることが分かる。
http://member.nifty.ne.jp/masarl/article/testing-framework.html
0408デフォルトの名無しさんNGNG
>>405
そういうもんかな。

今まで使ってきたxUnitが全部TestCaseは別ファイルだったから、
違和感を感じるだけかもしれない。

そもそも、コードとテストコードが同一ファイルにあるというのが、
古くからの伝統だったので、xUnitで分かれたのはそれなりの
理由があったのかもしれない。

単に最初の(ほんとか?)のJUnitがJavaであるがゆえにそうなった
というだけかもしれないけど。
0409デフォルトの名無しさんNGNG
>>408
自分のコードみたら言語によってまちまちかも。
分けた方が全体的な保守性はいいのは確かだね。
0410デフォルトの名無しさんNGNG
あんまり詳しく読んでないので怪しいけど
このDUnitのクラス構造ちょっと変わってるね。

TComponent <- composite
 + TTest <- この時点でテストを階層化してる。こいつを継承してテストを書く
  + TTestSuite <- テストの(階層的な)実行、レポート、singleton
  + TMethodTest <- TTestの個々のメソッドをオブジェクト化、テストメソッドの呼び出しを担当。テストメソッド毎にもテスト結果を持てる。

あとプロファイラなんかの拡張機能もTTestに突っ込んである。

TComponentって事は登録してフォームに貼り付けてGUIテストもできるのかな?
# ソースではregisterしてないけど
0411デフォルトの名無しさんNGNG
つーか、どっちのDUnitの話なのか明示しやがれ、ゴルァ。
つーか、同じ名前を付けんじゃねーぞ、ゴルァ。
>>386では”DUNIT"ってかいてるけど、ソースフォージの表記は"DUnit"だぞ、ゴルァ。
つーか、>>383の本買ったぞゴルァ。
まだ読んでねーぞ、ゴルァ。
0412デフォルトの名無しさんNGNG
CRCカード使ってる人いますか?
使い勝手どうですか?
0413デフォルトの名無しさんNGNG
WindowsXP発売記念age
0414デフォルトの名無しさんNGNG
それは創刊!スレでやってくれ
0415デフォルトの名無しさんNGNG
perl_unitを使ったことのある人いませんか?
make testでエラーがでて困ってるんですけど
なんとかなりませんか?
あと使い勝手はどうですか?
0416デフォルトの名無しさんNGNG
   
0417デフォルトの名無しさんNGNG
eXtremeあげ
0418デフォルトの名無しさんNGNG
極限age
0419デフォルトの名無しさんNGNG
だれか書き込んでage
0420デフォルトの名無しさんNGNG
プログラミング以外の作業にもXP使えないかな。
0421デフォルトの名無しさんNGNG
最近興味を持ち始めました。
webをまわってみても実際に何をするのかがいまいちつかめなかったので
とりあえずXP入門の本から読んでますが、珍妙な訳にくじけそうです。
0422デフォルトの名無しさんNGNG
実力があって、頭の回転という意味でも人間的にもデキルやつで、
性格もよくて、将来に何の不安もなくて、毎日楽しく生きてる、
ようなプログラマーが集まれば、勝手にXPになります。
0423デフォルトの名無しさんNGNG
>プログラミング以外の作業にもXP使えないかな。

(デジタルなどのおかげで)成果物の「完璧コピー」がとり易い分野であり、
成果物の「ただしさ」がはっきり定義できる分野ならば、
ほかでも使えるかもね。

プログラム以外で、そういう意味でデジタル化されてる分野ってーと
なにがあるでしょう?

とりあえず思いつくのが、音楽とかの芸術分野と、設計図分野。

でも芸術は「ただしさ」が定義できないんで、
UnitTestとかが意味をもたない(藁)

設計図はいけるかもね。
実際、大企業むけのシステムでは最近、(リモートでだけど)複数人間による
図の同時編集なんてのが行なわれている。もちろんVer管理もあるし、
間違いも定義可能なのは言うまでもない。
なのでUnitTestもRefactoringもPairProgもできる。

>勝手にXPになります。

それは言えてるかも。
馬鹿なやつは下らない(有害無益な)管理方法を採用してデスマーチに嵌っていく。
0424デフォルトの名無しさんNGNG
どこまでUnitTest使えてます?
ウチでは,UnitTestって言うくらいなんで,当たり前だけどIntegrationTest(組合せテストね)
では全然使えません。何が言いたいかって言うと,単純なクラス以外は適用が困難で(つまり
テストのための準備が大変すぎて)実行時テストの方が工数的に妥当だよね。
ファイルやネットワークやモジュール間通信をするクラスなんかはこれに当たることが多いなり。
で,単純なクラスってなると大抵,基礎的なクラスで,そうそういじらないと。新しいプロジェクト
じゃない限り枯れてる事も多いと。逆に上位のクラス(アプリクラスって言ってるけど)では,適用が
大変だと。むにゅー,どこに使うなり?適用事例求む。
0425デフォルトの名無しさんNGNG
>>424
禿しく同意。
cppunit 拾ってきて、UnitTest の環境作って
テストクラス書こうとして、1行目で挫折しました。
0426デフォルトの名無しさんNGNG
>>424
俺は出来るところだけテスト書いてる。だからテストが書けるのは10%くらいかな。
でも最初にこれをやることが肝心。いちどコンパイルのサイクルの中にテストが
入ってくれば徐々にテストは増えていく。1ヶ月も続けるとテストなしでは不安を
感じるようになったよ。
「テスト書いたから実行時テストは要らない」にはならないんだから、すべてを
網羅しようとしないことが大切だと思う。
0427デフォルトの名無しさんNGNG
>>426 同意。
テストユニットは几帳面で完璧主義な人には向かない。
テストユニットは動作保証というより、
コーディング前にテストを用意することにより、
設計検証として役に立つ(ことがある)。
テストを作ると「この仕様だめじゃん」とか気付く。
0428DelフサギコNGNG
 実際、どんな所でテストユニットを使いましたか?
 具体例を交えて話題が出ると
 スレも盛り上がるかと…

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧  オレ ハ DUnit ヲ
  ミ,, ゚Д゚彡  イキナリ ザセツ シテルンダケド....
   〃つl⌒|⌒l
 〜ミ,,[ ̄ ̄ ̄.]
      ̄ ̄ ̄
0429デフォルトの名無しさんNGNG
ユニットテストをしやすいクラス、しにくいクラスという話で、
テストしやすいクラスは設計の筋がよいという経験則をよく聞きます。
例えば値を計算するメソッドと、それを表示するメソッドを分けるとか。

ひょっとして関数型プログラミングの副作用をなくして参照透過性を保つとい
う考え方に通じるものがあるんでしょうか?
0430デフォルトの名無しさんNGNG
dunitもcppUnitも普通に使ってるよ。

論理処理とユーザーインターフェイスの分離は前提だよな。
そしてユニットテストは論理処理の側だけに書く。
XP的にはユニットテスト書くのが困難ならリファクタリングすべきだと思うけどどう?
0431デフォルトの名無しさんNGNG
>>424
>テストのための準備が大変すぎて)実行時テストの方が工数的に妥当だよね。
「実行時テスト」というのは初めて聞いたけど、どういうものなの?
「テストのための準備」というのを、テストをやるたびにしなきゃならないなら、
多少工数がかかっても、UnitTestを書いておいたほうがいいと思う。

>ファイルやネットワークやモジュール間通信をするクラスなんかはこれに当たることが多いなり。
これも、

>逆に上位のクラス(アプリクラスって言ってるけど)
これも、UnitTestは可能だと思うけどなぁ。

ちなみに僕は、ほとんどの場合、下位クラスはstubに置き換えて結合して、
UnitTestをやってます。
んで、下位クラスが出来たところで、結合してUnitTestを実行。

>>426
>1ヶ月も続けるとテストなしでは不安を
>感じるようになったよ。
うんうん。

となりのチームは、コンパイルもせずに、ダーっとコードを書いて、
山のようなコンパイルエラーが出て、それをちまちま取って、コンパイルできて、
動かそうとしたら全く動かなくて途方に暮れてるみたいだけど、
こんなやり方で、良く集中力が持続するなーって感心する。
0432Error401NGNG
>>427
>テストユニットは動作保証というより、
>コーディング前にテストを用意することにより、
>設計検証として役に立つ(ことがある)。

そう?
僕は動作保証の為にUnitTestを書いてるけど。

だって、穴のたくさんあいたTest Suiteだと、リファクタリングも怖くてできないし、
他の人の作ったのなんて、怖くてメンテできない。
そんなことない?

あ、僕はUnitTest依存症なんだと、今気づいた。
0433デフォルトの名無しさんNGNG
で、ペアプログラミングってやってる人いるの?
0434デフォルトの名無しさんNGNG
もう一人の人格と話しながらやってます。
0435デフォルトの名無しさんNGNG
CppUnit1.5 を VC++6.0 で使おうとしていて困ったことが。

サンプルに付いてくる HostApp はMFCアプリですが、自分が
テストしたいのはコンソールアプリです。コンソールアプリから
TestRunnder::run() を呼ぶとダイアログを表示するところで
エラーが出でしまいます。

マニュアルによるとTestRunner.dll のようなMFC と動的にリンクされる
レギュラーDLLではエクスポート関数の先頭でAFX_MANAGE_STATE
マクロを使ってモジュール状態を切り替える必要があると。

で、このマクロをつかうと今度は DllMain の多重定義のエラーが
出てしまい、いろいろ調べまわってみましたが同様のエラーに悩んで
いる人はたくさんいましたが解決法が見つかりません。

だれか解決法知っている人いませんか?
0436デフォルトの名無しさんNGNG
>>435 コンソール版の TestRunner が付いてなかったか?
0437デフォルトの名無しさんNGNG
>>435
http://member.nifty.ne.jp/glad/cpp/test/
こちらがよいと思われますぞ。
0438435NGNG
>>436
コンソール版の TestRunner というのはみあたらないですね。

>>437
実は最初に cppunit-x を使ってこれはちゃんと動きました。
プアな環境でも動作するようにつくってあるということで
独自のマクロを使っているので、VC++6で使う分には CppUnit1.5
のほうが分かりやすいと思ったのでそっちも試してみたのでした。
あと結果の表示がグラフィカルで見やすいと思ったので。。
「eXtreme Programming テスト技法」でも主に cppunit-x が
紹介されてましたが、みなさんこっちをつかってるのですか?
0439436NGNG
あり?わしが使ってるのはコンソール版なんだが、
これは CppUnit1.5では無いのか。
TextTestResult.h/cpp ってのは入ってないかい?
若干手を加えたので、どれがオリジナルか判らん状態。
0440デフォルトの名無しさんNGNG
C++Builder5にCppUnitCBをインストールしたんだけど、
サンプルのSmartPtrTestが予期した動作をしてくれないっぽい。
起動すると、「Unknown test class: TestSuite」ってダイアログが出て、その後もフォームこそ出るけど、その中のボタンを押しても反応無し。

どなたか、原因を知っている方いらしたら、よろしくお願いします。
0441435NGNG
CppUnit1.5 の TestRunner がコンソールアプリから使えない件で、
TestRunner.dll がレギュラーDLLであると書いてしまいましたが、
拡張DLLの間違いでした。拡張DLLの関数を呼ぶことができるのは
MFCアプリだけということなので、今のままではコンソールアプリから
CppUnit1.5 の TestRunner を使うことはできないみたいですね。
■ このスレッドは過去ログ倉庫に格納されています