こんにちは!運営者のハックです。
今回はミニゲーム開発編Day2に行った内容として、「機能要件と非機能要件」を考えた内容について紹介します。
機能要件と非機能要件を考えよう
どの現場においてもプログラミングをする上で必要なのが「設計」です。
プログラミング開発における「設計」とは、ソフトウェアやシステムがどのように機能するかを計画し、その構造を定義するプロセスです。この設計には「機能要件」と「非機能要件」があります。
機能要件
機能要件は、ソフトウェアが何をする必要があるかを説明するものです。つまり、ソフトウェアがユーザーに対して提供する具体的な機能やサービスです。
例えば、オンラインショッピングアプリの機能要件には「商品をカートに追加する」「支払いを処理する」「ユーザー登録をする」などが含まれます。
非機能要件
非機能要件は、ソフトウェアがどのように機能すべきかを定義します。これには性能、セキュリティ、使いやすさなど、システムの動作や品質を規定する基準が含まれます。
例えば、「ウェブページは3秒以内にロード完了する必要がある」「システムは同時に1000人のユーザーをサポートできる必要がある」といったことが非機能要件に該当します。
中級編のプラグイン開発で考えた機能要件と非機能要件をおさらい
中級編では「EnemyDown」ゲームという、制限時間内にランダムで出現する敵を倒して、スコアを獲得するミニゲームを作成しました。その際に考えた機能要件と非機能要件は以下のとおりです。
機能要件
- スコア(合計点数)ボードが表示できること
- 時間制限を設定できること
- 敵を倒すと点数が手に入ること
- 敵の種類のよって手に入る点数が異なること
- 敵の種類はランダムであること
- 一定のエリア内でしか敵は発生しないこと
- 時間制限が来たら合計の点数が保存されること
- 保存する情報はスコアとプレイヤー名と日時
- 新しい情報が入った場合は上書きではなく、全て保存すること
- 装備や武器はプレイする度に同じになること
- 体力や空腹ゲージは最大化されること
非機能要件
- コマンドでゲームが開始できる
- ゲーム中のエリア内のブロックは何があっても破壊されない
- コマンドのオプションでプレイヤーの強さ、敵の種類をある程度コントロールできる
- 敵の出現数が一定数を超えた時にゲームが重たくならないようにする
- プラグインを導入すればSpigotを使っていればどのサーバーでも導入できる
- プログラムへの変更を加えずに、時間やスコアの項目などの設定値をある程度変更できる
機能要件も非機能要件も鉱石採掘ゲーム開発と共通している要件はパクれ…参考にできると思うのにゃ。
鉱石採掘ゲームの機能要件と非機能要件を考えよう
中級編の機能要件と非機能要件をパ…参考にして、鉱石採掘ゲームの機能要件と非機能要件を考えてみました。
機能要件
- スコア(合計点数)ボードが表示できること
- 時間制限を設定できること
- 鉱石を採掘すると点数が手に入ること
- 鉱石を採掘するたびにリアルタイムでスコアを更新し、プレイヤーに表示されること
- 鉱石の種類のよって手に入る点数が異なること
- 時間制限が来たら合計の点数が保存されること
- 保存する情報はスコアとプレイヤー名と日時
- 新しい情報が入った場合は上書きではなく、全て保存すること
- 装備(つるはし)はプレイする度に同じになること
- 体力や空腹ゲージは最大化されること
- ゲーム実行時に指定した位置から開始されること ※追加要素
非機能要件
- コマンドでゲームが開始できる
- プラグインを導入すればSpigotを使っていればどのサーバーでも導入できる
- プログラムへの変更を加えずに、時間やスコアの項目などの設定値をある程度変更できる
- プレイヤーのデータ(スコア、インベントリ情報など)は正確に処理され、不正アクセスやデータ損失から保護される
- ゲーム中のすべてのメッセージやスコア表示は、プレイヤーにとって読みやすく理解しやすい形で提供される
(半分以上パクってるのにゃ。)
(ミニゲーム開発としての要件は共通していますし…)
まとめ 最初から要件を考えるのは難しい
今回はミニゲーム開発にあたり、機能要件と非機能要件について考えました。
今は知識も少なく、どうすればどうなるか、が見えていないことも多いので先輩エンジニアの方々みたいな「良い設計」を考えることはほぼ不可能だと思っています。
しかし、今の内から見様見真似で設計について考える練習を積んで経験値を貯めていきたいです。
以上で今回の学習記録を終えます。
ここまでご覧いただきありがとうございました。
コメント