[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 18:34 / Filesize : 52 KB / Number-of Response : 261
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

CPPUnitについて少し話そうかい



1 名前:デフォルトの名無しさん [03/01/12 17:02]
テスト自動化全盛のこのご時世皆様いかがお過ごしでしょうか。
より賢い利用法を考えていきませんか。

101 名前:デフォルトの名無しさん mailto:sage [03/10/24 08:17]
UnitTestって例の河童とか子馬の人たちが
主導者になっているのでしょうか?

活動自体はすごいなと感心するのですが、ネーミングから
禿しくただようヲタ臭さ(?)に、どうしても馴染めません。

一般人を排除してヲタ帝国を築くために、わざとあのような
ネーミングをしているのかと邪推したくなります。

Testとかその周辺の活動って、もっと開かれた環境だと
おもってたけど…こういっちゃなんだが、一部のヲタの
いいおもちゃにされてしまっているように感じる…残念

そんなことはなく、実際には大勢のひとたちから
支持・歓迎されているのかな

いまごろTestに関心を持った者のヒガミになってしまった

102 名前:デフォルトの名無しさん mailto:sage [03/10/24 10:48]
単体でCppUnit使ったら?

103 名前:デフォルトの名無しさん mailto:sage [03/10/24 22:40]
>>101
それは、
・日本の
・cppunitを使っている人で
・ベータバージョンユーザの
・さらに一部
にしかすぎないでしょ。
C++ユーザ以外は「あのロシア語の名前の人」くらいの認識じゃないの?(w


104 名前:デフォルトの名無しさん mailto:sage [03/10/24 22:47]
あのロシア語の名前の人は本書くと大したこと無いのはなんで?

105 名前:デフォルトの名無しさん mailto:sage [03/10/25 03:12]
>>101
CppUnitをWebで大々的に扱ってるのが
そのグループなだけであって
普通に地味に使ってる人の方が多いと思うが

俺は普通にCppUnit-x使ってるけど
CUIで十分やし

106 名前:デフォルトの名無しさん mailto:sage [03/10/25 03:42]
>>105
大々的って…
アレを日常的に使ってるユーザは100人もいないと思うが。

107 名前:デフォルトの名無しさん mailto:sage [03/10/25 07:24]
一度試した限りだと、河童とか子馬とかしっくり来なかった。
通常はcppunit-xだけ使ってる。


108 名前:デフォルトの名無しさん mailto:sage [03/10/25 09:08]
CppUnitCB最強。
多分誰も使ってないけど。

109 名前:デフォルトの名無しさん mailto:sage [03/10/25 14:03]
>>108
CppUnitCB, 他のユニットテストフレームワークと比較して、どこが「最強」なのか
興味あるなぁ。レポートよろしく。



110 名前:デフォルトの名無しさん mailto:sage [03/10/25 14:08]
>>109
他CppUnitと違ってわざわざメソッドを一つ一つ登録したりする必要がない。
RTTIで勝手に実行時にテストメソッドを全部認識して実行してくれる。
というか、JUnitとかの他言語のテストフレームワークと比べると、テストメソッドをわざわざ一つ一つ登録したり、
それだけのために外部ツールを使ったり、スクリプトを使ったりしなければならない方が異常だと思うけど。

111 名前:デフォルトの名無しさん mailto:sage [03/10/27 01:40]
>>108
builder専用かよ

112 名前:デフォルトの名無しさん mailto:sage [03/10/27 11:51]
>>110
C++という言語そのものに、RTTIに類する機能が入ってないんだから、他のxUnitと違っていてあたりまえだろ。

113 名前:デフォルトの名無しさん [03/10/27 17:56]
>>112
C++にRTTI入ってないんですか?
ISO/IEC 14882:1998の18.5に書かれている物は一体なんなんでしょうかね?

114 名前: mailto:sage [03/10/27 18:15]
>>112-113
コンパイルオプションで削除できるんだろ。


115 名前:デフォルトの名無しさん mailto:sage [03/10/27 18:23]
つーか、C++のRTTIに
>メソッドを全部認識
こんな機能あったの?

116 名前:デフォルトの名無しさん [03/10/27 18:32]
>>110
>異常だと思うけど。
禿げしく同意!
C++は異常!

117 名前:  mailto:sage [03/10/27 18:36]
>>115
それC++ Builderだからだろ。
Delphi系の互換を逆手に取ってる。


118 名前:デフォルトの名無しさん mailto:sage [03/10/27 18:47]
つまり、
Delphi>>>>>>>>>>>>>>C++

119 名前:115 mailto:sage [03/10/27 18:56]
>>117
なるほど、C++のRTTIではないのですね。サンクス



120 名前:デフォルトの名無しさん mailto:sage [03/10/27 18:59]
BCB>>>>>>>>>>Delphi>>>>C++

121 名前:デフォルトの名無しさん [03/10/27 22:55]
CppUnit 1.9.11のTestCaseDecoratorってどうやって使うんでしょう?

122 名前:デフォルトの名無しさん mailto:sage [03/10/28 22:00]
C用のってどれがいいの?

123 名前:デフォルトの名無しさん mailto:sage [03/10/28 23:25]
どれがって?
これ以外にあるの?
cunit.sourceforge.net/

124 名前:Error401 mailto:sage [03/10/28 23:38]
>>122,123
C用のものもいくつかあるよ。
www.xprogramming.com/software.htm
一年ほど前に評価したときは、Checkが一番よさげだった。


125 名前:Error401 mailto:sage [03/10/28 23:40]
いまsourceforgeがメンテナンス中で確認できないけど、
check.sourceforge.net/
にあるのがCheck。

126 名前:デフォルトの名無しさん mailto:sage [03/10/29 06:52]
なんかcygwinに入ったな。

127 名前:デフォルトの名無しさん [03/10/29 10:56]
CPPUnitって単体テスト専用なの?
CPPUnitで結合したらなんかまずい事ある?
もしくは結合テスト用のフリーのツールって無いの?(C++で)

128 名前:デフォルトの名無しさん mailto:sage [03/10/29 18:42]
PerlやPHPのxUnitの定番ってなんでつか?
PHPはそのものズバリPHPUnitってのがあったけど
Perlはいっぱいあってわからんぽ

・・・スレ違いだけどな(´・ω・`)

129 名前:デフォルトの名無しさん mailto:sage [03/10/29 23:02]
>>120
CheckってWindowsでも使えますか?
どうやってコンパイルすればいいか分かりません。



130 名前:デフォルトの名無しさん [03/11/05 00:44]
「こんな風に書くとコンパイルエラーになる」っていうテストは、
やろうと思えばできたりしますか?

131 名前:デフォルトの名無しさん mailto:sage [03/11/05 00:48]
>>130
コンパイラのテストじゃないならできません。

132 名前:デフォルトの名無しさん mailto:sage [03/11/06 11:21]
結局スクリプトで書いた方が制限少ないし早いな。
CppUnitは回りくどい。

133 名前:デフォルトの名無しさん mailto:sage [03/11/06 15:38]
開発言語と同じ言語でテスト書くのが、いいんじゃなかったの?

134 名前:デフォルトの名無しさん mailto:sage [03/11/06 21:34]
河童とか貧弱すぎて使い物にならない

135 名前:デフォルトの名無しさん mailto:sage [03/11/06 23:03]
使わなきゃイイじゃん

136 名前:デフォルトの名無しさん mailto:sage [03/11/07 01:50]
>>134
だから河童をCppUnitとセットで語るなよ
一部の人が作った補助ツールなんやから

137 名前:デフォルトの名無しさん [03/11/16 14:44]
VC6でCppUnitを使い安くするカスタムAppWizardを作ってみました。
魔河童と組み合わせるとGUIだけでCppUnitが使えます。

メモリリークが発生する不具合が残っていますが、試しにリリースしてみます。
CppUnit 1.9.xに対応しています。

CppUnit TestRunner AppWizard 1.00
ファイル名:TestAppWiz100.zip
pub.idisk-just.com/fview/DF6GfyicJseYqiJTvkRlscdKPV6QAPskLLpJBv_lxc9Owgbf18SwFkcXzNbkUy9L


138 名前:デフォルトの名無しさん mailto:sage [03/11/16 16:16]
こんなくだらないもの作るくらいなら、cppunitそのものを拡張してくれよ。

139 名前:デフォルトの名無しさん mailto:sage [03/11/16 16:49]
無駄に分家されるのも嫌だな。



140 名前:デフォルトの名無しさん mailto:sage [03/12/22 19:46]
boost::testとcppunitの関係押せー手

141 名前:デフォルトの名無しさん mailto:sage [03/12/22 21:06]
NUnitの話をここでしても良い?


142 名前:デフォルトの名無しさん mailto:sage [03/12/23 00:21]
>>141
駄目です。

143 名前:デフォルトの名無しさん [04/05/21 09:36]


144 名前:デフォルトの名無しさん [04/07/21 00:16]
ウェブのサンプル等では、よくテスト後の値のassertEqualsなんかでテストを行っていますが、
ある条件ならメソッドを実行して、条件を満たさなければ実行しない、みたいな
条件分岐テストはどうやって行えばいいのでしょう?

145 名前:デフォルトの名無しさん [04/07/21 00:41]
cygwin package age

146 名前:デフォルトの名無しさん [04/07/21 23:37]
皆に訊きたいんだが。
DirectXやOpenGLでUIやカメラモーションなんかのunittestってどうやって記述してるの?
あとI/Oポートの先につながっている測定器とかとのやりとりとかするクラスとか

物理的な対象物上でしか観測できない事象とかはどうやってUnitTestに取り込んでるの?

147 名前:デフォルトの名無しさん [04/07/22 00:00]
>144

if ( ある条件 )
 ある条件用のアサート


素直にやればよろしい。
でもできれば条件ごとに別のテストケース作るのがお勧め。


>146
リファクタリング本あたりに、
物理装置の挙動を真似るダミークラスを作るパターンが紹介されてたよ。

148 名前:デフォルトの名無しさん mailto:sage [04/07/22 00:06]
>>146
> DirectXやOpenGLでUIやカメラモーションなんかのunittestってどうやって記述してるの?
MVC っぽいクラス構成にしてれば、C の部分だけ差し替えてテストできる。

149 名前:デフォルトの名無しさん mailto:sage [04/07/22 01:03]
差し替えてテストってのがちょっと胡散臭いな。



150 名前:デフォルトの名無しさん mailto:sage [04/07/22 01:27]
>>148
I/Oデバイス操作ライブラリ等に正しく値が設定されてるとか(getterは無かったりする)そういうセットアップ情報が正しい事等のテストはどうするの?
FakeIO classとかでも良いかもしれないけど、外環境の振る舞いが持ち込まれてしまう状態とかだとテスト自体ができなかったりするものとかは無視するの?
テストユニットクラスが増えるのは良いけど、テストの為のFakeの為のテストの為のみたいにどんどんクラスが増えてしまって頭抱えてます。


151 名前:デフォルトの名無しさん mailto:sage [04/07/22 03:34]
CppUnit と boost::test は同じ目的のフレームワークだと思うのですが、
機能はまるっきり被ってるんでしょうか?
片方にはあって、片方にないみたいな比較情報が欲しいです。

と質問しようとして、その前にとGoogleに聞いてみたところ、
ttp://lists.boost.org/MailArchives/boost-users/msg04216.php
というスレッドを発見しましたのでここにメモっておきますね。

152 名前:デフォルトの名無しさん mailto:sage [04/07/22 23:59]
>>150
> FakeIO classとかでも良いかもしれないけど、外環境の振る舞いが持ち込まれてしまう状態とかだとテスト自体ができなかったりするものとかは無視するの?
程度問題だが、完全なテストってのは無理。それこそ

double sqrt(double)

だって、完全なテストを行おうと思ったら double 全部の値に対して
テストする必要があるわけだが、そんなんやらんでしょ。

> テストユニットクラスが増えるのは良いけど、テストの為のFakeの為のテストの為のみたいにどんどんクラスが増えてしまって頭抱えてます。
もう少し具体的に書いてくれれば、何かアドバイスできるかも。

153 名前:デフォルトの名無しさん mailto:sage [04/07/23 05:01]
どだいバグがないことを完全に証明するのは無理ってことでしょうね。
ぶっちゃけ悪魔の証明。

154 名前:デフォルトの名無しさん mailto:sage [04/07/23 14:37]
std::basic_stringは?

155 名前:144 [04/07/24 01:46]
>>147
なんでもかんでも本物のソース対しては変更を加えずに
テストできる方法がある、と思っていたのですがそうでは無い、ということですね。

サンプルなんかを見てると、テスト対象のソースに手を加えるのはテストケースの失敗を
修正するときだけのように見えるので…

156 名前:デフォルトの名無しさん mailto:sage [04/07/24 02:30]
>ある条件ならメソッドを実行して、条件を満たさなければ実行しない、みたいな
>条件分岐テストはどうやって行えばいいのでしょう?

条件で実行するメソッドが動いたかどうか後でわかる仕組み、ログとかフラグとか、
ほんで、テストケースは

動く条件セット
アサート(動いた?)

動かない条件セット
アサート(動かなかった?)

157 名前:デフォルトの名無しさん [04/07/25 20:34]
C++でTDDをやる場合、実装のコードはヘッダファイルに書くものなんでしょうか。
それとも、やはり修正時には.hと.cppを双方いちいち書き換えていく必要があるのでしょうか。

JUnit(+eclipse)使ったことがあると、CppUnitは手間がかかりすぎるような気がして、結構萎えますね…

158 名前:デフォルトの名無しさん mailto:sage [04/07/25 20:43]
CppUnitが手間がかかるのではなく、C++自体が手間がかかる。

159 名前:デフォルトの名無しさん mailto:sage [04/07/25 20:53]
C++でTDDはやめといたほうが良い、ということ?



160 名前:デフォルトの名無しさん mailto:sage [04/07/25 20:58]
TDDってなんですか?

161 名前:デフォルトの名無しさん mailto:sage [04/07/25 21:04]
テストドリヴンデヴェロップメント

162 名前:デフォルトの名無しさん [04/08/01 03:48]
CxxTest って使ったことある人いる?
cxxtest.sourceforge.net/

Perl で書かれた前処理プログラムを使うことで、TestSuite の生成を自動化
しているから、こんな感じでテストが書ける。

# cat MyTetSuite.h
// MyTestSuite.h
#include <cxxtest/TestSuite.h>

class MyTestSuite : public CxxTest::TestSuite
{
public:
void testAddition( void )
{
TS_ASSERT( 1 + 1 > 1 );
TS_ASSERT_EQUALS( 1 + 1, 2 );
}
};
# cxxtestgen.pl --error-printer -o runner.cpp MyTestSuite.h
# g++ -o runner runner.cpp
# ./runner
Running 1 test.OK!

CppUnit+河童に近いアプローチなんだけど、なんとなくこっちの方が使い勝手
いいかも。GUITestRunnerのセンスも素晴らしい。



163 名前:デフォルトの名無しさん [04/08/04 01:23]

        ぬるぽ!

164 名前:デフォルトの名無しさん [04/08/04 02:39]
void check(bool);
#define ASSERT(x)
だけあれば十分な気がするんだけど...
framework使う利点ってどんな事?


165 名前:デフォルトの名無しさん mailto:sage [04/08/04 02:41]
エラー起きても止めなくて別のテストできる

166 名前:デフォルトの名無しさん mailto:sage [04/08/04 04:07]
>>164
1. テスト間の結合度を相対的に低くできる。
2. 記法がある程度統一できるので、可読性の向上が期待できる

一方で、フレームワークが使えない環境ではテストできないというものではな
いと思う。あくまでフレームワークは費用対効果を改善するためのもの。


167 名前:デフォルトの名無しさん mailto:sage [04/11/03 01:00:45]
visualstudio.netでcppunitがコンパイル不能ですよ

168 名前:デフォルトの名無しさん mailto:sage [04/11/03 01:02:27]
cppunitはウンコ。
JUnitを見習え

169 名前:167 mailto:sage [04/11/03 03:51:00]
なんか成功しました。
C++は言語仕様的に不利だから統合開発環境の側でサポートしてもらわんとやってられんね。
とりあえず、eclipseに期待。



170 名前:デフォルトの名無しさん mailto:sage [04/11/03 18:06:49]
boost::testの今後に期待

171 名前:デフォルトの名無しさん [04/11/04 01:19:49]
コンパイラエラーになることを保証する機能ってある?


172 名前:デフォルトの名無しさん mailto:sage [04/11/04 07:38:20]
>>171
#error

あるいは BOOST_ASSERT()

173 名前:デフォルトの名無しさん mailto:sage [04/11/04 07:44:09]
>>172 そうじゃないよ。

174 名前:デフォルトの名無しさん mailto:sage [04/11/04 11:48:22]
fail

175 名前:デフォルトの名無しさん mailto:sage [04/12/08 13:16:23]
>>162
CxxTestいいね。

176 名前:デフォルトの名無しさん mailto:sage [04/12/09 21:41:37]
>>162
Win32Guiだとなぜかウィンドウが一瞬で消える('A`)
でも便利だな。使わせてもらおう。

177 名前:176 mailto:sage [04/12/09 23:23:15]
> Win32Guiだとなぜかウィンドウが一瞬で消える('A`)
自己解決。テストを実行するときに-keepオプション。

178 名前:176 mailto:sage [04/12/09 23:57:20]
VS.netでcxxunitを使う方法。テストプロジェクト作成→プロパティのビルドイベント-ビルド前のイベントに
perl -w d:\home\lib\cxxtest\cxxtestgen.pl --error-printer -o runner.cpp --gui=Win32Gui *.hpp
って具合にコマンド記述(ほんとはバッチファイルにすべき)
デバッグ-コマンド引数に-keepを追加。

これは便利。河童とかもうどうでもいいですよ!

179 名前:デフォルトの名無しさん [05/01/05 23:24:45]
今日、初めてCppUnitを試してみたのですが
privateなメソッド・メンバをテストするにはどうしたら良いですか?
getメソッドもfriendも書きたくないのですが…。




180 名前:デフォルトの名無しさん mailto:sage [05/01/06 00:31:12]
>>179
CppUnit はよく知らないけど、
テストコードのコンパイル時に #define private public とかしちゃう方法を思いついた。
あまり良くないとは思うけど、実害は無かったりするのかな?

181 名前:デフォルトの名無しさん mailto:sage [05/01/06 01:59:33]
>180
コンパイル出来無かったヨ

182 名前:デフォルトの名無しさん mailto:sage [05/01/06 02:45:24]
>>181
#define private public でコンパイルできなくなることがあるのか。
どんなケースか思いつかないから、よかったらエラーメッセージ教えてくれない?
該当部分のソースも見せてもらえると嬉しいな。

183 名前:179 [05/01/06 07:54:56]
>>180
おぉ。なんと大胆な…。
やってみたけど、publicメソッドが無いと言われて、リンクが通りません。
テスト対象クラスに#define public privateしないとだめですね…。(それならリンクが通る)
あまりテスト対象クラスには、手を入れたくないなぁ。
代案はありませんか?

184 名前:179 [05/01/06 07:55:38]
>>183
×public private
○private public

185 名前:181 mailto:sage [05/01/07 02:25:10]
>182
通った通った。

#define private public
#include <boost/test/unit_test.hpp>

としたのがマズかったみたい。

#include <boost/test/unit_test.hpp>
#define private public

としたらOKだったヨ


186 名前:181 mailto:sage [05/01/07 02:33:10]
……と思ったけど、やっぱダメだった。

main.obj : error LNK2001: 外部シンボル ""public: static class std::list<(以下略)" は未解決です。
(VC7.1)

てしかられた

187 名前:デフォルトの名無しさん mailto:sage [05/01/07 02:38:34]
>>186
エラーメッセージ略すなよ。
解決を助けてもらうつもりが無いならいいけど。

188 名前:デフォルトの名無しさん mailto:sage [05/01/07 19:20:52]
ネットワーク関連の開発してるんだけど、
相手から送られてくる不正なデータとかを正しくハンドリングできるか、ってのは
どうやって実装するべき?
今はとりあえずテストケース内でスレッドを別に作ってループバックで接続したり、
テストをクライアントとサーバで別に書いて、同時に実行、とかしてんだけど、
ネットワークのI/Oの動作を真似るオブジェクトに差し替え、とかのほうがいいのかな?

189 名前:デフォルトの名無しさん mailto:sage [05/01/09 15:31:22]
CPPUNITのテスト結果をいわゆる「テスト結果報告書」として出力するいい方法ない?



190 名前:デフォルトの名無しさん mailto:sage [05/01/10 18:13:38]
>188
つ[モック・オブジェクトパターン]

191 名前:デフォルトの名無しさん [2005/05/12(木) 10:06:50 ]
あげ
eclipseのcppunit pluginを使っている人いる?

192 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 19:23:45 ]
>>189
resultや出力部分に細工して、結果を評価したり出力フォーマットを切り替えたり。

193 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 02:18:48 ]
今月一杯製造、来月から単体試験という工程のCの作業しています。
単体試験はCUnitを使うという方針らしいのですが、static関数の試験や、
試験する関数内で呼び出した関数のリターンによる分岐の確認方法がわかりません。
呼び出す関数が別ソースならスタブにもできるのですが、同一ソースの関数だとソース
に手を入れない解決方法が思いつきません。
上からは簡単なサンプルだけ提示されていて、各自ネットなどで調べるように
とのことなのですが検索してもわからないのでどうかご教授お願いします。

194 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 01:36:37 ]
>static関数の試験
しない(static関数の呼び元を試験する) or グローバル化

