# HG changeset patch # User koba # Date 1282982929 -32400 # Node ID cd0acbe8f5e0198ef422e39fafed7e24922ce4d0 # Parent 14fe10070ae5123b24144985d0a2d971d5a4e002 add pdf file. diff -r 14fe10070ae5 -r cd0acbe8f5e0 Makefile --- a/Makefile Sat Aug 28 03:37:51 2010 +0900 +++ b/Makefile Sat Aug 28 17:08:49 2010 +0900 @@ -19,4 +19,6 @@ dvipdfmx $< clean: - rm -f *~ $(TARGET).dvi $(TARGET).aux $(TARGET).log $(TARGET).pdf \ No newline at end of file + rm -f *~ $(TARGET).dvi $(TARGET).aux $(TARGET).log $(TARGET).pdf +clean-p: + rm -f *~ $(TARGET).dvi $(TARGET).aux $(TARGET).log \ No newline at end of file diff -r 14fe10070ae5 -r cd0acbe8f5e0 paper-koba.pdf Binary file paper-koba.pdf has changed diff -r 14fe10070ae5 -r cd0acbe8f5e0 paper-koba.tex --- a/paper-koba.tex Sat Aug 28 03:37:51 2010 +0900 +++ b/paper-koba.tex Sat Aug 28 17:08:49 2010 +0900 @@ -198,7 +198,7 @@ set\_postにより、ユーザ側でも Task が終了したということを検知できる -\section{Cerium を用いたゲーム開発}\label{section:game_develop} +\section{Cerium を用いたゲーム開発の手法}\label{section:game_develop} 多くのゲームでは毎フレーム、オブジェクトのパラメータを計算し、その結果によって Rendering や collision の判定を行う必要がある。 Cerium 環境では毎フレーム、オブジェクトの動作(Move)を記述した Task を生成し @@ -228,11 +228,14 @@ \label{figure:reflect} \end{figure} -\section{発生したバグとその対処} +\section{Cerium を用いたゲーム開発におけるデバッグ} +Cerium を用いたゲーム開発を進める過程で発生したバグの例と +それを解決する為に用いた手法を示す。 + \subsection{Task の依存関係によるバグ} -Cerium を用いたゲーム開発を進めたところ、 +\ref{section:game_develop}章の方法を用いてゲームの作成を行ったところ、 Task による Property の計算が描画に反映されなかった。そこでプログラム上で動作している -主要な Task の実行順序を調べてみたところ、以下のようになった。 +主要な Task の実行順序を調べてみると、以下のようになった。 \begin{enumerate} \item GameTask(Game 本体の Task) @@ -243,9 +246,9 @@ \end{enumerate} Cerium による Rendering は 3つの Task によって実現されているが\ref{subsection:rendering} -そのプロセスが SceneGraph への Property の値の反映より先に実行されているのがわかる。 +その最初プロセスである CreatePolygonFromSceneGraph が SceneGraph への Property の値の反映より先に実行されているのがわかる。 -このバグに対しては全ての GameTask の終了をwait\_forで待つ DummyTask(何も動作しないTask)を Rendering Task との +これ対して、全ての GameTask の終了をwait\_forで待つ DummyTask(何も動作しないTask)を Rendering Task との 間に挟むことによって Task の 実行順序を調整した(図\ref{figure:debug_dependency})。 \begin{figure}[tb] @@ -256,9 +259,32 @@ \label{figure:debug_dependency} \end{figure} -\subsection{Task に送る} +\subsection{Task に送る Input Data と Output Data の比較} +コントローラーの入力を見て、Property の値を変化させる Task を作ったところ、期待通りの動作をしなかった。 +この為、この Task で処理する Input Data と Output Data の比較を行ったところ、Output Data の Property に +でたらめなパラメータが入っている事がわかった。この時点で Task 内になんらかの不当な処理がされていると予想した。 + +この Task では SPE に コントローラーの入力の値と Property を送っているが、Cerium の仕様により、 +これらのデータは void* 型でInput され、Task 内で必要な型に cast されて使用される。 +今回のバグは Task 内において、コントローラーの入力と Property の型を逆にして cast してしまったのが +原因であることがわかった。 + +\section{まとめと今後の課題} +今回は Task の依存関係を列挙することにより、実行順序に関するバグを発見することが出来た。 +また、 Task の Input, Output を調べることにより、Task 内での不正な処理を発見した。 -\section{まとめ} -Task の dependency を把握することは +今後はゲームの実装を進めるとともに、コードのメトリクス(数値データ)を取りながらテストの評価をしていく予定である。 + +\begin{adjustvboxheight} +\begin{thebibliography}{99} +\bibitem{}宮國 渡. Cell 用の Fine-Grain Task Manager の実装. + 琉球大学大学院 理工学研究科 情報工学専攻 平成20年度 学位論文 2008. + +\bibitem{}高橋 寿一. 知識ゼロから学ぶソフトウェアテスト. 翔泳社 2005. + +\bibitem{}KENT BECK. テスト駆動開発入門. PEARSON Education Japan 2003. + +\end{thebibliography} +\end{adjustvboxheight} \end{document}