デベロッパー向け

ロボアプリ品質チェックリスト
解説
ソフトバンクロボティクス株式会社
Pepperパートナープログラム

1

目次

1. ロボアプリ品質チェックリスト概要
2. ロボアプリ品質チェックリスト利用方法
3. チェック項目解説（抜粋）
a.
b.
c.
d.
e.
f.
g.

全分岐網羅試験
負荷耐久試験
実環境試験
UX観点レビュー
ソースレビュー（抜粋箇所はありません）
Manifest
その他

Copyright © SoftBank Robotics All rights reserved.

2

1. ロボアプリ品質チェックリスト概要

Copyright © SoftBank Robotics All rights reserved.

3

ロボアプリ品質チェックリストとはロボアプリ品質チェックリストとは、ロボアプリの品質を上げるための項目チェックリストです。
本チェックリストを全て満たすことで、ロボアプリの品質を向上させることができます。
また、2017年7月1日から、ロボアプリ安全性審査の申請時に本チェックリストを用いたテスト 結果を提出していただく必要がございます。全てを満たしていることが審査通過の条件となりますので、ご承知おきください。

https://developer.softbankrobotics.com/jp-ja/documents/checklist

ダウンロードしてください
Copyright © SoftBank Robotics All rights reserved.

4

2. ロボアプリ品質チェックリスト利用方法

Copyright © SoftBank Robotics All rights reserved.

5

ロボアプリ品質チェックリストの構成
1.

ダウンロードしたファイル（チェックリスト）を開いてください。チェックリ
ストの構成は以下のようになっています。

ACA

ロボアプリの基本情報

B

テスト項目

C

集計結果

B

2. ロボアプリの基本情報を記載します。
3. 該当するテスト項目で全て Status が PASS となることを確認します。
全て PASS になって初めて安全性審査を申請 できます。
Copyright © SoftBank Robotics All rights reserved.

6

ロボアプリ品質チェックリストの使い方 - A
ロボアプリの基本的な情報を記載します
アプリタイトル名①申請するロボアプリの名称を記述②各種情報を記載③本チェックリストのバージョン（変更不可）

Copyright © SoftBank Robotics All rights reserved.

確認時のプロダクト種
別for Biz と記載してください

確認時のNAOqi OS
バージョン

リビジョン番号まで記入してください
例：2.5.5.5

確認時のHWバージョン

1.6 と記載してください。
但し、タブレットがアップグレードされているPepperの場合は 1.8a と記載してください。
7

ロボアプリ品質チェックリストの使い方 - B
チェックリストの項目に従いテストを実施します②Pepper for Biz では「マイアプリ」に✔ がある項目が対象となります。

①テスト結果を記入します。

③テスト項目が記述されています。項目の説明については「本書の見方」を参照してください。
Copyright © SoftBank Robotics All rights reserved.

8

ロボアプリ品質チェックリストの使い方 - C
結果が集計されます。全ての該当項目が PASS になっていることを確認してください。

①テスト結果が集計されます。
（手動で変更しないで下さい）

PASS で無い項目がある場合は、全ての項目が PASS となるようにロボアプリを改修してください。
Copyright © SoftBank Robotics All rights reserved.

9

3. チェック項目解説（抜粋）Copyright © SoftBank Robotics All rights reserved.

10ロボアプリ品質チェックリストの構成と抜粋箇所
チェック項目は以下の7つのパートから構成されています。
ロボアプリ品質チェックリストの中で特に説明が必要な部分について抜粋して解説をしております。
1. 全分岐網羅試験001-001-005 アプリ単体での起動

2. 負荷耐久試験

002-001-009 アプリ中断操作後のアプリ起動（複数回）

3. 実環境試験

003-005-003 タブレットと本体が別APに接続

4. UX観点レビュー

004-002-002 ASRの動作
004-005-005 バランス

5. ソースレビュー

本ドキュメントでは触れません

6. Manifest

006-002-009 対象NAOqiのMaxVersion