>試験する関数内で呼び出した関数のリターンによる分岐の確認
似非呼び出し関数を試験ソース側に作りそれを呼ぶ
本物は呼び出さない

195 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 01:37:49 ]
っつーか作り方間違ってる希ガス
試験しながら作れや

196 名前:193 mailto:sage [2005/05/21(土) 18:55:11 ]
>>194-195
説明ありがとうございます。
既存のソースがあってその機能拡張なので元のスタイルに合わせると
内部関数はすべてstaticになってしまうし、同一ソース内に試験対象
の関数が呼ぶ関数があったりして試験ソースに偽の関数定義しても
リンクエラーになってしまいます。
工程も今月中は製造、来月から単体試験ときっちり分かれていて、
試験項目を作り始めるのも来月だし今月中は試験用のスタブとかを
作って確認しながら作業を進めると間に合わなくなりそうです。
とりあえずい今月はCUnitで確認しやすい関数つくりを念頭において
作業して、単体試験工程では何とかソースをifdefでごまかしてCUnit
を使おうと思います。

197 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 13:09:58 ]
まー、テストファーストを無視している時点でアレだが。

static関数のテストは、staticキーワードを#defineで無効化するか、
ソースファイル自身を別のテストコード用ソースに#includeしてしまえば出来ないことはない。

198 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 03:44:42 ]
CUnit for Mr.Ando
ttp://park.ruru.ne.jp/ando/work/CUnitForAndo/html/index_ja.html
CppUnit-xをベースにしたC言語テスティングフレームワーク。
CUnitよりもシンプルでプアな環境でも使用できる

199 名前:デフォルトの名無しさん [2005/07/21(木) 17:30:16 ]
VC.netでテスト環境を構築しようとしているのですが、
CPPUnitの参考ページ少なすぎ。(しかも、ほとんどVC6用のみ)

みんなCPPUnit使ってないんですかね?
テスト環境を構築するまでに、1日潰れそうな気配。



200 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 20:58:42 ]
>>199
つ boost::test

201 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 22:03:36 ]
>>200
1日掛けて、なんとかテスト環境ができたので、
このまま行きます。

元々、Java+JUnit+Eclipseを使ってるので、正直不便ですね。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<52KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef