マーガリンのテストブログ

このブログはIT関係で知ったこと、思ったことなどを記事として投稿していきます。 内容に不備や疑問点があればコメントしていただけると幸いです。

ソフトウェアレビューシンポジウム 2018 JaSST Review'18

ソフトウェアレビューシンポジウム 2018

JaSST Review'18

開催 2018年12月14日(金)


下書きだけど公開。
時間作ってちゃんと清書する


* オープニング
ブロッコリー氏🥦

2003年からJaSSTが始まった。

過去のセッション数:240
その中からレビューを題材にしたセッション:

うち3つ 風間さん🥦
うち2つ 安達さん

レビューのやり方

■ 普段どのようにドキュメントを読んでいるか
(リーディング技法)
・チェックリスト
・欠陥タイプを摘出することに集中
ユースケースを使用
・視点の割り当て
アドホック

レビュータイプ
CBR
DBR
UBR
PBR
アドホック


タイミング
適宜行う
工程完了レビュー
開発


開催形式
ウォークスルー
などいっぱい

「設計レビューで問題を叩き出せ!~QAの役割~」

白水 俊治氏 (日立製作所) しらうず さん


重厚なソフトウェアのテストを行なっている。
レビューでの組織運営についての役についている。


・汎用ソフトウェア製品開発や取り巻く環境変化と品質課題

・ハードウェアの性能飛躍でテストの詳細設計が難しくなった
・ビジネスでのソフトウェアの開発速度が短納期になった
アジャイル開発は不慣れ
・ソフトウェア長命化によるライフサイクルの変化
1990年の頃からのバグが今でも出てくる。そこでは資料がなくソースだけ。
→ ちゃんとそのパッチで治るのかを細かく見ている。

重い開発ルール・厳しい短期開発に悩んでいる。

レビューの考え方

レビューは机上テストと言われているが。。。
・テストは書いて ある 通りに動くことを確認
・レビューは書いてい ない ことを見つける
ことが大切。(でも「ない:ことが正しいのかの照明は非常に難しい:悪魔の証明

社外発生不具合の86%は仕様書に記載がないところで起きている。
記載されていて起きるのは2割。その2割を追求される。


■ レビューの良し悪しは「人」から「暗黙知」を引き出せるか
閃きが大切。
レビューの本質は有識者が作った、チェックリスト

■ ウォーターフォール≒最初に決めて守り続ける
利点:小さい単位で設計、レビューするため、内容を検証、確認しやすい
欠点:記載漏れがないか

■ ウォータフォール型開発
・プロセス改善をすると、ルールやチェックリスト類が多くなる
・問題は後半で表面化する
・設計書をちゃんと作る→時間がかかる

■ 設計書作成の流れ
企画や設計ガイド、チェックリストにそって作成され、責任者・有識者での公式の検証レビューを行なっている。
機能仕様書は細かく分類が別れて作成している。

日立さんは規定がかっちりしている。(それが弊害にもなっている?)

■ 設計ガイド・チェックリストが大量にある
・大量にありすぎれ使いこなせない。

■ 開発の流れ
計画・設計→実装→テスト
設計書・テスト計画書・品質見解

各工程で成果物を作ってレビューをしている。

計画・設計:広く深い視点で検証(利用者・テスター・システムの視線で検証)
テスト:実際に製品を動かして叩く

「気づく」「書いてもらう」他にどうしたらいいのか

日立のQAの特徴
・現物確認至上主義
 - 実機を使用した検査作業で関連製品を含めた知識を得る
 -
・顧客対応スペシャリスト⁉︎
 - 実機検査でえた知識を持ち込み顧客対応する
  ・稼働品質維持活動:サポートサービス部門
  ・障害解決支援活動:障害調査を仕切る。場合によっては駆け付け支援・自ら報告書を作成し、顧客説明をする(品証が対応すると安心感がある。責任もあるけど
  ・システム品質確保支援活動:客先で設計書レビュー、テスト支援、トラブル解決支援
・開発部門との独立性
 -製品出荷の最終障壁

■ QAの意識と効果

自分で確認・検査をする
|  ∟見逃せば社外事故
|   ∟責任感が高まる
|    ∟危機感をもつ
|  障害の惨状を知る
|   ↑
自分で顧客対応をする(障害発生→客先対応→いやだから頑張る)
|  ∟早期の復旧、解決
|   ∟顧客の信頼が得る
| 顧客意見や考え方、想定していなかった使い方を知る
 → (利用者目線での)視野が広くなる


自社製品の処理方式とOS、ハード、関連商品の知識を得られる。


品質活動の原動力
・自分で確認することによる「品質への責任感」
・顧客対応することによる「品質への危機感」

日立のレビューの考え方

設計、テスト+品質の三つの枠組みでレビューをしている。

設計段階でのレビュー:設計十分性検証フェーズ
           ∟設計内容の検証を行う
レビューポイント:最悪の可能性を考慮していうrのか
開発者が見逃している箇所を指摘するのが目標

テストだけでは確認できていない条件を探してる


■レビューポイント
・外部仕様を網羅しているのか
より広く、より深く
テストとは異なる視点、テストでは確認が難しい条件
 過酷条件、障害視点
・テストは処理の十分性が中心
 ∟障害時の復旧機能、原因調査資料の十分性→トラブル早期解決に
  ↑これができれば、客先に行かずにすむ(夜中の1時とか勘弁して)
品質監視(計画・結果の検証)
 ∟各検査フェーズで品質が担保できているのかを監視

・「探針」っていうフェーズがある。
開発工程のテスト終盤で、QAが検査項目の一部を先行評価して、
その品質状況分析から、以降の品質向上計画を決めるためにおこなう

・QAは作り込み、見逃し原因に対して、道義的原因(なぜなぜ)分析して
 見直し視点、品質向上案をあげる。

■ 設計レビューのポイント
「人事と人智を尽くす」
設計・レビューでの重要な三大思考力
俯瞰する:
先見する:
想像する:

レビューでは、長い文章・曖昧語仕様(「できる」ではその逆は?など)・例で表現

■ レビューアは日和らない。発言し気づかせるべし。
・勝手な解釈(忖度)せず、発言する。
■ チェックリストは過信しない。
・チェックリスト=神様ではない
・チェックリストが膨大だと、疲弊する
 → 心配だから削除できない(上層部の判断が必要だよね)

■ レビュー支援ツールすごい
・集まらなくてもレビューできる
・どこでもレビュー
・自分のレビューが終われば帰れる
・議事録の自動生成
・対面レビューが1/4に減った

〜〜資料が展開されたらまとめる〜〜

「レビュー再定義」

及部 敬雄@TAKAKING22(楽天株式会社)

レビューの目的

・品質の担保
・バグを見つける
・メンバー教育 など

レビューの期待

・欠陥の検出
・コードの改善 など

レビューの3分類

・検査:品質の担保 など
・学習:ナレッジの共有 など
・強化:リファクタリング など

レビューの目的を達成できているか

・コードの改善
・コードの理解
・コミュニケーション

目的と結果を比較すると

・目的にないけど、コメントの内容にはコミュニケーションや
 製品理解も入っている

レビューって楽しい?

・検査=やらなくてはいけない must
・学習=やるべき
・強化=やりたい
→実際にはやらなくてはいけないことすら難しい

エンジニアのキャリアの話

経験がついてスキルアップすると、
コードを書くのではなく、後輩の指導やら
コードレビューの時間や責任が増えてきて
コードを書く時間がなくなっていく
→ レビュー辛い

レビューやるなら楽しくやりたい

モブプロの経験を通して、
楽しいレビューについて講義する

今日の話

・モブプログラミングを始めてレビューが不要に
・でも必要だった
・我々にとってのレビューって何か

モブプログラミングとは?

チーム全員で
∟ 同じ仕事を ..
∟ 同じ時間に ..
∟ 同じ場所で ..
∟ 同じコンピューターで ..
すること

楽天:11:00 - 17:30のコアタイムがある。(いい会社)

レビューがいらなくなった経緯

・分担作業
 分担作業の前後に同期が必要になる。(計画→実装→結合)
  → 同期のための専門家(PM)やミスコミニュケーションのリスク
   → そこでレビューが必要になる。
  
・モブは、同期せずみんなで行う
 → 同期作業がないので、レビューが不要に

どっちもデリメリがある。
〜資料参照〜

モブプログラミングの検査

・レビューにおける忖度
 ∟ちょっといけてないけど、動いているからいいや
 ∟今回は指摘が多いから、これくらいにしておこう

モブプログラミングはチーム全体の活動である

・チーム全員で立ち向かってダメなら仕方ない。
 →前向きな気持ちで業務に取り組める

モブプログラミングの学習

・チームの学びの量が最大化する
 → 分担作業では、個人の学びにしかならない
 → モブなら、チーム全員の学びになる
・モチベが維持しやすい
・新メンバーの受け入れや教育に
→経験値が低い人をドライバーにすると良い
 →ドライバーだとわからない時に仕事を止められる。
  →引き継ぎ資料だけだと役に立たないけど、実際に手を動かすから
   ノウハウを得られる(Just In Time)
形式知暗黙知もまとめて伝えられる
 →暗黙知暗黙知のまま共通体験で伝えられる。
  →なぜ作ったのか、どこに苦労したのか、学びがあったのか が共有できる
→ のためレビューがいらなくなった

それでもレビューは必要

・補足を補うためのレビュー

必要なレビュー

・Pull=Request=自分たちの仕事の成果を自分たちで見直す
 → 勢いで作ることが多いので、一日の終わりに見直して、
   これが俺たちの全力なのか!?を確認する
振り返りに近い

そのレビューは本当にレビューなの?

ReーViewe 再び見る
・実際にはFirstーViewerじゃない?
 →だから学習コストが発生する
もちろんメリデリがある。
・レビューは冷静である。モブは勢いの時もある
・レビューは忖度がある。モブは忖度はあまりない。

★レビューの再定義

知っている「レビュー」を見直す。
→ プロセスも見直す
 →場合によってはプロセスも捨てる

完璧からの解放

・やらなくてはいけないこと は無限に湧いてくる
 → 完璧出なくてもいい。キリがないもの
  → 目指してもたどり着けるものではない(イライラする)

・ROIを考えて自分たちにできることをする
・やってダメなら割り切る

変化に対応する

他人のうまく行ったこと=自分たちの現場 ではない
→ 状況に合わせて変化する

情緒を大切にする

・小手先のテクニックだけでどうにかなるものではない!思わない
 →完璧ではないけど、それでも楽しみながら成長することができるように
  → 楽しくないと辛い→やめる
   → 人間らしくやりましょう!

モブでやっているレビューでのよかったFB

ステークホルダー(PG経験なし)から
 「コードを書いてのテストやレビューとかを知れてよかった。」
→こちらも開発の設計を知らないので、逆にそちらにも興味をもてた。

暗黙知のままにする
→ ドライバーにする 以外の方法は?
 → 1時間以上ドライバーする疲れるので、交代する
  → 新人にはそのドライバーを多めに対応させる
 → モブプログラミングしていると「大丈夫です(嘘)」が気づける
  → アクションがしやすい
  → 分担作業だと「大丈夫です(嘘)」がわかりにくい
   →顔が見えるのが良い

→仕事を楽しむのは良いが、楽しくない仕事にアサインされた時の対応を知りたい
 →辛い時に「やっちゃう」のが「やらないといけない」「やらなくてもいいもの」の判断を勝手に思い込んでいるだけかも
  → 楽しくないときに、辛い時に素直に判断を仰ぐ
   → 本当に辛い時は死んじゃうから、自分に素直になる
   → だめなら大人に怒られる。でも怒られたら謝れば済む(死なない)
→モブプログラミングの適正人数?
 →4〜6人。それ以上だと黙る人間がでる
  →会議と同じで20人のPRJでも、30分くらい時間とってやるだけでも十分

アーキテクチャのレビューについて」

グロース・アーキテクチャ&チームス株式会社 代表取締役社長、日本Javaユーザーグループ 会長

アーキテクチャとは

定義:あるシステムが、どんなコンポーネントに分割され、それらがどのように統合されているのかを示したもの。

・システムの要素と関係性
システムは複数のコンポーネントの組み合わせて成立する
コンポーネント:部品・特定の機能を果たすまとまり

アーキテクチャのレベル感

・様々なレベルにおいて要素と関係性が存在する
 ・企業全体システム:isideとかYammer!とか

アーキテクチャ設計とは

システムのライフサイクルを通じて、アーキテクチャを適切に実装、保守、改善すること。
 部品同士の実装とか

アーキテクチャの役割

現代的なシステム開発
0から開発することは現代ではほぼない。
→機能を実現する手段がたくさんある(言語、OSSライブラリ、商用製品、クラウドサービス・・・)
 → 他システムとの連携。変化が激しい。
  → まだまだ増えている

組み合わせでシステムを作る時代
マイクロソフトサービスのようなシステムを開発するのではなく、
短期間で、分割された、入れ替え可能なシステム
 

良いアーキテクチャとは?

良さで非機能を判断する
・機能実現は前提として非機能を重視すべき
 ・どのような組み合わせが適切に非機能を実現するのか?
  ・保守性、性能、可用性、セキュリティ、使用性、クラウドサービス
 ・特に他システムやクラウドのような「非機能を伴うコンポーネント」の扱いが重要になる。

非機能が保証されないと
リリース時点で問題がなくても、ライフサイクルの中で、
 ・複雑さに夜保守性悪化
 ・ユーザビリティ性の限界
→なら分ければいいじゃん!
 →結局結合時にバグがある。

アーキテクチャ設計レビュー

アーキテクチャの設計工程でレビューを適切に行う
 ・アーキテクチャ評価まで行ってから気づいても遅い(性能と同じ)
  → アーキテクチャ設計時にレビューをする(上流工程でのレビューが重要)
設計プロセスと成果物
 ・ビジネス要件を理解する(ユースケース
①・非機能要件を定義する:機能適合性
  ∟経産省が出しているので確認
    レビュー
②・構成を検討する(構成管理図)
    レビュー
・構成を評価する(評価シート)

①非機能要件を定義する

【 機能適合性 】
・ビジネスチームとの調整になる可能性が高い項目
 ∟非機能的な「すぐに」「早く」「素早く」表示する
  ∟その機能が必要なのか確認する

・【 性能効率性/可用性 】
 →クラウド/仮装化によって柔軟になった項目
  →ただしレガシー環境があるので気は抜かない
 →キャパシティプランニングの大切

【 セキュリティ 】
【 使用性 】
・社内なら使えればいいけど、(必要性)
 コンシューマ向けなら他社との差別化が必要
・特にスマホなどが注意
 → 使用性確保のために
【 保守性 】
・ライフタイムコストに影響するため、とても重要
 ー 独立したスケジュールでテストができるかどうか
 ー テストチームの独立性
・ログ〜監視の流れは標準化
 ログの監視は必要(バグの切り分け)
・複数環境は意識する

非機能要件を定義する ーレビュー観点

システムに対して適切に設定されているか?
 ∟非機能的に抜け漏れがないか?
  「安全性に問題ないこと」⇦安全性とは何かを専門家(部署)に確認
 ∟将来性が考慮されているか
 ∟ステークホルダーの意見が整理されているか
  この時点では、ある程度の矛盾や不可能性は許容する
  →「秒で処理してくれ」⇦無視せず書き留める。

②構成感の評価

 構成案を作成し、非機能要件から評価する
松:なんでもできるけど、高い
竹:あれはできるけど、あれはできない
梅:どれも微妙な感じ

・バランスが取れた判断になっているか?
 100点満点はありえない。妥協点を模索
 →落とし所の意図を確認する
  →技術的オーバーキルではないか?(「使いたいから」⇦それはお前だけやん、、)
  →誰かの意見によりすぎてないか?

アーキテクチャ設計レビューの難しさ。

アーキテクチャ設計は常に慈善的である。
 ∟ドキュメントがない中でのレビューになる。(コードを書くまえの段階だから)
 →リスク

リスクと戦う

・技術的リスク
 紙に「できます」とは簡単にかけるけど、
 本当に?ってなる。

・その構成で本当に非機能要件が満たせるのか?
 ∟「リスクに気づく」には、経験に寄ることが大きい
 
・技術的リスク
 リスクの検証方法や回避方法を理解しておく。

・机上検証:ベンダーを信じず、Fit&Gap

・システムの成長リスク
 ∟できれば、時点で最適化されているのが望ましい

システムの成長リスク ー 予測型

予測をして

システムの成長リスク ー 予測増改築型(温泉旅館型)

予測型を長期感

システムの成長リスク ー 犠牲型

最初に作る後続を最低限にしておき、のちに再整備する
→技術的負債(作って捨てるから予算はかかる0

システムの成長リスク ー 拡張型

構造そのものを拡張性を持たせる(※天才に限る)

まとめ

アーキテクチャの役割
 ・組み合わせでシステムを作る時代
 ・非機能要件で良さを定義する
アーキテクチャ設計は常に事前的である
 ・崩れていく船をみるしかできない
 ・つまり「リスク」がある
  ・技術的リスク
  ・システムの成長リスク
アーキテクチャ設計レビューには信念が必要
 ・必ずしも技術に優れていることが重要ではない
 ・むしろ、傾聴し、整理し、働きかける力が必要
 ・「誰かの意見」に従っていないのか?が大事
  →「お客さんがこういったから、そうしました」⇦責任転換じゃなく、ちゃんと考えろ

バランスを持つには

様々な非機能要件を作って、社内で「これで大丈夫?」って言われても、
それは品証部で確認してくれって投げる。

レビューア(レビューイ)に寄るけど、属人化しないためには?

アーキテクチャは属人的であると諦める。
→ならその属人化した人を有意義に使うことを考える。
 →レビューに一緒に参加してナレッジを収集をする

パネルディスカッション

「欠陥を見つける」以外で重要だと思っているレビューの目的

白水さん

・製品を良くしていきたい(現地対応したくないから)
・自分を楽になるようにしたく

及部さん

・メンバーがスッキリできているか

鈴木さん

・他の人の考えを取り入れる

🥦さん

・コミュニケーション
・教育

発表内容の共通点・相違点

白水さんの発表

・レビューは書いていないことを見つける
・対象によって公式レビューの出席者が決まっている
・品質への責任感と危機感
・安易に出荷させない
・「次バージョンで対応する」なども話あう
・日和らない

及部さんの発表

・リアルタイムでFB
・忖度せずにチームの最善を目指す
暗黙知暗黙知のまま共有する
・変化に適応する
・情緒をとる

鈴木さんの発表

・リスクに気づくのは、経験によるものが多い
アーキテクチャの良さを非機能で判断する
ステークホルダーの意見を整理(矛盾があるはず)
・意図的な抜け漏れも明示する
・相談に乗る形でレビューに参加する形が多い

レビュー時の発言について

【 観点と思考 】
成果物・観点・チェックリストに対して、人間の思考→理解
レビューア→レビューイ
【 指摘するまでの思考過程 】
・順方向トレース
アンチパターン(過去の不具合パターン)
・一貫性チェック

白水さん

Q:閃き→気づき、現場での気づき→レビューでの指摘のロジックを知りたい
A:考えていないので閃き。
  想定外だから覚えておこう→思い出して発言。(考えたことがないので説明が、、、)
  → 直近あった不具合とか覚えているからそれを言う。

及部さん

Q:発言するまでの考え方を教えて欲しい
A:自分の苦手なことをミスしないように発言する
  チェックリスト:これをすれば大丈夫となるから苦手。やった気になるから
         人間らしいことが大切なので、相手の感覚を重視する
         「ここは自身がある」「ここは苦手」を相手にきく。

鈴木さん

Q:将来の可能性、リスクに対してのレビューではどのように
A:時間軸の指摘をするように

その他

モンキーレビューとか、人にフォーカスを当てた確認をする。

自信のあるところ⇦なぜ自信があるのかを聞いてあげる。
「ここ余裕っす!」⇦怪しい
いっぱい話すところ⇦怪しい。調べたのは分かったから、それでどうなるの?
「ここの機能が自信あるっす!」
「なんで自身があるって言えるの?」
「できてるコードをググってコピペして動いたから」
「・・・(あかん)」

指摘事項の優先順位

・思いついた順
・何らかの基準に満たしたものを指摘する
・何らかの基準で並び替え、高い順に指摘する

白水さん

・思いついたことを全て言う
→間違いには指摘。
→それ以外には質問が良いのかなと、ここで思った。

及部さん

・思ったことを思ったように行っている(優先度はない)
→忖度しない。
・指摘するかどうかの優先度を考える時間がもったいないから、指摘する。
 →そこからの実行の判断をチームに任せる。後回しか即判断か。

鈴木さん

・本当の理想 ⇦ここに向けて行くのではなく、
  ∟理想
   ∟現実 ⇦ここら辺に持っていけるように発言している。
・現場にいるエンジニアが一番偉い。その人が良い判断できるようなヒントを与えられるようなレビューしたい。
 ∟ あんまり言うと「お前がやれ」ってなるのでバランスがむずかしい。

🥦さん

正しいレビューの仕方についての教育について知りたい

白水さん

・本などたくさんあるけど、計画→レビュー→フォローアップの仕方は決まっているが。。。

及部さん

・同じ場所で色な視点を持っている人と一緒にレビューに参加して、
 学んでいく。教科書には乗っていない。

鈴木さん

・レビューイ経験をさせるのが一番いい勉強になる と思う。
 うまくレビューを受ける癖?を身に付けるのがいいかと

レビューの目的を達成していることを、どのように判断していますか?

どこまで行ったら、このレビューは大丈夫か?

白水さん

・全員が安心感すれば○になるかと。

及部さん

・分からないことをしない。分かる範囲でしかやらない。
 →ちゃんと相手に伝わるかが大切。
  →レビューがワクワクしているのか。
   →やめる定義を決めておく。(5フィンガーとか)

鈴木さん

・時間は常に足りない。時間内にどこまで達成できたかでジャッジする。
 →許される範囲で、出来ることをできる限りのことをする。
・参加者が不安があるとそれは解決しないといけない。
 → 安心感が大切

レビューの観点やルールを決めてレビューしても、偉い人はそれを無視して、話が飛び散る、時間がかかる、カオスになる、のどうすればいいのか

白水

・事前に意見を頂戴する。
・その人を一回外してレビューをする。
 →絶対にその人がこない時間帯に開催する。
  →その根回しが必要

・使っているツール

及部

・そんな人はいらないから排除する。
 →その人の意見が欲しいと思っても、辛いレビューになるから排除

鈴木

・偉い人の「俺は聞いてない」にならないように根回しが必要。
 →悪意のあるのは最低。悪意がないのなら、言わせるだけ言わせて終わらせる。
  →多分話たいだけだから、話す場を設けていなす。