7. その他

007-001-003 アプリ独自のログ出力有無
007-001-004 データ保存場所Copyright © SoftBank Robotics All rights reserved.

11

解説の見方と使い方<Test ID> <Requirements>

ロボアプリ品質チェックリストのTest ID と Requirements

Conditions(対象)

ロボアプリ品質チェックリストの<Conditions>
チェック項目の前提条件になります

Expected(期待する動作)

ロボアプリ品質チェックリストの<Expected>
期待される動作になります

A. テスト方法

C. 実装例

B. NGになる例

使い方
1.
2.

A［テスト方法］を確認します。
A［テスト方法］に従いテストを実施し結果がPASSとなることを確認します。B［NGになる例］を再確認し、NGに該当しないことを確認します。該当した場合はC［実装例］に従いロボアプリを修正します。

Copyright © SoftBank Robotics All rights reserved.

12001-001-005 アプリ単体での起動
Conditions(対象)-（全てのロボアプリ）

Expected(期待する動作)

ロボアプリ単体で起動できること
他のロボアプリを呼び出したり、連携していないこと

テスト方法

実装例

・ロボアプリが1つのロボアプリで構成されているか確認する。
（ロボアプリが他のロボアプリに依存せず単独で動作可能であること）
・switchFocus APIの呼び出しが無いことを確認する。

・他のロボアプリの呼び出しを行こなわない。
以下のAPIによる同一ロボアプリ内における他ビヘイビアの呼び出しは許容する。

NGになる例

・他ロボアプリを呼び出している。
int ALAutonomousLifeProxy::switchFocus()

void
ALBehaviorManagerProxy::runBehavior()

Copyright © SoftBank Robotics All rights reserved.

13002-001-004 連続操作
Conditions(対象)

ディスプレイ上にボタンが配置されたアプリが対象

Expected(期待する動作)

アプリ起動中に以下の操作を行い、異常が発生しないこと- 素早く連続的な画面遷移- ボタン連打- フリック、画面スクロール- ピンチイン、ピンチアウト

テスト方法

実装例

NGになる例・連打打ち、アプリが落ちるかなどを確認する。危害を加えていない、フリーズやキューイング（音などは多い→Pepper落ちる）などにならないかを確認する。
・連続打ちで次の画面を選択した事になっていないかを確認する。
・フリック、画面スクロールしないかを確認する。

・［Only Once］ボックスを利用した重複メッセージ送信の抑止を行う。

・意図しないタブレット操作によるアプリケーションのスタックしてしまう。
・画面スクロールやピンチアウト（イン）でのレイアウトが破綻してしまう。

Copyright © SoftBank Robotics All rights reserved.

・応答確定時のディスプレイ操作ロックを実装する。
・ピンチアウト操作のロックを行う。
14

002-001-005 同時押し
Conditions(対象)

ディスプレイ上にボタンが配置されたアプリが対象

Expected(期待する動作)

アプリ起動中に以下の操作を行い、異常が発生しないこと- 同時押しテスト方法

実装例

NGになる例

・2本指での同時押し、2つのボタンを同時押しの時に、どちらが動くか、アプリが落ちるかなどを確認する。
・危害を加えていない、フリーズやキューイング（音などは多い→Pepper落ちる）などにならないかを確認する。

・［Only Once］ボックスを利用した重複メッセージ送信の抑止を行う。

・異なるボタンを同時に操作し、それぞれのプログラムが並行して動き、アプリの進行が停止ないし破綻してしまう。

・応答確定時のディスプレイ操作ロックを実装する。
・ピンチアウト操作のロックを行う。

Copyright © SoftBank Robotics All rights reserved.

15002-001-006 アプリ長時間起動
Conditions(対象)

長時間起動を想定したアプリが対象※タイムアウトせずに起動し続けるアプリ

Expected(期待する動作)

アプリ起動した状態のまま1時間以上放置し、モーターホットが発生しないこと

