AGESTのブログ - TECH PLAY

TECH PLAY

AGEST

AGEST の技術ブログ

487

テストエンジニアが身につけておきたいスキルの一つ「論理のスキル」。 「論理の言葉」の意味や働きに注意が向くようになったら、文や文章の読み書きで実践していきましょう。 この連載では、「論理スキル“実践編”」と題して、「文章の筋道を把握する、主張を理解する」「文や文章の筋道を組み立てる」ことに役立つ 推論の形 を見ていきます。 はじめに どちらが「論理的」だと感じますか? 図1-1、PさんとQさん、どちらが「より論理的」だと感じますか? その理由は何ですか。 図1-1 食堂で注文を話し合うPさんとQさん 「論理の言葉」を覚えたら “実践編”のテーマ 論理スキル”実践編”では、”入門編”で出てきた「基本的な論理の言葉」を基にして、文や文章の論理構造を読み取ったり、筋道立った文を作ったりするための 「推論」の形 を見ていきます。 不具合/故障のチケットやテストサマリレポートを書きあぐねた経験はありますか。テストベース(要件定義書、機能仕様書、ユーザーストーリー、etc.)や返ってきたチケットを読んで、「どんな場合にどうなるのかわからないな?」「何故この対応でよいと言えるんだろう?」などと感じたことはありますか。 ソフトウェアの世界でも、(長めの)文/文章を読み書きする機会は多くあります。こうした困りごとをなくすためにも、 論理の言葉の使い方、使われ方 の感度を研ぎ澄ませましょう。 ●入門編:テストエンジニアのための論理スキル[再]入門 記事一覧はこちら |Sqripts 推論: 話の筋道をつくる、読み取る 推論とは 何か言いたいことがある時、最終的に言いたいこと(結論)と、その結論の前提があります。結論も前提も何かしらの主張や判断ですが、ここではざっくり「文」と呼びます(本連載では、文脈によって「主張」「判断」「文」を使い分けます)。 前提となる文(主張/判断)をつなげて組み立て、結論となる文(主張/判断)を導くことを 推論(inference) と言います。(図1-2) 1-2 “推論”とは 推論では、前提(根拠)から結論までのつながり、話の筋道が重要です。(図1-3) 前提が、結論(言いたいこと)の根拠になっている 前提から結論までのつながりに無理や飛躍がない 図1-3 推論で大事なこと その話の筋道を組み立てたり、話の筋道をチェックしたりするのが、 推論の形 。 そこで活躍するのが、“入門編”で見てきた 論理の言葉 です。 形が整っていれば自動的に「正しい筋道、正しい推論」となるわけではありませんが、形がよくない立論は言っていることが正しくてもよい主張とは言えません。(「「真」と「妥当」」の節参照) 推論の種類と、”実践編”で扱う推論 推論には種類がいくつかあります。(図1-4) 図1-4 演繹と帰納とアブダクション 演繹 (えんえき) 演繹(deduction) とは、ひとつ以上の前提から結論を導き出す推論の形です(図1-4は「前提から結論」をいくつか組み合わせた複合的な形になっています)。 何かを根拠とともに主張する時、正しいと広く受け入れられた事柄に基づいて個別の事例を論じる時、などに使われます。 前提がすべて正しいなら、結論が正しいかどうかは形から判定できます。 帰納 (きのう) 帰納(induction) とは、個別の事例から一般的/普遍的な前提(各事例に共通する規則・法則、性質・特徴など)を導き出す推論の形です。 ソフトウェアのテストで、「画面AでPという操作をしたら故障Xが起こった」「画面Bで操作Pをしたら故障Xが起こった」……「どの画面でも、操作Pをしたら故障Xが起こる(のでは?)」と仮説を立ててテストを広げていくのは帰納的な推論の働きです。 有限個の事例に基づいているため、この推論から導かれる「事例に共通すること」は必ずしも正しいとは限りません(“当てはまらない例外”があり得る)。 アブダクション、レトロダクション アブダクション(abduction)、またはレトロダクション(retroduction) とは、個別の事例から、その事例(結論)に至る前提や理由を導き出す推論の形です。 アブダクション的な推論として、 デバッグ があります(故障から、その故障を引き起こす原因である欠陥を推定する)。また、欠陥の 原因分析 でもこの種の推論が働きます。 この推論から導かれる「前提と当てはまる推論」も、必ずしも正しいとは限りません(デバッグでも、原因を特定したと思ったら違っていた、やり直し。ということは多々ありますね)。 “実践編”で取り扱う推論の種類 “実践編”では、前述のうち演繹的な推論/思考を形成する推論の形を取り扱います。 帰納やアブダクションでも必要になる、思考の基盤です。 演繹的な推論にもいくつか種類がありますが、本連載では「ふたつ以上の前提(主張/判断)から、結論となる主張/判断を導く」形式を主に取り扱います。 「真」と「妥当」 ~正しさの留意点 正しい推論であるためには、ふたつのことに留意する必要があります。(図1-5) 図1-5 真と妥当 「真」であること ……内容の正しさ(真偽) 前提が間違っていたり、結論が間違っていたりしていては、正しい主張とは言えません(当然ですね)。正しい前提に基づいて、正しい結論を導出するものである必要があります(図1-5の上の文が真です)。 「妥当」であること ……話の筋道の正しさ(妥当性) 前提や結論が真でも、適当に(自分に都合よく)理屈をつけるのでなく、 話の筋道が「よい形」をしている 必要があります (図1-5の上の文が妥当です) 。 「よい形」とは: 論理の言葉を適切に(意味と働きに即して)使っていること 文(主張)と文(主張)とのつながりの中で矛盾や飛躍を生じていないこと 真偽も大事だが、話の筋道も大事 前提や結論が正しくても、非妥当な(よい形でない)推論は間違った推論です。 次のa, bどちらも、①②③それぞれは正しいとしても、①②から③を主張することは妥当ではありません。 (a) ①イヌはイヌ科の動物である。②イヌは哺乳類である。∴③イヌ科の動物は哺乳類である。 (b) ①ネコにはしっぽがあるか、またはにゃあと鳴く。②うちのネコはにゃあと鳴く。∴③うちのネコにはしっぽがない。 一方、前提や結論は間違っていても、妥当な(よい形をしている)推論は作れてしまいます。 (c) ①哺乳類は空を飛ぶ。②イヌは哺乳類である。∴③イヌは空を飛ぶ。 (d) ①ネコには縞模様があるか、または単色である。②うちのネコには縞模様がない。∴③うちのネコは単色である。 両方揃って、初めて正しい推論と言えることになります。 内容の真偽はその内容を吟味しないと判断できませんが、筋道の正しさは形から判断できます。本連載で取り上げる「推論の形」はその筋道の正しさを確保する役に立ちます。 なお、「よい形」を作れていない推論や、内容に誤りがある推論の特徴を「誤謬(ごびゅう)」と言います。これらについてはシリーズ後半の記事「気をつけたい落とし穴」で取り上げる予定です。 冒頭の“問題” 「食堂で注文を話し合うPさんQさん」は「「論理的」ってどういう感じのこと?」を感じてもらいたくて考えたもので、考え方の正誤や優劣を論じるものではありません。 Pさんの主張を整理・補足すると、①初めての店では外れのなさを優先して注文する。②唐揚げは大体どの店でもおいしい(から、外れがない/少ない)。③唐揚げ定食を注文する。 となっていて、①と②から③が無理なく出てきます。 Qさんの方はどうでしょうか。 ①初めての店では(その店の「推し」として)「本日のおすすめ」を頼む。②さらに煮魚定食はこの店で一番安い(から、懐に優しい)。③煮魚定食を注文する。 Qさんの主張には、 それが嫌いな食べ物でも頼むの? とか、 「本日のおすすめ」がメニューの中で一番高かったらどうするの? という疑問が生じます。前提①②と結論③の間に飛躍がある感じがします。 (本“問題”は、『論理的思考の技法Ⅰ』を参考にしました) (注:「食事の注文は論理的に考えてなされなければならない」と言っているわけではありません!) (注:どちらの「注文の論理」も、ありだと思います) (注:何にせよ心地よく選んで心地よく食事を楽しみましょう!) クイズ 次の主張は「よい形」をしていると思いますか。 (『例解・論理学入門』を参考にしました) (解答は次回に) 問1 Aさんの性格を考えると、①Aさんはギャンブルに手を出すと破産する。 しかし、②Aさんはギャンブルには手を出さない。 従って、③Aさんは破産しない。 問2 その時代、①家柄がよくて、裕福ならば、誰でも結婚できた。 ②彼の家柄はよかった。 しかし、③結婚できなかった。 従って、④彼は裕福ではなかった。 参考文献 鈴木美佐子 『論理的思考の技法Ⅰ〔第2版〕』法学書院 2013 弓削隆一, 佐々木昭則 『例解・論理学入門』 ミネルヴァ書房 2009 図版に使用した画像の出典 TopeconHeroesダーヤマ, 『分かりやすいプレゼン資料 1秒で伝わるビジネスイラスト集』 インプレス 2016 人物画(シルエット)をお借りしています。 Loose Drawing  人物画をお借りしています。 The post 論理のかたち。推論とは|テストエンジニアのための論理スキル[実践編] first appeared on Sqripts .
こんにちは、エンジニアのタカです。 普段はスクラムマスターや開発者としてプロダクトの開発に関わっています。 今回は、自身が所属する開発チームで起きたコミュニケーションの課題を解決した バーチャルオフィスツール Gatherについて、導入前後でどのようにチームに変化があったのかを紹介したいと思います。 チームのコミュニケーションの課題 開発チームが2023年夏頃に行った振り返りで、特に新しくチームに入ったチームメンバーからコミュニケーションの敷居が高いという意見が上がりました。 チームメンバーはオフィスや遠隔地の自宅などそれぞれ異なる場所で働いており、会話を伴うコミュニケーションツールはSlack(ハドル) とGoogle Meetを使用していました。 これらのツールでは、話す前に「通話いいですか?」などを一度Slackチャンネルに投稿してから行なっており、会話へのアクションが段階を踏むことで気軽に行えないという意見が上がりました。 そこで、解決策の一つとして上がったのがバーチャルオフィスツール ※1 でした。 もちろん、出社時にコミュニケーションを取ることで解決する部分はありますが、遠隔地で勤務しているチームメンバーも含めて常に全員が揃う機会は少なく、今回試すことにしました。 ※1:仮想のオフィス空間 = ワークスペースにチームメンバーがアバターとして表示され会話やチャットを行う。まるでオフィスに居るように人(アバター)の動きが可視化されるのが特徴 Gatherとは バーチャルオフィスツールは数多くありますが、無料プラン ※2 をチームで使って比較検討を行い、最終的に以下のような理由から Gather を使うことに決めました。 操作性 アバター移動の操作性とレスポンスがよく、使っていてストレスが無かった 親しみやすさ ワークスペースが上から見下ろすタイプのドット絵で描かれた2Dで、キャラクターもドット絵で馴染みやすい 筆者を含む2Dゲーム世代(?)のメンバーのウケがとても良かった ※2:この記事を書いている段階ではGatherは最大10名まで無料 Gatherを触ってみての感想 以下、Gatherの導入にあたり設けたチームルールと、主な機能を使ってみての感想になります。 導入したチームルール 定例MTGを含む、全てのチームコミュニケーションはGather内で行う 機密に関わる話、チーム外のメンバーを交えたMTGなどは除く ステータス状態を逐次変更する ステータスはコマンドで変更でき、誰が不在かが分かりやすいため 主な機能の使用感 1. アバターでのコミュニケーション Gatherを選んだ理由の一つでしたが、アバターの操作性、レスポンスがよいです。 またチームメンバーの今の状態が一覧で見れることで「あの人は今誰かと話している」「話しかけて大丈夫そう」など現実のオフィスに近い感覚で状況把握ができるようになりました。 誰かと話して別の人を呼びたい時も、手を振るという機能を使ってすぐに通知が飛ぶので、ストレスなくコミュニケーションを行うことができました。 2. ビデオ通話(多人数、少人数) ビデオ通話の品質は、meetと比較しても特に遜色はありませんでした。MTGルームや各自席周辺などのフォーカスが当たる部分に入ることで、その部分に居るメンバーはシームレスに通話に移行するので使いやすいです。 ただし、人数が増えると、PCスペックや回線によっては、ビデオをONにしたときにややPCが重くなるケースがあったため、その場合はビデオを切ってMTGしてもらうなど対策を行なうことでこの問題は解消されました。 なお、フォーカスの無い場所ではアバター同士を近づけると話せますが、基本的に各自の席周辺や大きなフォーカスエリア(MTGルーム)で話すことが多くなったため、立ち話のように何も無い場所で会話することは少なくなりました。 3. デスクトップアプリ 個人的に、Gatehrはデスクトップアプリがとても使いやすいと感じました。 アプリはミニモードという表示が行え、Gatherからフォーカスを外した時はデスクトップ上に自分のステータスが最小表示されます。このときに誰かが自分の居るフォーカス部分に来ると、ミニモードのままで通話ができます。 常に画面を出しっぱなしにしても良いのですが、集中したいときは気になるので、このモードのおかげでリモートワークのメリットと、オフィスワークのメリットの両方が満たされると思いました。 なお、この状態でキャラクターを動かすことはできないので、MTGルームに行くなどの際は、Gatherアプリを選択してキャラクターを動かします。 4. その他機能 GoogleカレンダーやSlackとの連携、Gatherへの外部アクセス制限、ゲスト招待機能、オフィステンプレートの編集機能などを使用しています。 この中のGoogleカレンダー連携は、予定の数分前にデスクトップに通知を出せるようになるので、MTG参加忘れに役立ちます。 コミュニケーションに起きた変化 Gahterを使い始めてすぐにコミュニケーションの変化を実感しました。そのうち、特に実感したことをいくつかピックアップします。 良い方向に変わったこと 1. コミュニケーションコストの低下 振り返りで課題として上がっていたコミュニケーションの敷居の高さは無事解消されました。 Slackで一言投稿するよりも、話しかけてOKのステータスの人に近寄って呼び出すことは心理的ハードルが低いという意見がありました。 また、アバターだからか誰と誰が話しているかも分かりやすくなり「朝会で報告した問題点について有識者と話していそう」など状況が掴めるようになりました。 2. MTGへのシームレスな移行 MTGをGatherで行うことにより、MeetなどのMTG用ツールの起動が不要になりました。 全員でMTGを行う際は、オフィスのように全員が集まれるエリアに移動するだけでMTGが行えるので、特にストレスなく開始できます。 議事録やチャットもGather上のホワイトボードに記録でき、全体向けに共有が必要な場合はその場ですぐに共有ができるので、プロジェクトで必要なコミュニケーションは、基本的にGather上で動作が完結できます。 気になった点 1. コミュニケーションコスト低下により、作業時間が減るメンバーが出てきた メリットと表裏一体ではありますが、気軽に会話をしやすい環境になったため、特にコアメンバーへは相談や質問でのコミュニケーションコストが生じ、作業時間が減少するという問題が起きました。 設計やレビューなどの必要なコミュニケーションが増えることは良いことですが、本来は自分で解決できるような簡単な質問も増えてしまう傾向が見られました。 リモート、オフィス関係なく基本的なことではありますが、質問する場合のルールを決めたり、優先作業に集中したい場合は応答不可にして貰うルールを設けることを検討しています。 2. リモートメンバーとオフィスメンバーが混在する場合の取り決め オフィスに出社しているメンバー同士ですと、わざわざGather上で話すよりも直接話すことが多いため、リモートメンバーからは状況がつかめなくなります。 弊社はフリーアドレス席のため、固まって仕事をすることはほぼ無いのですが、出社中の場合はステータスを記入してもらうことで状況をリモートメンバーにも明示することを検討しています。 おわりに 今回の内容は以上となります。 バーチャルオフィスツールは初めて使いましたが、結果的にコミュニケーションに対する敷居が格段に下がり、リモートワークにおけるメンバーの満足度が向上しました。 主にリモートワークでコミュニケーションに課題があるチームは一度使ってみる価値はあると感じたので、気になった方はぜひ一度試してみてください。 The post リモートワークのコミュニケーションコストがバーチャルオフィスGatherでグッと下がった話 first appeared on Sqripts .
はじめまして。テストエンジニアのchikaです。 最近はリモートワークも増えチャットツールを導入した企業が多いと思いますが、 チャットツールを使っていて情報を取りこぼしたこと 仕事はこなせているけどもうちょっと効率良く作業できないかな~と思ったこと はありませんか? そんな2つの課題を解決に導いたTeamsの便利機能を実体験を元にご紹介したいと思います。 Microsoft Teamsとは? マイクロソフト社が提供するコミュニケーションツールで、チャットや通話、ビデオ会議といった複数の機能が実装されています。また、Officeアプリと連携してファイルを共有したり編集ができるとても便利なツールです。 便利機能の紹介 チャットの見落とし防止 Teamsを使い始めた当初、いつの間にか色んなグループにメンバー追加されどんどんチャットがきて必要な情報を見落としてしまう始末…とても困っていました。そんな中で見つけたTeams初心者にオススメの機能です。 メッセージの保存機能 重要なチャットや後から読み返したいチャットなど、どのグループチャットからも自分専用の場所に保存することができる機能です。 保存したいメッセージの右上[‥]>「このメッセージを保存する」をクリックすればOKです。 保存したメッセージは、右上の自分アイコンの「保存済み」をクリックすると保存済み一覧が表示され、必要なメッセージのチェック時間を削減することができます。 【補足】チェックし終わったメッセージは「保存」を外しておくと、必要な情報が整理できて 未読の確認機能 検索欄に”/unread”と入力すると、左側のフィードに未読メッセージの一覧が表示されます。  休み明けやリアルタイムにチャットを確認できなかった場合に重宝します。 ※[アクティビティ]>未読のみ のトグルをONにしても同様です。 自分専用チャットによる 作業効率アップ 今まで必要な情報はメモ帳やExcelにまとめていましたが「自分専用のチャット」があることに 気付き、使ってみたらファイルを開いて知りたい情報に行きつくまでのちょっとした手間が省け、 以前より情報収集のスピードがアップしていました。 日常的に使えば使うほど「タイパ (Time Performance)」を実感できる機能です。 自分しか閲覧できないチャットで、自分宛てにメッセージを送信して使用します。 画面左にある「①チャット」をクリックし、固定表示の「②自分の名前(あなた)」をクリック 又は、画面上の検索欄①に自分の名前を入力し「②自分の名前(あなた)」をクリック あとは、通常のチャットと同じようにメッセージを書いて送信すればOKです。 今回はほんの一例をご紹介しますが使い方次第で時短の可能性は広がりますので、是非ご自身で 活用法を探してみて下さい。 リンク先やフォルダの場所一覧 リンク先のURLやフォルダの場所を記載しておくと、探す手間だけでなくチャット毎に整理ができ編集もラクなので便利です。 ※但し、デスクトップのショートカットやブラウザのお気に入りの方が便利な場合もあります 操作/手順の簡易マニュアル化 テストツールの操作やテスト手順は、頻繁に使うものは覚えているものの時々使うものは忘れがちです。そんな手順の一部を抜粋したりポイントを記載(簡易マニュアル化)しておくと、テスト実施時や依頼を受けた際の対応スピードがアップします。また、ExcelやWordの手順書は機能毎にファイルが分かれているケースが多いですが、必要な手順だけチャットに送信しておけばTeamsの検索機能でピンポイントで手順を見つけることもできます。 ※但し、複雑な手順は不向き(ExcelやWordの方が見やすい) メッセージの下書き 誰かにメッセージを送る前に内容を整理したり後で送信したい時など、下書き代わりに使用すると便利です。ファイルとは違い記載するだけで内容が維持されるのも良い点です。 端末間の情報共有 Microsoftアカウントは5つのデバイスまで登録可能なので、自分のアカウントでログインした テスト用端末/事務用端末 のチャットを使って結果(スクリーンショット)を共有できます。今までは不具合チケット起票用のスクリーンショットをテスト用端末から社内メールを使って事務用端末に送付していたので、工程も時間も短縮されました。 注意事項 業務で使用する場合は、セキュリティ上の問題がないかご確認のうえ行って下さい。 上記で紹介したTeamsの便利機能は、他のコミュニケーションツールにも同等の機能があります。   例えば「Slack」でいうと以下になります。 - メッセージの保存機能 ⇒ メッセージのブックマーク機能 - 未読の確認機能 ⇒ [アクティビティ]>未読メッセージ のトグルをON - 自分専用のチャット機能 ⇒ [ダイレクトメッセージ]>自分の名前 (自分) チャット おわりに 今回紹介した機能は簡単に情報の見落とし防止や時短による効率アップが図れると思うので、 皆さんに活用してもらえたら嬉しいです。 以上、最後まで読んでいただきありがとうございました。 The post Teamsで業務効率UP!便利機能の紹介 first appeared on Sqripts .
本連載では、ここまで主に「1人目のQAがやるべきこと」について、経験ベースでお伝えしてきました。 今回は少し視点を変えて、1人目のQAがやるべきではないこと、アンチパターンについてご紹介したいと思います。 やるべきことは組織の状況などによって変化することもありますが、アンチパターンは状況によらずある程度共通する部分がある、と考えているためです。 本記事では、代表的なアンチパターンを4つ説明します。 <1人目QAとしての立ち回り 連載一覧> ※クリックで開きます 【第1回】1人目QAの位置づけと、開発組織へのアプローチの仕方 【第2回】組織に品質保証を浸透させるアプローチ 【第3回】品質保証やQAエンジニアを知ってもらうための取り組み 【第4回】1人目QAのスタートは開発組織の現状把握から。やるべきこと・把握すべきこと。 目の前のタスクに集中しすぎる 一つは、目の前のタスク、「すぐに実施できて達成感が得られそうなタスク」に集中しすぎてしまうことです。 とくに組織にJoinした直後のQAは、できる仕事がたくさんある状態だと思います。 そこで 【第4回】1人目QAのスタートは開発組織の現状把握から。やるべきこと・把握すべきこと。 | Sqripts でご紹介したように組織の現状把握をしつつタスクの取捨選択を行うわけですが、このときに個々のタスク、とくに達成感・「仕事をした感」が得やすいタスクを選び取りがちです。 たとえばリリース後に見つかる不具合が多い開発チームに入っていき、テスト設計・実行やリリース前の探索的テストに注力したとします。もちろんこれ自体は良いことです。しかし、そこでバグを見つけたり開発チームに感謝されたりしながら、1か月2か月と過ごしていったとして、それは1人目QAとしてのミッションに沿っているのでしょうか? 会社として、問題のあるチームに入って立て直してほしいという狙いがあれば、動き方としては良さそうです。しかし、広く会社全体の品質保証のやり方を考えてほしい、といった狙いがある場合はどうでしょうか。 目の前のタスクを行って一定の成果が出ることは良いのですが、ついそこにハマってしまう危険もあります。1人目QAとして期待される動きや成果を考慮したうえで、場合によっては広く組織全体にアプローチするようなやり方が必要かもしれません。 得意なやり方、実績あるやり方に頼りすぎる なんらかの課題に対して、自分の得意なやり方や実績あるやり方を当てはめてしまうというのもよく目にするアンチパターンです。 テスト技術に自信がある、テストプロセスの整備の経験が豊富など、QAエンジニアそれぞれにはなんらかの得意なジャンルや手法があるかと思います。 そして、とくに入社直後のQAの場合は目に見える成果が欲しくなるため、つい自分の得意技で攻めようとしてしまいがちです。しかし、たとえばシステムテストの自動化が得意だからといって、なんでもかんでも自動化によって解決できるわけではありません。 必ずしも得意ではなかったとしても、今自分のいる組織にとって何が必要なのかを見定めるところからスタートするのが良いでしょう。結果として、やるべきことに対して自分のスキルが不足している場合には、社外の有識者を頼ることも一つの選択肢ですし、エンジニア部門のマネージャー等と協力しながら「経験はないけれどもチャレンジしてみる」こともできるかもしれません。 周囲のスムーズな理解を期待してしまう 1人目のQAと周囲の開発者やマネージャーとの間には、物事の見方・捉え方や知識の幅などに多くの違いがあります。とくに1人目として入社した直後のQAと、長く勤めているメンバーとではこの違いが顕著になるでしょう。 QAに限らず、そのロールの1人目として働く場合は「自分がどのような役割なのか」を周囲に理解してもらう必要があります。たとえば、1人目QAの方から「QA=テストしてくれる人、という認識を持たれがち」といった話も伺います。これが誤解である場合、組織におけるQAの位置づけをもっと違ったものとして考えている場合は、適切に伝えていかなければなりません。 ところが、周囲の理解は簡単に得られるものではありません。QAとしての活動をわざわざ邪魔してくる人はいないかもしれませんが、誤解や無知(にQA側からは見える状態)などは必ず発生します。 そのため、開発者やマネージャーはQAのことを知っているはず、一度説明すれば理解してもらえるはず、といった「周囲のスムーズな理解」を期待するのは危険です。 QAの役割や関わり方など、なんらかの情報を組織の中に広めていくということは、思った以上に時間がかかることです。「簡単にはわかってもらえない」「伝わったと思っても伝わっていないことが多い」という前提を持ちつつ、しつこいくらいに伝え続ける動き方が1人目QAには求められます。 独力でなんとかしようとしてしまう QAかどうか、1人目かどうかに関わらず仕事全般に通じるアンチパターンですが、とくに1人目QAの方はハマりがちな傾向にあるように思います。 組織1人目のロールの場合、相談できる相手が居ないか、限られることが多いです。 かつ、1人目QA自身も「プロとして呼ばれてきたわけだから、相談しづらいな・・・」と感じてしまうのかもしれません。 いろいろな組織課題を独力で解決しようと考えても、多くの場合解決できないか、時間がかかりすぎてしまいます。それでは組織にとってもメリットがありません。 私自身1人目QAとして働いて感じたことは、品質への興味を持った方は少なくない、という点です。開発者の中にもテストをうまく・効率的に行いたいと考えている方はいますし、マネージャーの中にも品質向上のために試行錯誤した経験のある方が必ずいます。 そうした方々の取り組みや課題を拾い上げて一緒に解決していくことも、1人目のQAとしての価値です。「自分がなんとかする」という責任感もすばらしいですが、いったん脇に置いて「積極的に周りを巻き込んで一緒になんとかする」という考え方に変えてみるのもよいでしょう。 また、社内に相談相手がいない場合は社外を頼るという方法もあります。 昨今は(私も含めて)カジュアル面談プラットフォームなどを用いて「他社QAと情報交換しましょう!」という場を設けている方もたくさんいます。もちろん社内の情報の扱いには注意が必要ですが、純粋な技術課題・組織運営課題として抽象化したうえで社外の方と話をしてみる、経験談を聞いてみるのも有効です。 1対1の会話でなくとも、社外の勉強会やイベント等に参加して他社事例を聞くことも有効です。勉強会などで「今の自分が抱えている問題にピッタリはまるヒントは得られなかった」という方もいますが、私はそのような都合のよい機会はほぼないと考えています。 そうではなく、普段から勉強会やイベント等に参加をして情報を集めておき、いざ自分がなんらかの課題に直面したときに過去見聞きした情報からヒントを得るものです。 書籍や、Web上に公開されている資料なども含めた意味での「他人の知恵を借りる」ことは常に意識しておきたいですね。 1人だからとタスクや情報を抱え込まないのがポイント 今回は代表的な4つのアンチパターンをご紹介しました。 共通する点としては、1人だからといってタスクや情報を抱え込まないようにすべき、という点です。 1人目のQAは周囲から謎の存在になったり、あるいは「テストしてくれる人」のような固定イメージで見られたりすることがあります。そうならないためにも、自分がどのような役割を担いたいのかや何ができるのか、いま何をしているのかなどを常に発信していきましょう。 連載一覧 【第1回】1人目QAの位置づけと、開発組織へのアプローチの仕方 【第2回】組織に品質保証を浸透させるアプローチ 【第3回】品質保証やQAエンジニアを知ってもらうための取り組み 【第4回】1人目QAのスタートは開発組織の現状把握から。やるべきこと・把握すべきこと。 The post 【第5回】1人目QAアンチパターン first appeared on Sqripts .
金融、公共交通、電力、通信等の社会インフラを支える業界では、その業務に使用されるコンピュータシステムの信頼性を担保するために様々な法規制があります。   人の生命に直接関係するお薬や医療機器を製造する製薬・医療機器業界もその一つです。   本記事では初めて製薬・医療機器業界のコンピュータシステム導入・運用に携わる方々向けに、同業界に適用される法規制の一つである CSV(Computerized System Validation)の基本的な事柄をご紹介します。 製薬業界のコンピュータシステムの特徴 製薬業界でもコンピュータの利用が急速に普及し、従来は人手と紙記録で行われていた多くの作業がコンピュータ化されています。   一方、コンピュータの欠陥による重大事故も発生しており、コンピュータシステムの信頼性と安全性への要求がますます高まっています。   医薬品は生命に直接関係するため、基本的に「不良品ゼロ」が要求されます。このため、医薬品製造者が業務に使用するコンピュータシステムについては「バリデーション」の実施により、管理するデータと出力結果の信頼性確保が要求されています。 「バリデーション」と「CSV」 お薬を作る工場では製造工程、作業手順、製造管理、品質管理等の方法が、製品品質に対して「期待される結果」を与えることを検証し、文書化することが求められています。これは「GMP省令(医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令)」という法令に基づくもので、この検証と文書化のプロセスを「バリデーション」と呼びます。   同様の考え方をコンピュータ化システムについても適用し、各種業務に使用するコンピュータ化システムをバリデーションすることを「コンピュータ化システムバリデーション(CSV)」と呼びます。   ここで「コンピュータ化システム」という言葉は、「コンピュータシステムで統合された工程又は作業、及びコンピュータシステムにより実現される機能を利用する業務プロセス」を指す広い概念です。 CSV と規制対象 CSV はお薬の製品開発、臨床試験、製造、品質保証、流通、販売後安全管理に亘る、製品ライフサイクル全般で使用されるコンピュータ化システムを対象としています。   前章で「GMP省令」という法令を紹介しましたが、製品ライフサイクルの各段階に対応して下記に示す基準が定められており、「GxP」と総称されています。 GLP(Good Laboratory Practice):医薬品の安全性試験の実施に関する基準   GCP(Good Clinical Practice):医薬品の臨床試験に関する基準   GMP(Good Manufacturing Practice):医薬品の製造管理及び品質管理に関する基準   GQP(Good Quality Practice):医薬品の製造販売品質保証に関する基準   GDP(Good Distribution Practice):医薬品の適正流通に関する基準   GVP(Good Vigilance Practice):医薬品の製造販売後安全管理に関する基準   また、これらの基準による規制は日本国内に留まらず、海外でも各国で同等の法令が制定されており、お薬の輸出入を行う場合はそれに従うことが求められています。 CSV の概要と特徴 CSV の基本的な考え方は一般的なコンピュータシステムの検証と同じですが、開発・検証プロセスとその文書化についてガイドラインが制定されている点が特徴です。 CSV の全体像 (図1)に CSV が前提とする開発・検証プロセス全体像と主要作成文書を示します。   ウォーターフォールの V字モデルに沿った開発・検証を行う点では一般的なシステム導入と同じです。   一方で可監査性を目的とした開発・検証文書の整備が重要視されており、システムアセスメントや供給者監査等、第三者的な視点での評価がプロセスに組み込まれています。   (図1)開発・検証プロセスと主要作成文書 開発業務に於ける主要作成文書 (表1)に開発業務に於ける主要作成文書を示します。   要件定義の前提として「システムアセスメント」の実施が規定されています。システムアセスメントの結果はバリデーション計画にも反映されます。 (表1)開発業務の主な作成文書 検証業務に於ける主要作成文書 (表2)に検証業務に於ける主要作成文書を示します。   「供給者監査」の実施が規定されており、システム開発ベンダーが CSV に関する充分な知識と経験を保有し、定められた品質管理システムを実践していることを、発注側が監査します。 (表2)検証業務の主な作成文書 プロジェクト管理上の考慮点(ケーススタディ) CSV 対象プロジェクトでは、開発・検証段階での文書作成・管理に要するリードタイムと工数が、プロジェクトの計画・管理に大きな影響を及ぼします。   本章では 文書作成・管理視点から見た課題と対応事例を、筆者の経験からケーススタディ的にご紹介します。   CSV 対象システム構築プロジェクトで筆者が特に重要と考える ①:文書作成・管理目的の理解、②:文書体系整備、③:文書管理、④:変更管理の事例です。   尚、これらの事例は筆者が製薬企業側の PM として参画した、複数の導入プロジェクトに基づくものです。 ①:文書作成・管理目的の理解 筆者が最初の CSV 対象プロジェクトを経験するまでは、開発・検証文書は、開発者⇔システムユーザ間の仕様合意・品質記録と、本番運用開始後の保守を目的として作成・管理するという理解でした。   CSV 対象システムでは上記に加え、お薬の製品品質に関する適切なリスク管理が行われていることを、ユーザ企業の品質保証部門や外部査察・監査に対して説明できる文書であることが要求されます。   このため、説明責任視点でも納得性のある文書体系・文書管理プロセスの整備・運用に多くの時間を割いてきました。   一例として、システム構築プロジェクトと並行して CSV 文書体系・文書管理プロセス整備をゼロから行った、Aプロジェクトの事例をご紹介します。   CSV 文書は、製薬企業の品質保証部門が承認した基準書や手順書に従って作成・管理される必要があります。   国内では 2012 年度から CSV 規制が適用になったこともあり、その企業では CSV に関する基準書や手順書が無い状態でしたので、先ずはこれを整備する必要がありました。   しかし、Aプロジェクトの計画時点ではこれらのタスクは想定していなかったため、途中で品質保証部門を始めとする関係各部門を巻き込んで、サブプロジェクトとして対応しました。   社内にはノウハウが無かったので、早期から CSV を実施している外資系製薬企業に見学に行ったり、CSV 経験・ノウハウを持つ開発ベンダーからコンサルティングを受けたりして、何とか形だけは整備して本番運用を開始しましたが、今振り返ると突っ込みどころ満載の突貫工事だったと思います。   ②:文書体系整備   (図1)に示した各文書は内容の整合性が担保されていることが CSV の大前提となります。 Bプロジェクトの設計仕様書(DS)レビューで、に品質保証部門のレビュアーから「要求仕様書(URS)の要求項目が漏れなく DS に反映されていることは確認できていますか?」という指摘がありました。   Bプロジェクトでは、それまでの文書レビューは個別文書毎の内容レビューが中心でした。異なる開発工程の文書間で整合性を網羅的に確認する、という発想自体が無かったので早速対応に追われました。   対策として、要求仕様(URS) ⇔ 機能仕様(FS) ⇔ 設計書(DS)間相互の記述内容に過不足や不整合が無いことを確認する「トレーサビリティマトリクス」を作成しました。  幸い URS ⇔ FS ⇔ DS の各文書と項目には体系的な ID が採番されていたので、ID を紐付けることで文書間のトレーサビリティを可視化することができました。   もしこれらの文書が整合性確認を意識せずに作成されていたとしたら、最悪の場合は URS や FS の体裁修正まで手戻りが発生することも考えると、初期段階での文書体系整備の重要性を認識した一コマでした。   これ以降、開発文書の成果物にトレーサビリティマトリクスを入れたプロジェクト計画を作るように留意しました。 ③:文書管理  CSV 関連文書は文書間の整合性維持や、規定通りの承認経路によるタイムリーな承認が必要となります。    加えて本番運用開始後も査察対応等のために、監査証跡の記録や目的文書への迅速なアクセスが必要となります。   このため、文書管理に要する工数とリードタイムが、プロジェクトリソースとスケジュールに大きな影響を与える場合があります。   Cプロジェクトでは設計・開発工程のスケジュールが遅延して、受入テスト・CSV のスケジュールが圧迫されている状態でした。   対策の一つとして、検証文書の承認リードタイムを短縮することで CSV 全体のリードタイムを短縮する取組を進めました。   具体的には、GxP 文書の管理目的で運用していた文書管理システムと承認プロセスをそのまま流用して、Cプロジェクトの CSV 文書管理を行うことにしました。   文書管理システムを活用し、承認者が出張等で不在の際にも社外での承認を可能にしたり、承認プロセスを可視化して遅滞している承認を督促したりすることにより、スケジュールを遵守することができました。   又、副次的な効果として、文書の変更管理や発行管理にも同システムを活用して、外部監査や査察対応の際にもアカウンタビリティの高い管理ができるようになったと思います。    一方、紙と印鑑で承認していた時のようなバックデート対応等は難しくなるため、例外的な処理を含めた業務ルール設計とそれを遵守する教育や文化の醸成にも配慮しました。    これ以外にも 品質保証部門が承認した手順書に従って各文書が作成されていること   必要な職責のレビューと承認が全て完了していること   ウォーターフォール開発の場合は各文書承認日付の前後関係に矛盾がないこと   等々、一般のプロジェクトでは後回しになりがちなことが、CSV 対象プロジェクトでは大きな問題になることがあるので、計画段階で管理タスクを可視化して確実に実施することが必要です。 ④:変更管理  Dプロジェクトはその企業で初めての MES(工場の製造実行システム)導入であったため、機能設計書(FS)の確定が遅れていました。加えて開発・単体テスト段階になっても仕様変更や追加が多発したため、変更管理手続きの煩雑さと手間が課題になっていました。    当初、Dプロジェクトでは品質保証部門が制定・運用する、GxP の変更管理プロセスを準用していました。    このプロセスはお薬の製造工程変更や標準作業手順変更のような、製品品質に直接影響する変更を主として想定しており、変更理由と必要性評価、影響内容と範囲、品質リスク評価、変更許可理由 等を全て規定の様式で文書化して残すことが求められるものでした。    しかしシステム開発の場面では、明らかに製品品質には影響しない仕様変更や機能追加も多く、煩雑な変更管理プロセスが形骸化したり、遵守されない状況が発生していました。加えて、変更管理文書の査閲・承認がボトルネックとなり、開発工程のスケジュールにも影響が出ていました。    対策として、変更申請時に製品品質への影響リスクを Dプロジェクト内で事前評価する手順を設けました。  低リスクのものについては一般的なシステム開発の変更管理プロセスを適用し、中・高リスクの案件についてのみ、GxP の変更管理プロセスを適用するようにしたのです。    又、GxP の変更管理プロセスの中でも、リスクが低い変更案件は手続きや承認レベルを簡素化するルールを適用することで、手続きの簡素化・迅速化とリスク低減を両立しました。 まとめ  製薬業界でコンピュータ化システムを導入する場合に必要となる CSV について、概要をご紹介しました。    CSV は法令による規制ですので正しく実施して、査察や監査にも耐えられるシステム構築や運用が必須です。    このためにはプロジェクト計画段階で、一般的なシステム構築プロジェクトに比べて追加で必要となる文書作成・管理のリードタイムと工数を織り込んでおくことがポイントです。    プロジェクト体制面では品質保証部門(QA部門)の参画が必須なので、早い段階から巻き込んで良い関係を築き、二人三脚で進めることが成功要因の一つです。    開発ベンダーについては、CSV 経験の無いベンダーでは要求される各種事項への適切な対応が難しいと思います。逆に経験豊富な開発ベンダーからは、効率的な CSV 実施のアドバイスや他社事例等の有益な情報提供が期待できるため、ベンダー選定はプロジェクトの成否を分ける大きなポイントとなります。    最後までお読み頂き、ありがとうございました。    本記事が製薬・医療機器業界の GxP システム構築に携わる皆様のお役に立てますと嬉しく思います。 Appendix 参考となるサイト など 厚生労働省/コンピュータ化システム適正管理ガイドライン 国内での CSV 実施要領の基準となるガイドライン文書です。 GMP Platform CSV に留まらず、医薬品の製造や品質管理を総合的にカバーする情報発信サイトです。   (株)イーコンプライアンス 医薬品、医療機器業界を中心に、当局規制内容の解説や対応方法の情報が充実しています。 用語説明 GMP 省令: 医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令   URS(User Requirement Specification): 指定されたコンピュータ化システムに関する機能上の要求仕様が記載された文書   FS(Functional Specification): 要求仕様書に記載された要求仕様に対応する、より具体的な機能が記載された文書   DS(Design Specification): 機能仕様に記載された具体的な機能を実現するコンピュータ化システムを作成するための詳細仕様が記載された文書。   DQ(Design Qualification): 設計時適格性評価。要求仕様書に記載された要求事項が、機能仕様書、設計仕様書等に正しく反映されていることを確認し文書化すること。   IQ(Installation Qualification): 据付時適格性評価。コンピュータ化システムが、設計仕様等に記載されたとおりに据え付けられ、プログラムがインストールされたことを確認し、文書化すること。   OQ(Operational Qualification): 運転時適格性評価。コンピュータ化システムが、運転時において、機能仕様等に示された機能及び性能を発揮することを確認し文書化すること。 PQ(Performance Qualification): 性能適格性評価。コンピュータ化システムが稼働時において、要求仕様等に記載されたとおりに機能し、性能を発揮して運転できることを確認し、文書化すること。 The post 製薬・医療機器業界のCSV入門|Computerized System Validation first appeared on Sqripts .
本連載ではプロジェクトマネジメントの全体像とプロジェクトを成功させる上で最低限抑えるべき知識と技術はもちろん、プロジェクトを炎上させないための技術やコツをお伝えしたいと思っています。 みなさんのプロジェクトが今以上に充実し、笑顔でプロジェクト終結を迎えられるよう一緒に学んでいきましょう。 第7回となる今回のテーマは前回に続き「スケジュールマネジメント」です。 後編となる今回は、スケジュールの作成と作成したスケジュールをどのように使ってマネジメントしていくかにフォーカスします。 < プロジェクトマネジメント成功の技術 連載一覧> ※クリックで開きます 【第1回】プロジェクトマネジメントとは何か?  [連載初回全文公開中:Sqripts会員以外の方も全文お読みいただけます] 【第2回】プロジェクトマネージャーの役割とは? 【第3回】ステークホルダーマネジメントの重要性と進め方 【第4回】プロジェクトの統合マネジメント、7つのプロセス 【第5回】プロジェクトにおけるスコープマネジメント、6つのステップ 【第6回】WBSだけでスケジュールはできない!正しいスケジュールの導き方[前編] 【第7回】WBSだけでスケジュールはできない!正しいスケジュールの導き方[後編] 前回のおさらい 【第6回】WBSだけでスケジュールはできない!正しいスケジュールの導き方[前編] 1)スケジュールマネジメントとは 2)スケジュール作成に必要な準備・検討   ・アクティビティを定義する:WBSで要素分解する   ・作業の依存関係を確認して順序を決める:アクティビティの順序設定をする   ・アクティビティ所要期間(工数と時間)を見積もる スケジュールの作成 1) クリティカルパスを使ってスケジュールを考える スケジュールを作成する技法は幾つもありますが、クリティカルパスメソッドを押さえておきましょう。 クリティカルパスメソッド( CPM:Critical Path Method )は、プロジェクトを完了させるために実行しなければならないタスクを特定する技法です。クリティカルパスとは、プロジェクトの全工程を最短時間で完了するための作業経路で、重要な作業を特定することでスケジュールとその柔軟性も判断することができます。プロジェクトは細かなタスクの集合体であり、その一連のタスクを連ねた時に「最も時間のかかる経路」をクリティカルパスと言います。 クリティカルパス=最長の重要タスクですから、ここに遅れがでると後続に影響がでてプロセス全体も遅延する為、スケジュールの作成においてクリティカルパスを特定しておくことはとても重要です。 プロジェクトマネジメントの資格試験などではクリティカルパスの求め方などが出題されますが、今はプロジェクト管理ツールなどで比較的簡単に求めることができるでしょう。みなさんにはスケジュール作成への活かし方やその必要性について感じていただければまずはOKです。 Wiki: クリティカルパス法 2) スケジュール作成のアウトプット 計画したスケジュールは整理記載して、その後のマネジメントとプロジェクト活動に使用しましょう。スケジュールを表現する形式は様々ありますが、以下のようなアウトプットは最低限作成しましょう。 ・ガントチャート     :アクティビティの開始日、終了日を横軸で記した工程表 ・マイルストーン     :主要な成果物に関わる予定や終了日、外部との重要なインターフェイスなどを記載管理する ・プロジェクトカレンダー :稼働日、非稼働日、納品日、シフト、特別なイベントなどを記載したプロジェクト専用カレンダー 3) ガントチャート ガントチャート( GANTT )はみなさんに馴染みあるツールではないでしょうか(PMBOKではバーチャートと呼びます)。プロジェクト活動の中でその進捗を管理するためにガントチャートは高い頻度で活用されます。 スケジュールを作成するためにアクティビティを整理する時にWBSを作成しましたが、このWBSはガントチャートに進化させることができます。WBSを横90度に回転させてみましょう。 するとWBSの各階層がガントチャートの「成果物、要素成果物、活動タスク(アクティビティ)」になりますね。必要な情報、特にタスクの開始日と終了日を設定して時間の概念と担当者を加えれば、最もシンプルなガントチャートができあがります。 4) スケジュール作成時にできる「転ばぬ先の杖」 スケジュールが作成できた時点で「思ったような期間にスケジュールが収まらない」、「要求されているリリース日ぎりぎりになりそうで不安が残る」という現実を見て重い気持ちになるはずです。不安を抱えた計画を実行しても良いことはありません、この時点でできることはなんでしょうか? ①減らせる作業はないだろうか? 例えばAという機能は実装しなくても、すでに存在するBという運用を使えばすむのでないか?というように、改めて計画を見直してみましょう。また役割分担を変更することで、例えば「CさんはAという機能実装するために事前に仕様書の読み込み時間が必要。一方、Dさんはすでにその仕様書を読んでいると聞いている。作業を交代すればその分の時間が削減できそうだ」ということもあるでしょう。当たり前を見直して、少しでも作業を減らせるポイントを見つけましょう。 ②人を増やせないだろうか? 追加人員を投入して期間を圧縮する方法を「クラッシング」といいます。追加分のコストとトレードオフ(コスト増加)になるのですが「お金がかかってもスケジュールが短縮されれば」と考えて実施されるケースも少なくありません。基本的には人を増やせば所要時間の短縮につながりますが、事前の引き継ぎや作業にあたる為の知識を得る必要がある場合、すぐに期待するパフォーマンスや短縮効果が得られないことも理解しておきましょう。 ③手がつけられるところからはじめる? 前後関係(FS)の作業を並行して実施することで期間を圧縮する方法を「ファストトラッキング」といいます。例えばAチームの作業と後続開始のBチームの作業には数日の待機期間があるが、待機せず同じ時期に作業を行えば待機期間が削減できます。ただし、無理な前倒しには注意してください。例えば「要件定義前に開発を始めて、要件が変わったので開発が無駄になった」というように手戻りリスクがあるからです。 ④メンバ変更はできるだろうか? 「チームにはAさんがアサインされているが、Bさんの方が経験豊富で同じタスクを数倍早く完了できると考えられる。交渉してAさんとBさんを交代してもらうことはできないだろうか?」というように、スキルと生産性が高い要員を引き入れたり交代したりすることも一つの方法です。日頃からメンバのスキルセットへ関心を持っておくことも重要です。 ⑤プロジェクトスコープの削減はできないだろうか? どうしても要求スケジュール内に収まらない時の手段として、スコープ自体を調整することも選択肢に入れましょう。その際は必ず承認が必要です。 スケジュールをコントロールする スケジュールは作成してからがスタートであり本番です。プロジェクトは絶えず変化するので、常に見守りながら変化に即してスケジュール見直したり修正していくものです。計画時点からの変化、要求変更やシステム問題、体調不良での要員離脱など、必ずスケジュールを修正しなければならない問題は起こります。「なんでスケジュール通りに行かないんだ!」ではなくスケジュール通りに行かないもの、さあどうしようか、と思える心構えと備えをしておきましょう。 1) スケジュールをコントロールするために とはいっても、できれば計画通りにコトが運んで欲しい…と思うのも当然です。 まずは常にプロジェクトスケジュールと「現在の状態」の確認を行うこと スケジュールに変更を来しそうな要因へ事前に働きかけ、その芽を摘むこと スケジュール変更が必要か常に確認する 変更発生時(変更発生が必要と思われた時)にはその影響をを測定して、速やかに変更を適用すること 2) PMは常に自分の「予備(バッファ)」を持っておく 前述の通り、どれだけ準備計画しても、必ずスケジュールを変更しなくてはならないことは起こります。起こるとわかっていることですから、備えを計画しておくこともできますね。 計画通りにいかないというのはスケジュールが伸びる(増加する)ことです。この増加に対して「予備として備えておいた期間を充て」ることで余裕を持たせることができます。ではどれぐらいの予備を想定しておけばいいかというと、これは概ね10%程度が適当だと言われています。もちろんみなさんの経験から10%を前後する場合もあると思いますが、大規模プロジェクトや難易度の高いプロジェクトでは10%より多めに設定するとよいでしょう。 3) 打ち手は「クリティカルバス上」でなければならない クリティカルパス=最長の重要タスクであり、ここに遅れがでると後続に影響がでてプロセス全体も遅延しますね?スケジュールにおける準備や打ち手は常にクリティカルパス上に意識を向けて、クリティカルパス上に施さなければなりません。例えば、リーダーや責任者は「クリティカルパス上の作業を担当しない」のが原則です。なぜならリーダーはチームメンバのマネジメントや監督も必要であり、十分にクリティカルパス上の「タスク」にリソースを投入できないリスクが考えられます。またパス上に「優秀なエンジニアや担当者を配置する(※経験不足の人員をアサインしない)」といった工夫(打ち手)もあるでしょう。当たり前ですが他の経路(クリティカルパス以外)に人員やコストを投入しても、意味がないとは言えませんがスケジュール短縮はできませんね。 また注意として「クリティカルパスに打ち手を施し期間短縮すると、新しいクリティカルが生まれる(生まれる可能性)」ことになります。「今の」クリティカルパスがどこにあるのか、常に追いかけてコントロールするようにしましょう! 予備(バッファ)の注意ポイント ①「個別のアクティビティに対してバッファを持たない」ということです。なぜならアクティビティの正確な対応期間がわからなくなり管理不能に陥るからです。あくまでプロジェクト全体又は設計・開発・テストなど工程の最後に対して予備期間を設けて、必要に応じて適応いくようにしてください。 ②学生症候群やパーキンソンの法則という言葉を聞いたことはありますか?簡単に言えば、人は「時間」や「資源」の余裕がある(余裕があるとわかる)とその余裕を残さず使ってしまう、というものです。(①)にあるように、タスクにバッファを置くと計画上は目に見えて(バレて)しまい、メンバに使われてしまう可能性が高くなります。そうすると折角捻出した予備も水の泡です。ですのでメンバに見えないようにPMだけがバッファを持つこと(バレないように後まで隠しておくこと)がコツです。 さいごに 2回に分けてスケジュールを作成する為の準備となるWBSでの要素分解、アクティビティの順序や見積もり方法、スケジュール作成、そのマネジメント方法を学びました。納得できるようなケジュールを作成することがプロジェクトの成功に直結します。 次回のテーマは「コストマネジメント」です、予算オーバーを防ぐ計画策定と管理方法を整理していきましょう。 連載一覧 【第1回】プロジェクトマネジメントとは何か? [連載初回全文公開中] 【第2回】プロジェクトマネージャーの役割とは? 【第3回】ステークホルダーマネジメントの重要性と進め方 【第4回】プロジェクトの統合マネジメント、7つのプロセス 【第5回】プロジェクトにおけるスコープマネジメント、6つのステップ 【第6回】WBSだけでスケジュールはできない!正しいスケジュールの導き方[前編] 【第7回】WBSだけでスケジュールはできない!正しいスケジュールの導き方[後編] The post 【第7回】WBSだけでスケジュールはできない!正しいスケジュールの導き方[後編] first appeared on Sqripts .
こんにちは、AGESTでエンジニアをしているタカです。 普段はプロジェクトのマネジメントや開発者としてプロダクトの開発に関わっています。 以前投稿した Notionでプロダクトバックログを管理するビューを作成する の記事の最後に触れた NotionのGitHubインテグレーション機能 と、その機能を活用した自分たちのチームのブランチとプルリクエストの運用フローを紹介します。 Notionでプロダクトバックログを管理するビューを作成する NotionのGitHubインテグレーション機能とは Integrate GitHub – Notion Help Center NotionのGitHubインテグレーションは、NotionとGitHubを接続し、GitHubのプルリクエスト (PR)とNotionのページに紐づける機能です。 機能としてはシンプルで、連携したGitHubのリポジトリにあるプルリクエストを自動または手動でNotionのページのプロパティとして表示するものになります。 ただ単に表示するだけではなく、プルリクエストのステータス(Open、Merged)が自動で反映されるので、Notionからプルリクエストの状態を即座に確認できるというメリットもあります。 なお、GitHubとNotionの連携設定は 公式のヘルプ を参照してください。両サービスの権限があれば設定は簡単に行えます。 プルリクエストの紐付け方法 紐付け(リンク)方法は下記のステップで行えます。 1. NotionのページにIDプロパティを追加する 2. 外部接続 GitHubプルリクエストプロパティを追加する。 1. ステータスプロパティがある場合、そちらとプルリクエストステータスの連携設定も可能 3. プルリクエストを紐づける 1. 手動の場合、プルリクエストのURLをプロパティに貼り付ける 2. 自動の場合、プルリクエストのタイトルにID名称(キャプチャの場合SBI-976)を追加する。 ステップ1 ステップ1 ステップ1 ステップ2 ステップ2 ステップ2 ステップ3 手動 ステップ3 手動 ステップ3 手動 チームで導入した運用ルール この機能をベースに直近の開発ではブランチとプルリクエストの運用方法を見直しました。 ブランチ 自分たちのチームのブランチ運用は git-flow を採用しています。 このフローにおいて機能改修を行うブランチ feature/ ︎ ︎の名称を feature/PBI-⚪︎⚪︎ としました。 意図としては、プロダクトバックログ(PBI)ごとになるべく1つのブランチで作業することにして、どのような改修作業を行うかを明確にしたいためとなります。 なお、hotfixによる急ぎの対応では、このルールの限りではありません。 プルリクエスト こちらのルールでは、ブランチ名称を踏まえ、 developのブランチに出すプルリクエストのタイトルには、必ず PBI のIDプロパティを含める というルールにしました。 PBIをタイトルに含めることで、連携機能により、自動でNotion側のPBIにプルリクエストが反映されます。これにより、コードの修正が必要なPBIを受け入れ完了にする際に、自動反映されたプルリクエストがMergedの状態であるかを確認することも出来るようになりました。 なお、ブランチのルールには沿わないですが、細かい修正を行う際に、複数のPBIを1つのプルリクエストに紐付ける場合は、そのタイトルに全ての関連PBIのIDを含めることで、それぞれに自動的に紐付けが行われます。 導入してみて感じたメリット 本ルールを導入して分かったメリットは作業をした内容が可視化されることでした。 開発担当者にしてみれば、自分の作業内容を プロダクトオーナーやQA担当者をはじめ、チーム内に共有できますし、要件に対してどのような修正を行ったかも一目でわかるようになりました。 また、レビュアーから見ても、GitHubのプルリクエストをすぐ見れる導線が増え、ブランチやプルリクエストにPBIのIDをつけることで、1ブランチで複数のPBIの作業をすることが少なくなり、1回のレビューの量が減るメリットにもなりました。 おわりに 今回の内容は以上となります。 運用負荷がほぼゼロとうこともあり、今回設けたルールは自然とチームに受け入れられました。 GitHubとNotionの連携機能を使うことで無理なくバックログとプルリクエストを紐付けて可視化ができるので、プルリクエスト名を統一したい、バックログからプルリクエストを辿りたいなどで困っているチームのは、ぜひ一度試してみてください。 関連記事 Notionでプロダクトバックログを管理するビューを作成する The post GitHubプルリクエストをNotionで管理:効率的なブランチとプルリクエスト運用のガイド first appeared on Sqripts .
こんにちは。Q4Aと申します。 私はテストエンジニアとして、長らくお客様常駐で業務した後、ここ数年は現場を離れて部門管理を担当しています。現場時代でも担当案件の状況説明やリリース判定時に、品質の良し悪しについて説明したり考えたりするシチュエーションは多々ありましたが、今も商談の場でお客様と話をしていると、やはり品質の良し悪しについては凄く気にされています。 言葉としてはポピュラーですが、ひとくちに品質と言ってもいろいろな視点があります。今回はそんな話をしたいと思います。 品質が良いってどういうこと? 「皆さん品質が良いってどういうことだとお考えですか?」 私は部門内の新人研修でよくこの質問をするのですが、一般的なECサイトを例に考えてみましょう。 面白いことに回答は多岐にわたります。 「機能が充実している」 「レスポンスが早い」 「使い勝手がよい」 いろいろな意見が挙がりますが、 はい、全部正解です。 所謂ひとつのワインバーグ的な有名な決め言葉ですが、 「品質とは誰かにとっての価値である」 ワインバーグ と言われるように、品質にはいろいろな視点があるのです。 そのため我々テストエンジニアは、様々な視点でお客様やユーザーの求める品質を考えてテストする必要があります。機能テストや性能テスト、セキュリティ診断等、お客様から直接指定のご依頼がある場合はよいですが、大規模プロジェクトや社会性の高い製品の場合は、あらゆる視点の品質を考慮しなくてはいけません。規模の小さい製品でも、機能テスト要求の中にユーザーの操作性や他ソフトとの共存動作など見えないニーズも隠れていたりします。 ただ、このように様々な視点を一から全部考えるのは大変ですよね。そんなあなたのために先人の知恵があります。それらは品質モデルというもので体系的にまとめられているのです。 ISO/IEC 25000 シリーズ(SQuaREシリーズ) 品質モデルとは、ソフトウェアの品質を確保するのに必要な特性をモデルとして定義したものです。国際規格であるISO/IEC 9126が長らく重用されてきましたので、9126の数字を聞いたことがある人は多いと思います。その後、ソフトウェア技術の進化や利用形態の多様化など様々な要因を経て再編され、現在はISO/IEC 25000 シリーズとして整備されています。 ISO/IEC 25000 シリーズは、システムおよびソフトウェア製品の品質要求と評価に関して規定している国際規格「Systems and Software Engineering – Systems and Software Quality Requirements and Evaluation」の頭文字を取って、SQuaREシリーズとも呼ばれています。SQuaREシリーズでは「製品品質モデル」「利用時の品質モデル」「データ品質モデル」と3つのモデルを定義しています。私たちに馴染み深い製品品質モデルで説明すると(図1参照)、8つの品質特性と31の品質副特性で構成されています。 図1)出典: IPA「つながる世界のソフトウェア品質ガイド」 これらの特性が、冒頭で述べたいろいろな視点で品質を考える時の着眼であり観点となるのです。 例えば「機能適合性」の副特性「機能正確性」では、機能が期待どおりの処理をしているかやデータ出力しているかが確認の観点になります。そのため機能テストを実施して動作を確認します。 「性能効率性」の副特性「資源効率性」では、システムが利用する資源の量が要求を満たしているかが確認の観点になります。そのため性能テストを実施してメモリ使用量やCPU使用率などを確認します。 このようにSQuaREシリーズを利用すれば、品質を考えるときの視点が品質特性や品質副特性として網羅されているので、様々な視点/切り口で漏れなく品質やテストを考えていくことが出来ます。この点が品質モデルを利用する一番のメリットだと私は考えています。 もう1つのメリットとしては、SQuaREシリーズは国際規格なのでステークホルダーと共通の認識のもと話をすることができる点にあります。文化や立場の違い、異なる基準で品質を評価しようとすると混乱が生じるので、合意形成するにも便利だと思います。 いともたやすく使える?品質モデル・品質特性の利用方法 ここからは私の経験事例も交えて、品質モデル・品質特性の利用方法をご紹介します。 品質モデル・品質特性は、対象システムやサービスに対して、各品質特性・品質副特性ごとに品質目標や評価基準を定めて、要求を満たしているかリリース前までに評価するといった使われ方が最もポピュラーかと思います。特に非機能要件はおざなりにされがちなので、きちんと定めておくことが重要です。 品質特性ごとにテスト観点を定義 私が以前参画していたあるプロジェクトでは、そこからさらに一歩踏み込んで、各品質特性・品質副特性ごとにテスト観点を定義して共有していました。かなり大規模なプロジェクトで、多人数でテストしていたのですが、担当者や担当チームによるテスト品質のバラつきが課題になっていました。品質特性ごとにテスト観点を定義することで、一定水準で網羅的なテスト品質を確保することが出来ました。 ただ注意点としては、共有したテスト観点はあくまで基準であり、きっかけであり、製品や機能によってはそこからさらにテスト観点を追加する必要があることです。「定義した観点だけテストしていればいい訳ではない」と考え続けることが重要だと思います。 探索的テストのチャーター検討に利用 もう1つ身近な事例を挙げますと、探索的テストのテストチャーターを考える際に、品質特性をベースに考えたことがありました。 例えば「性能効率性」の副特性「容量満足性」の観点で、各機能のデータ保存時における出力先容量不足時のエラー挙動を確認したり・・・ 「使用性」の副特性「ユーザーエラー防止性」の観点で、各入力フォームに誤った入力のまま登録エラーになった際に、入力済の正しいデータを保持しているか各登録画面で確認したり・・・ このように品質特性は、ちょっとしたテスト観点の検討のきっかけとしても利用することが出来ます。 そうはいっても、JSTQBの試験などで言葉は知ってるけど、品質モデルや品質特性の中身を詳しくはよく知らない。文献見ても小難しいことが書いてあるし、という方も多くいらっしゃるのではないでしょうか。 そんなあなたに「つながる世界のソフトウェア品質ガイド」ー! SQuaREシリーズについては、 IPA (独立行政法人 情報処理推進機構)が発行している 「つながる世界のソフトウェア品質ガイド」 を参照することをお勧めします。 1つ1つの品質特性、品質副特性に対し、比較的分かりやすく説明してあります。例えば「使用性」の副特性「適切度認識性」と言われてもよく分かりませんが「製品又はシステムが利用者のニーズに適切であるかどうかを利用者が認識できる度合い。」と説明があると理解できます(図2参照)。 図2)出典: IPA「つながる世界のソフトウェア品質ガイド」 ただしこの要求を満たしているか確認するためにどのようにテストするかはまた別問題で難しいです。同ガイドには、各品質副特性の品質測定量も記載されていますので、興味のある方は参考にしてください。 最後に同ガイドの特徴をお伝えしておくと、PDF216ページで読み応え十分というところです。もう京極夏彦先生の小説くらい長いです。ですので私は必要な時に必要な箇所だけ確認する使い方をしています。 また、冒頭の「第1章 あらためて品質を考える背景」などは、読み物としても非常に面白いです。発行は2015年と古いものの、IoT時代におけるテストの重要性を改めて再確認させられ、テストエンジニアとしてのモチベーションを高めるのにも最適です。 まとめ さて、ここまで品質モデル・品質特性について経験事例も交えてお話してきました。品質にはいろいろな視点が求められるため、ソフトウェアの品質モデル・品質特性を下敷きに考えるとよいと思います。 いろいろな視点の品質を網羅的に確認することができる 国際規格なのでステークホルダーと共通の認識のもと話をすることができる 学ぶにも使うにもよい体系的にまとめられたガイドもあるので、ぜひ使ってみてはいかがでしょうか。 最後までお読みいただきありがとうございました。 >「ありがとう」それしか言う言葉がみつからない・・・ The post いともたやすく使える品質特性ッ! first appeared on Sqripts .
みなさんこんにちは、マッシュです。 今回、eKYCのテストを行う際に使用可能なテストデータの作成方法について紹介していきたいと思います。 はじめに eKYCとは electronic Know Your Customer の略で、免許証やマイナンバーカード、本人のセルフィー撮影など、本人確認が必要な手続きを オンライン上 で行う仕組みのことです。 ※オフラインで行う本人確認はKYC(Know Your Customer) ※ eKYCとは(Wikipedia) eKYCは口座開設やクレジットカードの発行等で使用されているため、みなさんの中にも実際に使ったことのある方は多いのではないでしょうか。では、eKYCを利用した時のロケーションは同じだったでしょうか。部屋の明るさ、照明との距離等、様々な違いがあったはずです。 エンドユーザがシステムを利用するロケーションが異なるなら、その点も考慮したテストデータを使用してテストを行うべきです。そこで、私がこれまでに行ったeKYCのテストで使用したテストデータの一部を紹介していきたいと思います。 テストデータの事例 それではさっそく、eKYCのテストで活用できるテストデータの紹介をしていきます。 光量、光源のテストデータ 光量を調整可能な光源を使用して、本人確認書類の明るさを調整し、上限と下限の光の許容値を超えた場合の動作を確認します。券面に直接光を当てないように注意し、本人確認書類の周囲の明るさを調整できるように環境を構築します。 強い光や弱い光を照射し、本人確認書類の表示物の読み取りやすさを変化させます。これにより、「読み取れない」または「読み取り時にエラーが発生する」といった結果を得ることができます。 また、光量を数値化して調整可能な光源を用意するか、光量を計測する照度計を用いることで、テスト条件を定量的に示すことが可能となります。 上記と同様の方法で、色温度の異なる光源(電球色、白色、昼光色など)を使用することで、本人確認書類を読み取れない色温度がないかを探ることができます。 背景のテストデータ 本人確認書類を読み取る際の背景を変化させます。本人確認書類の券面と同色または類似色、デザインイラスト系、布、木目、光を吸収することを想定した黒一色の背景など、ユーザがeKYCを利用する際のロケーションをイメージしながら様々な背景を準備します。 用意した背景の上に本人確認書類を配置し、本人確認書類と背景の境目を不明瞭にすることで、「読み取れない」、「読み取りづらい」といった結果が出ないかを探ります。光源や照度など、背景以外の要素は一定のものとして、背景の影響を明確に区別するために注意します。 白とびのテストデータ 高輝度のライトなどを使用して、光を本人確認書類の一部にピンポイントで照射し、白飛びを起こした状態で撮影を行います。 住所や名前などの文字部分や顔写真など、白飛びを発生させる箇所や面積を変化させながら、本人確認書類の撮影を行います。eKYCでの読み取りが成功した場合には、本人確認書類の情報が人の目でも読み取れる状態で取得できているかの確認も必要です。 手ブレ(ピンぼけ)のテストデータ 次は手ブレのテストデータを用意したいと思います。 ここまでに紹介したテストデータについては、光源や光の角度、背景を同じにすることで再現が可能な内容でした。手ブレを起こすだけであればスマホを振りながら本人確認書類の撮影を行うことで可能ですが、毎回、同じ角度、度合いで手ブレを起こすのは困難です。そのため、テスト条件を定量的に示せず、テスト結果も曖昧になってしまいます。 そこで手ブレのデータについては、ツールを使用して作成していきたいと思います。まずは元となる手ブレが起きていない画像と ガウシアンフィルタ を使用可能な任意の画像処理ソフトウェアを用意します。ガウシアンフィルタは、撮影した画像のノイズ(荒れ)を軽減する効果を生む技法ですが、デメリットとして、処理をした画像のエッジ(輪郭)がぼやけてしまう欠点があります。 この特徴を利用し、元となる手ブレが起きていない画像をガウシアンフィルタを通して標準偏差の値を調整することで、意図的にエッジのブレを起こした画像を作成します。この画像をテストデータとして使用することで、手ブレの方向、度合いを定量的に示すことが可能となります。 まとめ 今回ご紹介したのは、テストデータのごく一部に過ぎません。実際の本人確認書類には擦れや傷、汚れなどがあり得ますし、また、本人のセルフィー撮影においても髪の色、化粧の程度、カラーコンタクトの有無など、さまざまな要素を考慮する必要があります。 今後もテストデータを検討する際には、システムを利用するユーザのペルソナやロケーションを十分に考慮したいと思います。 The post eKYC(電子顔認証)のテストデータの紹介 first appeared on Sqripts .
ソフトウェア開発の世界では、アジャイル開発やスクラムが一般的になってきました。そのアジャイル開発のコアとも言えるのが、対話や協調です。このシリーズでは、アジャイル開発におけるコミュニケーション・コラボレーションスキルを解説しながら、ファシリテーションスキルのレベルアップを目指します。 初回のテーマは「優れたスクラムマスターが絶対に言わないこと」です。 アジャイルになれない現場のコミュニケーション 私はアジャイルコーチとして、アジャイル開発の現場を支援する仕事を、はや14年以上続けています。よって、様々な現場を見てきたつもりですが、アジャイルになりきれていない現場でのコミュニケーションには、共通する点が多くあります。そのなかでも比較的よく聞く言葉を選ぶとすると、以下のようなものが浮かびます。 「〜さんがこう言っていた」 「すごく困っている」 「なんでこういう事を聞いたかというと・・・」 1 については、現場にいない人の話をしています。誰かの言った(であろう)言葉の意図を、正確に理解するのは至難の業です。 2 については、困り具合が曖昧です。この人の「すごく困っている」はどれぐらいの度合いなのでしょう? 1時間困るぐらい? 1日困り続けるぐらい? もしかして一生? 3 については、この言葉の前に質問や確認があったことが想定できます。なぜこの人は、理由や意図をもったいぶって先に説明せずに、質問や確認を行ったのでしょうか? 優秀なアジャイルコーチやスクラムマスターは、上記のような言葉は使いません。 なぜなら、どれも非効率なコミュニケーションの言葉だからです。 アジャイル開発において、コミュニケーションはとても重要な要素のひとつです。それなのにわざわざ非効率な方法を選ぶ必要はないでしょう。ましてやエンジニアも非効率から効率を作り出すのが職務と言えます。こちらもわざわざ遠回りする方法を選ぶ必要はないでしょう。 細かい点かもしれませんが、こういった小さな言葉の使い方の違いが、大きな認識の違いを生み出します。 アジャイルなふるまい スクラムマスター、スクラムチーム、アジャイルチーム、アジャイルコーチ・・・。アジャイル開発に関わる人達には共通する「ふるまい」があります。 アジャイル実践者は「個人やチームの自律」を目指そうとするので、「〜しなさい」といった命令をしたり、「進捗どうですか?」のような管理的な言葉をあまり使いません。必要な場合だとしても最低限にするでしょうし、将来的になくしていく努力を進めているはずです。 これと同じく、スクラムを推進するスクラムマスターや、アジャイル開発全般を支援するアジャイルコーチにも似たような「ふるまい」があります。 これが「スクラムマスターのためのコミュニケーション講座」で学んでいくテーマです。 ふるまいは身のこなし方であったり、言葉であったりします。これらを学びながら、よりよいコミュニケーション・コラボレーションスキルを身に着け、スクラムイベントなどでのファシリテーションスキルを身に着けていきます。 この講座の内容 この講座では、以下の内容を中心に解説を行っていきます。 ファシリテーション技術 コーチング技術 1on1技術 「ファシリテーション技術」 はその名の通り、この講座のメインとなるスキルです。なんとなく「こういうもんだろう」とファシリテーションを行っている人は多いでしょうが、ファシリテーションについてはさまざまな書籍や解説書、トレーニングがあるように、体系立てて学べる部分も多くあります。ここでは「なんとなく」を「ロジカル」に変えるための解説を行っていきます。 「コーチング技術」 はファシリテーション技術と同じく、この講座のメインとなるスキルです。ファシリテーションといえばMTGなどの司会者のイメージがあるでしょうが、コーチングの主要技術もファシリテーションに有効活用できるものばかりです。純粋なコーチング技術の中から、スクラムマスターやアジャイルコーチに役立つ部分を解説していきます。 「1on1技術」 は、スクラムマスターやチームメンバーの育成に利用できる技術です。今では多くの現場で取り入れられている手法ですが、実際にやってみるととてもむずかしい方法であることがわかります。この難しさを分解し、もっと効率的な1on1の方法を考えていきます。 これ以外にも、「様々なコミュニケーション方法とその使い分け」や将来的にスキルを高めていく「コミュニケーションを鍛えるトレーニング」についても解説する予定です。 「様々なコミュニケーション方法とその使い分け」 では、我々が何気なく使っているコミュニケーションの種類を整理し、それぞれの特徴を解説します。コミュニケーションの方法は、その特徴に合わせて、さらに相手に合わせて使い分ける必要があります。どのように使いこなすのが効果的かを解説していきます。 「コミュニケーションを鍛えるトレーニング」 では、ここまで学んできた技術をより高めるための方法を考えていきます。この講座ではさまざまなテクニックや経験談を語る予定ですが、その場で理解できても、どう使っていけばいいか迷うこともあるでしょう。実際の現場でも活用できるように、筆者が経験したトレーニングや、自分のチームでも明日からできるスキルアップ方法を説明していきます。 この講座の対象読者 この講座の対象読者は以下になります。 スクラムチームを支えるスクラムマスターや、スクラムマスターを目指す方 アジャイル開発支援全般ができるアジャイルコーチや、アジャイルコーチを目指す方 私はプログラマからキャリアを積んできましたが、新卒研修やOJTでプログラミング言語は学んだことはあっても、仕事の現場で使えるコミュニケーション方法を学ぶことはありませんでした。多くのエンジニアも私と同じなのではないでしょうか? 我々は仕事に限らず、人生の多くの時間をコミュニケーションに使います。よって、ソフトウェア開発に関わるすべての人たちが、この講座の対象読者とも言えます。 * アジャイルコーチの仕事はさまざまです。単純にアジャイル開発やスクラムを教えるだけでなく、アジャイルプラクティスを教えるだけでもなく、アジャイルなふるまいができる人を育てなければなりません。そうしなければ、アジャイルコーチに依存する現場が生まれてしまうからです。 私が支援する現場では、それぞれの状況に合わせて勉強会という名のトレーニングを行ったりもします。トレーニングは、アジャイル開発をやるうえで、つまづきやすい部分にスポットライトを当てるケースが多く、人気のものだと「見積もりと計画づくり」、「効果的なインセプションデッキの作成」「アジャイルQAのための品質改善」などがあります(一部は Udemyでも公開している のでご興味があればどうぞ)。 https://www.udemy.com/user/dai-fujihara/ 今回のこの講座の土台になっている「チームが自走するためのコミュニケーション入門」は、一番人気のトレーニングです。このトレーニングは支援先で行っているオンライントレーニングなのですが、エンジニアだけでなく、ビジネス側にも人気で、アジャイルチームとのコミュニケーションの取り方だけでなく、そこからアジャイルな考え方を学んでくださっています。 この講座を進めながら「なんとなく」だったコミュニケーションを、「よりよい」コミュニケーションにするために、一緒に学んでいきましょう! 次回はスクラムイベントで一番使うであろう「ファシリテーション」の解説です。 The post 優れたスクラムマスターが絶対に言わないこと first appeared on Sqripts .
こんにちは、みなさん!QAエンジニアのゆかわです。 ふりかえりの場が暗い雰囲気になりがちで、改善が上手くいかなかったり、形骸化してしまったりした経験はありませんか?そんな課題を解決する手法として、kudo cardsを導入した事例をご紹介します。 うちのふりかえり、なんか暗い? 私たちのチームの従来のふりかえりでは、KPTなどの手法が用いられてきました。しかし、プロジェクトを良くしたいという想いから、「Problemの分析(なぜ上手くいかなかったのか?)ばかりに焦点が当たる。」、「なんとかTryを見つけても難易度が高くなってしまう。」という課題があり、暗い雰囲気が漂っていました。別のチーム(いつも楽しそうにしている)で実施していたkudo cardsという手法を紹介してもらい、私たちのチームでも活気のあるふりかえりを実現するために取り入れてみることにしました。 kudo cardsとは? kudo cardsは、チームメンバー同士がお互いに感謝や称賛の気持ちを伝えるために使用するカードです。この手法は感謝カード、サンクスカードなどとも呼ばれています。 オフィスにボードや箱などを設置して、感謝を伝えたいときに記入し、共有します。リモートワーク主体のチームではドローツール(例えばMiro)を使う場合もあり、いくつかのテンプレートも用意されています。 カードには、Thanks、GreatJob、Congratulationsなど、複数のバリエーションのカードがあり、感謝や賞賛をしたい内容によって使い分けることができます。 実施方法や準備などは ふりかえりカタログ を参考にさせていただきました。 出典:「 ふりかえりカタログ / Retrospective Catalog P.79 Kudo Cards 」より このふりかえりカタログには、kudo cards以外にも様々な手法が紹介されているので、ふりかえりに課題を感じたら参考にさせていただいています。 ふりかえりでの活用事例 私たちのチームでは、隔週でふりかえりを行っており、その最初の約10分間でkudo cardsを行っています。その後は通常通りKPTを用いたふりかえりを行います。kudo cardsの具体的な手順は以下の通りです。 1. カードの記入 私たちはリモートワークでの業務を行っているため、物理的にカードの受け渡しをすることができません。そのため、Miroなどのドローツールを利用してカードの共有をしています。 ふりかえりの中で5分間程度時間をとり、参加者各自がカードに記入をします。行動に気づいたときに伝えられるのが一番よいのですが、日々の業務に追われている中で記載するのは大変です。そのため、ふりかえりの時間の中でしっかり時間を取ることを重視しています。 2. カードの共有 書いたカードを記入した方自身が共有します。 共有している中で他の参加者から「私もそう思う!」といった声があがることがあります。その意思表示として記載されたカードに★印をつけるようにしています。そうすることで同じ内容でも複数人が同様に感謝しているということがわかり、行動の自信につながります。 kudo cards導入後に見られた変化 kudo cards導入後、感謝を伝えられた人からは「単純に嬉しい」、「自身が行っている行動に自信が持てた」といった声があがりました。一方で、伝える人からも「場があることでしっかりと伝えることができる」というポジティブな意見を得ることができました。 導入前の課題であった、「Problemの分析(なぜ上手くいかなかったのか?)ばかりに焦点が当たる。」という点についても、kudo cardsであがってきた内容を、続けて行っているKPTのKeepとして流用することで軽減できています。ふりかえりの最初に実施することで、アイスブレイクとしての効果もあり、発言者の偏り軽減や発言の頻度増加にもつながっています。 回数をかさねていくにつれてカードの内容自体にも変化が見えてきました。最初は「いつもありがとう」といった抽象的な内容が主だったのですが、具体的な行動「この意見貰えて助かった」や成果を称賛するメッセージが増える傾向が見られました。kudo cardsの導入によりメンバーの行動に気づけるようになってきたのだと思います。 まとめ kudo cardsは、事前準備もボードやカードを用意するだけで簡単に取り入れることができる手法です。私たちのチームでも、コミュニケーションが活性化したり、自信を持って行動ができるなどの効果を実感しています。 ふりかえりが形骸化してしまったり、活気がないと感じている方はぜひ一度試してみて下さい。感謝と称賛の気持ちを伝えることができ、チームの結束を高めることができるでしょう。 最後まで読んでいただき、ありがとうございました。 The post ふりかえりに活気を!〜kudo cards導入事例の紹介〜 first appeared on Sqripts .
こんにちは、まゆげです。 今回は「便利なツール「Pict Master」が使えない環境でもペアワイズテストのパターンを効率よく作りたい」をテーマに、その際に使用するツール「PICT(Pairwise Independent Combinatorial Testing tool)」を紹介していきたいと思います。 はじめに 以前の記事( 「Pict Master」でペアワイズ法のテストケースを高速生成! )でペアワイズテストのパターンをPict Masterで作成する方法が紹介されていました。 「Pict Master」でペアワイズ法のテストケースを高速生成! ただ、いざ使おうとしたら、作業環境でダウンロード許可が下りないなど様々な事情でPict Masterが使用できなかったというケースに遭遇したことはありませんか。 かくいう私も過去に諸事情でPict Masterを使用できず、PICTのみ使用できる環境で少しだけ苦戦したことがありました。 組み合わせのパターン抽出の際に条件付き制約を考慮するのはPict Masterの制約表に記載するのが視覚的でわかりやすいですよね。それをPICTで実行しようとした時には条件付き制約の構文をPICT実行時のモデルファイルに記載しないといけません。その場合、構文を書くことに慣れていないと導入の際の高い壁になってしまうこともあるのではないかと思います。 便利なPict Masterが使えない環境でもPICTを使用してパターンを作成したい、でもモデルファイルの書き方に自信がなくて一歩踏み出せないという方に向けて、単純な条件付き制約ならば割と簡単に書けてPICTを実行できる方法を紹介したいと思います。 ぺアワイズテストやPict Masterについては先ほど紹介した 以前の記事 を参照いただくとして、今回使用するPICTを簡単に紹介します。 PICT( Pairwise Independent Combinatorial Testing tool )とは PICTとはペアワイズテストのテストパターンを条件に合わせて効果的に生成できるコマンドラインツールです。様々な実行オプションと実行時に付けるプレーンテキストで作成したモデルファイルにはベースとして因子と水準を記載し、さらに条件付き制約の構文を記載する(しないケースもある)ことによって目的に合ったテストパターンを生成することができます。 詳しくは GithubのPICT紹介ページ を参照してみてください PICTはコマンドラインから以下のように実行しますが、特に実行オプションなしの場合はシンプルでとても簡単です。 >PICT.exe モデルファイル名.txt ただ実行するにあたってのポイントはモデルファイルの書き方になります。ということで条件付き制約を含めて記載方法を紹介していきます。 モデルファイル(条件付き制約を含む)の書き方 以前の記事 で使われていたスーツオーダーシステム(勝手に命名...(;^_^A )の例を使ってPICTを実行できるようにしていきたいと思います 因子水準表は以下のようになっていました。 ではこの因子水準表を元にモデルファイルを書いていきます。 モデルファイルの書き方 その1 ※因子と水準の書き方 ↓条件付き制約がなければいたって簡単、因子(パラメータ)、水準(値)の書き方 例のように因子(パラメータ)ごとに行を分け、それぞれの水準(値)をカンマで区切ります。また因子と水準はコロンで区切ります。 例)<因子> : <水準1>, <水準2>, <水準3>, … ○上記因子水準表を元に書くと以下のようになります ITEM: Jacket, Pants, TwoPieceSuit, ThreePieceSuit, Tuxedo FINISH: Single, Double, No SIZE: Small, Medium, Large, Order PATTERN: Plain, Stripe, Check, Order OPTION: No, Yes モデルファイルの書き方 その2 ※条件付き制約がある場合 手順1   仕様をもとに一文で条件付き制約を書いてみる ★下記例の様にシンプルな一文に起こしてみる (例)もし因子Aが〇〇であれば(〇〇でなければ)、因子Bは~になる(~にならない) 手順2   記載した一文を構文に書き換えてみる ★条件文はIF~THENで記載 (例)IF [A] =(<>) ”〇〇” THEN [B] =(<>) “~” ; 「=」の場合は「〇〇が~ならば」 「<>」の場合は「〇〇が~でなければ」 因子は[]で囲うこと 水準が文字列の場合は””(ダブルコーテーション)で囲うこと、数値の場合は””は不要 構文の文末には;(セミコロン)を記述 ORやAND、INといった論理演算子も使用できます ではスーツオーダーシステムの例に記載のあった条件付き制約3つを文章化します。 ※本文中で「条件付き制約」と記載しているものは以前の記事では「制約条件」と記載されているため、以下制約1、2、3では原文の表現をそのまま引用しています。 制約1: <制約条件> 『購入アイテム(ITEM)』が「ジャケット(Jacket)」の場合 <制約対象> 『仕上げ(FINISH)』は「なし(No)」となる 制約1を一文にすると もし [ITEM] が "Jacket"であれば [FINISH] は "No"となる。 さらに構文化すると IF [ITEM] = "Jacket" THEN [FINISH] = "No"; となります 制約2: <制約条件> 『購入アイテム(ITEM)』が「ジャケット(Jacket)」以外の場合 <制約対象> 『仕上げ(FINISH)』は「シングル(Single)」もしくは「ダブル(Double)」となる 制約2を一文にすると もし [ITEM] が "Jacket"でなければ [FINISH] は "Single" か "Double"となる。 さらに構文化すると IF [ITEM] <> "Jacket" THEN [FINISH] = "Single" OR [FINISH] = "Double"; となります 制約3: <制約条件> 『購入アイテム(ITEM)』が「○○スーツ(○○Suit」もしくは「タキシード(Tuxedo)」以外の場合 <制約対象> 『オプション(OPTION)』は「なし(No)」となる ※この制約3の場合、PictMasterの例のようにワイルドカードをつかって、さらに別条件も重なる場合、複雑になってしまい間違えやすくなります。 ですので、ここはシンプルに「〇〇スーツ」と「タキシード」以外というのを「ジャケット」か「パンツ」の場合としてしまった方が間違いは少なくなります。 したがって制約3は以下のように文章化します。 もし [ITEM] が "Jacket" か "Pants" であれば [OPTION] は "No"となる。 この場合、文章のまま以下のように記載しても良いですし、 IF [ITEM] = "Jacket" OR [ITEM] = "Pants" THEN [OPTION] = "No"; ORをひとまとめにしてINという演算子を使って、以下のようにも記載出来ます。 IF [ITEM] IN {"Jacket", "Pants" } THEN [OPTION] = "No"; ↓上記条件付き制約を構文化したものを下記にまとめます。 IF [ITEM] = "Jacket" THEN [FINISH] = "No"; IF [ITEM] <> "Jacket" THEN [FINISH] = "Single" OR [FINISH] = "Double"; IF [ITEM] IN {"Jacket", "Pants" } THEN [OPTION] = "No"; 前述の「モデルファイルの書き方 その1」で作成した 因子、水準のベース と「モデルファイルの書き方 その2」で作成した 条件付き制約 を記載したものをモデルファイルとして作成します。 ↓以下内容を記載してモデルファイル(ファイル名は任意)として保存する ITEM: Jacket,Pants,TwoPieceSuit,ThreePieceSuit,Tuxedo FINISH: Single,Double,No SIZE: Small,Medium,Large,Order PATTERN: Plain,Stripe,Check,Order OPTION: No,Yes IF [ITEM] = "Jacket" THEN [FINISH] = "No"; IF [ITEM] <> "Jacket" THEN [FINISH] = "Single" OR [FINISH] = "Double"; IF [ITEM] IN {"Jacket", "Pants" } THEN [OPTION] = "No"; 補足  条件(条件付き制約になるもの)が複雑になりそうな場合、まずは一つずつ簡潔な箇条書きで整理してから文章化するのもオススメです 作成したモデルファイルでPICTを実行する コマンドラインから実行する方法は前述の通りですので以下に実行結果を記載します。 ITEM FINISH SIZE PATTERN OPTION TwoPieceSuit Single Order Plain No Tuxedo Single Medium Order Yes Jacket No Large Check No TwoPieceSuit Double Small Order Yes ThreePieceSuit Double Order Check Yes Pants Double Medium Order No ThreePieceSuit Single Large Stripe Yes Tuxedo Double Small Plain No Jacket No Medium Plain No Pants Single Small Stripe No Tuxedo Single Order Check Yes ThreePieceSuit Single Small Plain No Pants Double Large Plain No TwoPieceSuit   Double Large Stripe Yes Tuxedo Single Order Stripe Yes Pants Single Order Order No ThreePieceSuit Single Medium Order Yes Pants Single Small Check No Jacket No Small Stripe No TwoPieceSuit Double Medium Check Yes Jacket No Medium Stripe No Jacket No Order Order No Tuxedo Double Large Order No ThreePieceSuit Single Order Plain Yes いかがでしょうか、このように簡単に生成することが出来ます。 知っておくと 便利な実行オプションを活用しよう 便利に使えるオプションを紹介します。 /e: ファイル名  重要な組み合わせを予め加えることができる スーツオーダーシステムの例だと最高金額になる以下の組み合わせを加えていましたので上記オプションを適用します。 ファイルへの記載方法はPICTの出力結果と同様にする ↓表の組み合わせを下記の様に記載して例えばケース指定.txt(任意)として保存 ITEM FINISH SIZE PATTERN OPTION Tuxedo Double Order Order Yes 以下のようにファイルを指定して実行します。 >pict.exe モデルファイル名.txt /e: ケース指定.txt 実行すると指定した組み合わせを含めてパターンが生成されます。 ITEM FINISH SIZE PATTERN OPTION Tuxedo Double Order Order Yes TwoPieceSuit Single Order Plain No Tuxedo Single Medium Order Yes Jacket No Large Check No TwoPieceSuit Double Small Order Yes ThreePieceSuit Double Order Check Yes Pants Double Medium Order No ThreePieceSuit Single Large Stripe Yes Tuxedo Double Small Plain No Jacket No Medium Plain No Pants Single Small Stripe No Tuxedo Single Order Check Yes ThreePieceSuit Single Small Plain No Pants Double Large Plain No TwoPieceSuit   Double Large Stripe Yes Tuxedo Single Order Stripe Yes Pants Single Order Order No ThreePieceSuit Single Medium Order Yes Pants Single Small Check No Jacket No Small Stripe No TwoPieceSuit Double Medium Check Yes Jacket No Medium Stripe No Jacket No Order Order No Tuxedo Double Large Order No ThreePieceSuit Single Order Plain Yes 赤字箇所 がオプションで追加した組み合わせです。 その他の便利なオプションをいくつか載せておきます。 /o:N  組み合わせるパラメータの数 (N(初期値: 2)) ★PICTのオプションで3因子間以上(N因子間)でも生成可能★ /d  モデルファイルに記載するパラメータに対する値の区切り文字を指定する (指定なしオプションのデフォルトはカンマ) /r  生成結果をランダム化するので毎回同じ出力結果にはならない 紹介したPICTの実行オプションで3因子間網羅も出来るし、Excel等で見やすく表示できるようにすることも、生成結果をランダム化することで様々なパターンをテストすることも可能です。 PICTが使用できない!そんな時は! ( Pairwise PICT ONLINE の紹介) ここではモデルファイルを同じように入力欄に直接記載して実行することで同じ結果が得られます。 (参考)Pairwise Pict Online ※ただし、インターネット上のサイトを利用することになりますので、セキュリティ上のリスクを考慮しないといけません。お客様に使用許諾を得るなどの対策が必要ですので使用する際には慎重を期すようにしましょう。 まとめ 条件付き制約をわかりやすい文章に出来れば構文化は簡単にできます 結果誰でも条件付き制約の構文を記述するというハードルが下がってPICTを気軽に使いやすくなります まずは簡単な条件付き制約の構文を書くところから始めて、慣れてきたら色々な演算子などを駆使してより複雑な条件付き制約の構文を書いてみましょう おまけ せっかくなので作成例をもう一つ、仕様から文章化して実行結果までを参考までに記載しておきます。 ホテルの予約システムの仕様例 ※PICT適用のためのサンプル仕様(オリジナル)です 【仕様】 ・ 部屋のタイプは4種類(シングル、ツイン、ダブル、ダブル2台) ・ 一部屋の宿泊人数は1名~4名 ・ 宿泊プランには朝食付き、朝夕食付き、素泊まりがある ・ 一回の予約で可能な宿泊日数は1泊~5泊 ・ シングルは1名利用に限る ・ ツインとダブルの1名利用は可能 ・ ダブル2台の部屋は2名から4名の利用が可能 ・ 3泊以上の場合に限り、素泊まり利用が可能 ・ 連泊は5連泊までを上限とする 【因子水準の整理】 部屋タイプ:シングル、ツイン、ダブル、ダブル2台 宿泊人数:1、2、3、4 プラン:朝食付き、朝夕食付き、素泊まり 宿泊数: 1、2、3、4、5 【条件付き制約の文章化】 もし[部屋タイプ]が”シングル”だったら、[宿泊人数]は1名であること もし[部屋タイプ]が”ツイン”か”ダブル”だったら、[宿泊人数]は2名以下であること もし[部屋タイプ]が”ダブル2台”だったら、[宿泊人数]は2名~4名であること もし[宿泊数]が”素泊まり”だったら、[プラン]は”朝食付き”か”朝夕食付き”であること もし[プラン]が”素泊まり”だったら、[宿泊数]は3~5泊であること 【モデルファイル(因子水準、条件付き制約の構文化)】 type: Single, Twin, Double, Doublex2 Guests: 1, 2, 3, 4 Plan: breakfast, dinner, stay Stays: 1, 2, 3, 4, 5 IF [Type] = "Single" THEN [Guests] = 1; IF [Type] = "Twin" OR [Type] = "Double" THEN [Guests] <= 2; IF [Type] = "Doublex2" THEN [Guests] IN {2,3,4}; IF [Stays] <= 2 THEN [Plan] = "breakfast" OR [Plan] = "dinner"; IF [Plan] = "stay" THEN [Stays] IN {3,4,5}; 【実行コマンドと実行結果】 > PICT.exe モデルファイル.txt ↓ ↓ ↓ 以下は出力結果を表に転記してナンバリングしたものです。 一連の流れを載せてみました。水準が数値の場合だった際の条件付き制約の構文の例も併せて記載してあります、これらを参考に是非色々試してみてください。。 参考資料 GitHubのPICTの紹介ページ PICTについて詳細なことはこちらを読むとさらに理解が深まります。 PICTの最新版 (2023年12月現在の最新はVer.3.7.4)の在り処の紹介 以前はインストーラでインストールが必要でしたが、現在は.exe(実行ファイル)のみの配布となっています。 最後までお読みいただき、ありがとうございました。 The post PICTを活用してペアワイズテストのパターンを手軽に生成する方法 first appeared on Sqripts .
テストエンジニアが身につけておきたいスキルの一つに「論理スキル」があります。 この連載では、「プログラムのレベル」「文や文章のレベル」に分けて、論理スキルの基本である「論理の言葉」を徹底解説します。 <テストエンジニアのための論理スキル[再]入門 連載一覧> ※クリックで開きます [第1回] なぜ、テストエンジニアに(も)論理のスキルは重要なのか 【連載初回、全文公開中】 [第2回] プログラムレベルのロジック (1)概要編 [第3回] プログラムレベルのロジック (2)解説編・基本の論理演算 [第4回] プログラムレベルのロジック (3)解説編・論理演算の組合せ [第5回] 文レベルのロジック (1)文レベルのAND/OR/NOT 第6回のテーマは、「文レベルの論理の言葉」のうち条件や場合を示す言葉の意味と働きです。 「希望者が5人集まったら、イベントを開催します」といった、 “特定の条件/場合を前提とした主張” を言いたい時があります。このような表現はソフトウェアにとっても重要であることは 第1回 で述べました。実際、ここまでに出てきた例の殆どで使われています(読み返してみてください!)。 この、条件や場合を示す言葉に出逢った時は、どういうことに注意を向けるとよいでしょうか。 前回に引き続き、一般的な文章や日常会話などで用いられる語句や表現を 一般語 と呼びます。 条件・場合を表す言葉の基本形・“ならば” 文章の中で“条件や場合を示す”際に目印として使われる語句の代表格が、 “ならば” や “場合” です。 「論理の言葉」としての“ならば” 典型的な条件の表し方は、 「PならばQ」 という形を取ります。 「テストが全件合格したら、テストを終了する」 「当日雨天の場合、大会を中止とする」 etc. Pを 前提(仮定)または前件 、Qを 帰結または後件 といいます。 「テストが全件合格」「当日雨天」が 前提 「テストを終了する」「大会を中止とする」が 帰結 「PならばQ」は、 「Pという前提が成り立つなら、Qという帰結が成り立つ」 ということを表しています。 この“ならば”の働きを「 条件法 」といいます(「もし昨日晴れていたら、○○ランドに行ったのに」のような、事実に反することを述べる条件法とは異なります)。 PとQの関係に注意してください。 「PならばQ」は、「Pが成り立つ時はQが成り立つ」「Pが成り立つのにQが成り立たないことはない」とだけ言っており、「Pが成り立たない時」のことは何も言っていません。 従って、PでなくてもQであることがあり得ます。(集合のベン図的に表すと、「PならばQ」は図6-1の左を指しています)。 図6-1 「PならばQ」のベン図 「テストが全件合格」していなくても、テストが終了することはあり得る(他の条件があるかも知れない) 「当日雨天」の他にも大会を中止する条件はあり得る(強風の場合、参加者が揃わない場合、など) 等値(同値)の“ならば” 「PならばQ」もその逆「QならばP」もともに成り立つ、という場合もあり、これを「双条件法」といいます。(PとQが“同じ大きさ”でぴったり重なる。図6-2) 図6-2 双条件法(等値(同値)の“ならば“) 「稼働中にバッテリー残量が10%を切ったら、“充電して!”と音声で知らせます」  稼働中に“充電して!”と音声が流れる場合は、バッテリー残量が10%を切っている 「獲得ポイントが○○になったら、ランクAAになります」 ランクAAになる条件は○○ポイント獲得のみ 等値(同値)の“ならば”を明示する語句として、「……の場合、そしてその場合に限り、~である」という言い回しが用いられることもあります。 (英語の論文などでは”if and only if …”という表現が使われます(“iff”と略される)) ソフトウェアに出てくる“ならば” ソフトウェアでは、条件や場合を示す“ならば”は、成り立つ成り立たないというよりは、特定の条件/場合に対応する特定の処理/動作や、特定の処理/動作ができるための条件を記述する局面で使われることが多いでしょう。 「条件を満たさない時の動作」といった記述が添えられることも多いです。 ある箇所で次のような記述があったとして: 「利用者がログインしており、SP権限を持っている場合は、XYZ機能を使うことができる」 「数値のいずれかがゼロの場合、エラーメッセージE1を出力する」 別の箇所で、 「別の条件が満たされている場合、XYZ機能を使える」や 「別の条件に該当する場合、エラーメッセージE1を出力する」 という記述があることもあります。 逆・裏・対偶 「PならばQ」の“変形” 「PならばQ」のP(前提)とQ(帰結)との関係に着目して、次の三種類の変形が考えられます。(図6-3) 図6-3 逆・裏・対偶 逆 : PとQを入れ替える。 「QならばP」 裏 : PとQをそれぞれ否定する。 「NOT(P) ならば NOT(Q)」= 「PでないならばQでない」 対偶 :PとQをそれぞれ否定し、さらに入れ替える 「NOT(Q) ならば NOT(P)」= 「QでないならばPでない」 もとの文の「 裏の逆(または逆の裏) 」に等しい 逆・裏・対偶は、同じ変形を二度繰り返すと、もとの形に戻ります。図で確認しましょう。 もとの文:「PならばQ」 逆「QならばP」の逆は、「PならばQ」 裏「PでないならばQでない」の裏は、「PならばQ」 対偶「QでないならばPでない」の対偶は、「PならばQ」 なお、逆と裏は互いに対偶の関係にあります。(図6-3) もとの文と逆・裏・対偶との関係 もとの文に対して、逆・裏・対偶について以下のことが言えます。 逆・・・「PならばQ」が成り立っていても、 逆「QならばP」が成り立つとは限らない 「テストを終了するなら、テストが全件合格している」?? 「大会が中止になるなら、当日雨が降っている」?? (「等値(同値)の“ならば”」なら、逆は成り立つ) 裏・・・「PならばQ」が成り立っていても、 裏「PでないならばQでない」が成り立つとは限らない 「テストが全件合格していないなら、テストを終了しない」?? 「当日雨が降らないなら、大会は中止にならない」?? (「等値(同値)の“ならば”」なら、裏は成り立つ) 対偶・・・「PならばQ」が成り立つなら、対偶「QでないならばPでない」は必ず成り立つ 「テストが終了していないなら、テストが全件合格しているのではない」 「大会が中止にならないなら、当日雨は降っていない」 条件・場合の表現をチェックする 文章の理解を確実にするために、条件・場合の表現の逆や裏を考えて、文章全体を調べてみたり考えてみたりする方法があります。 逆: 「Qが成り立つ場合には、Pという前提が成り立っていると考えてよいか」と考えてみる 裏: 「Pでないならば、Qにはならないか」と考えてみる 具体例① もとの文:「利用者がログインしており、SP権限を持っている場合は、XYZ機能を使うことができる」 逆: 「XYZ機能を使うことができる」なら、「ログインしており、SP権限を持っている」と言えるか。他の場合はないか 裏: 「ログインしており、SP権限を持っている」のでないならば、「XYZ機能を使う」ことはできないか 具体例② もとの文:「数値のいずれかがゼロの場合、エラーメッセージE1を出力する」 逆: 「エラーメッセージE1を出力する」ならば、「数値のいずれかがゼロ」であると言えるか。他の場合はないか 裏: 「数値のいずれかがゼロ」でないならば、「エラーメッセージE1を出力」しないか 「同じ処理をする他の場合はないか?」「ここに記されている“条件や場合”を満たしていない場合の動作はどうなる?」といったことを自然に気にかけている人も多いと思います。それは、 「PならばQ」の形の文に対して、PとQの関係が自然に気になるから なのかも知れません。 むすび 6回にわたって、“論理的”に考えるための「基本的な道具」である「 論理(ロジック)の言葉 」をいくつか見てきました。 取り上げたのはあくまでも「基本的な道具」です。これらを憶えたら、ぜひ次のステップに進んで論理のスキルを高めてください。 文章レベルの論理:文章の構造を理解するための論理の言葉 長い文章の筋道を追ったり、話を整理して論旨を把握するのに役立ちます 推論:考えの筋道を立てるためのルール 前提から結論を導き出したり、 複数の事象を一般化して考えたり、事象から原因の仮説を立てたりする方法 (故障の要因の推測や、故障の原因の推測などに役立ちます) 参考文献 『入門!論理学』(野矢茂樹 / 中央公論新社) 『論理的思考の技法〈1〉第2版 「ならば」をめぐって』(鈴木美佐子 / 法学書院) 『新版 論理トレーニング』(野矢茂樹 / 産業図書) 『スマリヤン先生のブール代数入門』(スマリヤン / 共立出版) 『記号論理学 一般化と記号化』(スマリヤン / 丸善出版) 連載一覧 [第1回] なぜ、テストエンジニアに(も)論理のスキルは重要なのか 【連載初回、全文公開中】 [第2回] プログラムレベルのロジック (1)概要編 [第3回] プログラムレベルのロジック (2)解説編・基本の論理演算 [第4回] プログラムレベルのロジック (3)解説編・論理演算の組合せ [第5回] 文レベルのロジック (1)文レベルのAND/OR/NOT The post [第6回] 文レベルのロジック (2)条件・場合を表す言葉 first appeared on Sqripts .
こんにちは。まーくー&くまねこです。 ゆるっとシリーズ第6話です。 前々回 、 前回 から引き続き、学び直し回です! 書籍「基本から学ぶソフトウェアテスト」を読んで、現在でも活かせる内容があるのか?ないのか?会話形式でお話しさせていただきます。 最後まで楽しんで読んでいただければ幸いです! 自己紹介 まーくー QA業界経験2x年のベテラン(おじさん)エンジニア。 過去のミスに愕然とする事ってありますよね?えっ?ありませんか?私はあります。。。 くまねこ QA業界経験1x年のエンジニア。 ジムに行った後、「運動したし、食べまくるぞ!」ってなる日ありますよね?僕はいつもです。。。(元の体重に戻りつつあります) イラストby くまねこ 何やらまーくーが愕然としている模様…何があったのでしょうか? 今日も二人のやりとりをお楽しみください! 今日も仲良く学び直し!山あり谷ありの探求の旅??? ぐあああぁあああああ!(突然の叫び!) あらっ、まーくーさん、どうしたんですか?Knock knock Downしてますね…?(愕然として青ざめている…何があったんだろう…?) く、くまねこさん、、、書籍「 基本から学ぶソフトウェアテスト (第4版)」P.83の欄外を見てくれぇ・・・ は、はいっ!ふむふむふむふむ…(ふむむ…何があるんだ???) ここだよ…こ、ここぉ~!Woo~! 訳注:原著は1993年に執筆されており、2000年問題はそのころまだ騒がれていなかった。 基本から学ぶソフトウェアテスト 今までの学び直し記事で、「20年前の書籍を紹介している」って書いてたけど、原著は30年前のものだったんだぁ。。。 30 years ago~!…そうみたいですね♪(もっと昔だったのかぁ…ますますエインシェント!でも、何を取り乱しているんだろう?) 全世界に公開されている記事で30年前のものを20年前のものと、虚偽の記載をしてしまった。もう取り返しがつかない・・・。原著に裁かれているような気がするぅ…ぐあああぁあああああ ちょっと落ち着いてくださいよ。まぁ日本では20年前に発売された書籍だから問題ないんじゃあないですか?This book was made in Japan!We live in Japan!さっ、今日は第5章、第6章から学び直していきましょう! (えっ?あっさり?Why?取り乱した自分が恥ずかしい。。。そんな自分に負けないためにあれを使おう…)お、おぉ。そ、そうだね。ま、学び直して行こう!Bigbang ? \ / → → ノシ Hello World Yeah~! \ /(訳:まーくーさん、BigBang使ってここまでの流れを再創生したのは良いけど…うっかり自分から「学び直ししよう」って言っちゃった~!ぐあああぁああああ~!((( )))) 第5章 障害の報告と分析を読んで まずは「本章のねらい」からですね。本章では「障害レポートをどう使えばプログラマとスムーズに意思疎通できるかを説明する。」とあります。 「バグチケット」「バグ票」「バグレポート」「障害票」など現場によっていろいろな呼び名がありますよね? そうだね、本記事では書籍に記載のとおり「障害レポート」で進めましょう! はーい。 障害レポート以外でもプログラマとのコミュニケーションは取る必要があるけど、テスト担当者としてプログラマと障害のやり取りをする一番重要なツールが障害レポートだ。これが上手く書けないといわゆる「バグピンポン」が発生してしまう。 ノ あ、プログラマとテスト担当者で障害レポートが行ったり来たりするやつですね。なかなかこちらの言いたいことがプログラマに伝わらず悲しくなってくるやつですね。 でもテスト担当者の書く障害レポートの内容が不十分だったり、書き方が悪かったりすることが原因で発生することが多いんだ。テストを実施する立場で言えば、この章はとても重要だね。 心して掛かります!ちなみに「本章で紹介するレポートは、紙での運用を想定している。」っていうのは、時代を感じますね。 いまはほとんど障害管理システムを使っていたり、表計算ソフトなんかで表にして運用することがほとんどだからね。でも第一報は紙って現場もまだあったりするよ。 えー。びっくり。そうなんですねー!障害管理システムでも紙でも基本的に内容はいっしょですよね?本章で記載されている以下をちゃんと理解して、良い「障害レポート」が書けるよう学び直します ・障害レポートの項目 ・質の高い障害レポートの書き方 ・再現性のある障害分析の方法とコツ ・障害を再現させる方法 基本から学ぶソフトウェアテスト おぉ、冒頭にとても良いことが書いてあるね! 障害を見つけたら、その場でレポートを作成せよ! 基本から学ぶソフトウェアテスト メモを取ってあとから書こうとしても、時間が掛かったり、曖昧な記述になってしまったり・・・すぐに書くって大事ですよね。 うん。すぐに書けないこともあるけど、極力早めに書いた方が良いのは間違いない!障害を早く開発側に報告できるしね。次にレポートの内容について記載すべき項目があげられているよ。 ふむふむ…ふむふむ…書籍に記載されている障害レポートのフォーマットを見てみると、現在の業務でも使っている項目は網羅されているようです。共感したのは、障害検出~報告までのところです。実際のテスト中に障害と思われる現象を検出した時、今までの手順や条件などを整理しながら、必要なことをなるべく簡潔に開発チームに伝えられるように心がけています。 GOOD!障害レポートの報告内容によって問題の重大さの認識や、開発側のデバッグ効率などに影響を与えるから、改めて理解して実践できるようになっておきたいところだね。 あと、スケジュールに余裕がないピリピリした状態でも開発チームと良い関係で進めていけるよう、障害レポートの表現にも気を付けています。ちょっとした気配りをするだけで、テスト担当者・開発者間の行き違いや感情的な衝突を防いだりできるので、言葉遣いも重要ですよね! 誰が言ったか知らないが、「バグを憎んで人を憎まず」ってのが大事だよね ですね(心に刻みます!)。次は「再現性のある障害の分析のコツ」&「障害を再現させる方法」!これは興味のある方も多いのではないでしょうか? だよね。まず障害の分析として以下を挙げている。 ・最も致命的な現象を明らかにする ・最も簡単で制約の少ない条件を明確にする ・同じ障害を発生させる別の手順を見つける ・関連する障害を探す 基本から学ぶソフトウェアテスト ふむふむ。上記の情報がそろっている障害レポートなら、開発者もプログラムの修正がしやすそうですね! 続いて「再現性のある障害の分析のコツ」&「障害を再現させる方法」が詳しく記載されているよ。 ここは特に現在のテスト担当者にも活かせる内容ですね!障害を検出したときって、上記ポイントを明らかにするために、過去にさかのぼって操作や条件を思い出したり整理したり・・・考えること多いですよね。 この書籍の分析のコツや障害再現方法を参考にすれば、テスト経験が浅くても良い障害レポートが書けそうだね。 焦ってると頭の中だけで考えてながら進める事が多いですけど、色々やり過ぎて迷子にならないよう、上記ポイントを押さえつつメモを取りながら進めていくと良いかなって思いました。 オーゥケイ!そんな我々が報告した障害レポートがどこへ行こうとしているか、くまねこさんは知りたくないか~い? Yeah~! \ /(訳:突然エンジンがかかった???とりあえず乗っておく~!) このまま第2部、第6章も読んでいくぞー!カモォン! Yeah~! \ /(訳:ぎゃー!) 第6章 障害管理システム を読んで 6章は障害管理システムについて。私もくまねこさんも、障害管理システムとして独立して管理しているプロジェクトや、Redmineなどを使ってタスクと一緒に管理するプロジェクトを担当したことがあると思うけど、ここでは前者の意味合いで書かれているかな。 現代ではアジャイル開発のように短いスパンで設計~テスト~リリースするプロジェクトも多いですし、本書は30年前のものの書籍だからウォーターフォール開発前提の重厚な内容だとすると、導入が難しいところもあるかもしれませんね。 ただ本章のねらいでも「障害レポートを報告後どうするかを述べる。」と記載されていて、「障害を管理する」という点では共通して学べることもあると思うから、読み進めていこう。 まず、「障害管理」というところではテスト対象で報告された障害の可視化(重大度の大きな障害が何件あるか、修正された件数が何件あるか等)ができる点は当然良い点として挙げられると思います。 製品の品質状況やプロジェクトの状況を可視化することができるよね。 ただ可視化したことで、人や管理の問題(誰がどれぐらい件数を出しているのか、起こりえる問題など)についても言及があって、改めて障害管理システムの与える影響について考えさせられました。 そうだね。正しい運用をしないと、プラスの影響だけでなくマイナスの影響も出てしまうんだね。 やはり、テスト担当としてプロジェクトに参画すると、自分の実績って「どれぐらいのペースでテストを消化しているか?何件の障害を検出して報告できたか?」というのが大きいと思います。 報告した障害レポートの数を競ったり、人の障害レポートの数をみて「あ、自分の報告少ない!」って焦ったりね そうそうそれです!でも、障害管理システムで集計された数字が他のテストメンバーや開発メンバーに与えるマイナスな影響についても言及されていて、プロジェクトを運営する側は正しく障害管理システムを運用しなければならないとわかり、とても参考になりました。 そうだね。マネジメントする立場からすると、ある程度数字で判断しなければいけない場面ってあると思うけど、障害管理システムのいちばんの目的は下記にもあるように「障害の発生/修正状況を管理する」ということだから、そのことを意識して使っていくよう注意が必要だね。 障害管理システムは、修正すべきバグを修正するためにある。この目的に直接関係ない事は、二の次である。 基本から学ぶソフトウェアテスト はい。また、テスト初心者であっても本章を読むことで、プログラマやプロジェクトマネージャー等さまざまな役割のメンバーが、それぞれの視点で障害管理システムを利用する際に考えなくてはならないことが分かると思います。 障害管理システムが備えておくべき要件と各役割の全体像を理解するには良い記載かも知れないね。次に、障害管理システムで出力できるレポート関連について記載があるけど、どうかな? 検出した障害の一覧というところで、基本的な項目や出力できるレポートの種類は現在とあまり大きな差異はないように思います。ちょっと結びつけるには強引かもしれませんが、 以前の記事 で話した「目的に対する最終的な成果」についての報告で、出力したレポートを使ってテスト担当として障害傾向や品質状況についての考えをコメントできるようになると、より説得力のある報告ができると思いました。 そうだね。ここで学んだことを活かして、障害管理システムを使いこなしていきたいね! ゆるっと♪どうやってる?探索的テストの世界! まとめ 今回は障害関連ということで見てきたわけだけど、どうだったかな? 第5章の障害報告については大事なポイントが整理されていて、自身がやっていたこととの比較から良い学び直しになりました。障害報告フォーマットについては、今までの経験からすると新しい発見はあまりありませんでしたが、基本は陳腐化しないものであるということが実感できてよかったです。 学び直してるねぇ(笑) (茶化さないでくださいよー)また、現場によって障害報告フォーマットの項目が異なることもあるので、そういった場合には「改善提案」という形で今回学び直したフォーマット項目に留意しつつ、不足部分があれば提案して、導入するメリットまで説明できるようにしていきたいです。 良いね!紙で障害レポートを書くことを前提にしていたり、時代を感じる記載はあったけど、全体的に現在でも大事にすべきポイントが多々記載されていたね。私もテスト結果のレポートなどを提出する時には、第6章に書かれている「障害管理システム」の運用の考え方やフォーマットを参考にして、今後の活動に役立てていきたいと思う! よーし、第2部もこの調子で学び続けていかなければ…バーイ! ノシ 三 Yeeeeeeeeeeaaaaaaaaaah! \ / (アンコール!アンコール!) 次回予告 三 ノシ(戻ってきた)さて、今回はここまでにしようか。 お互いJSTQBのALの学習は進んでないけど(笑)、次回はどんな感じかな? 次回のまーくー&くまねこは、 JSTQB ALTM試験、勉強する気ある?どうでしょ!(仮) JSTQB ALTM試験、受けるかも?受けないかも?どっちでしょ!(仮) の2本でーす。 最後まで読んで頂き、ありがとうございました! よろしければ、過去のゆるっと♪シリーズもお楽しみください! 次回もまた見てねー ノシ 三 ノシ 三 ゆるっと♪シリーズ 第1話 ゆるっと♪ファームウェアテストよもやま話 第2話 ゆるっと♪学び直し!アジャイルソフトウェア開発技術者検定試験 第3話 ゆるっと♪どうやってる?探索的テストの世界! 第4話 ゆるっと♪学び直し! [書籍]基本から学ぶソフトウェアテスト! 第5話 ゆるっと♪学び直し![書籍] 基本から学ぶソフトウェアテスト!②~あきらめてしまわないでね 難しさ感じても~ The post ゆるっと♪学び直し![書籍] 基本から学ぶソフトウェアテスト!➂~きっとそこに信じていた、バグ管理の姿があるはずさ♪~ first appeared on Sqripts .
新卒でフロントエンド開発者をしています、イソダです。 先輩が作成した社内情報お問合せSlackBot をLangChainというツールを使用して、ベクターデータベースとChatGPTに接続して、より賢く、より人間らしい回答ができるようにシステム改修しました。今回はそのシステムについて簡単に紹介したいと思います。 (今回作成したシステムはまだ運用をしておらず、今後の運用を調整中です。) Cloud FunctionsとSlack APIに踊らされたSlack Bot作成 LangChainとは Introduction | Langchain LangChainはChatGPTなどの言語モデルを活用したアプリケーションを開発するためのフレームワークです。利用方法としては、ChatBot、データベースやドキュメントなどの知識を元に質問に答えてくれるお問合せAI、ドキュメントの要約などいろいろあります。 今回はLangChainを使用して、社内制度へのお問合せSlackBotを作成していきます。 システム構成 作成したシステムの構成は次のようになっています。 社内情報お問合せAIシステムの構成図 まずSlackからの質問文をLangChainで受け取ります。 これをLangChainからベクターデータベースにクエリとして送信します。 すると質問文と関連があるドキュメントを抽出して返ってきます。 次にLangChainからChatGPTにドキュメントの内容を参考にして質問に答えるように指示を出します。 そしてChatGPTから回答が返ってきます。 返ってきた回答をそのままSlackに返します。 LangChainはGoogle Cloud Functions、ベクターデータベースはGoogle Cloud Storage上に構築しています。 以降は、ベクターデータベースの作り方とLangChain、ベクターデータベース、ChatGPTとのやり取りについて説明していきます。 ベクターデータベースの構築 ベクターDBは、様々な形式のデータをベクトルとして保存し、クエリに対して類似度検索をして該当したデータを返してくれるデータベースです。 今回は社内向けのWebサイトに掲載されている情報を取り入れてベクターDBを作成しました。Webサイトをクローリングで取得してtxtファイルとして保存したものを利用しています。本記事ではクローリングについては説明しません。 以下がPythonで実装したベクターDB作成のコードです。 from langchain_openai import OpenAIEmbeddings from langchain_community.vectorstores import FAISS from langchain_community.document_loaders import DirectoryLoader from langchain.text_splitter import CharacterTextSplitter import dotenv # OPENAI_API_KEYの読み込み # (このコードがあるディレクトに.envファイルを作り、 # 中身に OPENAI_API_KEY=オープンAIのキー を書いておく) dotenv.load_dotenv() # データの読み込み loader = DirectoryLoader("Webサイトのtxtデータがあるディレクトリ", glob="**/*.txt") documents = loader.load() # テキストデータを小さく分割 all_splits = CharacterTextSplitter().split_documents(documents) # ベクターDBの作成 db = FAISS.from_documents(all_splits, OpenAIEmbeddings()) db.save_local("./faiss_index") まずローカルに保存してあるWebサイトのtxtデータを DirectoryLoader & load() で読み込みます。引数の glob で拡張子がtxtであるファイルのみ読み込むよう指定しています。 次にベクターDBに格納するテキストデータをある程度の長さで分割していきます。この工程を行う理由としては、ベクターDBにクエリを出したときに帰ってくるドキュメントを短く、かつクエリと深く関連しているようにするためです。Webサイトなどのドキュメントは、1ページに複数個のトピックが書かれていることが多いです。これを短く分割することで、1つのドキュメントに含まれているトピックを絞り、クエリとは関連のないトピックが含まれることを防ぎます。 分割を行うインスタンスを CharacterTextSplitter() で呼び出し、分割を行う関数 split_documents() に先ほど読み込んできたWebサイトのデータ documents を渡しています。 最後にベクターDBを作成します。今回はFAISSというベクターDBを使用しています。またテキストデータをベクトルに変換する埋め込みモデルはOpenAIのものを利用してます。 FAISS.from_documents(ドキュメント, 埋め込みモデル) でベクターDBが生成されます。できたベクターDBは、 db.save_local("./faiss_index") でローカル上のfaiss_indexディレクトリに保存します。 faiss_index ディレクトリ内に index.faiss と index.pkl という2つのファイルが生成されます。 問合せシステムの構築 以下のコードがPythonで実装した問合せシステムです。モジュールはGoogle CloudとLangChainのものをインポートしています。以降の節で詳しく説明していきます。 import os import functions_framework from google.cloud import storage from langchain_community.vectorstores import FAISS from langchain_openai import ChatOpenAI from langchain_openai import OpenAIEmbeddings from langchain_core.messages import HumanMessage @functions_framework.http def ai_question_vectordb_api(request): try: query_dict = dict() question = request.get_data(as_text=True) # GCSからベクターDBをダウンロード storage_client = storage.Client() bucket = storage_client.bucket("test_vecdb_for_langchain") blob = bucket.blob("index.faiss") blob.download_to_filename("/tmp/index.faiss") blob = bucket.blob("index.pkl") blob.download_to_filename("/tmp/index.pkl") # ベクターDBにクエリ vectorstore = FAISS.load_local("/tmp/", embeddings=OpenAIEmbeddings()) docs = vectorstore.similarity_search(question, k=3) input_documents = str() for d in docs: input_documents += "input_documents: {}\n".format(d.page_content.replace('\n', '')) # 問合せに対する回答を生成 llm = ChatOpenAI(model_name="gpt-3.5-turbo-16k", temperature=0, request_timeout=60) query = input_documents query += "question: {} ".format(question).replace('\n', ' ') query += "questionに答えてください。" answer = llm([HumanMessage(content=query)]) return answer.content except Exception as e: print(e) return "ごめんなさい。。何か問題が起きたようです。。" 質問受付 @functions_framework.http def ai_question_vectordb_api(request): question = request.get_data(as_text=True) 一行目の @functions_framework.http はGoogle Cloud Functionsで実装するときのおまじないみたいなものです。Slackから送られてきた質問を request で受け取ります。 request はただの文字列の想定なので、テキストとして読み込んで question 変数に代入してます。 ベクターDBへのクエリ # GCSからベクターDBをダウンロード storage_client = storage.Client() bucket = storage_client.bucket("test_vecdb_for_langchain") blob = bucket.blob("index.faiss") blob.download_to_filename("/tmp/index.faiss") blob = bucket.blob("index.pkl") blob.download_to_filename("/tmp/index.pkl") # ベクターDBにクエリ vectorstore = FAISS.load_local("/tmp/", embeddings=OpenAIEmbeddings()) docs = vectorstore.similarity_search(question, k=3) input_documents = str() for d in docs: input_documents += "input_documents: {}\n".format(d.page_content.replace('\n', '')) まずベクターDBであるFAISSをGoogle Cloud Storageからダウンロードして、ローカル上に保存します。今回はGCFs上の一時ファイル置き場として使える /tmp ディレクトリ上に保存しています。ダウンロードするファイルは2つで、拡張子が .faiss であるものと .pkl であるものです。 次にローカル上に保存したベクターDBをメモリに読み込みます。 読み込みは FAISS.load_local(”FAISSがあるディレクトリ”, embeddings=OpenAIEmbeddings()) で行います。ここで埋め込みモデルとして、ベクターDB作成時と同じモデルを指定します。読み込んだベクターDBに対してのクエリは vectorstore.similarity_search(質問文) で行います。このクエリの返答としては、質問文と類似度が高い文書が複数個返ってきます。今回は k=3 で3つの文書を返すように指定しています。そして帰ってきた文書を input_documents に整形して格納します。 ChatGPTへのクエリ # 問合せに対する回答を生成 llm = ChatOpenAI(model_name="gpt-3.5-turbo-16k", temperature=0, request_timeout=60) query += input_documents query += "question: {} ".format(question).replace('\n', ' ') query += "questionに答えてください。" answer = llm([HumanMessage(content=query)]) return answer.content まずChatOpenAIをインスタンス化して変数 llm に代入しています。このインスタンスは、OpenAIのgpt-3.5-turbo-16kモデルを使用してます。引数の temperature は0~1の値を取り、1に近いほどChatGPTが生成する回答文がランダムになります。今回はテストがしやすいように、値を0にして、同じ質問文に対しては同じ回答を返すように設定してます。あとは変数 query にChatGPTに送りたい文章を入れていきます。ここでは、ベクターDBが返した文章と、Slackから送られた質問文を整形して入れています。 そして、 answer = llm([HumanMessage(content=query)]) で実際にChatGPTと会話を行います。ChatGPTの回答はanswer.contentに入っているので、これをSlackにそのまま返しています。 動作例 以下の画像が実際にSlack経由で実装した問合せシステムに質問した結果になります。試しに弊社の資格取得支援制度について質問したところ、社内情報に特化して、かつ自然な感じで回答してくれます。また「制度の申請方法を教えて」など質問する内容を詳細に絞ってあげると、それに対応して制度の細かい部分まで答えてくれます。 問合せシステムに社内制度について質問した結果 社内制度の詳細について質問した結果 まとめ LangChainを使うことで、ベクターDB+ChatGPTと連携してAIアプリが簡単に作成できました。今回は使用しなかったのですが、LangChainのChainという機能を使うことで、さらに簡潔に、かつデバッグがしやすくなるらしいです。以降はそのあたりも勉強しようかと思います。 The post LangChain+ChatGPT+VectorDBで問合せbotを賢くした話 first appeared on Sqripts .
本連載ではプロジェクトマネジメントの全体像とプロジェクトを成功させる上で最低限抑えるべき知識と技術はもちろん、プロジェクトを炎上させないための技術やコツをお伝えしたいと思っています。 みなさんのプロジェクトが今以上に充実し、笑顔でプロジェクト終結を迎えられるよう一緒に学んでいきましょう。 第6回となる今回のテーマは「スケジュールマネジメント」です。 「スケジュールマネジメント」という言葉からどのような活動をイメージしますか? プロジェクト憲章でプロジェクトの目的目標が明らかになり、それを達成させる為のスコープも決まりました。次にやることは「そのプロジェクトの目的目標を、スコープの範囲内でいかにして達成するか」という詳細な計画づくりです。 この「計画づくり」&「計画の管理」がセットになって、詳細化されたものがプロジェクトマネジメントで云う「スケジュール」であり「スケジュールマネジメント」です。 適切な計画なしにプロジェクトを実行することは決してできませんが、 計画方法がわからない いつもスケジュールが破綻してしまうが、よりよいスケジュール計画方法がわからない といった課題を抱えている方も多いと思います。 今回と次回の2回に分けて、スケジュールを立てる為の準備とスケジュール作成方法を一緒に学んでいきましょう。 < プロジェクトマネジメント成功の技術 連載一覧> ※クリックで開きます 【第1回】プロジェクトマネジメントとは何か?  [連載初回全文公開中:Sqripts会員以外の方も全文お読みいただけます] 【第2回】プロジェクトマネージャーの役割とは? 【第3回】ステークホルダーマネジメントの重要性と進め方 【第4回】プロジェクトの統合マネジメント、7つのプロセス まずはじめに目標を細分化すること プロジェクトの計画は「こう進めていけばプロジェクトが完成(成功)するであろう」というシナリオ作りだと考えましょう。目的目標をどのようにすれば行動に移せるか、行動するために不足している情報や漏れはないか?とイメージを膨らませ、何度も繰り返して「実行に移せるようなサイズ」まで分解することからはじめます。これを「要素分解」と呼びます。 間違っても、いきなり目標からすぐに工程表をひく、ということはないように、、、! スケジュールマネジメントのステップ スケジュールマネジメントでは以下6つのステップ(プロセス)で行います。 アクティビティの定義 目標を細分化することを「要素分解」と言います。つまり要素分解された小さな要素ひとつひとつの集合体が目標になります。 このように目標を要素に細分化し「何をしなければならないか」を考える技法が、みなさんもよくご存知のWBS( WBS:Work Breakdown Structure )です。最終目標を細分化したものが「成果物」と呼ばれ、WBSではその成果物を要素→アクティビティに分解していきます。アクティビティはその名の通り「活動・作業」ですね。 1) 要素分解の王道ツールWBSの基本 WBSは一般的にツリー構造で作られます。 最も上は目的目標やプロジェクト名、次(2階層目)に成果物、その下に要素成果物と呼ばれる「上の成果物をさらに分解するとどのような要素か(何が必要か)」を示し、最後に要素成果物を完成させるために必要な作業としてのアクティビティを書き出します。このアクティビティが一般的には活動タスクとなります。 WBSは作成すればするほどスキルがあがり、作成スピードもアップします。みなさんもご自身の身近なものや予定などでWBS要素分解の練習をしてみましょう! 2) 要素はどこまで分解するの? 要素分解をどこまで行うか?という質問を頂きますが、プロジェクトの規模などにより変わってきます。 大きな粒度で活動を管理してもよい場合もありますが、大雑把すぎると進捗が見えにくくなるなどの問題が起こります。また、細分化しすぎても進捗管理自体に工数がかかります。プロジェクト管理できる適当なサイズになるようにしましょう。 中にはすぐに見通せない要素もあるかもしれません。無理をして全ての作業を特定しようとせず、将来的な作業などは段階的な詳細化でよいでしょう。完璧なWBSの作成には無理があり、時間をかけすぎて実作業にあてる時間を消化しないよう気をつけましょう。 3) 要素分解の最終チェック 要素とは「事項の成立やその効力に必要で不可欠な条件」です。抜け漏れがないように確認していきましょう。 筆者の経験からWBSの検討をキックオフ(プロジェクト立ち上げ時)のイベント/アクティビティとしてチームメンバと行うこともおすすめします。 1つ下にある全ての作業を実施するだけで作業が終わるか (必要充分) 各作業に必要となるものが他の作業で作成されているか (INPUT) 各作業で作成されたものが他の作業で利用されているか (OUTPUT)  POINT  作成は上から下へ、再び下から上へ確認する。 4) WBSとガントチャート(バーチャート) WBSは要素やアクティビティ(=何をすべきか)を明確にするために使う技法です。ガントチャート(バーチャート/工程表)はそれに対して「いつすべきか」を明確にしていく技法ですので、しっかりと区別して使い、計画していきましょう。またガントチャートから作り始めることは成果物、要素成果物、アクティビティの抜け漏れ発生が高まるので「WBS作成→ガントチャート作成」という流れをセットで行うようにしてください。 作業の依存関係を確認して順序を決める:アクティビティの順序設定 アクティビティに順序をつけるということはどういうことでしょうか? WBSはあくまで要素を洗い出す技法なので、要素やアクティビティの順序関係は意識しないというルールになっています。そのため、洗い出したアクティビティを実行するために「何をどの順番で対応するのか?対応するのがよいか?」ということを決めていく必要があるのです。 順番としては上から下に、成果物の対応順序→要素成果物の対応順序→アクティビティの対応順序と整理していきます。 1) XXが終わらないとXXに進めない?「論理的順序関係」 順序設定では、 採用が終わらないと教育研修ができない 採用と教育研修のマニュアル作りは同時にできる というように「何かが終わらないと次ができない関係性」にあるのか「同時並行できる関係性」にあるのかを考えて整理します。ただし、最終的には「同時にやりたいが対応者がいない」など全体的な考慮を加えた上でスケジュールが決定されます。 論理的順序関係には以下4つのパターンがあります。 終了ー開始関係(finishーstart:FS) : あるアクティビティが完了すると、関連するアクティビティが開始できる(このケースが最も多い) 終了ー終了関係(finishーfinish:FF) : あるアクティビティを終了すると、関連するアクティビティも終了できる 開始ー開始関係(startーstart:SS) : あるアクティビティが開始されると、関連するアクティビティも開始できる 開始ー終了関係(startーfinish:SF) : あるアクティビティの完了は、先行アクティビティの開始に左右される 2) 整理した順序はネットワーク図に整理する アクティビティ間の論理的順序関係を構造的に示すのに「ネットワーク図(ネットワークダイアグラム)」が使われます。 前後記載:順番に実行しなければならない作業 並列記載:並列に実行できる作業  POINT  ここではリソースの制約を考慮しなくてよい。 アクティビティ所要期間(工数と時間)を見積もる アクティビティの順序づけができたら、いよいよ時間の要素を組み込んで計画します。それぞれのアクティビティごとにどれだけの時間(期間)が必要か考えます。この検討はとても重要で難しいです。まずは専門家や有識者とディスカッションすること、併せて以下に挙げるような技法を使って考えてみてください! 1) アクティビティ期間の見積もり技法 組織やプロジェクトの性質によって適応する見積もり技法が異なりますが、どの技法も取り出して使えるようにしておきましょう。 2) おすすめは「3点見積もり」 計算式)全体の所要期間=(楽観値+最頻値+悲観値)÷3 上記の3点見積もりは三角分布を適用していますが、最頻値のウエイトを高めたベータ分布公式 (楽観値+4×最頻値+悲観値)÷6(加重平均) を使用するケースも見受けますね。いずれの場合も適用する楽観値、最頻値、悲観値の各値の精度(信頼性・正確性)が大切です。特に根拠はないけどこれぐらい?と「置いた値」を公式に当てはめては、せっかくの見積もりも残念なものになってしまいます。どうしてこの期間を見積ったのか?という問いに対して「根拠」を持って説明できるようにしましょう。 各値の精度を高めていくには、専門家や有識者からのフィードバックや、見積もり対象アクティビティの性質をよく知っているプロジェクトチームメンバとのディスカッションなどが有効です。メンバとのディスカッションには、アジャイル開発手法である「プランニングポーカー(planning poker)」(チーム全員での各自が思う相対的見積もりを提示し、作業項目の規模を見積もる手法)を使ってみるのもいいでしょう。 3) 気をつけたいこと 見積もりをアクティビティ実行担当やチームリーダーに依頼するのもとてもよい方法ですが、特に自信がない担当者だと工数を多めにしたり、逆に根拠もなく少ない工数で出してくることもあります。勘や経験だけからくる見積もりも危険です。 PMはメンバが見積もった工数の根拠を「なぜそう考えたのか?見積もりの根拠は?」と尋ね、見積もりが妥当かどうかを判断するようにしてください。 さいごに 今回はスケジュールを作成する為の準備となるWBSでの要素分解や、アクティビティの順序や見積もり方法を整理していきました。 次回はこれらをINPUTとしてスケジュールを作成し、スケジュールをどのように使ってマネジメントするのかという部分に触れていきます。 連載一覧 【第1回】プロジェクトマネジメントとは何か?(連載初回全文公開中) 【第2回】プロジェクトマネージャーの役割とは? 【第3回】ステークホルダーマネジメントの重要性と進め方 【第4回】プロジェクトの統合マネジメント、7つのプロセス The post 【第6回】WBSだけでスケジュールはできない!正しいスケジュールの導き方[前編] first appeared on Sqripts .
こんにちは、そして初めまして、sakkyです。   私達は日々、短いものから長いものまで、色々な文章を書いていますが、文章を書くのを苦手に感じたり、なんだかイマイチしゃっきりしないと感じたり、記載の過不足があるのではないかと思ったりする事も多いのではないでしょうか?   私自身、要求仕様書から実装仕様に落とし込みをする時に、お客さんとの会話で認識していた事を書き忘れていてメンバーから「このパターンもあると思うけど、記載がない。どう動くべき?」と言われてハッとした事もあります。メンバーが気付いてくれなければ仕様漏れしたアプリをリリースしてしまう所でした。   また、「ちょっといい書き方が出来なかった気がするけど、理解は出来るよね?」と思って書いた部分について、「この書き方だと、処理中でも処理後でもいいように取れるんだけど、処理終了前に完了していないとダメなんじゃない?実際はどっち?」と、記載の曖昧さによる事実確認をされたりすることもありました。   最初から抜け・漏れや曖昧な記述を排除出来ていれば、発生しなかったやりとりで、相手に確認の時間を取らせる必要もなかったはずです。また、近くに居れば会話で済ませられますが、お客様とのやり取りやリモートワークでの遠隔でのやりとりとなると、確認の文章を考えたり、言われた事の意味を念の為に再確認したりと、やりとりが増えたりして余計に時間がかかってしまう結果となる場合が多々あります。(待ってる時間も勿体ないですよね) そこで、私が普段文章を書く時に、上記のような認識齟齬や問い合わせが発生しないようにする為に気を付けている事を洗い出し、その中からひとつピックアップしてどんな事をしているかをお見せしたいと思います。   文章を書く上で気を付けている事を洗い出す まず、自分が普段文章を書く上で気を付けている事(簡潔に、抜け・漏れなく、読みやすく、わかりやすく、認識齟齬をなくす)を、思いつくままにピックアップしてみます。 文体は統一できてる? 粒度は均一? 句読点多すぎない? 用語は統一できてる? この用語は通じる? 5W1Hにあてはめる 以上・以下・未完・超過を分けて使えてる? 曖昧な表現ない? もっと短く出来るはず! 分割した方が良くない? 纏めた方が良くない? 前後入れ替えたらどう? 箇条書きにする 表にする 図にする 対で考える 絶対に誤字・脱字はある! 見直し3回! 一晩寝かせる 印刷してみる 誰かに(部分的にでもいいので)チェックしてもらう 目次だけでも作ってみる 言いたい事を箇条書きにしてみる どうでしょう?   思ったより多いような、少ないような?   常に意識しているもの、気になった時や詰まった時だけ使っているものがありますが、今回は「5W1Hにあてはめる」に焦点を当ててみたいと思います。 5W1Hにあてはめる なぜ「5W1Hにあてはめる」を選んだかと言うと、文章を書く上で抜け・漏れのチェックに大いに役立つからです。   何度も色んな所で見聞きしている5W1Hは、 W hen(いつ)、 W here(どこで)、 W ho(だれが)、 W hat(なにを)、 W hy(なぜ)、 H ow(どのように)の、5つのWと1つのHの事です。   5W1Hを使うメリットで良く言われる事に「現在の状況を客観的に見る事ができ、頭の中が整理される。頭の中が整理される事により、改善や立て直しをやりやすくなる」、「5W1Hを使って情報を伝えると、相手との認識ずれを防ぐことが出来る」と言ったものがあり、まさに私が文章を書く時に気を付けている事にぴったりと当てはまる内容です。   書いた文章を5W1Hに当てはめて該当するものに対する記載の有無を確認する事により、記載する情報が必要十分であるか、抜け・漏れがあるかをチェックする事が出来ます。(客観視、認識ずれ防止) また、5W1Hにあてはめる為に文章を再確認し、過不足があればどのように文章を書き直すかを考える事になる為、より読みやすい文章へ書き換えるチャンスも増える事となります。(改善) さらに過不足がなくても5W1Hにあてはめた部分を眺めていると、並べ替えて読みやすく出来そうな事に気付く場合もあり、文章改善のチャンスが増えます。(重点的に見直ししているとも言えますね) では、実際にやってみましょう。 まずは、以下のような表を作ります。   手書きでも、Excel表を使っても、頭の中で思い浮かべるだけでも良いですが、慣れない内は書き出せるものがあった方がやりやすいと思います。(チェック項目は英語・日本語併記で作りましたが、いずれかだけでOKです) 項目 該当箇所 When(いつ) Where(どこで) Who(だれが) What(なにを) Why(なぜ) How(どのように) 次に、自分が書いた文章をそれぞれに当てはめてみます。   例として以下の文章を使ってみましょう。 データ投入者が商品情報を全て入力し終えたら[実行]ボタンを押します。全てのデータが正常に入力されていれば確認画面が表示されます。エラーがあればエラーメッセージが表示されます。」 最初に、文章を分割してみます。   まず大きく2つに分けられそうです。   入力する部分である「データ投入者が商品情報を全て入力し終えたら[実行]ボタンを押します。」と、チェック結果である「全てのデータが正常に入力されていれば確認画面が表示されます。エラーがあればエラーメッセージが表示されます。」です。   次に、前者について更に分割してみましょう。   データ投入者が|商品情報を|全て入力し終えたら|[実行]ボタンを押します。|   分割が終わったので、それぞれを表にあてはめてみましょう。   「データ投入者が」は、 “だれが” にあてはめられそうなので、Whoに入れます。   項目 該当箇所 When(いつ) Where(どこで) Who(だれが) データ投入者 What(なにを) Why(なぜ) How(どのように) 「商品情報を」は、 “なにを” にあてはめられそうなので、Whatに入れます。 項目 該当箇所 When(いつ) Where(どこで) Who(だれが) データ投入者 What(なにを) 商品情報 Why(なぜ) How(どのように) 「全て入力し終えたら」は、 ”いつ” にあてはめられそうなので、Whenに入れます。 項目 該当箇所 When(いつ) 全て入力し終えた Where(どこで) Who(だれが) データ投入者 What(なにを) 商品情報 Why(なぜ) How(どのように) 「[実行]ボタンを押します。」は、うーん、どこがいいでしょう?   なんとなく “どのように” にあてはめられそうな気がしなくもないので、仮であてはめてみます。 項目 該当箇所 When(いつ) 全て入力し終えた Where(どこで) Who(だれが) データ投入者 What(なにを) 商品情報 Why(なぜ) How(どのように) [実行]ボタンを押します あてはめた結果を考察する あてはめて見ると「Where(どこで)」と「Why(なぜ)」が埋まりませんでした。   ここで、あてはめられなかった部分に対する文章が必要であるか否かを考えてみます。   Whereは、暗黙の了解もしくは前段の文章で「現在表示中の画面」と言う言葉が隠れていそうです。   一連の流れで操作する画面にたどり着いていると思われるので、前の文章が想定通りに画面にたどり着けるようになっていれば明示しなくても良いと判断できます。   Whyは、最初の文章分割で大きく2分割した2ブロック目の実行ボタンを押した結果を見ると、データ投入者が投入したデータの正当性をチェックする為であると読めそうです。   文章が仕様書であれば正当性チェックを何故行うか、どのように行うかの文章が必要になりそうな気がします。ユーザーマニュアルであれば、文面から(エラーチェックが行われる事、)正常なら確認画面に遷移する事、エラーならエラーメッセージが出る事が記載されていて、暗黙のエラーチェックの実行と、結果による分岐がある事が分かる為、ケースバイケースで文章の追加を検討する必要がありそうです。   また、「[実行]ボタンを押します」のあてはめにちょっと困ってしまいました。   あてはめに困る部分がある場合は、文章分割が細かすぎたり大きすぎたりする事が理由になっている事もあるので、あてはめを中断して文章分割を見直してみるとうまくあてはめられる場合があります。あてはめられる場所を深く考えすぎずに一旦考え直すのも良いと思います。   こういった割り当てられなかったり、文章分割し直しした部分については、何回も5W1Hあてはめをやっていると何となくやれるようになって来たりもするので、うまく行かなくても多少強引にやってみるのが良いかなと思います。強引に行ったり、組み替える事により新たな気付きが発生するかも知れませんから。 考察をもとに文章の改善を考える 考察では、Whyの部分に当たる文章の要否検討をした方がいいと結論が出ました。   ここからが難しい所ではあるのですが、チェック対象文章をもう一度見てみます。 「データ投入者が商品情報を全て入力し終えたら[実行]ボタンを押します。全てのデータが正常に入力されていれば確認画面が表示されます。エラーがあればエラーメッセージが表示されます。」   試しに「データ投入者が商品情報を全て入力し終えたら[実行]ボタンを押します。」と「全てのデータが正常に入力されていれば確認画面が表示されます。エラーがあればエラーメッセージが表示されます。」の間に文章を入れてみましょう。   「[実行]ボタンを押した後、入力データのエラーチェックが行われます。その結果、」なんてどうでしょうか?   「データ投入者が商品情報を全て入力し終えたら[実行]ボタンを押します。[実行]ボタンを押した後、入力データのエラーチェックが行われます。その結果、全てのデータが正常に入力されていれば確認画面が表示されます。エラーがあればエラーメッセージが表示されます。 [実行]ボタンを押した後の挙動が明示されました。   再度、文章を読み直し、追加した部分があった方が良いのか、冗長なのか、別な表現の方が良いかと言った事を考えてみます。   それを繰り返し、よりよいと思う文章にしていきます。 おわりに 文章を分割して5W1Hにあてはめてみると、記載が必要なものの抜け・漏れが検出できる事が確認出来ました。   何かしっくりこない場所、記載が足りないと感じる場所で効果を発揮すると思いますので、やった事がない方は試してみると良いと思います。   また、慣れて来ると表を用意しなくても頭の中であてはめが出来るようになり、文章の記述スピードも上がって来ると思いますので、最初は苦労しても何回かやってみると良いと思います。 5W1Hは検索してみると色んな記事がすぐに見つかる位に有名で、色んな所に応用が効きます。   文章を考える時、チェックする時など、何回も活用していけば自然とその思考が身に付き、他に応用が効くようになると思いますので、継続的に実践してみることをおすすめします。   私の経験則ですが、文章は意識して書けば書く程、書き方が良くなっていきます。量が質になるパターンですね。   日報とかちょっとしたメッセージでも意識して書いてみると書く練習になりますので、気が向いた時にちょっとだけ意識を向けて文章を書いてみてください。   ふとした時に、文章を書く苦手意識が減っていたり、意識しなくても文章が良くなってるなと思う事があるようになると思います。   最後に、一言。   私は、この手のテクニックの紹介は、気になるものをちょっとつまみ食いしてみて、自分に合えば使えばいいし、合わなければ捨てればいいと思っています。   先にピックアップしたもので「お、これは使えそう」と思われるものがあれば、是非試してみてください。きっとどこかでプラスになります。   (「いやいや説明してもらわないと使えないよ」と言うものがあれば、また次回と言う事で…) The post 文章を書く時に気を付けている事(5W1H) first appeared on Sqripts .
会社や部署の1人目QAとしてJoinした場合、「このタスクをこなしてください」といった、やることが定まった状態とは限りません。 むしろQAに限らずその組織におけるそのロール1人目というのは、そのロールの役割や組織内の位置づけなどを自ら定めるところからのスタートになります。このことを、私は「仕事をつくる」と表現しています。 QAとして仕事をつくるには、開発組織の現状を把握する必要があります。単純にテスト業務を巻き取ったとしても、直後にはある程度バグが減るかもしれません。しかし、組織としてはそれで満足とはならないはずです。とくに正社員のQAとしてJoinしたのであれば、たとえば組織づくりや仕組み化などを通じ、1人目のQAがずっと手を動かし続けなくとも改善される状態を期待されます。 本記事では、このような仕組み化のための現状把握について、その手段と内容をご説明します。 これから組織に1人目のQAエンジニアを迎え入れようという方や、1人目QAとしてJoinする方に参考にしていただけると幸いです。また、いわゆるテスト会社に所属するQAエンジニアとして客先に入る方にもヒントとなる部分があると考えています。 <1人目QAとしての立ち回り 連載一覧> ※クリックで開きます 【第1回】1人目QAの位置づけと、開発組織へのアプローチの仕方 【第2回】組織に品質保証を浸透させるアプローチ 【第3回】品質保証やQAエンジニアを知ってもらうための取り組み 現状把握の方法 開発組織の現状を把握するためには、いくつかの方法があります。もちろんどれか1つというわけではなく、複数の方法を試したり、あるいは時間をあけて何度も行うことも必要になるでしょう。 直接ヒアリングをする まず考えられる方法は、直接ヒアリングをして話を聞くことです。とくに入社直後であれば、あいさつもかねて会話はしておいたほうが良いでしょう。 テキストチャットのみでのやりとりでも一定距離は縮まりますが、会話すること、それもできれば直接会うことの効果は大きいです。 世の開発者の中には、残念ながらQAエンジニアに対してネガティブな印象を抱いている人もいます。開発スピードが遅くなったり、重箱の隅をつつくような指摘をたくさん起票されてあまりおもしろくない、など理由はさまざまです。理由は何にせよ、これまで居なかったQAエンジニアが組織にやってきた、という状況はある程度心理的なバリアが張られている前提で行動するほうがよい、と考えています。 そのため、まずはビデオ会議なり、対面のMTGなりで直接話をすることからはじめましょう。 また、余裕があれば複数のロールや職位の方から話を聞くのも有効です。 開発部の部長から見た組織の現状と、開発メンバーから見た組織の現状とは多少の違いがあるものです。今後QAとしてなんらかの取り組みをするうえで、一方の視点だけで判断するとうまくいきません。複数の視点から組織の現状を捉えることが大切です。 ちなみに、開発組織の規模にもよりますが、世のQAの中には「入社後にエンジニア全員と1on1をしていろいろ話を聞いた」という猛者もいます。 アンケート調査を行う 直接ヒアリングする他に、アンケート調査を行って質問項目に回答してもらう、という方法もあります。 コミュニケーションや会話の機会としては効果が減ってしまいますが、組織に複数の開発部門・開発チームがあって、それぞれの違いや差を把握したい、といった目的に対してはアンケートも有効です。 また、アンケートで開発部門に対して行う質問を通じて、QAとしての考え方や価値観、組織をどうしていきたいのかなどの思いを伝えることにも繋がります。 『サーベイ・フィードバック入門』という書籍には、以下のように書かれています。 ・あなたの職場では、オープンにコミュニケーションできていますか? ・あなたの職場では、メンバー同士は信頼しあっていますか? 言うまでもなく、こうした質問項目を何度も問うこと自体が、「職場ではオープンにコミュニケーションすべきである」「メンバー同士は信頼しあうべきである」というメッセージを、暗に伝えているのです。 サーベイ・フィードバック入門 QAに置き換えて考えると、たとえば開発組織に対して「単体テストのカバレッジを計測していますか?」と問えば、それはカバレッジ計測が大事である・やりましょうというメッセージになります。 ただ漠然と「今どうなっていますか?」というアンケートを行うのではなく、伝えたいメッセージを意識した状態で調査項目を設計すると、より効果的なアンケートになるでしょう。 実際にチームで一緒に働く 現状について開発チームに聞くのではなく、チームの一員として実際に業務を行うことで、生の情報を得ることができます。とくにテスト等のQA活動における課題を体感するには、この方法が一番です。 入社直後のQAは、既存の仕組みやプロセスを最もフレッシュな目でみることができます。そのため、開発メンバーにとって「あたりまえ」になってしまっているけれども対応したほうがいいところ、などを見つけられるでしょう。 何を把握すればよいか ここまでは現状把握のためにやるべきことの説明でした。とくに意外なやり方はなかったかと思います。 ここからは開発組織の現状把握といったときに何を把握すればいいのかを説明します。 開発プロセスやテストプロセス まずは、既存の開発プロセスやテストプロセスについて知ることが大切です。 長く続いている開発チームなどではこのあたりが暗黙知になっていることもままあります。その場合は、QAが自身の把握のためにプロセスをドキュメント化するところから始めるのも有効です。手近なところからチームに貢献できますし、図などにプロセスを書き起こそうとするといろんな方から「実はここがプロジェクト規模によってやらないときもあってね・・・」などの追加情報が出てくることもあります。 そのようなチーム内での細かいルールなどを知る土台にもなるため、現状の開発プロセスやテストプロセスを知り、可視化することがオススメです。 理想・現実・問題・課題 現状把握の先で改善活動につなげることを考えると、当然開発チームの問題を把握することも必要です。 私がQA業務でよく使う図をご紹介します。 この図は、よく混同されがちな「問題」と「課題」の違いについて表した図です。 本記事では「現状把握」と表現していますが、知るべきなのは今の状態だけではありません。 開発者やマネージャーが考える、理想の状態とはどのようなものかを知ることも大切です。もしかしたら、理想が明確になっていないかもしれません。その場合は、QAがリードして一緒に理想と現実を明確にするのも良いでしょう。 そこで明確になった理想と現実とのギャップが、今の開発組織における「問題」となります。 そして、QAはそこから「課題」、すなわち理想と現実とのギャップを埋めるための施策を考え、行うという流れです。 この図に基づいて考えていくことで、各要素が整理され、かつ周囲とのすり合わせが行いやすくなります。 現状とれているデータ 開発組織における問題の把握とともに行うべきなのが、現状どのようなデータがとれていて、どのように管理・集計・公開されているか、です。 大きな目的としては、QAが開発組織での改善活動を進める際に、その効果を定量的に示すことです。昨今は4 Keys Metricsなどがよく知られていますが、品質についてもなんらかの指標に基づいて改善の取り組みを行うべきです。 指標としてはたとえば、障害発生件数やテスト期間、不具合対応工数などさまざまなものが考えられます。これらはその組織ごとに選択・検討するべきものなので、「これを測っておけばOK」という絶対的なものはありません。 ただ、避けなければならないのは「なんとなく」で改善活動を行うことです。 とくに1人目のQAは、その組織内での評価が固まっていない、いわば不安定な状態です。極端なことを言えば、「居てもとくにメリットを感じないよね」と思われてしまう可能性もあります。そのような事態を避け、見える形の成果を出していくには、定量的な成果を意識していくことが大切です。 そのために、現状とれているデータは何かを把握し、それを元に改善ポイントを検討するのがよいでしょう。 一方、1人目のQAが入った時点では品質に関するデータやメトリクスがとくに集計・公開されていない、ということも多々あります。この場合は、QAとしても「**が*%改善しました」といった説明ができないため、他の工夫をする必要があります。 私がこうした状況で鉄板だと思っていること、そしてまさに今行っていることとして、「現状を計測・可視化するための仕組みをつくる」ことがあります。つまり、今可視化できていないのであれば、可視化すること自体がひとつの成果である、という理屈です。 先にご説明したアンケート調査なども該当しますし、SCMなどの開発ツールからさまざまなメトリクスを取得することもできます。 こうしたデータ収集や可視化からスタートして、品質改善に取り組むポイントを選ぶことも1人目QAの仕事のひとつだと考えています。 開発組織の今を知るところから改善をスタートしましょう 本記事では、1人目QAが開発の改善やさまざまな仕組み化を行ううえで必要となる現状把握の方法や把握すべきことについてご説明しました。 とくに品質面で課題のある組織などでは、1人目のQAがJoinした直後は「とにかくテストを!」といった目の前のことに意識が向きがちです。これ自体はやむをえないことですが、長期的には目先のテストを行うだけでは、組織全体が良い方向に向かっていきません。 まずはQAとして、開発組織の今を知るところから始めて、少しずつでも改善を行っていきましょう。 連載一覧 【第1回】1人目QAの位置づけと、開発組織へのアプローチの仕方 【第2回】組織に品質保証を浸透させるアプローチ 【第3回】品質保証やQAエンジニアを知ってもらうための取り組み The post 【第4回】1人目QAのスタートは開発組織の現状把握から。やるべきこと・把握すべきこと。 first appeared on Sqripts .
こんにちは。MOです。 普段はお客様の情報システムサポート業務を中心にサーバリプレイス案件などに携わらせて頂いております。 今回はVMware Workstation Player上のゲストOSの移行案件の出来事をお話させて頂きます。 環境と作業の概要 今回、VMware Workstation 12 Playerの環境からゲストOS単位でのデータコンバートを実施し、VMware Workstation 17 Playerの環境へ移行を行いました。その際、ゲストOSに動的に割り当てられたIPアドレスを、固定のIPアドレスに設定変更( /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルの編集)しました。 ● 旧環境 VMware Workstation 12 Player ホストOS:Windows 10 Professional ゲストOS:CentOS 5.11 ● 新環境 VMware Workstation 17 Player ホストOS:Windows Server 2019 ゲストOS:CentOS 5.11 ● 実施した作業 Windowsネットワーク設定 VMware DHCP Serviceの停止 /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルの編集 問題の発生と原因の調査 上記移行作業後、ゲストOSの再起動をしてIPアドレスが固定化されたか確認したところ、指定したIPアドレスではなく動的に割り当てられたIPアドレスになる事象が発生しました。 原因追及をしたところ、ホストOSで「VMware DHCP Service」 の自動起動設定が有効になっており、VMware上のゲストOSを再起動した際に「VMware DHCP Service」も自動起動されて、動的にIPアドレスが割り当てられていたためでした。 上画面のように「VMware DHCP Service」の「スタートアップの種類」が『自動』になっている場合、VMware上のゲストOSを再起動すると「VMware DHCP Service」が自動起動され、ゲストOSに自動的にIPアドレスが割り振られてしまいます。この場合、IPアドレス固定化のためのに設定ファイルを編集しても「VMware DHCP Service」が有効である限り、こちらが優先されてしまいます。 解決策とその実行 IPアドレスが自動的に割り振られないために「スタートアップの種類」を「無効」にすることで「VMware DHCP Service」を自動起動させず、VMWare上にあるゲストOSのIPアドレスを固定化することができます。 また上記の作業をコマンドベースで行う場合は、下記コマンドでスタートアップの種類が変更できます。 ● 実行コマンド sc config "VMnetDHCP" start= disabled C:\\Windows\\system32 ”VMnetDHCP” start= disabled [SC] ChangeServiceConfig SUCCESS ※自動有効にする場合は「disabled」から「auto」を、手動にする場合は「demand」に変更します。 まとめ 今回はVMware Workstation Player環境化でのゲストOS移行でのお話をさせて頂きましたが、この他にもHyper-VやDockerなどのプラットフォームを利用したコンテナによる仮想化などもあります。 今後はますます仮想環境が普及していくと思いますので、より精度を高めていけるよう努めていきます。 The post VMware Workstation Player上のゲストOSのIP固定化について first appeared on Sqripts .
連載3回目となる今回は自動テストの成功基準の説明になります。 自動テストは実装したものの運用が続かず断念することが多いと感じます。目的を明確にして自動テストを導入したものの、その目的を達成できているとは思えないと感じることはないでしょうか。 「何が問題かわからないが運用が続かない」という場面に必要なものが自動テストの成功基準です。 < 自動テストはなぜ失敗するのか 連載一覧> ※クリックで開きます 【第1回】自動テストはなぜ失敗するのか? 【第2回】TestArchitect for Mobileの動作検証 【第3回】自動テストの成功基準|6つのポイントをチェックする 自動テストの目的と6つの成功基準 自動テストの目的 自動テストの目的はテストの効率化です。その目的を達成するためには運用時の実行回数を重ねることが必須です。自動化スクリプトを実行する運用フェーズで何回、何十回も実行することが自動テストの成功には必要です。 実行回数を重ねるためには「実行のしやすさ」「実行する価値」を考慮した自動テストの構造にしなければなりません。 効率化の効果の少ないテストの自動化、メンテナンス効率の悪い構造など実行しやすい運用を考えていない自動化システムでは実行が続かず自動化断念となってしまいます。 自動テストの失敗する多くの場合、自動テストの成功基準を持っておらず成行きで自動化の実装を行っていることが多いです。自動テストの長期運用を成功させるための基準を設け、その基準をクリアできるスクリプトの実装を行うことが成功に必要になります。 6つの自動テストの成功基準 私が考えた長期間で自動テストの運用が成功する基準は以下の6つになります。 手動に比べ30%以上の効率化/工数削減ができること 自動化が必要なテストが選別できていること 実行途中で処理が止まらないこと 実行結果の誤判定がないこと 実行から結果確認まで自動で実行出来ること メンテナンスの効率化の対策が入っていること 項目ごとに解説していきます。 1. 手動に比べ30%以上の効率化/工数削減ができること 効率化することが重要な目的であるため効率化の度合いは重要な基準になると考えています。30%以上と基準を置いたのはスクリプト作成工数を含めて、5回程度実行することで実装コストの元をとれることを想定しています。 実際にあった現場では1回あたり10%の効率化で自動化成功と考えていました。基準値を考えず成行きで自動化した結果、現状の数値で満足してしまっているパターンでした。1回あたり10%の効率化では10回程度実行しなければ、手動に比べて自動化が有効と判断できません。これでは十分自動化導入の効果が得られているとは思えず自動テストを導入する価値がありません。 30%を超えない場合、問題があると考えるべきです。この場合、使用している自動化ツールの機能が不十分で自動化できる範囲が狭いなどが考えらえます。そのため別の自動化ツールを検討する必要があります。 2. 自動化が必要なテストが選別できていること 自動テスト運用が断念する大きな要因は必要性の感じないテストを自動化することによる効果が薄く感じることにあります。運用フェーズで実行する価値のあるテストが自動化できていなければ、実行する必要性や効果が見られず実行すること自体が非効率となります。そのため必要なテストが自動化できていることは重要です。 簡単に自動化できるテストを抜粋し、自動化できる件数が多くすると考えていたプロジェクトがありました。結果的に仕様変更などでスクリプト修正が発生した際にコストをかけてまで実行する必要性がなく数回の実行で運用断念となりました。 何度も実行する価値のあるテストは何かを考えて、必要なテストを自動化することが自動テスト成功には重要な要素です。 3. 実行途中で処理が止まらないこと 途中でスクリプトの実行が止まってしまう場合、実行をやり直す必要が出てきます。夜間に実行する場合、途中で止まってしまうと再実行は次の日となり時間ロスが大きくなります。 時間ロスをなくすためには実行エラーを無くし、実行する件数が多くても最後のシナリオまで実行が止まらないようにする必要があります。そのためには実行エラーを無くすことだけでなく実行エラーが発生しても次以降のスクリプトが正常に動くような対策があることなどとるべき対策があります。 1件1件のスクリプトが正しく動いても100件、500件とまとめた件数を一度に実行することで実行エラーが発生する場合もあるためスクリプト実装時のテストはまとまった数の実行確認を行い、問題が発生しないか確認する必要があります。 4. 実行結果の誤判定がないこと 自動化することで効率化を行う場合は、再試験を行わないように実行結果の誤判定があってはなりません。誤判定が1件でもあれば自動テストの試験結果の妥当性が危うくなり、品質の低い自動テストと見られればテストとして存在意義がなくなります。 結果の誤判定は効率的にテストを進めるためには実装段階で解決しておく問題です。ツールによっては必要な結果確認ができないものもあります。そのようなツールは自動テストの考慮から外しておくべきです。 100回実行しても100回正しく実行するようなスクリプトにする必要があります。運用段階でこの問題が発覚するとやり直しが発生するためテスト実施の進捗に影響するため、実装段階の確認で問題を曖昧にせず必ず潰しこんでおかなければなりません。 5. 実行から結果確認まで自動で実行出来ること 実行から結果確認まで自動化することでテスト全体を効率化する必要があると考えています。そうすることで担当者の作業は実行前の準備と実行、結果の確認だけになり作業の効率化が実現できます。 結果確認を自動化せず、1件1件ログを見て結果確認するようなことは避けなければなりません。100件程度なら人間で対応可能ですが1000件、2000件となると人間で対応していると非常に大きな工数になります。工数がかかるという以前に作業が回せなくなります。 そういった状況に陥らないためにすべてのスクリプトの実行結果に確認処理を入れ、テストケースへ結果入力まで自動で行う仕組みを入れておく必要があります。結果確認の処理は自動化するうえで必須の処理です。必要な結果確認ができない自動化ツールはツールの選定で初めから候補を外しておく必要があります。 6. メンテナンスの効率化の対策が入っていること 仕様変更は必ず入ると想定し対策を入れ効率化を行う必要があります。処理の共通化がその対策になります。処理の共通化を行うことでスクリプト作成の効率化が行えるだけではなく仕様変更や処理追加など変更時の修正工数が大きく削減することができます。また初期処理での条件設定、変数定義なども共通化しておくとよいです。 処理の共通化は自動テストの基本です。 以上の成功基準の基準を作りその基準に沿って自動テストを実装することが必要です。しかし実装だけでは長期の運用に耐えうる自動テストができるわけではありません。実装後の振り返り、もしくは定期的な運用の改善などのタイミングで基準をもとに現状を確認することで問題の有り無しの区別ができます。 振り返り時の成功基準の活用 成功基準を使った導入後の振り返りの例を説明します。 過去に私が経験したプロジェクトで振り返り時にこの基準を使った時の考察結果です。 No 導入基準 結果 結果詳細 1 手動に比べ30%以上の効率化/工数削減ができること ◎ 40%~80%の効率化が可能 2 自動化が必要なテストが選別できていること 〇 必要な機能は最大70%自動化可能 3 実行途中で処理が止まらないこと △ 設定ミスで実行エラーが頻発 4 実行結果の誤判定がないこと △ 設定ミスで実行エラーが頻発 5 実行から結果確認まで自動で実行出来ること ◎ 一連の動作は全て自動化できている 6 メンテナンスの共通化の対策が入っていること ◎ 必要な対策は導入完了 成功基準と照らし合わせて考察してみた上記の場合、「 実行途中で処理が止まらないこと 」「 実行結果の誤判定がないこと 」の2点に問題があることがわかりました。要因を分析すると複雑な自動化システムの構造による設定ミスによる実行エラーが原因であることがわかりましたので、取るべき対策は設定ミスを減らすための「自動化環境の構造や設定項目の簡素化」が必要になります。実行担当者でのミスを減らすことで運用が改善できるため対策をとるべきであるということがわかりました。 上記のように成功基準があることで問題が具体的になり、目的に対してやるべきことが明確になりました。実装の際の基準だけでなく振り返りの際の基準としても使うことで、自動テストを成功に近づけることができます。 定期的に成功基準に基づいた振り返りを行い、目的に見合った自動テストになっているか運用で問題が発生していないかを確認すると良いです。 まとめ 目的を細分化した成功基準を作り、その基準をクリアできる自動テストの実装をすることが成功に必要なものです。成功基準があれば導入時のとるべき対策が明確になり、振り返り時に問題点が明確になります。自動テスト成功には必須なものといえるでしょう。 自動テストの実装はできたが運用が続かない場合、自動テストの成功基準をもとに自動テストの導入を行ってみてはいかがでしょうか。 連載一覧 【第1回】自動テストはなぜ失敗するのか? 【第2回】TestArchitect for Mobileの動作検証 The post 【第3回】自動テストの成功基準|6つのポイントをチェックする first appeared on Sqripts .