ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

JaSST'21 Tokyo 招待講演「パターンQA2AQによるアジャイル品質のマインド、体制、プロセス、技術」聴講メモ

本記事について

JaSST'21 Tokyo (JaSSTソフトウェアテストシンポジウム-JaSST'21 Tokyo)
A9)招待講演
「パターンQA2AQによるアジャイル品質のマインド、体制、プロセス、技術」
鷲崎 弘宜 (早稲田大学 / NII / システム情報 / エクスモーション)
の聴講メモです。

講演メモ部分は講演資料と併せて読む前提でまとめています。講演資料が公開されましたら、ぜひ読んでみてください。

講演メモ

従来型の開発では顧客と開発者の距離感が離れる時期(特に開発の中盤)がある。また、開発開始から終了までの時間が長い。これらにより顧客と開発者の思い(価値観)がずれやすくなる。
一方でアジャイルは頻繁に打ち合わせ・リリースをすることで、顧客と開発者の距離がさほど離れず、価値観のずれが少なくて済む。

従来の品質保証は特定の段階(ゲート)でゲートキーパーとして機能していた。ある程度開発が完了した後に品質を確認する。
アジャイルではある程度動くソフトウェアを対象に確認する。

問題と解決を抽象化してまとめたものが「パターン」といえる。

品質とは行動ではなく習慣である。
テストをすればよい、レビューをすればよい、という行動ではなく、習慣である。

何でもかんでも自動化しない。めったにやらないこと、自動化するのが難しいこと(一貫性がないとか)はしない。繰り返すこと、人手でやるとミスしやすいこと、面倒なことを自動化する。

チェックリストは肥大化して形骸化しやすい。本当に必要な品質に絞ってかつ具体的(期待値)にリストする。

刺激源はユーザー・他システム・自然など。
刺激源「端末の利用者」
刺激「報告をWebで要求」
応答「報告を受理」

「1秒以内」とピンポイントに示すより、着陸ゾーンのように幅を持たせることをお勧めする。

C4モデルはコンテキスト(Context)・コンテナ(Container)・コンポーネント(Component)・コード(Code)で表現する。ハイレベルかつ具体的に記述できる。

定義ファイル動的読み込みは「変更を停止なしでの反映」に対してポジティブだが、処理スループットにはネガティブになる、といったトレードオフを表現できる。

Q & A

Q.
「品質スプリント」はとてもよさそうだと思いましたが、「テストフェーズと何が違うの?」と聞かれると答えられる自信がありません。混乱しない回答があればご教示いただきたいです。
A.
複数のスプリントによってフェーズが構成される。そのフェーズが品質に注目しているものを品質スプリントと呼ぶ。スプリントベースなのが従来との違いになる。

Q.
QAを全員で考えるとなると、開発も全員で考える、企画も全員で考える、スペシャリスト不在の烏合の衆になる恐れがあるとおもうのですが、この点に関してはどうお考えでしょうか?
A.
それぞれのスペシャリティが活かせる環境になるとなおよい。開発者がテスターと同じことをするのではなく、設計や実装でテストしやすさを心がける。テスター側としても同様となる。
それぞれの立場で品質を見て、スペシャリティを活かしながらフィーチャーを作り込む。

Q.
品質の中に機能性などもありますが、品質バックログの品質は、どちらかというと非機能に関する品質を意味するのでしょうか?
A.
ユーザーストーリーに織り込まれる品質であったり、全体に対する品質を指す。
開発者にしかわからないような品質(例えば保守性)なども品質バックログに含まれる。

Q.
QAを嫌がるような開発者がいますが、そのような人とワンチームを築く上でのコミュニケーションポイントがあれば教えてください。
A.
QAに早い段階で関わる。理想的には開発者とQAの協業をする。QAとしても成果物を単に見るのではなく、その途中段階から関わる。
開発者にとってQAが価値を出す妨げの存在ではなく、高め合う存在である、という協調関係を作る。
最初からQAが全チームに入るのは難しければ、QAが各チームをローテーションするというのもありかもしれない。

Q.
品質シナリオを抽出する方法は何か考えられてますでしょうか。着目しているシナリオに対して、品質特性をガイドワードとして発想するような形でしょうか。
A.
その通り。性能・可用性・典型的な入力などを押さえる。

Q.
一度チェックリストの項目に載ると、捨てるのは難しいです。例えば過去のバグ事例に基づく場合はなおさらです(それがめったに出ないとしても)。既存も含めて絞り込むためにどうすべきでしょうか?
A.
複雑さ(エントロピー)が増大するのは避けられない。リストの項目数の最大値(例えば20個)を決めておくのが一つの手だ。もしくはリストが膨れすぎたらゼロから再構築する。