テスト方法

実装例

NGになる例

・アプリを起動させ、1時間以上放置させせ不具合が発生しないことを確認する。

・専用のテストプログラムを開発しモーションに無理がないことを事前に確認する。
・タイムアウトを行わない箇所では、関節を長時間連続で固定するポーズがないようにする。

・アプリを起動し連続稼働を行った場合、モーターホットが発生してしまう。

Copyright © SoftBank Robotics All rights reserved.

16

002-001-007 ユースケースを考慮した稼働負荷
Conditions(対象)-（全てのロボアプリ）

Expected(期待する動作)想定範囲の稼働時間で稼働し続け、ユースケースとして想定される以上(混雑時)を考慮して一時的に高負荷を与える、時間を設けた稼働負荷システム（CPU、Memory）に負荷を掛け過ぎず、アプリ終了後にシステムを解放し、クリーンな状態にしていること

テスト方法

実装例

NGになる例・正常動作以外を操作を行い待機させる。
（例：顔認識の状態で待機させるなど）

・タイムアウトにて制御※特にユーザの応答を待つタイミング
・Pepper内の計算リソースで処理に時間がかかる場合は、外部システムで処理を行う。
・自動解放されないシステムリソースは終了時、エラー発生時に解放する。

・CPU利用率が著しく高く、バックグラウ
ンドタスクの実行に支障をきたしている。
・アプリ終了後も関連プログラムが動作し続けている。
・メモリリークが発生している。

・コマンド htopで状態確認を行う。

Copyright © SoftBank Robotics All rights reserved.

17002-001-009 アプリ中断操作後のアプリ起動（複数回）
Conditions(対象)-（全てのロボアプリ）

Expected(期待する動作)

アプリ中断操作(4パターン)を組み合わせ、アプリ中断操作後に再度アプリが起動できることを5〜10回繰り返す- 急激な操作、胸ボタン2回押し、頭長タッチ、スリープ

テスト方法

実装例

NGになる例・急激な操作、胸ボタン2回押し、頭長タッチ、スリープの4パターンの操作によりアプリを停止させ、全てのパターンで正常に起動できることを確認する。

・内部データの不整合によるエラーハンドリングを適切におこなう。

・起動中に意図しない形でデータ（ロックファイル等）が残され起動できない。
・エラー等でアプリが強制終了してしまった場合、以後起動できない。
・不完全な前回データが元でアプリケーションが動作中にスタックしてしまう。

Copyright © SoftBank Robotics All rights reserved.

18

002-001-011 カメラ機能利用時の負荷及びエラー対策Conditions(対象)

カメラ利用の機能(バーコード/QRコードリーダー)を実装するアプリが対象

Expected(期待する動作)

・カメラ機能を利用する場合、負荷耐久試験やエラーハンドリング対策を入念に実施すること- 繰り返し読み込ませてもメモリリークが発生しないことを確認する- エラーから復帰した後も機能が正常に動作することを確認する- 読み込み不能時のエラーハンドリングが行われていることを確認する

テスト方法

実装例

NGになる例・カメラを利用する場合、以下を実施する。

・カメラ利用時にはタイムアウトを設けて、連続してカメラに負荷がかからないようにする。

・QRコードの認識失敗などにより、カメラを利用し続けアプリがフリーズしてしまう。
・QRコードの認識失敗により再起動が必要になってしまう。
・他のアプリからカメラが利用できなくなってしまう。

- アプリによるメモリリーク有無の確認- エラーハンドリングの確認- 十分な負荷試験

Copyright © SoftBank Robotics All rights reserved.

19003-005-002 アプリ操作中にNW切断
Conditions(対象)NWへの接続があるアプリが対象

Expected(期待する動作)・アプリ操作中、NWヘ接続する直前にNWを切断しても、フリーズなどの異常動作が起こらないこと
・NWへの接続がなくアプリを終了する場合、終了する旨のメッセージをユーザへ通知した上でアプリを正常終了すること

