PMのためのNotionで構築するスクラム開発:QAテスト項目を管理する方法
どんなものを作成するのか?
- Notionのサブアイテムを利用して、多階層のテスト項目を管理
- テスト総数とテスト通過済みの総数を出す
- テストの進捗を表示
簡単に見えるが、Notionの仕様を理解していないと結構難しい。
プロジェクト管理やドキュメント管理だけではなく、QA項目の管理もNotionで完結することができる。
なお、Notionの中級クラスの内容となっています。
なぜNotionで管理するのか?
※結論:人間めんどくさがりなので、複数のツールを確認したがらない。なので、なるべく一つのツールに統合する一環として、Notionにまとめて管理しています。
プロジェクト管理ツールは、多ければ多いほどスイッチコストがかかる。
例
- ドキュメント管理・プロジェクト管理:Notion
- QAテスト項目の管理:スプレッドシート
普段Notionで管理されているため、わざわざスプレッドシートのリンクを開いて、テスト項目を確認するのは手間です。また、毎回スプレッドシートのURLをNotionに貼る手間が生まれる。このため、QAはテスト項目を共有しても閲覧されず流れてしまったり、そもそもスプレッドシートのリンクが共有されない事態になる。
Notionとスプレッドシートの行き来をなくし、一つのツールに統合を試みることで、エンジニアとQAがどちらにとっても楽に管理できる状態にする。
- エンジニアとPM、QAEはQAのテスト項目の進捗がわかる
- エンジニアはQAのテスト項目を確認しながら、開発を進めることができる
- QAはテスト項目の共有が容易になる
- QAはテスト項目のテンプレートをNotionで管理することができ、テスト項目作成が楽になる。
テスト項目をサブアイテムで管理する場合
多階層でテスト項目を管理したい場合の選択肢は2つです
- 階層ごとにDBを分ける
- サブアイテムを利用して、階層を分ける
階層が決まった使い方をする場合はDBでも良いですが、管理の自由度は下がります。
サブアイテムは階層追加の自由度は上がりますが、値の管理に少々癖があります。
今回の要件としては、大項目・中項目にテスト項目を分けたり、分けなかったりすることができることにします。
- 大項目
- テスト項目
- テスト項目
- 中項目
- テスト項目
- テスト項目
- 小項目
- テスト項目
- テスト項目
- テスト項目
この実現方法として、今回はサブアイテムでの多階層の構築します。
構築方法
isTest項目の判定処理
テスト項目かどうかを判定するプロパティを作成します。
ここでの注意点としては、テスト項目とテスト項目をまとめた大枠・中枠・小枠がある点です。
つまり、テスト項目とそうでないものがあるのです。
そのため、テスト項目かどうかを判定するisTest
のプロパティを追加します。判定条件は下記のとおりです。
条件
-
サブアイテム数
が0個
のとき、テスト項目である。-
isTest
の値は1
とする。
-
-
サブアイテム数
が1個
以上のとき、テスト項目ではない。-
isTest
の値は0
とする。
-
実現方法
if(prop("サブアイテム").length() == 0, 1, 0)
実際
テスト通過の判定処理
テスト通過を判定するisPassedプロパティを作成します。通過条件は下記になります。
条件
-
isTest
が1
である - 下記のそれぞれの項目のステータスが
PASSED
またはテスト対象外
のとき、テスト通過と判定する。テスト通過時は、Pass判定
の値は1
とする。- web(PC/SP)
- Android(App)
- iOS(App)
- 一つでも通過していない場合、テスト通過はfalseとする。
isPassed
の値は0
とする。
実装
if(
and(
contains(["PASSED", "テスト対象外"], prop("iOS")),
contains(["PASSED", "テスト対象外"], prop("Android")),
contains(["PASSED", "テスト対象外"], prop("Web(PC)")),
contains(["PASSED", "テスト対象外"], prop("Web(SP)")),
prop("isTest項目") == 1
),
1,
0)
実際
各階層のテスト数の取得
Notionの弱点。
- 1階層目の合計を出すことができるが、サブアイテムを数値に含めてくれない。
- プロパティ内で数式を書いているとき、数式内でそのプロパティ自身を呼び出すことができない。
まとめて取得しようとすると、if文が複雑になるため、階層ごとにプロパティを分ける。次のように分けます
プロパティ
- 2階層目(子)のテスト項目数
- 3階層目(孫)のテスト項目数
- 4階層目(ひ孫)のテスト項目数
2階層目
条件
-
サブアイテム
のisTest
の合計
実装
if(
prop("isTest項目") == 1,
0,
prop("サブアイテム").map(current.prop("isTest項目")).sum()
)
3階層目
条件
-
サブアイテム
の2階層のテスト総数
の合計
実装
sum(prop("サブアイテム").map(current.prop("2階層のテスト総数")))
4階層目
条件
-
サブアイテム
の3階層のテスト総数
の合計
実装
sum(prop("サブアイテム").map(current.prop("3階層のテスト総数")))
テストの合計数
テスト項目の合計数の式は下記になります。
条件
isTest
+ 2階層目(子)のテスト項目数
+ 3階層目(孫)のテスト項目数
+ 4階層目(ひ孫)のテスト項目数
= テスト項目の合計
1階層目がテスト項目の場合、isTest
は1
です。その配下にサブアイテムはありません。なので合計数は1
になります。
isTest: 1
2階層目(子)のテスト項目数: 0
3階層目(孫)のテスト項目数: 0
4階層目(ひ孫)のテスト項目数: 0
テスト項目の合計 = 1
1階層目がテスト項目ではなく、テスト項目をまとめた大枠の場合、下記のようになります。
isTest: 0
2階層目(子)のテスト項目数: 2
3階層目(孫)のテスト項目数: 3
4階層目(ひ孫)のテスト項目数: 5
テスト項目の合計 = 10
このようにプロパティを変数のように扱うことで、テストの合計値を出すことができます。
今回は4階層までしか用意していませんが、5階層目のプロパティを用意してあげれば、集計は可能です。
ただし、Notionが7階層目までしか取得できない仕様があるため、階層には限りがある点を留意してください。
実装
prop("isTest項目")
+ prop("2階層目(子)のテスト項目数")
+ prop("3階層目のテスト項目数")
+ prop("4階層目のテスト項目数")
実際
※ 階層名の表示は異なります
各階層のテスト通過数の取得
今度はテスト通過済みの数を取得します。
先ほどは各階層ごとにテスト数を取得していましたが、今回はテスト通過済みに絞り込む必要があります。
これも同様に、1階層~4階層ごとに取得します。
2階層目の通過数
まず2階層目は、下記のような判定を行います。
条件
-
isTest
が1
のとき、2階層目の通過数は0個 -
サブアイテム
の「isTest
が1
」かつ「Pass判定
が1
」の合計
実装
if(
prop("isTest項目") == 1,
0,
prop("サブアイテム").map(
if(
and(current.prop("isTest項目") == 1, current.prop("PASS判定") == 1),
1,
0
)
).sum()
)
3階層目の通過数
条件
-
サブアイテム
の2階層目の通過テスト数
の合計
実装
sum(prop("サブアイテム").map(current.prop("2階層の通過テスト数")))
4階層目の通過数
条件
-
サブアイテム
の3階層目の通過テスト数
の合計
実装
sum(prop("サブアイテム").map(current.prop("3階層の通過テスト数")))
通過テストの合計
条件
PASS判定(1 or 0)
+ 2階層の通過テスト数
+ 3階層の通過テスト数
+ 3階層の通過テスト数
実装
prop("PASS判定")
+ prop("2階層の通過テスト数")
+ prop("3階層の通過テスト数")
+ prop("4階層の通過テスト数")
実際
テスト進捗率の表示
条件
通過テスト数/テスト総数 * 100
実装
round(prop("通過テスト数") / prop("総数") * 100)
実際
エピックとユーザーストーリー単位でテスト項目を管理する
リレーションにエピックとユーザーストーリーを追加し、エピックのページでテスト項目のDBを読み込めば、下記のようになります。
これにより、エピック単位の仕様に基づいてテスト項目の追加が可能になります。
テスト項目ごとにユーザーストーリーに紐づけているので、このユーザーストーリーが完了後にどこまでテストが可能かも把握できます。
最後に
いかがだったでしょうか?
Notionだけど、言語のように自由に扱えることがよくわかったのではないでしょうか?
このようにNotionの使い方を利用していくと、作りたいものが自由に作れるので楽しいですよ。
組織運営の改善に大きく役立つので、Notionにスクラム開発やQA管理なども移行してみてはいかがでしょうか?
今後
他にもNotion周りも発信していくので、よければフォローしてください😄
Discussion