Q.
「品質チェックリスト」問題が発生するたびに項目が増えがちなのですが、適切に項目を絞るためにはどうすればよいでしょうか? 本当に削って大丈夫か、と自問自答してしまい、増やすとなかなか削ることができません。
A.
チェックリストの項目が何のためにあるのかをトレースできるようにしておく。数が決まっていると本当に何を残すべきかと見直すきっかけになる。

Q.
品質ストーリーはシステム全体を対象とするので、クローズするタイミングがなさそうです。各スプリントに同じ品質ストーリーが入って、毎回クローズするのでしょうか。
A.
定期的に出ることもあるし、品質チェックリストの項目とすることもある。

Q.
従来型のQAから徐々にステップアップしていくことを考えると、どのあたりから取り組んでいくのがおすすめでしょうか
A.
見える化・自動化・チームとして構成する。
繰り返しの中で扱えるように自動化する。

Q.
品質チェックリストのチェックは自動化しないのでしょうか?
A.
客観的かつ機械的に確認できることは早期に自動化したほうが良い。
全て自動化するということではなく、そうする意味があるところを自動化する。

Q.
1チームで進めると、経験の浅いQA担当者等は、第三者視点が損なわれたり、開発者の意見に流されたりする可能性が高くなるように思います。どのような対策が考えられますか?
A.
POと協業して顧客にとって何が重要かを意識合わせする。
組織内QAコミュニティを作ることも重要といえる。

Q.
Dashboard と Radiator の両パターンの境界線が難しいです。Dashboard を構築するとおのずと Radiator が達成されるのではないでしょうか?
A.
Dashboard もほっておくと肥大化していく。そうすると何を見て意思決定すべきかが見えなくなる。複雑化した Dashboard をサマライズした Radiator を作ることになる。

Q.
ハードチームとソフトチームは一緒にアジャイル開発をできるのでしょうか?
A.
工夫すればできる。ハード含めたシステム全体をアジャイルで取り組むという事例もある。

Q.
品質全体を考えるときなど、スプリントでは収まらないこともあると思います。そのようなタスクはどのように扱うべきでしょうか?例えば品質チェックリストの初版作成など。
A.
スプリント0と称されるようなベースを整える期間を設ける。
もしくは収まらないということは粒度や大きさが設定できていないのではないか?、ということを見直す。例えば、品質チェックリストが最初から巨大なものである必要があるのか?

Q.
QAの作業はチーム内で分散できると思いますが、逆に開発作業をQA出身のメンバーへ分散させることは難しいため、負荷が開発者に偏ってしまう問題があると思いますが、どのような解決策が考えられますでしょうか?
A.
テストの自動化のようなQAと開発者の接点において、QAも積極的にタスクを引き受ける。

JaSST'21 Tokyo 基調講演「Being Agile about Architecture」聴講メモ

本記事について

JaSST'21 Tokyo (JaSSTソフトウェアテストシンポジウム-JaSST'21 Tokyo)
A1)基調講演
「Being Agile about Architecture」
Joseph W. Yoder (Refactory CEO)
の聴講メモです。

Twitterのつぶやきがtogetterでまとめられています。併せてご参照ください。
JaSST'21東京基調講演のまとめ - Togetter

【参考】としている箇所は私が挿入しています(補足や参考資料など)。登壇者の講演内容ではありませんので、その旨ご了承ください。

講演メモ

早く進みながら品質は高く、というのをアジャイルで両立させないといけない。

アジャイルそのものはプロセスではない。非常に短いスプリントで、フィードバックし、改善すること。アジャイルはハードウェアにも適用でき、テスラがその一例となる。

アジャイルには原則がある。
(1) やる気のある人たちが集まること。
(2) 継続的改善で、常に適合して改善していくこと。トヨタは TQM (Total Quality Management) の中で重要な要素として取り入れている。
(3) 変化を受け入れること。必要であれば適合して変化していく必要がある。ビジネスもいち早く変わっていかねばならない。ビジネスにとっての価値に焦点を当てる。
(4) アジャイルでは技術に献身的に取り組む。
(5) 信頼と透明性。上司はチームを俯瞰し、メンバーはお互いに透明性をもってコミュニケーションをとる。

例えば、鮨職人は常に改善の余地がないかを考え、新しいレシピを考案している。アジャイルとはそうした状態を指している。アプローチは様々ある。