テスト方法

実装例

NGになる例・NW通信を行なっているタイミングでネットワークの切断を行い、アプリがスタック・あるいは利用不可能にならないことを確認する。

・レスポンスにタイムアウトを設定し、NWが切断された場合でもアプリの進行が止まらないようにする。
・コンテンツのダウンロードを行うアプ
リでは、ダウンロードしたコンテンツの完全性を検証する適切なエラーハンドリングを行う。

・NW経由で不完全にダウンロードされたコンテンツ、あるいは破損したコンテンツが原因でアプリの利用が不可能になってしまう。
・通信の遮断により、アプリがタイムアウトせず、スタックしてしまう。

※NW接続を必要とするすべての画面で確認する※NWを使用するAPIなどを実行する直前、直後も確認する

Copyright © SoftBank Robotics All rights reserved.

20

003-005-003 タブレットと本体が別APに接続
Conditions(対象)NWへの接続があるアプリが対象

Expected(期待する動作)タブレットと本体が別APに接続している場合でもアプリが動作すること

テスト方法

実装例

・タブレットと本体を別のAP（アクセスポイント）に接続させ動作することを確認する。

・異なるAPに接続した状態でも動作するようにエラーハンドリングを適切に行う。

NGになる例
・以下の状況下でアプリが正常に動作しない。（スタックしてしまう）

別のAPと接続させる手順は次ページ参照（別のAPに接続されることによるエラーハンドリングが適切に組み込まれていることを確認する）

Copyright © SoftBank Robotics All rights reserved.

機体：SSID_A
タブレット：SSID_B

21

003-005-003 タブレットと本体が別APに接続（手順）前提
2つのネットワーク（それぞれに異なるSSIDとVLAN）を構成します。

手順
1. 設定アプリを起動しWi-Fiネットワークに接続します。
2. SSHでPepperに接続します。
3. 以下のコマンドを入力し、設定アプリ上で設定したネットワークとは違うネットワーク情報をタブレットに設定します。
書式> qicli call ALTabletService.conigureWifi<security_type> <SSID> <PASSWORD>
例> qicli call ALTabletService.configureWifi WPA2 bigwave secret4. 以下のコマンドを入力し、設定したネットワークに接続します。
書式> qicli call ALTabletService.connectWifi<SSID>
例> qicli call ALTabletService.connectWifi bigwave
機体：SSID_A

5. 以下のコマンドを入力し、設定したネットワークに接続できたか確認します。
タブレット：SSID_B> qicli call ALTabletService.getWifiStatus"CONNECTED" ←接続が確認できます。

Copyright © SoftBank Robotics All rights reserved.

※SSID_Bの接続が変化する

22

004-002-002 ASRの動作
Conditions(対象)ユーザーの音声を聞き取る箇所があるアプリが対象

Expected(期待する動作)

ASRの動作に不安定さが無いこと
ASRの起動停止が頻繁に繰り返されていないこと

テスト方法

実装例

NGになる例

・音声認識モードと発話モードが適切に切り替わり、且つ不安定な動作をしないことを確認する。
・音声認識と発話が同時に行われていないことを確認する。

・音声認識中と音声出力中を完全に分離し適切に切り替える。

・音声認識中に発話が行われている。
・発話中に音声認識が行われている。
・音声認識と発話が頻繁に切り替わる。

ポイント：
ASRとはAutomatic Speech Recognitionの略で自動音声認識のこと。
音声認識起動中に、Pepperの発話や音声再生が行われるとそれ自体を認識しようとするため、正常に音声認識できなくなる場合がある。

Copyright © SoftBank Robotics All rights reserved.

23

004-005-001 危険な動作
Conditions(対象)-（全てのロボアプリ）

Expected(期待する動作)

ユーザーに危害(物理的/心理的)を加えるような動作がないこと

テスト方法

・近づいてセーフティが動作するか確認する。
・動作の中に恐怖心を与えていないか確認する。
・複数人で動作が危険ではないか確認する。
（不快→日本人の感覚で）