アジャイルですべて達成できるわけではない。
(1) "KISS Simple is Best" という言葉はあるが、必ずしもシンプルになるとは言えない。例えば機械学習は複雑だ。
(2) 早いことが必ずしも良いことではない。時にはスピードを緩め、行き先を見据えなければいけない。
(3) 時に変更要件が次々と出てくる。その中でセキュリティなどにも配慮しないといけない。配慮すべきことを後回しにすると、手遅れになってしまうことがある。


【参考】
KISSの原則 - Wikipedia

アジャイル・リーンの価値

  • オーバーデザインはダメ (Design Simplicity)。もともとの価値がなくなる。
  • 短いフィードバックで、常に見直し続ける。
  • ステークホルダーのニーズを満たす。
  • 学びながら継続的に改善する。
  • 人中心の開発をする。
  • 自分達も成長していく。

パターンはグッドプラクティスと考えることができる。
パターンとはナレッジを共有すること。
上手くいったこと、いかなかったことをパターンとして共有する。

常に新しいものが出てくる。マイクロサービスをやるべきか、機械学習をやるべきか。IoTをやるべきか。
色々な意思決定をしながらトレンドについていかなければならない。
アジャイルはプロジェクトが始まったときだけでなく、その後も考え続けなければいけない。

持続可能なアーキテクチャを作りたい。会社にとっての優先順位を考え、バランスを考えなければいけない。ビジネスとアーキテクチャのバランスを取る必要がある。

アーキテクチャの検討を始めるとき、巨人の肩に乗る(リファレンスアーキテクチャを参考にする)ことを考える。
これまでのテクノロジーを参考にする。Java, Ruby on Rails, Spring といったフレームワーク・データベースなどの過去の知見を参考にする。今は決めずにロードマップに入れて後で決めるということもある。
巨人の肩に乗ることの例として、例えば Azure は IoT のリファレンスアーキテクチャを提供している。

リファレンスアーキテクチャには課題があるかもしれない。足りないものがあるかもしれない。そうした不足しているものを追加しないといけないかもしれない。例えばセキュリティやロギングなど。

どこに問題があるのか、どこが難しいのかを見極め、計画を立てることだ。

最大責任地点 (Most Responsible Moment) を選ぶ。
品質ロードマップのどこにアーキテクチャ判断地点を置くのかを考える。つまり、システム品質にいつ対応するのかを決めないといけない。
パフォーマンス・安定性・プラットフォーム・モバイル対応、こういった点をいつ決めるのか計画しなければいけない。責任地点に向けて計画を立てるのだ。スライドの "Qualify the Roadmap" はその一例だ。

"Tracer Bullets" とは要件に対してアーキテクチャが合致しているのか、それとも過剰(オーバーデザイン)なのか、その方向性を導くことだ。

"Test Architecture" ではアーキテクチャそのものをテストする。これはシステム全体の品質にも影響する。テスト設計をできるだけ早期に策定する必要がある。

スライドのフロー(青色のタスク)はプロジェクトのいつでも立ち戻ることができる。だが、なるべく早期に取り組むべきことでもある。

アジャイルはプロセスではない。プロセスはスクラムなどを指す。

バックログのアイテムとして技術的負債を追加することもできる。

Philippe Kruchten はバックログのアイテムに色を付けることを提唱している。
グリーンはOK。レッドは直す必要があるもの。目に見えないものはイエローかブラック。
開発者だけでなくQAやプロダクトマネージャーと一緒にフィードバックする。


【参考】
バックログのアイテムの色分けについて詳細な解説記事がありました。
What Color is your Backlog?

継続してモニタリングし、評価することが必要だ。
また、トリガーを設定しておくこと。例えば、このままだとSLAを満たせなくなるなど。それをチーム内にアナウンスする。


【参考】
スライドに登場する "Architecture Spikes" について。

技術的負債の管理をしなければいけない。
周囲の環境の変化でアーキテクチャがマッチしなくなるかもしれない。そうした技術的負債は早めに解消しておかないと、大きくなりすぎて解消できなくなるかもしれない。乱雑な台所は片付けに多大な時間が必要となる。短期間で取り組んで解消へ導かなければいけない。

"Technical Debt Management" では技術的負債をエビデンス・コンテキスト・インパクトといった観点から整理している。ここでのインパクトとはビジネスへの影響を指す。
私 (Joseph Yoder) に連絡をもらえれば、彼女らの博士論文の内容を紹介する。

ビジネスのS曲線。
新しいアイディアを温める (Ferment)。飛躍する (Takeoff)。成熟する (Maturity)。
これを Kent Beck は 3X と言っている (eXplore, eXpand, eXtract)。

Takeoff するとドキュメントや QA が必要となる。
Maturity に達すると一つのミスが致命傷となる。なので、ここは技術的負債を返し、ミスを減らさないといけない。