実装例

NGになる例・セイフティーを無効化するAPIをコールしない。
・それぞれのポーズに遷移する前にマージン（時間）をもうける。
・個々のモーションの中に著しいモータ音が発生しないことを確認し、モーションを作成する。

・前に立っているユーザにぶつかる動作（勢いがあっても当たらない動作）が含まれている。
・モータ音がなる動作が含まれている。
・暴力的な動作が含まれている。

確認箇所：
スピード、角度、状態維持時間、動作の組み合わせ、動作空間、パーツ単位（顔、手、腕、二の腕、肩、腰）Copyright © SoftBank Robotics All rights reserved.

24004-005-005 バランス
Conditions(対象)-（全てのロボアプリ）Expected(期待する動作)

3つのホイールが床に接地していること
PushRecovery機能が動作していないこと

テスト方法

実装例

NGになる例

・アプリの動作によってロボット自体の姿勢バランスを崩すことがないことを確認する。
・ホイールが常に接地している事を確認する。

・バランスを崩す無理なモーションを行わない。
・セーフティを切らない・Pepperには転倒を回避するためのPushRecovery機能が動作してしまう。

Copyright © SoftBank Robotics All rights reserved.

25

005-002-006 タブレットの日時取得
Conditions(対象)

日時を取得するアプリが対象

Expected(期待する動作)タブレット基準の日時取得を行っていないこと

テスト方法

実装例

NGになる例・日時取得する際タブレット側ではなく、機体側で処理を行なっていることを確認する。

・ディスプレイで日時情報を利用する際
はALMemory経由で機体側より日時取得する。

・タブレット側の日時情報を利用している。

時間の取得

Copyright © SoftBank Robotics All rights reserved.

26005-004-002 Preferenceの使用有無
Conditions(対象)

事前にPreferenceを使用する承諾を得ているアプリが対象※Pepper for Bizのロボアプリ公開申請フォームから申し込むアプリは対象外

Expected(期待する動作)・承諾を得た範囲内でPreferenceDBの書き込みやPreferenceを使用していること

テスト方法

実装例

NGになる例・ビヘイビア及び関連するライブラリ
ファイル、そのほかの構成ファイルがALPreferenceManagerを呼び出の有無を確認する。

・ALPreferenceManagerの利用の許諾が得られない、あるいは対象外であった場合は、ALPreferenceManager以外の方法（アプリ内あるいはクラウド等）でデータを保存する。
・ALPreferenceManager利用の許諾の範囲内になっているか確認する。

・ALPreferenceManagerの利用の対象外にかかわらず、同APIを利用している。

※PreferenceはALPreferenceManagerをさします。

Copyright © SoftBank Robotics All rights reserved.

27

005-004-004 不適切な情報の保存有無
Conditions(対象)

事前にPreferenceを使用する承諾を得ているアプリが対象※Pepper for Bizのロボアプリ公開申請フォームから申し込むアプリは対象外

Expected(期待する動作)

・PreferenceDBに以下のような情報が含まれていないこと- ID/PASSなどのセキュリティ情報- 個人情報などの保護すべき情報- その他、公開してはいけない情報（非公開のURL、SSIDなど）

テスト方法

実装例

NGになる例・ALPreferenceManagerを利用し秘匿すべき情報を保存してないことを確認する。

・秘匿すべき情報は適切に暗号化処理を行い、クラウドなどのセキュリティが担保できるストレージに保存する。

・ALPreferenceManagerを利用しパスワードを保存している。

※PreferenceはALPreferenceManagerをさします。

Copyright © SoftBank Robotics All rights reserved.

28006-002-009 対象NAOqiのMaxVersion
Conditions(対象)-（全てのロボアプリ）

Expected(期待する動作)

最大で"2"を指定していることテスト方法

実装例

・manifestの記述内容を確認する。

・manifestを以下のように記述する。

・maxVersionの記述がない。

<naoqiRequirement maxVersion="2"
minVersion="2.5"/><naoqiRequirement minVersion="2.5"/>

NGになる例

・記述が不正。
<naoqiRequirement maxVersion="2.4"
minVersion="2.5"/>

minVersion より maxVersion が低く見えますが、“2” を指定することで、2.x 全てのという意
味になりますCopyright © SoftBank Robotics All rights reserved.

29

007-001-002 エラーログ出力有無
Conditions(対象)-（全てのロボアプリ）

Expected(期待する動作)

エラーログが出力されないこと

テスト方法

・ログを出力を確認する。

Copyright © SoftBank Robotics All rights reserved.

実装例

NGになる例・正常動作の状態でエラーが出力しない。

・実行中にエラーログが出力される（アプリのクラッシュの有無にかかわらず審査NG）

30

007-001-003 アプリ独自のログ出力有無
Conditions(対象)-（全てのロボアプリ）

Expected(期待する動作)

不具合解析に必要な以下のログ以外の独自ログが出力されていないこと
・エラーを検出するためのログ(例外処理時)
・外部連携を行う際にレスポンスを確認するログ・Service等の登録を確認するログ
上記ログ出力させる際に、大量のログが出力されない作りになっていること

テスト方法

実装例

NGになる例・self.loggerを使ったログ出力を行なってないことを確認する。

・コーディングしたself.loggerを削除する（あるいは実装しない）。

・以下のようなステートメント独自に作成されたボックスに残っている。

Copyright © SoftBank Robotics All rights reserved.

31

007-001-004 不適切なログ出力内容の有無
Conditions(対象)-（全てのロボアプリ）

Expected(期待する動作)・出力するログに以下のような情報が含まれていないこと- ID/PASSなどのセキュリティ情報- 個人情報などの保護すべき情報- その他、公開してはいけない情報(非公開のURL、SSIDなど)

テスト方法

実装例

NGになる例

・ログ出力に秘匿すべき情報が含まれてないことを確認する。

・ログ出力中に秘匿すべき情報が含まれていた場合、該当部分を削除する。

・ログ出力にWiFiに接続するSSID及び事前共有キーが含まれている。

Copyright © SoftBank Robotics All rights reserved.

32

007-001-005 データ保存場所
Conditions(対象)

アプリ内でデータ保存するアプリが対象

Expected(期待する動作)

アプリ内でデータ保存する場合はアプリフォルダ内(UUID配下)に保存していること※ソース上でもデータ格納先を確認すること

テスト方法

実装例

NGになる例・アプリフォルダにデータが正しく保存されていることを確認する。

・アプリフォルダを取得し、データを保存する。

・アプリフォルダ外の書き込み可能な任意のフォルダにデータを書き込んでいる。

参考：/home/nao 等# アプリフォルダを取得するappFolder =self.behaviorAbsolutePath().replace(self.behaviorRelativePath(), "")Copyright © SoftBank Robotics All rights reserved.

33

007-001-025 タイムアウト時の戻り値Conditions(対象)

お仕事かんたん生成 2.0から連携して起動するアプリが対象

Expected(期待する動作)

ALMemory “PFB/P4BA/OutputParameter” にお仕事の先頭に戻る以外の用途で、9999 を設定しないこと。
※タイムアウトなどの場面で使用してください※“PFB/P4BA/OutputParameter” に値(1〜99)を書き込むと2.0復帰時に参照されます。

テスト方法

・戻り値を確認する

実装例
・戻り値を”9999”に設定している場合、お仕事の先頭に戻る以外の意図で使用していないこと

NGになる例

・値が不正。
self.memory.insertData("PFB/P4BA/O
utputParameter",9999)

参考：
例：OutputParameterに１を書き込む
self.memory = ALProxy("ALMemory")
self.memory.insertData("PFB/P4BA/OutputParameter",1)

Copyright © SoftBank Robotics All rights reserved.

34

End of File35