イムリーかつ可視化した情報がなければ改善はできない。
価値ある情報を可視化するため、その対象を考えなければいけない。開発者ならコードやテストだろう。マネージャーなら対顧客かもしれない。チーム・プロジェクト・立場を考えて価値と評価指標を考えないといけないし、メトリクスも変えていく必要がある。
これはアジャイルの透明性と親和性がある。

技術的な判断はビジネスの価値を考えて行うべきだ。

The first rule of any technology used in a business is that automation applied to an efficient operation will magnify the efficiency. The second is that automation applied to an inefficient operation will magnify the inefficiency. - Bill Gates

効率的なオペレーションに自動化を適用すれば効率を高めることができる。
一方、非効率なオペレーションに自動化を適用すれば、非効率性が高まるだけだ。
反復的なタスク、待ちの多いタスク、リスクの高い箇所を可能な限り自動化すべきだ。

アジャイルはフレキシブルだ。ビジネスにとって一番価値のあるものに合わせて実装していく必要がある。
一年前に決めたことを引きずってはいけない。現状に合わせて見直すことだ。

改善する時に重要なことは時折ポーズする(立ち止まる)ことだ。いつまでも進み続けていては考える時間を確保できない。スラックタイム (Slack Time) が必要だ。
これをプロセスに組み込んでも良いかもしれない。例えば、20%ルールや Hack Day 等。

Spotify の Innovation のモデルを例示する。
プロトタイプで作ってみて、リリースして、フィードバックを受ける。
調整のやりすぎでマイクロオプティマイズになることがある。そこで立ち止まることにより、より良い方向へ向かうことができる。

イノベーションのためには Slack Time が必要だ。この本の表紙に描かれたバネの例がお気に入りだ。バネが伸びきっていたら何かが起きた時に切れてしまう。何かあったときの余裕が必要だ。超過している状況は危険だ。

※英語版にリンクしています。日本語版は表紙が異なるため。

THINKING, FAST AND SLOW もお勧めの本だ。

※日本語版にリンクしています。

スケジュールに余裕があると、タスクを入れたくなるが、そこで改善に取り組む。

速さと生産性はイコールではない。
速いということは価値ではない。
一番価値があるものを作ることがゴールだ。

実験の段階 (Ferment) では技術的負債ではない。だが、Takeoff した後はプラクティスを変える必要がある。

盲目的にアジャイルをするのではなく、アジャイルになるということ。プロセスやプラクティスではなく、アジャイルマインドセットを持つということだ。


アジャイルは技術力不足を補うものではない。卓越した技術力は必要だ。

あなたが何に価値を見出すのか?それを大切にしてほしい。

"If you think good architecture is expensive, try bad architecture." という言葉を引用して締めくくりとしたい。

Q & A

Q
ユーザビリティをどうやって可視化するのか?
A.
パフォーマンスは数字で表現できるが、ユーザビリティは測りにくい。ただ、ユーザビリティのテストがあるし、機械学習でユーザーからフィードバックを得るというのも一つだ。例えば、ユーザーのキーストローク・視点・視線から測ることができる。ここまで測定できるラボを設置するのは難しいが、観察することはできる。例えばシナリオを作成し、タスクを試してもらい、そのフィードバックを得る。そして数字に紐づける。

Q.
進化性 (Evolvability) の測定はどうすればよい?
A.
新しいフィーチャーをリリースするまでにどのぐらい時間がかかったか?というのを測定する。以前に似たようなフィーチャーをリリースした時と比べ、どのぐらい違うか?記録しておくことが大前提だが、そうやって測ることができる。

Q.
SRE (Site Reliability Engineering) について。機能テストとは別に SRE にどの程度の時間を割くべきか。
A.
ケースバイケースとしかいえない。火星に人を送るのであれば相当な時間をかけなければいけない。計画して決断を下す。
※余談ですが、SRE とは何のことを指している?というやり取りがありました。同じような略語が多いので、正確な回答をするために気を遣ってくださったようです。

Q.
プロジェクトをウォータフォールで進めざる得ない中でも、今回の講演のようなアジャイルベースでの改善を入れ込むことはできますか?
A.
答えはYesです。
ウォーターフォールは誤解されている。実はこれはループです。要件があって、分析して、ビルドして…。でも本当はループなのです。だからアジャイルチームがループの中で改善することはできる。
もともとの最初のペーパー(論文)を読んでほしい。


【参考】
W. W.ロイスによって1970年に発表された論文で、ウォーターフォールの起源とされている。
Managing the Development of Large Software Systems

Q.
Slack Time はプロジェクト内で設けるべきか。それとも分けるべきか。
A.
両方だ。プロジェクト内に設けないと、問題があったときに大変だ。例えば、メンバーが急な病気で休まざるを得ないとき、Slack Time がないと大変だ。また、別のスプリントとして設けることもできる。

Q.
<質問不明>
A.
技術的負債とはとても重要な概念だ。すべての技術的負債には理由がある。
技術的負債の返済はビジネス上の決定だ。エンジニアやQAが決めるのではなく、ビジネスとして決定しないといけない。デリバリーが遅くなるとか、ビジネス上のインパクトを見せるべき。エンジニア・マネージャー・ビジネス担当者、全員で議論すべきだ。

Q.
技術的負債やアーキテクチャを見直すといった活動をどれくらいの周期(1スプリント、1ヶ月、4半期など)で組み込んでいくとよいのでしょうか。
A.
技術的負債はタイミングを決めて返すというより、常に行うべきだ。
トヨタは全員が品質の責任を持っている。ラインで働く方も問題があれば止めることができる。
台所を常にきれいに整理するようなものだ。時には時間がかかることをスプリントという形で行っても良いかもしれない。

Q.
ロードマップのチェックポイント(責任地点)は何回実施するものでしょうか。また、その責任者はいつ決定するものでしょうか?
A
システムや会社による。大まかなロードマップ(スライドの Quality the Roadmap のような)を決めておく。また、その責任者を決めておく。

Q.
派生開発の場合、パターンのうちどこから始めると良いでしょうか?
A.
派生開発の場合、既にプロジェクトが走っている。それでもパターンは全て適用可能だが、スライドのフローの青色のタスクから始めるのが良いだろう。何が起きているかを分析し、痛みを見出し、進化をしていく。

JaSST'21 Tokyo 「JSTQB Advanced Level テストアナリストのシラバスでテストプロセスとテスト技法を学ぼう」聴講メモ

本記事について

JaSST'21 Tokyo (JaSSTソフトウェアテストシンポジウム-JaSST'21 Tokyo)
セッション F5
JSTQB Advanced Level テストアナリストのシラバスでテストプロセスとテスト技法を学ぼう」
の聴講メモです。

クラシフィケーションツリーのモデリング

抽象・具体の関係とは、主菜という抽象に対し、肉や魚という具体があるということ。

直交とは漏れなくダブりなく、という状態を指す。

ワーク04問題とワーク05問題は JSTQB 認定テスト技術者資格試験で実際に出題される問題レベルを想定している。

※補足
私見ですが、明言こそしていないものの、他のワーク問題についても試験レベルを想定していたように思われます。

Q & A

当日は Q & A の時間が足りず、一部のみの回答となりましたが、後日何らかの形で残りの質問にも回答する予定、とのことでした。ここでは当日分の回答をまとめます。

Q.
組み合わせテストをするとき、クラシフィケーションツリー/ペアワイズ/直交表のどれを使うべきか、判断の決め手を教えてください。
A.

  • クラシフィケーションツリー
    • 与えられたパラメータの組み合わせを自由に決めたいとき。
    • 漏れなくパラメータを網羅したいとき。
  • ペアワイズ
    • 禁則(組み合わせ出来ないもの)があるとき。
      • 直交表だとテストケースが増えてしまうため。
    • 直交表のパターンにフィットしないとき。
  • 直交表
    • 3値のパラメータの組み合わせを網羅したいとき。

Q.
Nスイッチカバレッジについて。再生→再生という遷移がある場合、例えば0スイッチカバレッジであれば再生→再生のケースもテストすべきですか?
A.
テストすべき。再生→再生という遷移であっても、それを定義したのであればテストすべき。なお、シラバスにはそこまで明示されておらず、ここでは一般論として説明している。

Q.
「想定通りに振る舞うこと」は想定結果として具体的に書きやすいですが、「想定外に振る舞わないこと」をどのようにテストすればよいでしょうか?想定結果に「想定外に振る舞わないこと」とは書けないし、想定外を想定するというのもまた難しい…。
A.
(1)
想定外の発想の仕方について。
シラバスには『テストアナリストは、行うことが想定されていない何か(たとえば、不要な追加機能)をプロダクトが誤って行っていないことを確認する必要がある。』とあり、これがヒントになるかもしれない。
欠陥ベースの技法も参考になるかもしれない。
また、マインドマップなどでテストの発想を広げるとよい。
(2)
テストケースへの「想定外」の書き方について。
一般論になるが、想定外を具体的に書くのは難しくても、想定外が起きても期待すること(例:動作が継続されることなど)は書けるかもしれない。