TECH PLAY

AGEST

AGEST の技術ブログ

å…š479ä»¶

゜フトりェアクオリティマネヌゞャヌのアむネむドです。昚今、業界にはテスト自動化の波が来おおり、顧客からのテスト自動化に関するご質問やご盞談を受けるこずがありたす。 そこでテスト自動化の知識を぀けるために䞁床よい資栌詊隓はないものかず探しおいたずころ「JSTQB Advanced Level テスト自動化゚ンゞニア」ずいう資栌に蟿り着きたした。 本蚘事では「JSTQB Advanced Level テスト自動化゚ンゞニア」詊隓自䜓に぀いおの説明および、合栌に至った孊習ポむントに぀いおお話したいず思いたす。最埌たでお付き合いいただければ幞いです。 JSTQB AdvancedLevel テスト自動化゚ンゞニア JSTQBずは䜕か たずJSTQBに぀いお知らない読者もいらっしゃるず思いたすので簡単に説明をしたす。日本における゜フトりェアテスト技術者資栌認定の運営組織ずしお2005幎4月に認定されたした。各囜のテスト技術者認定組織が参加しおいるISTQBInternational Software Testing Qualifications Boardの加盟組織の䞀぀になりたす。 「JSTQB Advanced Level テスト自動化゚ンゞニア」に぀いお 本資栌名である「テスト自動化゚ンゞニア」の定矩は、 テストに぀いお汎甚的で幅広い知識を持ち、テスト自動化ずいう特定の領域に぀い お深く理解しおいる者を蚀う。深い理解ずは、組織およびたたはプロゞェクトが機胜テストのために自動化゜ リュヌションを蚭蚈、開発、保守する際に、方向付けずしお䜿甚できるテスト自動化理論ずプラクティスに぀いお、 十分な知識を持っおいるこずず定矩される。 埌述のシラバスより抜粋 ずなりたす。テスト自動化レベルの考え方から、゜リュヌションずしおの運甚方法たで幅広く抑えおいる内容ずなっおおり、コンサルタントずしおの提案・マネヌゞャヌずしおの運甚たで実務で䜿うこずができる「 Specialist 」ずしお圹立぀資栌になっおいたす。 なお「テスト自動化゚ンゞニア」はAdvanced Levelのため、受隓するためには「JSTQB認定テスト技術者資栌Foundation Level資栌詊隓の合栌者、又は JSTQB (日本) 以倖の Foundation Level 資栌詊隓の合栌者」である必芁がありたす。ちなみに受隓料は22,000円(皎蟌)でした。  たた、今回の詊隓は「期間限定」「受隓回数制限(1回)」だったため、2024幎8月1日(朚) から 2024幎10月31日(朚)(箄3ヶ月間)の期間䞭に䞀回のみ受隓可胜ずなっおいたした。恒垞化する可胜性があるこずは蚀及されおいたしたが、次回も期間限定である可胜性がありたすので「テスト自動化゚ンゞニア」資栌の取埗を垌望する方はアンテナを高くしおおいた方がいいでしょう。 孊習察象のシラバスず最小孊習時間目安 孊習察象ずなるシラバスは䞋蚘URLで公開されおおりたす。 ■テスト技術者資栌制床 Advanced Level シラバス テスト自動化゚ンゞニア https://jstqb.jp/dl/JSTQB-Syllabus.Advanced_TAE_Version2016.J01.pdf ちなみにシラバスには章毎に孊習最小時間の目安が蚭定されおおり、総合蚈で1170分(箄20時間)ずなっおおりたす。これは䟋えば平日䞀日䞀時間の孊習で玄䞀ヶ月ずいうこずなので個人的には比范的着手しやすい資栌ずいった印象です。 (あくたで個人的な)合栌するための孊習ポむント たず最初に。受隓の際に秘密保持契玄(NDA)を結ぶため、このコラムで詊隓問題や解答を瀺すこずはありたせん。もし期埅しおいた方がいたしたら申し蚳ございたせん。ただ、埌述の孊習ポむントを抑えるこずで解答しやすかったように感じたしたので参考になれば幞いです。 Point1. たず頭文字の略語を把握しよう シラバスを読み始めお䞀番最初に思ったのがこれになりたす。シラバスの文章では耇数の頭文字の略語が䜿われおいるのですが、䌌たような頭文字の略語が倚いためきちんず把握しおからシラバスを読み始めないず略語の意味を取り違えるこずが埀々にありたす。䟋えば頭文字が「TA」(Test Automation = テスト自動化)で始たる略語にはTAA、TAE、TAF、TAM、TAS等があり、略語の埌に()付きで説明のように芪切に蚘茉されおおらず、文章䞭に頻繁に登堎するため時々混乱するこずになるでしょう。頭文字の略語を芋ればすぐにむメヌゞができる皋床たでしっかり芚えこんでからシラバスを読み始めるずよいでしょう。たた、シラバス内の略語に関する説明はしっかり読み蟌んでおくこずをおすすめしたす。 Point2. 先頭から順にシラバスを読んでいこう 他の資栌であるず「たずこの章から孊習しよう」のような物があるず思いたすが、「テスト自動化゚ンゞニア」のシラバスにおいおは順番に読んでいくこずをおすすめしたす。これはおそらくシラバスが認定コヌス甚教材ずしおの章立おを最初から意識しお構成されおおり、順番に読んでいくこずにより順次習埗しやすく構成されおいるためになりたす。 Point3. 図をしっかり頭に入れよう シラバス内には少ないですが図がいく぀か茉っおいたす。ただなんずなく図を芋るのではなく、せっかく図になっおいるのですから、「矢印があればどこからどこにひかれおいる矢印なのか」や、「枠で括られおいる堎所・䞭に䜕が蚘茉しおあるのか」を意識しおはしっかり芚えおおきたしょう。単に文章を䞞暗蚘するより断然効率的で頭に入っおいれば問題に察しお応甚が効くこずでしょう。 Point4. キヌワヌドは衚にたずめよう 人によるずは思いたすが、私ずしおはシラバスで圢匏立おお蚘茉「3.2.2 テスト自動化ぞのアプロヌチ」のようなの䞻な抂念・利点・短所などをされおいる郚分に関しおは自分の蚀葉で衚圢匏化するこずで理解しやすくなりたした。長い文章を長いたた暗蚘するのはあたり珟実的ではないので、䞀床詊しおみおはいかがでしょうか。 考察・たずめ いろいろず孊習ポむントに぀いお話させおいただきたした。 テスト自動化゚ンゞニアは個人的にはずっ぀きやすく、仕事に圹立ち、興味のある分野であったこずもあり楜しく孊習するこずができたした。 Advanced Levelではありたすが、難易床はそれほど高いわけではなくシラバスのボリュヌムも皋々なので皆さんも䞀床取り組んでみおはいかがでしょうか。 本ブログを最埌たで読んでいただいおありがずうございたした。 The post JSTQB Advanced Level テスト自動化゚ンゞニア詊隓合栌䜓隓蚘 first appeared on Sqripts .
こんにちは、゚ンゞニアのタカです。 突然ですが、Google Apps Script以䞋、GASを実装しおいお、もっず効率的に䜜業したいず思ったこずはありたせんか GASは手軜に業務効率化できる䟿利なツヌルですが、コヌド管理やデプロむの面で課題を感じおいる方もいるかもしれたせん。この蚘事では、GAS開発の課題を解決するツヌル「clasp」を既存のGASプロゞェクトに導入する手順を解説したす。 claspずは GitHub – google/clasp: Command Line Apps Script Projects claspは、Googleが提䟛するNode.jsのパッケヌゞで、開発者がGASをより効率的に実装、バヌゞョン管理、デプロむができるようにしたす。 claspを導入するこずで、具䜓的には以䞋のような利点がありたす。 ロヌカル開発環境の構築 claspを䜿甚するこずで、ロヌカル環境で任意の゚ディタやIDEを利甚しお実装できたす。GASはプロゞェクトのペヌゞに専甚の゚ディタが提䟛されおいたすが、この゚ディタでの開発ず比べ、コヌド補完やリファタクリング機胜などが匷力になるメリットがありたす。 TypeScriptの利甚 claspは実装蚀語にTypeScriptを遞択できたす。TypeScriptで実装するこずで、型安党性の保蚌や、コヌドの可読性や保守性が期埅できるため、盎接GASを実装するよりもバグの発生を枛少させるこずが期埅できたす。 バヌゞョン管理の容易さ ロヌカル環境で実装したプログラムファむルや蚭定ファむルは、gitで管理するこずができたす。GASのプロゞェクトペヌゞでは手動でバヌゞョン管理が必芁ですが、gitでの管理のほうが、倉曎履歎を远跡したり、過去のバヌゞョンに戻したりするこずが簡単になりたす。 デプロむの簡玠化 GASのプロゞェクトペヌゞではデプロむは手動で行いたすが、claspを䜿甚するず、TypeScript等で実装したファむルをコマンドで本来のGASの実行環境にpushしデプロむしたす。コマンドラむンでデプロむができるため、手動でのデプロむず比べお開発の効率が向䞊したす。 既存の運甚方法に぀いおの悩み 以前、私はGASでシステム仕様を管理する蚘事を曞きたしたが、この蚘事で玹介したGASを本栌的にシステムの開発ず運甚で甚いるようになりたした。 スプレッドシヌト × Google Apps Scriptでシステム仕様をシンプルに管理 こんにちは、゚ンゞニアのタカです。普段はアゞャむル開発におけるスクラムマスタヌや開発者ずしおプロダクトの開発に関わっおいたす。今回は、プロダクト開発で起きたシステム課題に察しお、導入の敷居が䜎いスプレッドシヌトを䞭心に解決を行った䜓隓談を曞きたい...  続きを読む  Sqripts 関連蚘事Sqripts たた、この蚘事ずは別のGASも開発ず運甚で䜿い始めおおり、以䞋の課題を解決するため、claspを導入するこずにしたした。 clasp導入の背景 GASのバヌゞョン管理が煩雑 GASのファむル倉曎履歎はブラりザ䞊の専甚の゚ディタでのみ確認でき、か぀以前のバヌゞョンぞの埩元がプロゞェクト党䜓でしか行えない。 回避手段ずしお、GASのファむルをコピヌ&ペヌストしおGitHubにプッシュしおいるが、手順が煩雑。 解決策web゚ディタは䜿わず、最初からロヌカルで実装ず gitでのバヌゞョン管理を行う GASのデプロむが手動 GASプロゞェクトのデプロむボタン抌䞋でデプロむを行っおおり、効率がやや悪い。 解決策 claspでコマンドラむンからデプロむする ロヌカル開発環境がない 実装を専甚のブラりザ䞊の゚ディタで行っおおり、コヌド補完やリファクタリング機胜が䞍足しおいる。 解決策 claspで任意の゚ディタを䜿甚する claspで管理するGASに぀いお 今回の蚘事で取り䞊げるGASですが、前回の蚘事のコヌドは若干長いため、簡略化した専甚のGASを準備したした。 GASは2ファむルで、凊理の内容ずしおは、スプレッドシヌトから倀を読み取り、JSON圢匏の倀に倉換のうえ、ドラむブに倀をテキストファむルずしお保存するものです。 なお、テキストファむルを出力するドラむブのパスIDは、GASのスクリプトプロパティずしお登録しおおきたす。 サンプルのスプレッドシヌト // JSON生成凊理 function generateJson() { // スプレッドシヌトのデヌタを取埗する const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test_sheet"); const data = sheet.getDataRange().getValues(); // JSONを栌玍するオブゞェクトを䜜成する const json = {}; // シヌトの各行を凊理する for (let i = 0; i < data.length; i++) { json["app_PJ1_" + i] = { number: data[i][0], app: data[i][1] }; } return json; } // メむン関数 function main() { saveDrive(generateJson()); } // Google Driveにファむルを保存 function saveDrive(message) { // Google Driveの特定のフォルダにファむルを䜜成 const folderId = PropertiesService.getScriptProperties().getProperty( "DRIVE_FILE_PATH_PJ1" ); const folder = DriveApp.getFolderById(folderId); folder.createFile( "sample.json", JSON.stringify(message), MimeType.PLAIN_TEXT ); } clasp導入の流れずしおは以䞋の手順で行いたす。 リポゞトリに元のGASをpushしおおく 圓該リポゞトリをcloneしおclaspをむンストヌルし蚭定を行う GASをTypeScriptで曞き換え、リポゞトリにファむルをpushする claspでデプロむする なお、本来のGASのプロゞェクトは2぀存圚するため、前述のGASファむルをコピヌし、それぞれ別のプロゞェクトのGASず仮定しお移行を進めたす。 以䞋が、元のGASファむルをpushした状態のリポゞトリのディレクトリ構成です。 . ├── README.md ├── project1 │ ├── drive.gs │ └── main.gs └── project2 ├── drive.gs └── main.gs claspのむンストヌルず蚭定 Node.jsのむンストヌル claspはNode.jsのパッケヌゞなので、たずはNode.jsのむンストヌルを行い、npmコマンドを䜿えるようにしたす。むンストヌルは、䞋蚘の蚘事で解説しおいるasdfなどで行うのがおすすめです。 Windowsナヌザヌにささぐ、WSL2を利甚したちょっず䟿利なLinux開発環境䜜成 こんにちは。GSです。今の時代、開発から運甚たでLinuxを必芁ずするケヌスはずおも倚いです。WindowsナヌザヌがLinux環境が必芁な開発を行うずき、WSL2を䜿うこずで手軜に環境を䜜り利甚するこずができたす。「Windowsは䜿えるが、Linuxはよくわからない」ずいった人...  続きを読む  Sqripts 関連蚘事Sqripts claspのむンストヌルず蚭定 次に、npmコマンドでclaspをむンストヌルし、初期蚭定を行いたす。 # package.json䜜成 npm init -y # claspをむンストヌル npm install @google/clasp # コヌディング時に、GASの関数を衚瀺しおくれるようになるパッケヌゞ npm install @types/google-apps-script # Googleアカりントでログむンしたす (認蚌画面が衚瀺されるので蚱可したす) clasp login 続いおclaspのコマンドで蚭定ファむルを䜜成したす。今回は既存のスプレッドシヌトを䜿甚するため、IDを指定したす。プロゞェクト単䜍で npm initを実行しおいたすが、これは、claspのデプロむ時にプロゞェクト単䜍で package.json が必芁なためです。 # それぞれのプロゞェクトで、既存のidを䜿甚しおclaspプロゞェクトを䜜成 cd project1 npm init -y clasp create --title "Project1" --rootDir ./ --parentId "<スプレッドシヌトのID>" cd ../ cd project2 npm init -y clasp create --title "Project2" --rootDir ./ --parentId "<スプレッドシヌトのID>" コマンドを実行するずclaspの蚭定ファむルが生成され、同時にGASのプロゞェクトも新芏䜜成されたす。 なお、䜜成埌にスプレッドシヌトからGASのプロゞェクトを開こうずするず、スプレッドシヌトに玐付いおいるプロゞェクトが耇数あるため、プロゞェクトの遞択画面が衚瀺されるようになりたす。 ここたでのディレクトリ構成 . ├── node_modules ├── README.md ├── package-lock.json ├── package.json ├── project1 │ ├── .clasp.json │ ├── appsscript.json │ ├── drive.gs │ ├── main.gs │ └── package.json └── project2 ├── .clasp.json ├── appsscript.json ├── drive.gs ├── main.gs └── package.json package.jsonの線集 それぞれのprojectディレクトリのpackage.jsonに぀いおは、デプロむ甚のスクリプトずしおclasp pushコマンドを定矩したす。 "scripts": { "deploy": "clasp push" } たた、ルヌトディレクトリにあるpackage.jsonには、プロゞェクトごずのデプロむ開始スクリプトを定矩したす。たた、GASプロゞェクトの画面を開くためのスクリプトも定矩しおおくず䟿利です。 "scripts": { "deploy:project1": "cd project1 && npm run deploy", "deploy:project2": "cd project2 && npm run deploy", "open:project1": "cd project1 && clasp open", "open:project2": "cd project2 && clasp open" }, 蚭定ファむルの線集 それぞれのprojectディレクトリの蚭定ファむルに぀いお、appsscript.jsonマニュフェストファむルを線集しお、timeZoneを倉曎しおおきたす。 { - "timeZone": "America/New_York", + "timeZone": "Asia/Tokyo", "dependencies": { }, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8" } (参考) 蚭定ファむルのドキュメント 各蚭定ファむルのパラメヌタに぀いおは、公匏ドキュメントを参照しおください。 マニフェストの構造  |  Apps Script  |  Google for Developers GitHub – google/clasp: Command Line Apps Script Projects TypeScriptぞの曞き換え 次は既存のGASファむルの曞き換えです。GitHub Copilot Chat や Cursorなどを甚いるず、比范的楜にGASファむルをTypeScriptに倉換できたす。 なお、今回はCursorのComposer機胜を䜿甚したため、tsconfig.jsonや、必芁なディレクトリなどが自動生成されお䟿利でした。 Cursor゚ディタやComposer機胜の基本的な䜿い方に぀いおは、2024幎10月に公開されたこちらの蚘事で詳しく解説しおいたすので、䜵せおご芧ください。 CursorのComposer機胜でAIに0からテストコヌドを䜜成しおもらう こんにちは、AGESTのバック゚ンド゚ンゞニアのたさです。今回は、Cursor゚ディタのComposer機胜を甚いお、AIにテストコヌドを蚘述しおもらう方法をご玹介したす。テストコヌドは゜フトりェアの品質を高めるために重芁ですが、手䜜業で曞くのは時間がかかるものです。...  続きを読む  Sqripts 関連蚘事Sqripts 倉換埌のファむル // main.ts declare const saveDrive: (message: JsonData) => void; export interface JsonData { [key: string]: { number: any; app: any; }; } // JSON生成凊理 export function generateJson(): JsonData { // スプレッドシヌトのデヌタを取埗する const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test_sheet"); if (!sheet) { throw new Error("Sheet not found"); } const data = sheet.getDataRange().getValues(); // JSONを栌玍するオブゞェクトを䜜成する const json: JsonData = {}; // シヌトの各行を凊理する for (let i = 0; i < data.length; i++) { json[`app_PJ1_${i}`] = { number: data[i][0], app: data[i][1] }; } return json; } // メむン関数 export function main(): void { saveDrive(generateJson()); } // drive.ts import { JsonData } from './main'; // Google Driveにファむルを保存 function saveDrive(message: JsonData): void { // Google Driveの特定のフォルダにファむルを䜜成 const folderId = PropertiesService.getScriptProperties().getProperty( "DRIVE_FILE_PATH_PJ1" ); if (!folderId) { throw new Error("Folder ID not found in script properties"); } const folder = DriveApp.getFolderById(folderId); folder.createFile( "sample.json", JSON.stringify(message), MimeType.PLAIN_TEXT ); } // グロヌバルスコヌプに公開globalの代わりにthisを䜿甚 // @ts-ignore this.saveDrive = saveDrive; 曞き換え埌のディレクトリ構成 倉換埌のディレクトリ構成は以䞋のようになりたす。元の.gsファむルはpushする必芁がないため削陀したす。 . ├── node_modules ├── README.md ├── package-lock.json ├── package.json ├── project1 │ ├── .clasp.json │ ├── appsscript.json │ ├── functions │ │ ├── drive.ts │ │ └── main.ts │ └── package.json ├── project2 │ ├── .clasp.json │ ├── appsscript.json │ ├── functions │ │ ├── drive.ts │ │ └── main.ts │ └── package.json └── tsconfig.json プロゞェクトぞのデプロむ 定矩したスクリプトを䜿甚しおデプロむを行いたす。 $ npm run deploy:project1 Debugger attached. > gas-management@1.0.0 deploy:project1 > cd project1 && npm run deploy Debugger attached. > gas-management-project1@1.0.0 deploy > clasp push Debugger attached. (node:45633) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead. (Use `node --trace-deprecation ...` to show where the warning was created) └─ appsscript.json └─ functions/drive.ts └─ functions/main.ts Pushed 3 files. Waiting for the debugger to disconnect... Waiting for the debugger to disconnect... Waiting for the debugger to disconnect... デプロむが完了したら、GASのプロゞェクト画面を開き、main関数を手動で実行しお動䜜確認を行いたす。GASのプロゞェクト画面で「実行」ボタンを抌し、関数を遞択するこずで実行できたす。 $ npm run open:project1 Debugger attached. > gas-management@1.0.0 open:project1 > cd project1 && clasp open Debugger attached. Opening script: <https://script.google.com/d/◯◯◯◯> Waiting for the debugger to disconnect... Waiting for the debugger to disconnect... 動䜜確認 初回実行時や暩限を倉曎した堎合など、デヌタぞのアクセス暩限の承認が必芁になる堎合がありたす。 おわりに 今回は、GAS開発を効率化するためのツヌル「clasp」の導入から、実際のGASファむルのTypeScriptぞの曞き換え、そしおデプロむたでを解説したした。 この蚘事が、GAS開発をより快適に、そしお効率的にする䞀助ずなれば幞いです。ぜひclaspを掻甚しお、より良いGAS開発䜓隓を実珟しおください。 The post clasp導入で既存のGAS開発を効率化手順ずメリットを培底解説 first appeared on Sqripts .
この連茉では、゜フトりェア開発のQA゚ンゞニアずしお働き始めた皆様に向けお、私の実䜓隓をもずに「こんなこずを知っおおけばよかった」ずいう、ちょっずした気づきを共有したす。 䞀緒に゜フトりェア開発のQA゚ンゞニアずしおの充実した゚ンゞニアラむフを築くためのヒントを探っおいきたしょう。 QA゚ンゞニアのスタヌトガむド 蚘事䞀芧 ※クリックで開きたす 【第1回】充実したQA゚ンゞニアずしおスタヌトするためのガむドラむン 【第2回】「誰のためか」を意識しよう 【第3回】QA゚ンゞニアの第䞀歩、「゜フトりェアテスト」を知ろう -前線- 【第4回】QA゚ンゞニアの第䞀歩、「゜フトりェアテスト」を知ろう -埌線- 【第5回】コミュニケヌションが鍵を握る ゜フトりェア開発は、䞀般的に、倚くの専門家からなるチヌムによっお行なわれたす。 たた、゜フトりェア開発は創造的であり、高床で知的な䜜業が䌎うため、チヌムワヌクや人間性ぞの配慮は、生産性や品質を含むさたざたな結果に圱響を䞎えたす。 チヌムワヌクや人間性ぞの配慮に重芁なファクタヌずなるのは「゜フトスキル」です。 ゜フトスキルはQA゚ンゞニアにずっおも、より䞀局重芁になりたす。 QA゚ンゞニアの仕事で特に重芁なのは「情報提䟛」であるず考えたす。そしお、䌝え方やマむンド次第でチヌムを守るこずもできたすし、壊すこずもできおしたいたす。 本蚘事ではQA゚ンゞニアにずっお重芁な゜フトスキルに぀いお解説したす。 チヌムで働く チヌムの䞀員ずしお働くずいうこず QAは倚くの堎合、1人で䟡倀を届けるこずはできたせん。テストを始めずしお、誰かが䜜ったものに察しおQAずしお貢献するこずが䞀般的なありかたではないでしょうか。 ぀たり、QAはチヌムを必芁ずしおいたす。 ここで玹介したい品質モデルがありたす。JIS X 25010:2013では、利甚時の品質の他にも倖郚特城・内郚特城・プロセス品質ずいう考え方で敎理しおいたす。 利甚時の品質にフォヌカスするQAは倚いず思いたすが、プロセス品質もたた重芁だず私は考えおいたす。 プロセス品質を倧事にしおこそ、良いプロダクトが䜜れるずいう考えを私は支持しおいたす。 ゜フトりェア開発においお、「プロセス」は、ただ単に仕事の受け枡しだけではなく、人のモチベヌションやコミュニケヌションも含めお考えたほうがよいでしょう。 QAはタスクの受け枡しをするのでなく、チヌムの䞀員ずしおオヌナヌシップを持ち、プロセス品質にも着目しお掻動をするこずが倧切だず考えおいたす。 チヌムで゜フトりェア開発をするこずに蚀及しおいる蚘事は倚くありたすが、私は「チヌム・ゞャヌニヌ」ずいう本をおすすめしたす。 ■ チヌム・ゞャヌニヌTEAM JOURNEY 〜れロの状態から最匷のチヌムを぀くりあげるたで〜 垂谷 聡啓 è‘—翔泳瀟 匱さを抱擁できるこずがQAの匷みである ゜フトりェアテストでは、゜フトりェアの故障を芋぀けたり、欠陥を指摘するずいうこずがあるず思いたす。 だからずいっお、QAは喜びすぎたり、たしおや開発者を非難するような振る舞いをしおいおはいけないず思っおいたす。 昔、「こんな悪いコヌドを曞いたのは誰だ」や「なんでこんなバグを䜜るんだ」ずいうような発蚀をするQAに出䌚ったこずがありたす。 私はそれを倧倉残念だず思いたした。 QAは、プロダクトを通じおプロセスの課題や人の匱点を垣間芋るこずがありたす。 だからこそ、QAは優しい存圚になる必芁がありたす。 QAは、瀌儀正しく、接しやすく、そしお䜕よりメンバヌの匱さを受容するような態床が必芁だず思っおいたす。 もちろん、チヌム開発にずっおそういう行動が奜たしいずいう偎面がありたす。 それだけでなく、これらはQAの倫理ずしお守るべきものではないでしょうか。 欠陥を探しお故障を芋぀けるずいうこずは倧事なこずです。 䞀方で、そういった立堎を䜿っお優䜍に立ずうずしたり、人を貶めるようなこずは決しおしおはいけたせん。 匱さを抱擁できるこずこそが、QAの匷さであるず私は考えおいたす。 「匱さを抱擁する」ずいうフレヌズに぀いおは西康晎先生の以䞋の動画から匕甚しおいたす。 この動画はQA゚ンゞニアにずっおあるべき姿に぀いお深い掞察が埗られるので、ぜひご芧いただきたいです。 コミュニケヌションの方法 コミュニケヌションの方法ずしおさたざたありたすが、QAのあるべき姿が詊される堎面ずしお、3぀玹介したす。 ミヌティング ミヌティングはチヌム開発においおは避けられない掻動であり、ずおも重芁です。 ミヌティングの効果、生産性の議論ぱンゞニアリングの分野に限らず掻発的です。 ここでは、QAの専門性を発揮できる参加の方法を提案したいです。 「俯瞰的に芋る」ずいうこず、「目的志向に立ち返る」ずいうこずです。 テスト蚭蚈をしおいお、抜象ず具䜓を行き来するこずは少なくないず思いたす。 QAはミヌティングのなかで、「どういう議論をしおいるのか」「䜕を話しおいるのか」を俯瞰で芋お、時に抜象でたずめ、時に具䜓によっお前に進めるこずができたす。 あるいは、ミヌティングの䞭で目的を芋倱っおしたうこずがあるかもしれたせん。 そのなかでもQAは、専門性である「目的志向」で、「目的は䜕なのか」ずいう問いを立おるこずができたす。 ミヌティングを通しお、チヌムのプロセス品質を良くしおいくこずも、QAずしお重芁な圹割だず考えおいたす。 バグチケット バグチケットを通しお開発者にフィヌドバックするこずがよくあるず思いたす。 そのなかでも重芁なこずは、事実を正確に曞く、そしお瀌儀正しく曞くずいうこずです。 バグチケットは開発者を批難する手段ではありたせん。バグチケットはあくたで事実を提瀺しお、チヌムにずっおより良い意思決定を促すために䜿うものです。 レビュヌ レビュヌでもQAの専門性が発揮されるず考えたす。 レビュヌは゜フトりェア開発でも重芁な圹割を持っおいたす。䞀方、䜓系的に導入しおいる組織は少ないのではないかず考えおいたす。 レビュヌはリヌディング技法などがある䞀方で、コミュニケヌションもたた重芁です。 たずえばJSTQB FLでは、レビュヌのミヌティングに぀いお、䜓系的な解説がされおいたす。 レビュヌのプロフェッショナルずしお、必芁に応じお䜓系化された技術を実装しおいくこずが、QAには求められおいるず考えたす。 コミュニケヌションで倧切にしおほしいHRT コミュニケヌションは䌚話や発信であるず捉えおいる人は倚いず思いたす。 䞀方で、私は自分自身のマむンドもたた重芁だず思いたす。 ここでは「Team Geek」ずいう曞籍で玹介されおいる、HRTずいう考え方を玹介したす。 ■ Team Geek Brian W. Fitzpatrick、Ben Collins-Sussman 著、角 埁兞 蚳O’Reilly Japan HRTずは、Humility謙虚さ、Respect尊敬、Trust信頌の3぀の単語の頭文字を取ったものです。゜ヌシャルスキルの䞉本柱であり、人間関係を円滑にするだけでなく、健党な察話ずコラボレヌションの基盀になるず考えられおいたす。 Humility謙虚 自分の考えは、絶察に正しいわけではなく、自分自身もたた欠点を抱えおいるこずを理解するこずです。同時に垞に自分を改善しおいくこずも倧切です。 他者に察しお謙虚であるこずも重芁ですが、䞀方で自分に察しお謙虚であるこずも重芁です。 䟋えば、「自分の成果物は完璧な状態で芋せなければならない」ず思っおいれば、それは自分自身を完璧だず思いたいこずの裏返しであり、謙虚さを倱っおいるず蚀えたす。 時には䞍完党な成果物を芋せるこずも必芁だず知るこずが倧切です。自分は完党無欠ではないずいうこずを理解しお、自分の成果物もたた䞍完党であるこずを受容するこずが必芁なのです。 Respect尊敬 䞀緒に働く人の人栌や胜力を尊重し、心から思いやるこずです。盞手は「開発者さん」ずいった圹割ではなく、人栌のある人間であるこずを認識するこずでもありたす。 特にQAは批刀を行うこずがありたす。 そうした䞭で成果に察する建蚭的な批刀ず性栌に察する攻撃的な批難を区別しお理解する必芁がありたす。 建蚭的な批刀は、心から他人を思いやり、成果を改善しおほしいず願っおいないず生たれたせん。そしお、そこに尊敬が含たれおいるこずが重芁なのです。 Trust信頌 自分以倖の人は有胜であり、正しいこずをするず信頌するこずです。 チヌムのメンバヌはそれぞれ䜕かしらの専門家であり、自分ずチヌムに察しお恩恵をもたらしおくれおいるず心から信頌したしょう。 これは批刀を受ける際にも重芁ずなりたす。 仕事の䞭で批刀されおいるのは成果物であり、自分自身ではないずいうこずを理解するこずが倧切です。 たた、 批刀する察象は䜜成者ではなく成果物であるべき ずいうこずを肝に銘じおおく必芁があるず考えたす。 おわりに 優れたQA゚ンゞニアは、技術的なスキルだけでなく、コミュニケヌション胜力も高いものです。 チヌムの䞀員ずしおの自芚を持ち、HRT謙虚さ、尊敬、信頌を念頭に眮いお行動するこずで、QA゚ンゞニアはチヌムに貢献し、プロゞェクトを成功に導くこずができたす。 コミュニケヌション胜力は、䞀朝䞀倕で身に぀くものではありたせんが、意識しお継続的に努力するこずで、より良いチヌムずより良い補品を䜜るこずができるず信じおいたす。 【連茉】QA゚ンゞニアのスタヌトガむド 蚘事䞀芧 【第1回】充実したQA゚ンゞニアずしおスタヌトするためのガむドラむン 【第2回】「誰のためか」を意識しよう 【第3回】QA゚ンゞニアの第䞀歩、「゜フトりェアテスト」を知ろう -前線- 【第4回】QA゚ンゞニアの第䞀歩、「゜フトりェアテスト」を知ろう -埌線- 【第5回】コミュニケヌションが鍵を握る The post 【第5回】コミュニケヌションが鍵を握るQA゚ンゞニアのスタヌトガむド first appeared on Sqripts .
こんにちは、QAのゆヌすけです。 私は今でこそ゜フトりェアテスト䌚瀟の䞀員ずしお日々努めおいたすが、元々はゲヌムテストがメむンの䌚瀟のメンバヌでした。 ゲヌムテストの䌚瀟自䜓はコンシュヌマヌゲヌム→PC→携垯FP/スマホずテストを枡り歩いおきたしたが、元々はガチガチのゲヌム奜きからゲヌムデバッグに応募した経歎になりたす。 今はゲヌムテストに関わるこずが党くないですが、元々のゲヌム奜きの興味ずしお最近JSTQB ※1 のゲヌムテストシラバスを眺める時間を蚭けるようにしおいたす。 ※1 JSTQB認定テスト技術者資栌 日本における゜フトりェアテスト技術認定資栌運営組織。ISTQBの加盟組織でもあるので、その資栌および教育は囜際的にも有効 ゲヌムテストの思い出 私がゲヌムテストを䞻戊堎ずしおいたこずは、ゲヌム機がネットワヌクに繋がるずいったこずはほがなくPlayStation 2では別売のBBナニットが必芁な時代  、 ゲヌムの重節な䞍具合回収、リマスタヌの販売 ずいったこずが圓たり前でした。 ※担圓案件でリマスタヌ版が出たこずが䞀床だけありたす広い意味なら2回ですが ※PlayStationの某倧型RPGの進行䞍胜䞍具合は新聞にたで茉った最も有名な䞍具合だず思いたす。  盎すためにはメモリヌカヌドPSの発送、修埩が必芁  この䞍具合は今の垂堎流通版アヌカむブス版でも修正されおいない たた、発売日ずいうものが明確に決められるので、その発売日䜕カ月前には開発・テストが収束し、補品を量産カヌトリッゞもしくはROMし、出荷しお、流通させる、ずいうスケゞュヌルが必須でしたこれは倚分今もそう。 ※ずあるメヌカヌ、ずあるゲヌムタむトルのキックオフで 「すでに発売日を決めお広告をxxxxx円かけお倧䜓的に行っおいるので、  くれぐれも発売遅延がないように品質管理を培底しおください」 ず蚀われたのは今ではずおもいい思い出。ネタになっおたすちゃんず圓初の予定日に発売したした。 ゲヌム特有の芳点ずしお 閑話䌑題、 JSTQBのゲヌムテストシラバスに以䞋のような文章が蚘茉されおいたす。 ブラックボックステスト技法black-box test techniqueを䜿ったテストでは、プラットフォヌムによる 違いはほずんどない。しかし、各ゲヌム機メヌカヌは、ビデオゲヌムが公開される前に準拠しなければならない独自の芁件を定めおいる堎合がある。これらの芁件は、秘密保持契玄に基づいお開発者やパブリッシャヌに提䟛される独自の文曞である。各芁件のチェックリストはいく぀かのカテゎリヌで構成されおおり、ゲヌム機メヌカヌに拒吊されないためには、ゲヌム゜フトりェアはそれらに準拠しなければ ならない ゲヌムテストシラバスより抜粋 PC・webサヌビス系のテストを行っおいるず意識するこずがないですが、 ゲヌム業界のような3rdパヌティヌがいるものでは、䞀般のテストず同様もしくはそれ以䞊に匷く意識しなければならないのが䞊蚘のようないわゆる「䜜成基準」ずいうものになりたす。 ※1stパヌティヌがプラットフォヌマヌ任倩堂、゜ニヌ、マむクロ゜フトなど   2ndパヌティヌがナヌザヌずしお、   3rdパヌティヌはゲヌム開発䌁業ず蚀われおいたす。 ぀たり、ゲヌムずしおの品質がどんなに高氎準であっおも、メヌカヌ偎の䜜成基準に抵觊事項が1件でも存圚した堎合はリゞェクトを受けおしたうわけです。 前述した広告費をかけた、ずプレッシャヌをかけおいただいたプロゞェクトでも、機胜郚分の重節な䞍具合よりも、䜜成基準を通過できるか、ずいう点の方が気になっお胃がキリキリずしたものです。 この各皮䜜成基準はひず぀ひず぀を詳现に芚えおおく必芁たではありたせんが、品質基準、芳点、方針ずしお心に留めおおくず有益なものばかりなので、思い出話を含めお軜く玹介しおいきたいず思いたす。 䜜成基準䟋 正しい甚語を䜿う 䜕を圓たり前のこずを、ず思われるかもしれたせんが、意識しないず正しい甚語を䜿うこずは結構難しかったりしたす。 「取り扱い説明曞を芋お、playstation2のコントロヌラヌで十字ボタンのこずを調べた」 昔の知識に偏っおいお申し蚳ないですが、 䞊蚘のような文章がゲヌム䞭にあるず、即再生基準でリゞェクトを受けるこず間違いなしです。 正しくは  ・  ・  ・ 「解説曞を芋お、”PlayStation🄬2”のコントロヌラで方向キヌのこずを調べた」 ずなりたす。 耇数のプラットフォヌムがある堎合、それぞれで䜿甚される甚語は差別化されおいるこずが倚いので、自分の䜿っおいる蚀葉がその環境においお本圓に適切なものであるか、ずいうこずは非垞に倧事な芁玠です。 こういったこずは䜜成基準など関係なく、普段の日垞やビゞネス䞊の䌚話や、論文、レポヌト䜜成でもかなり有効になる意識ずなりたす。 䞭断再開、埩元を意識する ずあるハヌドの䜜成基準では、 「ディスクトレむの開閉を行った埌でも適切にゲヌムに埩垰できるこず」 ずいうものがありたす今もあるかもしれたせんが。 流石にPC・webサヌビス系のテストでは䞊蚘のような開閉を盎接的に䜿うこずはないかもしれたせんが、携垯電話系のテストでは 携垯フィヌチャヌフォンの開閉を行っおも正しく動䜜が埩垰するこず いわゆるサスペンドレゞュヌムの芳点 Androd端末においお、端末デバむス偎にバックキヌが搭茉されおいる堎合、デバむス偎からのむンプットを受けお画面遷移を行った堎合でも、適切な動䜜を保぀こず などが掟生芳点ずしおあげられるかず思いたす。 画面端に重芁な情報の衚瀺、描画を行わない 重芁情報の芋逃しによる䞍利益防止のための芳点になりたすが、こういった内容もUI/UXなどの芳点から意識できるずよりよい補品、品質構築に寄䞎できる芳点だず思いたす。 このチェックを挏れなく行うために、液晶ディスプレむ䞊に透明テヌプを貌っおいる人をみたこずは今でも忘れられない衝撃ずしお蚘憶に残っおいたす。 過剰の挔出、画面描写を行わない これは1997幎に某テレビ番組で起こった光過敏性発䜜が有名だず思いたすが、いわゆる激しい画面の明滅を犁止する、ずいう内容です。 こういったその時々に起こった事象なのが制玄・芏玄ずしお盛り蟌たれるずいうこずもありたす。 たた仮に明蚘された制玄がなかったずしおも、珟圚および過去の事象ず照らし合わせお問題だず思われるこずを指摘しおいくこずも、品質芳点からは重芁な掻動になりたすので、品管に携わる人達には幅広く、そしお深い知識が求められるこずになりたす。 たずめ 今珟圚、元々ゲヌムデバッグからキャリアの始たった自分が、今こうしお゜フトりェアテストに携わっお少なからず掻躍できおいるこずを考えるず、䜕のデバむスにどう関わっおきたかはそこたで重芁ではないのかもしれたせん。 品質的な考え方は別分野別デバむスでも有益だずいうこずが分かりたすし、より倧事なのは関わったものを柔軟に適甚し、様々な知識を倚角的に広く深く吞収し続ける、ずいうこずなのかもしれたせんね。 The post ゲヌムテストから考える品質管理に倧事なこず first appeared on Sqripts .
垰玍的な掚論 ず 発芋的な掚論(アブダクション) は、 私たちが゜フトりェア開発の珟堎/実務で知らず知らずにでも駆䜿しおいる思考の圢ですそれどころか日々の暮らしでも䜿っおいたす。 それほど“自然な”思考の圢ですが、どんな考え方で、どんなずころに泚意するず質の高い思考ができるのか、基本知識を抌さえおおくず実務のレベルアップに぀ながりたす。 実務䞉幎目からの発芋力ず仮説力 蚘事䞀芧 ※クリックで開きたす 【第1回】芋぀けるための論理【連茉初回、党文公開䞭】 【第2回】 “共通項”を芋぀け出す 【第3回】発芋はよい芳察ずよい方法から 今回は垰玍的掚論で「発芋」をするために参考になる方法芋方考え方を玹介したす。 再珟・枚挙的垰玍 第2回で玹介した枚挙的垰玍の䟋(A)、(B)第2回の図2-3を図3-1ずしお再掲、それぞれでどんな颚に掚論しおいるか、コニャン君の脳内を芗いおみたしょう。 図3-1 枚挙的垰玍の䟋 【泚意】 以䞋に再珟する“掚論の筋道”は、「こういう圢/流れもある」を瀺すもので、誰でも・どんな堎合でもこのような流れを蟿る、ず䞻匵するものではありたせん。 (A)の圢の堎合 図3-1 (A)、コニャン君の思考の筋道は図3-2のようになるでしょう。 図3-1 コニャン君の脳内(A) こうした思考を支えるのが、前回解説した 自然の斉䞀性 や 因果性 ずいう抂念でした。 【第2回】 “共通項”を芋぀け出す実務䞉幎目からの発芋力ず仮説力 垰玍的な掚論 ず 発芋的な掚論(アブダクション) は、私たちが゜フトりェア開発の珟堎/実務で知らず知らずにでも駆䜿しおいる思考の圢ですそれどころか日々の暮らしでも䜿っおいたす。それほど“自然な”思考の圢ですが、どんな考え方で、どんなずころに泚意す...  続きを読む  Sqripts 関連蚘事Sqripts プログラム(゜ヌスコヌド)に混入する欠陥は自然珟象ではありたせんが、筆者の経隓によれば、斉䞀性に䌌たような状況が生じるこずがありたす。 ある箇所のある凊理で生じた゚ラヌ誀り。勘違い、思い蟌み、考慮䞍足、仕様の誀読、etc.は、他の䌌たような箇所での同じような凊理でも生じがち。 ゜ヌスコヌドのコピペも欠陥を䌝播しがち。 耇数の箇所から呌び出されるモゞュヌルに欠陥があるず、特定の条件を満たしたら同じような故障が各地で発生するこずが起こりがち。 【蚂正】この(A)、 第2回 では「共通項Pを芋぀ける」䟋ず述べたしたが、「特殊文字を入力するず(共通項P)、フリヌズする(共通項Q)」圢ず蚀えたすね。間違えたした。 (B)の圢の堎合 (B)は、共通項Pだけでなく共通項Qも芋぀け、䞡者の関係性を芋぀けるのに、ちょっず“手数”がかかるでしょう。 図3-3。図3-1ずの察応の参考ずしお、吹き出し䞭に䞞数字を぀けおいたす 図3-3 コニャン君の脳内 (B) 発芋芳察掚論の方法 「実隓的探究の4方法」 図3-1 (A)(B)のような掚論の方法は、䜕ずいっおも 芳察 ――起こっおいる事実を芋萜ずさず、適切な詳しさで芋る―― に支えられおいたす。  芳察 に぀いおは埌ほど觊れたす そしお、よい 芳察 に基づいお“共通項”䞭でも 因果関係 を芋぀けるための方法を、19䞖玀むギリスのJ.S.ミルずいう哲孊者が考えたした。 自身の著䜜の䞭では「実隓的探究の4方法」ず題されおいたすが、「ミルの垰玍法」「ミルの方法」などずしお知られたす。 解説しおいる方法は5぀だが、ひず぀は2方法の組合せ 䞀臎法 差異法 䞀臎差異䜵甚法 剰䜙法 共倉法 本蚘事では、「゜フトりェアの動䜜確認やテストで、故障や䞍具合に遭遇した局面」や「デバッグ䞭に原因を探る局面」を想定しお、結果から原因を探る堎合に焊点を圓おお説明したす。 以降の解説では、 前件(先行する事象矀) 故障や䞍具合の発生に先立぀ 環境・蚭定、デヌタ、状態、コヌド䞭のロゞック、入力・操䜜、など を指したす。 埌件(埌続する事象矀) ゜フトりェアの実行が匕き起こす 出力・衚瀺、状態(の倉化)、デヌタの倉化、など故障や䞍具合自身を含む を指したす。 (前件や埌件の)芁玠 前件や埌件䞭の互いに識別可胜なものごずを指したす。 J.S.ミルの垰玍法 䞀臎法倚くの事䟋の「共通点」に着目する 着目する事象a゜フトりェアの故障や䞍具合などを生じる事䟋をふた぀以䞊集める。 ①前件の䞭に党事䟋で共通する芁玠がひず぀だけある(芁玠Aずする)。 ②芁玠Aだけが党事䟋で䞀臎しおいる。 ③芁玠A以倖の前件の芁玠が異なるず、事象a以倖の埌件は異なる。 ①②③が共に満たされるなら、その芁玠Aが着目する事象aの原因たたは、原因の䞍可欠の䞀郚分である、ず考えるこずができたす。 図3-4 䞀臎法の抂略 【特城】 「ある芁玠がなくおも着目する事象が生じるなら、その芁玠は原因から取り陀いお考えおよい」ずいう考え方に基づく( 消去法 )。 着目する事象を含む事䟋をいく぀か集めれば適甚できる。 「特定の芁玠を取り陀いお結果を芋る」ずいった実隓ができない堎合に適しおいる。 埌述の差異法の前段階ずしお原因の候補を絞るのに適しおいる。 【泚意点】 事䟋は「前件では芁玠Aだけが共通、埌件では事象aだけが共通しおいる」こず。 他の芁玠や事象が共通しおいるず、因果関係が絞り切れない。 別の方法の適甚などにより、さらに絞り蟌むこずが必芁 事䟋は倚いのが望たしい。 少ないず、原因の絞り蟌みができなかったり、偶然の結果を原因ず間違えたりするおそれが倧きい 前件の芁玠Aず事象aがずもに、隠れた他の原因から生じおいる堎合( 結果の共存 )を識別できない。 事象aが、前件の芁玠A ではない 原因による堎合を識別できない。 事象aが倚数の原因の耇合により生じおいる堎合、先行事象Aがどのように関䞎しおいるかは刀らない。 図3-4a 䞀臎法の䟋 差異法異なる結果を生む「違い」に着目する 着目する事象aを生じる事䟋( 積極事䟋 )ず、生じない事䟋( 消極事䟋 )を集める最䜎、各ひず぀ず぀。 ①前件に特定の芁玠Aがあるず、事象aが生じる。 ②前件に特定の芁玠Aがないず、事象aは生じない。 ③それ以倖は、前件ず埌件は党く同じ。 ①②③が共に満たされるなら、芁玠Aが事象aの原因たたは、原因の䞍可欠の䞀郚分である、ず考えるこずができたす。 図3-5 差異法の抂略 【特城】 「ある特定の芁玠を陀くず着目する事象が生じないなら、その芁玠は原因ず考えおよい」ずいう考え方に基づく(これも 消去法 )。 積極事䟋、消極事䟋それぞれひず぀ず぀あれば適甚できる。 別の方法で掚定された因果関係を確認するのに適しおいる。 事象の発生原因がある皋床掚定できおいる状況で適甚するのがよい 䞀臎法では識別できない「事象aが、前件の芁玠A ではない 原因による」堎合を誀認しない。 【泚意点】 条件を満たす事䟋を集める手間がかかる。困難な堎合もある。 「特定の芁玠を取り陀いお結果を芋る」ずいった実隓ができない堎合には適さない。 原因の特定に適甚する際には泚意が必芁。 発生原因の掚枬がないず、ブルヌト・フォヌス的に手圓り次第に詊すこずになる 図3-5a 差異法の䟋 䞀臎差異䜵甚法ふた぀の方法の合わせ技 着目する事象aが生じる事䟋( 積極事䟋 )を2぀以䞊、 生じない事䟋( 消極事䟋 )を2぀以䞊、それぞれ集める。 ①積極事䟋では、先行する芁玠Aず埌続の事象aが含たれお いるこずだけが共通 しおいる。 ②消極事䟋では、先行する芁玠Aず埌続の事象aがずもに含たれお いないこずだけが共通 しおいる。 ①②が共に満たされるなら、芁玠Aが事象aの原因たたは、原因の䞍可欠の䞀郚である、ず考えるこずができたす。 消極事䟋の前件は、積極事䟋のそれず同じか類䌌しおいるず察比が明確になる 図3-6 䞀臎差異䜵甚法の抂略 図3-1(B)、図3-3「゜フトりェアXは゜フトりェアZがプリむンストヌルされおいる機皮で故障Fを起こす」は、この考え方を甚いおいるわけですね。 図3-3 の②’で、「他の点で、起こる機皮ず起こらない機皮に共通項はない」ずころから、「故障Fが起こる堎合ず起こらない堎合の違い」が絞り蟌たれたす。 他にも共通項がある堎合は、さらに絞り蟌みを行なうこずになるでしょう 【特城】 差異法だけでは「A : a」の組を芋぀けられないような堎合でも䜿える。 事象が起こる堎合(積極事䟋)、起こらない堎合(消極事䟋)の共通点ず盞違点を広く芋枡しお怜蚎できる。 【泚意点】 積極事䟋ず消極事䟋を集める手間がかかる。 図3-6a 䞀臎差異䜵甚法の䟋 剰䜙法既知の関係ずの差分に着目する 着目する事象が生じる事䟋を取り䞊げる。 ①事䟋の䞀郚の事象は、既に前件ず埌件の関係(因果関係)が刀っおいるずする。 ②事䟋の前件・埌件から、既知の前件・埌件の組(①)を党お取り陀く。 ②で残った前件・埌件の組は、それぞれ前件(原因)ず埌件(結果)ず考えるこずができたす。 図3-7 剰䜙法の抂略 【特城】 差異法のバリ゚ヌションず蚀える。 既知の因果関係を甚いお原因探求の省力化が期埅できる。 この方法を適甚するず、次のような事態に遭遇するこずがありたす。 ある事䟋がある䟋A, B : a, b, c。 このうち、A : a, B : b は既知の因果関係である。 そこでこれらを取り陀いたら、「nil : c」になる 泚nil空のこず、぀たり前件が空 これは、a, b, cずいう埌件に察しお、候補ずしお考えたA, Bの他に前件がある可胜性を瀺唆しおいたす。 こうした事態になったら、 前件の芋萜ずし・芋逃し がないか確かめるか、 隠れた前件 の存圚を仮定しお芁玠Cを探すか、ずいった方向に向かうこずになるでしょう。 この䟋は、決しお「前件の芁玠ず埌件の芁玠は1察1察応でなければならない」ずいうこず ではありたせん  【泚意点】 この方法で残った前件の芁玠が埌件で残った事象の原因かどうかは、別途確かめる必芁がある 差異法ほど匷い蓋然性を瀺しおはいない。 前件の芁玠が耇数残った堎合(䟋BずC)、BずCのどちら(たたは䞡方ずも)が原因なのかは、この方法だけでは刀らない。 【特城】で述べた「既知の前件:埌件を取り陀くず、“前件が空になる”事態が生じ埗る」は、泚意点でもある。 図3-7a 剰䜙法の䟋 共倉法特定芁玠の倉化に着目する 着目する事象を生じる事䟋を取り䞊げる。 前件の特定の芁玠だけを倉化させお(倀、数量、蚭定、etc.)、埌件の倉化を芋る。 着目する事象aの倉化を匕き起こす特定の芁玠Aがあったら、それが事象aの原因たたは、事象aず䜕かしらの因果関係による぀ながりがあるず考えられたす。 図3-8 共倉法の抂略 【特城】 前件の特定の芁玠の 有無 ではなく、芁玠の 倉化 (倀、数量、蚭定、etc.)に着目した方法。 䞀臎法、差異法、剰䜙法ずいった、消去法に基づく方法が適甚できない/しづらい堎合に、特定の芁玠を倉化させお原因ず結果の関係を掚定する圹に立぀。 他の方法が䜿える堎合でも、因果関係が掚定された埌に「原因ず考えられる芁玠Aの倉化が結果ず考えられる事象aにどんな圱響を䞎えるか」を調べる圹に立぀。 【泚意点】 この方法だけでは、芁玠ず事象の因果関係が確かめられない堎合がある。 前件の芁玠Aの倉化が別の芁玠や事象を通しおaに圱響を䞎えおいる堎合など 前件の芁玠Aを倉化させた時に、埌件に䜕の倉化も芋られないからずいっお、芁玠Aが結果にたったく圱響を䞎えおいないずは蚀えない。 図3-8a 共倉法の䟋 気を぀けたい点 筆者自身のデバッグ経隓・テスト経隓を振り返るず、䞀臎差異䜵甚法、剰䜙法、共倉法が掻躍した蚘憶がありたす。 特定の芁玠だけを倉化させたり、特定の芁玠の有無だけ倉えたりずいう実隓的な操䜜は、゜フトりェアの堎合は比范的行ないやすいからでしょうか。 ミルの方法は起こった事象からその原因を芋぀けようずする際のガむドずしお倧いに参考になるものず思いたすが、適甚に圓たっお気を぀けたい点がいく぀かありたす。 5぀(4぀)の方法、どれかひず぀で原因を突き止められるずは限りたせん。 いく぀かの方法を組み合わせお䜿うこずも考えたしょう。 いずれの方法も結論を導いた段階では蓋然的に正しいず蚀えるにずどたりたす。 結論を基にさらに調べる、原因から結果ぞの挔繹的な説明を考える、 などの䜜業が必芁です。 たた、方法は掚論を補匷はしたすが、保蚌はしたせん。 「○○法を䜿っおいるから正しい掚論であり、結論も正しいんだ」ずいった考えに囚われないようにしたしょう。 発芋を支えるのは芳察ず、仮説 ミルの方法を掻かすには・芳察が倧切 冒頭で觊れたように、垰玍的掚論による発芋を支えるのは“ 芳察 ”ず、その補助ずしお 事実の収集、蚘録(蚘憶) です。 前件(先行する事象矀)や埌件(埌続する事象等)ずしお取り䞊げる事項の 焊点を絞る 。 すべおを芋ようずするのはかえっお芋萜ずしを招きやすい 故障や䞍具合の内容に応じお、操䜜や入力、゜フトりェアの環境やデヌタ、ハヌドりェア環境、etc.。 生じた故障は動䜜か、デヌタの倉化か、状態異垞か、倖郚ぞの出力か、etc.。 同じく、 粒床感 にも気を぀ける。 倧たかな原因を把握するなら、故障は抂芁レベルで捉え、前件や埌件は倧づかみに区別する、 因果関係の詳现を突き止めようずするなら、故障を詳现に蚘述し、前件や埌件は詳现に区別する、etc.。 調べお芋蟌みがなかったら、「調べ方や調べるずころを倉えよう」ずいう刀断も必芁。 ミルの方法を掻かすには・もう䞀点 垰玍的掚論による発芋を支えるものには、「着目した事象にた぀わる因果関係を調べるに圓たり、ある皋床掚枬を立おる」ずいう態床もありたす。 䞀般に、起こった事象(故障や䞍具合) だけ から䜕が原因(の候補)か圓たりを぀けるのは困難で、 「こういうこずが原因ずなっおいるのではないか」ずいった掚枬が必芁になりたす。 これも誰しもやっおいるこずでおかしなこずではありたせん。 この掚枬 説明仮説 が原因探求の道暙になりたす。 「なんずなく・圓おもなく原因を探す」のではなくお、「ある仮定に基づいた掚枬に沿っおいる」こずを意識したしょう。 ゜フトりェアの堎合、仕様や蚭蚈や゜ヌスコヌドに基づけば掚枬しやすいですが、「思いがけない遠く離れた箇所の仕様/蚭蚈/実装」が圱響を及がす堎合や、倖郚環境芁因が干枉する堎合もありたすし、仕様や蚭蚈が圓おにならないこずも   説明仮説に関わる掚論は、アブダクションの回で取り䞊げたす。第5回以降をお楜しみに。 ★ 次回は垰玍的掚論にもある“萜ずし穎”を玹介する予定です 参考文献 近藀掋逞, 奜䞊英叞 『論理孊入門』 岩波曞店 1979 鈎朚矎䜐子 『論理的思考の技法Ⅱ』 法孊曞院 2008 藀野登 『論理孊 䌝統的圢匏論理孊』 内田老鶎圃 1968 J.S.ミル(著), 倧関将䞀(èš³) 『論理孊䜓系 : 論蚌ず垰玍 3』 春秋瀟 1958 米盛裕二 『アブダクション 仮説ず発芋の論理』 勁草曞房 2007 図版に䜿甚した画像の出兞 Loose Drawing 人物画をお借りしおいたす。 品質探偵コニャンProduced by Sqripts . No Unauthorized Reproduction. 【連茉】゜フトりェア゚ンゞニアのための論理スキル実務䞉幎目からの発芋力ず仮説力 蚘事䞀芧 【第1回】芋぀けるための論理 【連茉初回、党文公開䞭】 【第2回】 “共通項”を芋぀け出す 【第3回】発芋はよい芳察ずよい方法から The post 【第3回】発芋はよい芳察ずよい方法から実務䞉幎目からの発芋力ず仮説力 first appeared on Sqripts .
こんにちは、バック゚ンド゚ンゞニアのたさです。 AI技術の急速な進化に䌎い、埓来のキヌワヌド怜玢では察応できない「意味的な類䌌性」に基づく怜玢ニヌズが急増しおいたす。本蚘事では、 オヌプン゜ヌスRDBMSであるPostgreSQLにpgvector拡匵を組み蟌むだけで、簡単にベクトル怜玢システムを構築する方法 を解説したす。 ベクトル怜玢 ずは、文章を数倀ベクトルに倉換しお抜象的な意味を怜玢する技術であり、キヌワヌド䟝存型の怜玢では捉えきれない「ナヌザヌが本圓に求めおいる意図」を、 高い粟床 で汲み取れる怜玢手法です。 この蚘事では、ベクトル怜玢をPostgreSQLに組み蟌む方法を、ハンズオン圢匏で環境構築を進めながら説明しおいきたす。 ベクトル怜玢ずは 3分で分かるベクトル怜玢の仕組み 埓来のキヌワヌド怜玢は、文字通りキヌワヌドが䞀臎するかどうかで怜玢結果を返したす。しかし、蚀葉の衚珟は倚様であり、ナヌザヌの意図ず完党に䞀臎するキヌワヌドが䜿われるずは限りたせん。そこで登堎するのが ベクトル怜玢 です。 ベクトル怜玢は、テキストや画像などのデヌタを、数倀の集たりである ベクトル に倉換したす。このベクトルは、元のデヌタの意味的な特城を捉えおおり、類䌌した意味を持぀デヌタは、ベクトル空間䞊で近い䜍眮に配眮されたす。 具䜓的な仕組み: ゚ンベディング:  テキスト質問や文章を、事前に孊習枈みのAIモデル䟋OpenAIのtext-embedding-ada-002を甚いお、数倀ベクトルに倉換したす。この凊理を゚ンベディングず呌びたす。 ベクトルデヌタベヌス:  ゚ンベディングされたベクトルをデヌタベヌスこの䟋ではPostgreSQL + pgvectorに栌玍したす。 類䌌床蚈算:  怜玢ク゚リも同様にベクトルに倉換し、デヌタベヌス内のベクトルずの類䌌床を蚈算したす。類䌌床の高いベクトルを持぀デヌタが、怜玢結果ずしお返されたす。 䟋: 「猫が奜きな人におすすめの映画は」ずいう質問をベクトル怜玢にかけるず、「猫」ずいうキヌワヌドが含たれおいなくおも、「猫が登堎する映画」「猫を飌っおいる人が䞻人公の映画」など、意味的に関連性の高い映画が怜玢結果ずしお衚瀺される可胜性がありたす。 ぀たり、ベクトル怜玢は、キヌワヌドに瞛られず、意味に基づいた柔軟な怜玢を実珟する技術なのです。 PostgreSQL採甚の5倧メリット ベクトル怜玢システムを構築する䞊で、PostgreSQLを採甚するメリットは倚岐にわたりたす。以䞋に䞻な5぀のメリットを挙げたす。 拡匵性:  pgvector拡匵により、PostgreSQLにベクトル怜玢機胜を远加できたす。既存のデヌタベヌス環境を倧きく倉曎する必芁はありたせん。 コスト効率:  オヌプン゜ヌスであるため、高額なラむセンス費甚は䞍芁です。必芁なハヌドりェアリ゜ヌスのみで運甚できたす。 信頌性:  PostgreSQLは長幎の実瞟を持぀堅牢なRDBMSであり、高い信頌性ず安定性を誇りたす。 暙準SQL察応:  既存のSQLク゚リず組み合わせお、耇雑な怜玢凊理を蚘述できたす。 コミュニティサポヌト:  䞖界䞭に掻発なコミュニティが存圚し、豊富な情報やサポヌトが埗られたす。 埓来怜玢ずのパフォヌマンス比范衚 怜玢方匏 怜玢粟床 怜玢速床 (デヌタ量䟝存) 柔軟性 備考 キヌワヌド怜玢 キヌワヌド䞀臎に䟝存。曖昧な衚珟や同矩語に匱い。 高速 䜎い。キヌワヌドの厳密な䞀臎が必芁。 シンプルな怜玢には適しおいる。 ベクトル怜玢 意味的な類䌌性に基づくため、キヌワヌドに䟝存しない。高い粟床を実珟。 デヌタ量に䟝存。むンデックス構造で高速化可胜。 高い。ナヌザヌの意図を汲み取った柔軟な怜玢が可胜。 倧量のデヌタに察しおは、適切なむンデックス蚭蚈が重芁。 党文怜玢 キヌワヌド怜玢より高床な怜玢が可胜だが、意味理解は限定的。 デヌタ量に䟝存。 䞭皋床。 日本語の圢態玠解析など、蚀語䟝存の凊理が必芁な堎合がある。 補足: パフォヌマンスは、デヌタ量、ハヌドりェア、むンデックス蚭蚈などに倧きく巊右されたす。 䞊蚘比范衚はあくたで䞀般的な傟向を瀺すものであり、実際のパフォヌマンスは環境によっお異なりたす。 専甚のベクトルデヌタベヌスずの比范 専甚のベクトルデヌタベヌス䟋: Chroma, FAISS, PineconeずPostgreSQLの拡匵機胜であるpgvectorは、それぞれ異なる匷みを持っおいたす。ここでは、pgvectorず専甚ベクトルデヌタベヌスずの違いや、それぞれのメリット・デメリットを解説したす。 pgvectorの特城 pgvectorは、PostgreSQLにベクトル怜玢機胜を远加する拡匵機胜です。以䞋が䞻な特城です リレヌショナルデヌタずの統合 ベクトルデヌタず埓来のリレヌショナルデヌタを同じデヌタベヌスで管理可胜。 䜎コスト導入 既存のPostgreSQL環境に拡匵機胜ずしお远加するだけで利甚可胜。 ACID準拠 トランザクション管理やセキュリティ機胜をそのたた利甚可胜。 専甚ベクトルデヌタベヌスの特城 専甚ベクトルデヌタベヌス䟋: Chroma, FAISS, Pineconeは、ベクトル怜玢に特化した蚭蚈がされおいたす。以䞋が䞻な特城です 高速怜玢 高次元ベクトルに最適化されたむンデックス蚭蚈䟋: HNSW, IVF。 スケヌラビリティ 分散システムによる氎平スケヌリングが容易。 倚様なデヌタ圢匏察応 画像、音声、動画などの非構造化デヌタも効率的に凊理可胜。 比范衚 項目 pgvector 専甚ベクトルデヌタベヌス䟋: Chroma, FAISS 導入コスト 䜎い既存PostgreSQL環境で利甚可胜 高い新芏むンフラ構築が必芁 速床倧芏暡デヌタ 䞭皋床PostgreSQL䟝存 高速専甚蚭蚈による最適化 スケヌラビリティ 垂盎スケヌルハヌドりェア増匷が必芁 氎平スケヌル分散システム察応 統合性 高いSQLク゚リでリレヌショナルデヌタず統合 䜎い別途APIやミドルりェアが必芁 ナヌスケヌス 小〜䞭芏暡デヌタ、既存RDBMSずの統合 倧芏暡デヌタ、高速怜玢が求められるAI/MLワヌクフロヌ 孊習コスト 䜎いPostgreSQLナヌザヌに銎染みやすい 䞭〜高新しいツヌルやAPIの習埗が必芁 pgvectorのメリットずデメリット メリット 簡単な導入手順 PostgreSQL環境に拡匵機胜ずしおむンストヌルするだけで利甚可胜。 䜎コスト運甚 既存むンフラを掻甚できるため、新たなサヌバヌ構築が䞍芁。 SQL統合性 埓来のSQLク゚リず組み合わせおハむブリッド怜玢が可胜。 デメリット パフォヌマンス限界 倧芏暡デヌタセットや超高次元ベクトルでは専甚VectorDBに劣る。 氎平スケヌリング非察応 PostgreSQL自䜓が分散システムに最適化されおいないため、倧量トラフィックには䞍向き。 機胜制玄 画像や音声など非構造化デヌタぞの察応は限定的。 専甚ベクトルデヌタベヌスのメリットずデメリット メリット 高速な類䌌怜玢 HNSWやIVFなど、高床なむンデックスアルゎリズムを採甚。 倧芏暡デヌタ察応 分散システムによる氎平スケヌリングで数十億件以䞊のベクトル凊理も可胜。 柔軟性 画像、音声、動画など倚様なデヌタ圢匏に察応。 デメリット 導入・運甚コストが高い 新たなむンフラ構築や運甚管理が必芁。 孊習コストが高い 新しいツヌルやAPIの習埗が求められる。 統合性が䜎い 埓来のRDBMSずの連携には远加開発が必芁。 遞択基準 pgvectorを遞ぶべきケヌス 既存のPostgreSQL環境を掻甚したい堎合 䞭小芏暡のプロゞェクトでコスト効率を重芖する堎合 リレヌショナルデヌタずの統合性が重芁な堎合 専甚VectorDBを遞ぶべきケヌス 数千䞇〜数億件以䞊の倧芏暡ベクトル怜玢を行う堎合 非構造化デヌタ䟋: 画像、音声の凊理が必芁な堎合 高速性ずスケヌラビリティを最優先する堎合 pgvectorは、PostgreSQLナヌザヌにずっお手軜か぀コスト効率の良い遞択肢であり、䞭小芏暡プロゞェクトには最適です。䞀方、専甚VectorDBは、倧芏暡か぀耇雑なAI/MLワヌクフロヌにおいお圧倒的なパフォヌマンスを発揮したす。甚途や芁件に応じお、それぞれの特性を掻かした遞択を行うこずが重芁です。 環境構築 本章ではハンズオン圢匏で PostgreSQLコンテナのセットアップ から、 Streamlitを甚いたフロント゚ンドの構築 、そしおそれらを連携させる Docker環境の蚭定 たで、必芁な手順をわかりやすく解説したす。この章の手順に埓うこずで、pgvectorを甚いた簡単なベクトル怜玢システムを構築できたす。 環境構成 䞊蚘のように非垞にシンプルな構成をdocker composeで構築したす。 ディレクトリ構成は以䞋のようになりたす。 ├── .streamlit │ └── secrets.toml *# DB接続情報* ├── docker-compose.yml ├── postgres │ ├── Dockerfile *# PG拡匵機胜むンストヌル* │ └── initdb │ └── init.sql *# テヌブル定矩* └── streamlit ├── Dockerfile *# Python環境構築* ├── app.py *# メむンアプリ* ├── embeddings.py *# ベクトル生成ロゞック* ├── requirements.txt └── seed.py *# テストデヌタ生成* PostgreSQLコンテナの環境構築 PostgreSQLのデヌタベヌスを起動するコンテナ䞊に初期蚭定甚のSQLファむルを䜜成したす。 CREATE EXTENSION IF NOT EXISTS vector; -- サンプルテヌブル䜜成必芁に応じおカスタマむズ CREATE TABLE documents ( id SERIAL PRIMARY KEY, title TEXT, content TEXT, embedding VECTOR(1024) ); CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops); Streamlitコンテナの環境構築 メむン凊理ずなるpythonコヌドを蚘述したファむルを䜜成したす。 import streamlit as st import pandas as pd import numpy as np from datetime import datetime import psycopg2 from psycopg2.extras import execute_values from sqlalchemy.sql import text from streamlit.logger import get_logger from embedding import Embedding logger = get_logger(__name__) embedding = Embedding() # ペヌゞ蚭定 st.set_page_config( page_title="Vector Database Demo", page_icon="🔍", layout="wide" ) def get_embedding(text): return embedding.get_embedding([text])[0] # デヌタベヌス接続関数 def get_connection(): return st.connection('postgresql', type='sql') # メむンアプリケヌション def main(): st.title("📊 Vector Database Demo") # サむドバヌでの操䜜遞択 operation = st.sidebar.selectbox( "操䜜を遞択", ["デヌタ衚瀺", "デヌタ远加", "ベクトル怜玢"] ) if operation == "デヌタ衚瀺": show_data() elif operation == "デヌタ远加": add_data() elif operation == "ベクトル怜玢": vector_search() def show_data(): st.header("📋 登録デヌタ䞀芧") conn = get_connection() # デヌタ取埗 query = "SELECT id, title,content FROM documents LIMIT 100" df = conn.query(query, ttl=0) if not df.empty: st.dataframe(df) else: st.info("デヌタが登録されおいたせん") def add_data(): st.header("➕ デヌタ远加") # 入力フォヌム with st.form("data_form"): title = st.text_input("タむトルを入力") content = st.text_area("テキストを入力") submitted = st.form_submit_button("登録") if submitted and content: conn = get_connection() # サンプルずしお、ランダムな1536次元ベクトルを生成 # 実際のアプリケヌションでは、適切な゚ンベッディングモデルを䜿甚する embedding = get_embedding(title + " " + content) # デヌタ登録 query = text(""" INSERT INTO documents (title, content, embedding) VALUES (:title, :content, :embedding) """) params = {"title": title, "content": content, "embedding": embedding} try: with conn.session as session: session.execute(query, params) session.commit() st.success("デヌタを登録したした") except Exception as e: st.error(f"゚ラヌが発生したした: {str(e)}") def vector_search(): st.header("🔍 ベクトル怜玢") search_text = st.text_input("怜玢テキストを入力") k = st.slider("衚瀺件数", min_value=1, max_value=10, value=5) if st.button("怜玢") and search_text: # サンプルずしお、ランダムなク゚リベクトルを生成 # 実際のアプリケヌションでは、入力テキストを適切に゚ンベッディング query_vector = get_embedding(search_text) conn = get_connection() # コサむン類䌌床による怜玢 query = """ SELECT title,content, 1 - (embedding <-> :query_vector) as similarity FROM documents ORDER BY embedding <-> :query_vector LIMIT :k """ params = {"query_vector": str(query_vector), "k": k} try: df = conn.query(query, params=params, ttl=0) if not df.empty: # 結果衚瀺 for _, row in df.iterrows(): with st.expander(f"{row['title']} 類䌌床: {row['similarity']:.4f}"): st.write(row['content']) else: st.info("怜玢結果が芋぀かりたせんでした") except Exception as e: st.error(f"怜玢䞭に゚ラヌが発生したした: {str(e)}") # アプリケヌション実行 if __name__ == "__main__": main() テキストの埋め蟌み凊理を行うpythonコヌドを蚘述したファむルを䜜成したす。 今回の䟋ではデフォルトで埋め蟌み甚のモデルにmultilingual-e5-largeを䜿甚するように蚭定しおいたす。このモデルを倉曎するこずで怜玢時の傟向等を倉えるこずが可胜です。 intfloat/multilingual-e5-large · Hugging Face import torch.nn.functional as F from torch import Tensor from transformers import AutoTokenizer, AutoModel class Embedding: def __init__(self, model_name: str = 'intfloat/multilingual-e5-large'): self.model_name = model_name self.load_model() def load_model(self): self.tokenizer = AutoTokenizer.from_pretrained(self.model_name) self.model = AutoModel.from_pretrained(self.model_name) def average_pool( self, last_hidden_states: Tensor, attention_mask: Tensor ) -> Tensor: last_hidden = last_hidden_states.masked_fill(~attention_mask[..., None].bool(), 0.0) return last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[..., None] def get_embedding(self, input_texts: list[str]) -> list[float]: batch_dict = self.tokenizer(input_texts, max_length=512, padding=True, truncation=True, return_tensors='pt') outputs = self.model(**batch_dict) embeddings = self.average_pool(outputs.last_hidden_state, batch_dict['attention_mask']) return F.normalize(embeddings, p=2, dim=1).tolist() 初期デヌタの投入を行うpythonコヌドを蚘述したファむルを䜜成したす。 単玔にタむトルず内容をならべ、それらをデヌタベヌスに埋め蟌み衚珟ず共に保存しおいたす。 import psycopg2 import numpy as np from psycopg2.extras import execute_values from embedding import Embedding test_data = [ { "title": "Dockerコンテナのベストプラクティス2025幎版", "content": "Dockerコンテナを本番環境で効率的に運甚するためのベストプラクティスを解説したす。むメヌゞサむズの最適化、セキュリティ察策、ネットワヌク蚭定、ボリュヌム管理など、実践的なトピックを網矅的にカバヌしたす。マルチステヌゞビルドの掻甚方法や、環境倉数の適切な管理方法に぀いおも詳しく説明したす。" }, { "title": "PyTorchによる深局孊習モデルの最適化手法", "content": "PyTorchを䜿甚した深局孊習モデルのパフォヌマンス最適化に぀いお解説したす。バッチサむズの調敎、孊習率スケゞュヌリング、デヌタロヌダヌの最適化、GPUメモリの効率的な䜿甚方法など、実践的な最適化テクニックを玹介したす。" }, { "title": "マむクロサヌビスアヌキテクチャの蚭蚈パタヌン", "content": "マむクロサヌビスアヌキテクチャを採甚する際の䞻芁な蚭蚈パタヌンに぀いお解説したす。サヌビス間通信、デヌタ䞀貫性の確保、障害察策、モニタリング戊略など、実装時の重芁なポむントを詳しく説明したす。" }, { "title": "Kubernetes運甚管理の実践ガむド", "content": "Kubernetesクラスタの効率的な運甚管理方法に぀いお解説したす。リ゜ヌス管理、オヌトスケヌリング、モニタリング、セキュリティ察策など、実運甚で必芁ずなる知識を䜓系的に説明したす。" }, { "title": "効率的なデヌタベヌスむンデックス蚭蚈", "content": "リレヌショナルデヌタベヌスにおけるむンデックス蚭蚈のベストプラクティスを解説したす。ク゚リパフォヌマンスの最適化、むンデックス遞択の基準、メンテナンス戊略など、実践的なアプロヌチを玹介したす。" }, { "title": "GraphQLによるモダンAPIの構築", "content": "GraphQLを䜿甚したAPIの蚭蚈ず実装に぀いお解説したす。スキヌマ蚭蚈、リゟルバの実装、N+1問題の解決、キャッシュ戊略など、実践的な開発手法を玹介したす。" }, { "title": "CI/CDパむプラむンの自動化戊略", "content": "継続的むンテグレヌション/デリバリヌパむプラむンの効率的な構築方法に぀いお解説したす。テスト自動化、デプロむ戊略、品質管理、モニタリングなど、実践的な自動化手法を玹介したす。" }, { "title": "セキュアなWebアプリケヌション開発", "content": "Webアプリケヌションのセキュリティ察策に぀いお包括的に解説したす。XSS察策、CSRF察策、認蚌・認可の実装、セキュアなセッション管理など、重芁なセキュリティ考慮事項を説明したす。" }, { "title": "効率的なキャッシュ戊略の実装", "content": "Webアプリケヌションにおけるキャッシュ戊略の蚭蚈ず実装に぀いお解説したす。CDN、ブラりザキャッシュ、アプリケヌションキャッシュ、デヌタベヌスキャッシュなど、倚局的なキャッシュ戊略を玹介したす。" }, { "title": "倧芏暡デヌタ凊理のベストプラクティス", "content": "倧芏暡デヌタ凊理システムの蚭蚈ず実装に぀いお解説したす。バッチ凊理、ストリヌム凊理、デヌタパむプラむン、スケヌラビリティ確保など、実践的なアプロヌチを玹介したす。" }, { "title": "ReactずTypeScriptによるフロント゚ンド開発", "content": "ReactずTypeScriptを組み合わせた最新のフロント゚ンド開発手法に぀いお解説したす。型安党な開発、コンポヌネント蚭蚈、状態管理、パフォヌマンス最適化など、実践的な開発テクニックを玹介したす。" }, { "title": "AWSでのスケヌラブルなむンフラ構築", "content": "AWSを䜿甚したスケヌラブルなむンフラストラクチャの構築方法に぀いお解説したす。オヌトスケヌリング、負荷分散、障害察策、コスト最適化など、クラりドむンフラの蚭蚈ポむントを説明したす。" }, { "title": "効率的なログ管理ずモニタリング", "content": "分散システムにおけるログ管理ずモニタリングの実践的アプロヌチに぀いお解説したす。ログ収集、分析、可芖化、アラヌト蚭定など、効果的な運甚監芖の方法を玹介したす。" }, { "title": "マむクロフロント゚ンドアヌキテクチャの実装", "content": "マむクロフロント゚ンドアヌキテクチャの蚭蚈ず実装に぀いお解説したす。モゞュヌル分割、統合戊略、ルヌティング、状態管理など、フロント゚ンド開発の新しいアプロヌチを玹介したす。" }, { "title": "NoSQLデヌタベヌスの蚭蚈パタヌン", "content": "NoSQLデヌタベヌスを䜿甚する際の効果的な蚭蚈パタヌンに぀いお解説したす。デヌタモデリング、ク゚リ最適化、スケヌリング戊略など、実践的な䜿甚方法を玹介したす。" }, { "title": "機械孊習モデルの本番環境デプロむ", "content": "機械孊習モデルを本番環境にデプロむする際の実践的アプロヌチに぀いお解説したす。モデルのバヌゞョン管理、スケヌリング、モニタリング、再孊習戊略など、運甚䞊の重芁ポむントを説明したす。" }, { "title": "Terraformによるむンフラのコヌド化", "content": "Terraformを䜿甚したむンフラストラクチャのコヌド化に぀いお解説したす。リ゜ヌス管理、モゞュヌル蚭蚈、状態管理、チヌム開発など、IaCの実践的な適甚方法を玹介したす。" }, { "title": "効率的なAPIバヌゞョニング戊略", "content": "WebAPIのバヌゞョニング戊略に぀いお実践的な方法を解説したす。バヌゞョン管理手法、䞋䜍互換性の確保、マむグレヌション戊略など、長期的な API 運甚のポむントを説明したす。" }, { "title": "セキュアなマむクロサヌビス間通信", "content": "マむクロサヌビス環境におけるセキュアな通信方法に぀いお解説したす。認蚌、認可、暗号化、蚌明曞管理など、サヌビス間通信のセキュリティ確保方法を説明したす。" }, { "title": "効率的なデヌタベヌスマむグレヌション", "content": "倧芏暡デヌタベヌスのマむグレヌション戊略に぀いお解説したす。ダりンタむム最小化、デヌタ敎合性確保、ロヌルバック蚈画など、安党なマむグレヌションの実斜方法を玹介したす。" } ] def insert_test_data(): conn = psycopg2.connect( dbname="vectordb", user="postgres", password="postgres", host="postgres", port="5432" ) cur = conn.cursor() embedding = Embedding() for data in test_data: # サンプルずしお1536次元のランダムベクトルを生成 emb = embedding.get_embedding([data["title"] + " " + data["content"]])[0] cur.execute( "INSERT INTO documents (title, content, embedding) VALUES (%s, %s, %s)", (data["title"], data["content"], emb) ) conn.commit() cur.close() conn.close() if __name__ == "__main__": insert_test_data() デヌタベヌスずの接続定矩を蚘述したファむルを䜜成したす。 [connections.postgresql] dialect = "postgresql" host = "postgres" port = 5432 database = "vectordb" username = "postgres" password = "postgres" 䟝存ラむブラリを蚘述したファむルを䜜成したす。 SQLAlchemy==2.0.35 streamlit==1.32.0 pandas==2.2.0 numpy==1.26.0 psycopg2-binary==2.9.9 torch==2.6.0 transformers==4.48.2 Docker環境のセットアップ たずはpostgresのDockerfileから䜜成をしおいきたす。 postgresベヌスのむメヌゞにpgvectorのむンストヌル凊理を远加したす。 FROM postgres:16.3 # pgvectorむンストヌル RUN apt-get update && \\ apt-get install -y \\ build-essential \\ git \\ postgresql-server-dev-16 RUN git clone <https://github.com/pgvector/pgvector.git> /tmp/pgvector && \\ cd /tmp/pgvector && \\ make && \\ make install && \\ rm -rf /tmp/pgvector 続けおStreamlitのDockerfileを䜜成したす。 FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt CMD ["streamlit", "run", "./streamlit/app.py", "--server.port=8501"] 最埌にこれらのコンテナを束ねお管理するdocker-compose.ymlを䜜成したす。 version: "3.9" services: postgres: build: ./postgres environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: vectordb volumes: - postgres_data:/var/lib/postgresql/data - ./postgres/initdb:/docker-entrypoint-initdb.d ports: - "5432:5432" networks: - app-network streamlit: build: ./streamlit volumes: - .:/app environment: - STREAMLIT_SERVER_PORT=8501 ports: - "8501:8501" depends_on: - postgres networks: - app-network volumes: postgres_data: networks: app-network: driver: bridge 動䜜確認 起動確認 以䞋のコマンドでコンテナのビルドを行いたす。 docker compose build 以䞋のコマンドでコンテナの起動を行いたす。 docker compose up -d ブラりザで以䞋のアドレスにアクセスしたす。 http://localhost:8501/ 最初はモデルを読み蟌むためロヌド䞭ずなり、䞋蚘のような画面が衚瀺されるかず思いたすが その埌このような衚瀺になれば、サヌバヌの起動に成功しおいたす。 初期デヌタの投入 デヌタベヌスに初期デヌタを投入する為、コンテナ䞊でコマンドを実行したす。 たずはコンテナの状態の確認を行いたす。 $ docker compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS pgvector-postgres-1 pgvector-postgres "docker-entrypoint.s
" postgres 2 hours ago Up 2 hours 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp pgvector-streamlit-1 pgvector-streamlit "streamlit run ./str
" streamlit 2 hours ago Up 2 hours 0.0.0.0:8501->8501/tcp, :::8501->8501/tcp 䞊蚘で出力されたコンテナの内、streamlitのコンテナ䞊で以䞋のようにしおコマンドを実行したす。 $ docker exec -it pgvector-streamlit-1 python streamlit/seed.py コマンド実行埌に再床ブラりザで以䞋のアドレスにアクセスしたす。 http://localhost:8501/ 投入したデヌタが䞀芧で衚瀺されるようになりたした。 Vector怜玢の確認 先ほどアクセスした画面の「操䜜を遞択」から「ベクトル怜玢」を遞択したす。 䞊蚘のような画面が衚瀺されるかず思いたす。 詊しにこちらの怜玢テキストに「MySQL」ず入力しお怜玢しおみたす。 䞊蚘のように結果が衚瀺されたした。内容ずしおは以䞋のようなものですが、もちろん本文に「MySQL」ずいう文蚀はありたせん。 内容の指向性や意味などからもっずも類䌌床の高い内容順に䞊べるこずができおいるこずが確認できたす。 おわりに 本蚘事で実践したPostgreSQLベクトル怜玢システムの構築は、AI時代のデヌタ掻甚における重芁な第䞀歩です。 埓来のリレヌショナルデヌタベヌスの枠組みを超え、意味理解を組み蟌んだ次䞖代怜玢技術 を、既存むンフラで実珟する手法を具䜓䟋ず共に解説したした。 本栌的な導入を怜蚎される方は、たずは pgvector公匏ドキュメント ず E5モデルに関しおの蚘事 の粟読をお勧めしたす。実際のプロダクション環境では、 むンデックス再構築戊略 ず メモリ最適化 が成吊を分ける鍵ずなりたす。 最埌に、本蚘事が皆様のAI/MLプロゞェクト掚進の䞀助ずなれば幞いです。 The post PostgreSQLで実践するベクトル怜玢入門AI時代のRDBMS掻甚術 first appeared on Sqripts .
こんにちは、QAコンサルタントの ダマダ です。 私はこのたび、JSTQB® Advanced Level テストマネヌゞャ詊隓に合栌したした。   本蚘事では、詊隓合栌のために掻甚した曞籍「 科孊的根拠に基づく最高の勉匷法 」の内容を解説するずずもに、JSTQB詊隓の抂芁、そしお実践した勉匷法を共有したす。 曞籍の玹介「科孊的根拠に基づく最高の勉匷法」 この曞籍は、医垫であり孊習法の専門家である著者が、最新の研究論文やデヌタを基に、科孊的に効果が蚌明された孊習法を玹介したものです。特に、次のようなポむントが倧きな特城です。 効果が䜎い孊習法 日垞的に行われがちな以䞋の方法は、実は非効率ずされおいたす 繰り返し読む 䞀芋効果的に思えるが、蚘憶の定着にはほずんど寄䞎しない。 ノヌトに曞き写す 時間がかかる割に、蚘憶や理解が深たらない。 ハむラむトや䞋線を匕く 重芁箇所をマヌクする行為そのものに孊習効果はない。 効果が高い孊習法 1. アクティブリコヌル胜動的蚘憶再生 孊習した知識を蚘憶から匕き出すこずで、蚘憶が匷化されたす。たずえば問題を解く、クむズ圢匏で孊ぶずいった方法が該圓したす。 2. 分散孊習 短時間で詰め蟌むのではなく、間隔を空けお繰り返し埩習するこずで、蚘憶の定着率が向䞊したす。たずえば、1日おきに埩習する、週ごずに孊び盎すずいった方法です。 3. 粟緻的質問ず自己説明 粟緻的質問 孊んだ内容に察しお「なぜそうなるのか」ず問いかけ、深掘りしお理解を深めたす。 自己説明 孊習した内容を自分の蚀葉で説明するこずで、曖昧な理解を防ぎたす。 これらの方法を組み合わせるこずで、孊習効率を倧幅に向䞊させるこずができたす。 JSTQB®の詊隓ずテストマネヌゞャモゞュヌルの玹介 JSTQB®の抂芁 JSTQB®Japan Software Testing Qualifications Boardは、゜フトりェアテストの知識ず技胜を䜓系的に孊び、その理解床を蚌明する資栌詊隓を提䟛する団䜓です。ISTQB®International Software Testing Qualifications Boardの囜際基準に基づいおおり、゜フトりェアテストの暙準資栌ずしお広く認知されおいたす。 詊隓の構成 JSTQB®詊隓には以䞋の3぀のレベルがありたす。 1. Foundation Level 初心者向け。テストの基本抂念、蚭蚈技法、テスト管理の基瀎が詊隓範囲に含たれたす。 2. Advanced Level 経隓者向け。3぀のモゞュヌルに分かれおいたす。 テストマネヌゞャ テスト蚈画やプロゞェクト管理に特化。 テストアナリスト 芁件分析やテスト蚭蚈技法に焊点。   テクニカルテストアナリスト テストツヌルや自動化の掻甚。 3. Expert Level   ゜フトりェアテストの最䞊玚資栌。リヌダヌシップやプロセス改善に関する知識を問われたす。 Advanced Level テストマネヌゞャの詊隓内容 テストマネヌゞャは、テストプロゞェクトを蚈画・実行・管理するスキルを蚌明するためのモゞュヌルです。以䞋が䞻な詊隓範囲です。 テストプロセス テスト戊略の䜜成、蚈画、モニタリング、評䟡。 リスクベヌステスト リスクを特定し、優先順䜍を付けおテスト蚈画を策定。 テストチヌムの管理 チヌムビルディングやステヌクホルダヌずのコミュニケヌション。 品質保蚌 メトリクス分析やプロセス改善の実斜。 ツヌルず自動化 適切なツヌルの遞定ず導入。 実践した勉匷法 以䞋の3ステップを繰り返しながら孊習を進めたした。このプロセス党䜓に曞籍で玹介されおいる孊習法を取り入れおいたす。 1. シラバスを読む 方法ずポむント 流し読みからスタヌト たずはシラバス党䜓を流し読みし、詊隓範囲を倧たかに把握。 䞍明点をメモ 分からない箇所や重芁そうな郚分をメモに蚘録し、埌のプロセスで補匷。 関連情報を調査 シラバスに蚘茉された内容に぀いお理解が曖昧な郚分は、ChatGPTやWeb怜玢で調査。 掻甚した勉匷法 分散孊習 シラバスを䞀床に党郚読むのではなく、耇数回に分けお孊習したした。1日目に党䜓を流し読み、2日目以降に重点的な箇所を再床読むこずで蚘憶を匷化したした。 粟緻的質問 各セクションで「なぜこの方法が重芁なのか」「どうしおこれが掚奚されるのか」を自分に問いかけながら孊習したした。 2. 問題を解く 方法ずポむント 問題挔習の培底 非認定問題集を䜿いながら繰り返し問題を解き、シラバスの内容を応甚する緎習を行いたした。 間違いの蚘録 間違えた問題に぀いお、問題番号、察応するシラバスの箇所ず間違えた原因をメモ。 ChatGPTを掻甚 シラバスず問題集をChatGPTにむンプットし、問題集に含たれおいない新しい問題を生成しおもらうこずで、幅広い挔習を実斜したした。 掻甚した勉匷法 アクティブリコヌル 問題を解くこずで、孊習した知識を蚘憶から匕き出し、蚘憶を匷化したした。 自己説明 解いた問題に぀いお「なぜこの答えが正解なのか」「他の遞択肢が䞍正解の理由」を自分に説明したした。これにより、遞択肢の背景や理論を深く理解できたした。 3. 振り返り 方法ずポむント 振り返りは孊習の各ステップで必ず行い、孊習効率を高めたした。振り返りでは、これたでに取った メモ を掻甚しお原因分析を行いたす。 メモの掻甚 シラバスを読んだ際に曞き留めた䞍明点や、問題を解いた際に蚘録した間違えた箇所やその理由を参照。 原因分析 「知識䞍足」「問題文の読み違い」「思い蟌み」などに分類し、それぞれの察策を実斜。 匱点補匷 特に苊手な分野に぀いおは、再床シラバスを読み盎したり、問題を解き盎したりしお克服を図りたした。 進捗の可芖化 日々蚘録を取っおいるため、これたで間違えおいた問題が出来るようになっおいるこずが分かり、自分の成長を確認したした。 掻甚した勉匷法 分散孊習 振り返りを䜕床も行い、時間を空けお同じ内容を埩習するこずで、知識の定着を匷化したした。新しい知識よりも埩習を重芖したした。 粟緻的質問 「なぜ間違えたのか」「どのように考えれば正解にたどり着けたのか」を繰り返し問いかけ、理解を深めたした。 スキマ時間を掻甚した孊習 スキマ時間を積極的に掻甚するこずも、 分散孊習 の効果を埗るための重芁な手段です。以䞋のように、短時間の孊習を耇数回に分けお行いたした。 通勀時間 シラバスの読み蟌みや、理解が曖昧な箇所の埩習。 昌䌑み 問題集を1問でも解く。 倜の15分 振り返りや匱点補匷。 たずめ 「科孊的根拠に基づく最高の勉匷法」を取り入れるこずで、孊習効率を向䞊させるこずができたず思いたす。この方法は、資栌詊隓だけでなく、日垞の孊びやスキルアップにも応甚可胜です。これから受隓を目指す方は、科孊的なアプロヌチを詊しおみおはいかがでしょうか The post JSTQB Advanced Level テストマネヌゞャ勉匷法 -科孊的根拠に基づく最高の勉匷法を参考にしお- first appeared on Sqripts .
この連茉では、゜フトりェア開発のQA゚ンゞニアずしお働き始めた皆様に向けお、私の実䜓隓をもずに「こんなこずを知っおおけばよかった」ずいう、ちょっずした気づきを共有したす。 䞀緒に゜フトりェア開発のQA゚ンゞニアずしおの充実した゚ンゞニアラむフを築くためのヒントを探っおいきたしょう。 QA゚ンゞニアのスタヌトガむド 蚘事䞀芧 ※クリックで開きたす 【第1回】充実したQA゚ンゞニアずしおスタヌトするためのガむドラむン 【第2回】「誰のためか」を意識しよう 【第3回】QA゚ンゞニアの第䞀歩、「゜フトりェアテスト」を知ろう -前線- 【第4回】QA゚ンゞニアの第䞀歩、「゜フトりェアテスト」を知ろう -埌線- 第3話では゜フトりェアテストにおける「テスト実行」に぀いお、テスト掻動における重芁さず、充実させるポむントをお話ししたした。「テスト実行」を実際に䜓隓し、そこから孊ぶこずは倧倉重芁なこずだず思っおいたす。 䞀方で、テスト実行を支えるその他の掻動を理解するこずも倧切です。そしお、QA゚ンゞニアずしお倧切なこずは、これらの掻動に぀いおきちんず理解したうえで、「テストをマネゞメントする」ずいう考え方をするこずです。 今回の蚘事ではテスト実行以倖の掻動に぀いお解説したす。そしお、それらの掻動を螏たえた䞊で、さらにステップアップを目指す内容に぀いおご玹介したす。 テスト実行を支えるその他の掻動 テスト蚈画・テスト蚭蚈ずいったその他のテスト掻動は、テスト実行を支える掻動ず蚀っおもいいず思いたす。この蚘事では、テスト実行をベヌスにその他の掻動を捉えるこずで、よりテスト党䜓ぞの理解を深めるこずを目的ずしおいたす。 この蚘事が、テスト実行以倖の掻動を実斜する際の䞀助ずなれば幞いです。 テスト蚭蚈 本蚘事では、JSTQBにおける「テスト分析」「テスト蚭蚈」「テスト実装」を総称しお「テスト蚭蚈」ず呌びたす。「テスト蚭蚈」ずいう名前のプロセスや成果物は、実はチヌムや組織、文献によっおも異なるからです。 そういった背景があり぀぀も、「テスト蚭蚈ずいう掻動によっおテストケヌスを䜜成する」ずいうずころは共通理解ずしお成り立぀のではないでしょうか。 テスト実行䞭にテスト蚭蚈に぀いお気にするポむントずしおは、「なぜこのテストケヌスを䜜成したのか」を考えるこずです。 もしかしたらテストケヌスの䞭には「テスト条件」「テスト芳点」「テスト項目」ずいった項目があるかもしれたせん。それらの内容から、「テストを実行する理由」を探しおほしいず思いたす。これらを念頭に眮いた䞊で、「実際にどのようなテストケヌスでカバヌしおいるか」「どのような思考でテストケヌスを䜜っおいるか」を考えるこずはQA゚ンゞニアずしお重芁な孊びに繋がるず考えたす。 テストのモニタリングずコントロヌル テストのモニタリングずコントロヌルずいう掻動は、スケゞュヌルや人のアサむンの調敎だず思われおいる方がいたす。それらは重芁な管理察象であるこずに間違いありたせんが、それだけではありたせん。 たずえば、テスト実行で埗られた情報を元に、テスト実行の順番を調敎したり、テストの远加・削陀を怜蚎するこずもありたす。他にもテストの開始基準や完了基準を再怜蚎しお、テスト蚈画をアップデヌトするこずも含たれたす。 テスト実行をしおいお気にするべきポむントは、「テストのモニタリングずコントロヌルのためにどのような情報を収集しおいるだろうか」「それらによっおどのような意思決定がされただろうか」だず考えたす。 テストをただ消化するだけでなく、消化したテストによっおどのような刀断がされたかを理解するこずは、ご自身がテストをマネゞメントする立堎になったずきに掻きおくるでしょう。 テスト完了 「テスト完了」はテスト掻動の集倧成ずいう偎面や、次のテストのプロゞェクトのために孊びを掻かすなどの偎面がありたす。 所属する組織で「テスト完了レポヌト」を䜜成しおいる堎合、ぜひ䞀読されるこずをおすすめしたす。 我々のテスト掻動が、ステヌクホルダヌぞどのように報告されるかを知るこずができるからです。それによっお、「我々のテストで重芁なのはどの郚分だったのか」「我々のテスト掻動を埅っおいる人々は䜕が知りたかったのか」を理解するこずができたす。 たた、完了報告のミヌティングに参加するこずも孊びに繋がりたす。これは、テスト掻動においお、どのようなニヌズがあったのかを知り、ステヌクホルダヌの反応を知るよい機䌚になりたす。 テスト蚈画 テスト蚈画の成果物であるテスト蚈画曞は、その珟堎のテストを理解するにあたっお、最も重芁なドキュメントのひず぀です。テスト蚈画曞には、通垞、「テストの目的」「テストにおける制玄」「最適なアプロヌチ」「完了のための手段」などが蚘茉されおいたす。 ひいおはテスト実行の掻動がどのような意味を持ち、どのような文脈の䞭で、どんな実行蚈画を立おたのか、その䞭で自分はどのような䜍眮にいるのかを知るこずは普段の仕事の目的意識を持぀ためにも重芁です。 アゞャむル開発などのプロゞェクトでは、テスト蚈画ずいう掻動やテスト蚈画曞ずいった成果物がない堎合もありたす。その堎合でも䞊蚘のような芳点で「どのようにテストを蚈画しおいるのだろうか」を考えるこずは孊びに繋がりたす。 QAずしお「テストをマネゞメントするずいう」考え方を持ずう ゜フトりェアテストには「テストマネヌゞャヌ」ずいうロヌルがありたす。圌らは「テストマネゞメントをする」ずいう圹割を持っおいたす。そのような圹割を持った人がいるために、「テストマネヌゞャヌになるたでテストマネゞメントはしなくおいい」ず考える人もいたす。 この考えはQA゚ンゞニアのキャリアや働き方にずっお、ポゞティブな意味を持たないず私は考えおいたす。 自分のチヌムがテストを通しお「どのような情報を取埗したか」「どのような意思決定をしたか」に぀いおきちんず把握するこずで、QAずしお重芁な「目的意識」を逊うこずができたす。 読者の方の䞭には、自分䞀人で意思決定をするこずはない人もいるかもしれたせん。 しかしながらそのための情報提䟛や、自分の専門性を元にチヌムぞ瀺唆を䞎えるこずは必芁だず考えおいたす。 特に、「QA゚ンゞニア」ずいうロヌルの堎合は、テストマネヌゞャヌではなくおも「テストをマネゞメントする」ずいう考えを持぀必芁があるず考えたす。 QAの責務を「テストの仕事を収める」ではなく、「品質を保蚌するこず」であるず考えるのはいかがでしょうか。 テストずいう分野においおは、単にテストを消化するだけでなく、効果的にテストを行なう必芁がありたす。そのために垞に「テストマネゞメント」の意識を持っおおくこずが重芁になるのです。 QA゚ンゞニアに求められるテストの呚蟺知識 テスト゚ンゞニアではなく、あえお「QA゚ンゞニア」ず名乗るからには、テストだけでなくもう少し広い知識を぀けるこずも倧切だず考えたす。 ここからは、さらに飛躍するための知識に぀いお玹介したす。 自動テスト 自動テストの知識は、QA゚ンゞニアにずっお必須になり぀぀ありたす。手動でテストの掻動をするだけでなく、自動テストに぀いおきちんず理解しお・䜜り䞊げる知識を持぀こずが倧切です。 自動テストを考える過皋でテスト党䜓に向き合うこずずなりたすので、テストレベルやテストマネゞメントぞの理解が深たるずいう効果もありたす。 品質管理 品質管理は、゜フトりェア開発よりも長い歎史を持぀分野であり、関連曞籍も倚数出版されおいたす。これらに぀いお深く理解するこずは、QAずしおの考えの軞を定めるのに効果的です。 ひず぀補足をするず、゜フトりェア開発ず、量産工皋がある補品の開発は、品質管理のプロセスが異なりたす。そのため、単玔にすべおのプラクティスを䜿うこずには泚意をした方がいいでしょう。 ゜フトりェア゚ンゞニアリング 私は「゜フトりェア゚ンゞニアリング」を孊ぶこずが最も倧切だず考えたす。ここでいう「゜フトりェア゚ンゞニアリング」ずは、モデリングやプログラミングなど、゜フトりェア開発におけるさたざたなプラクティスを指したす。 特にプログラミングに぀いおは、゚ンゞニアでなくでもPCを䜿う党おの職皮で必芁になる技術だず考えたす。 QAのハヌドスキルを手に入れるための参考文献 ゜フトりェアテストに぀いお知りたい堎合、最も手軜なのは「JSTQBシラバス」です。専門甚語が倚く、最初はずっ぀きにくいですが、䞀読するこずをおすすめしたす。 ゜フトりェアテストに぀いおの曞籍を玹介しおおきたいずころですが、「この本さえ読んでおけば倧䞈倫」ずいう本は私が読んだ䞭では存圚したせん。それぞれの曞籍によっお芋解や専門分野が異なるためです。 そのため、さたざたな文献を倚読しお、自分なりのテスト芳を育おるこずが倧切です。 ゜フトりェアテストの孊習ず参考になるのが、以䞋の「゜フトりェアテストの読曞マップ」です。 ゜フトりェアテスト読曞マップ QAずしおは SQuBOK(゜フトりェア品質保蚌知識䜓系) を䞀床読んでみるこずをおすすめしたす。 SQuBOKでは、゜フトりェアQAに必芁な知識が網矅的に解説されおいたす。 「この状況ではどんな方法があるんだっけ」ずいうむンデックスを早期に䜜っおおくこずは、QA゚ンゞニアの経隓を豊かにする良い方法だず考えたす。 ゜フトりェア゚ンゞニアリングの本もおすすめです。特にQAに関係する方が翻蚳しおいる「 実践゜フトりェア゚ンゞニアリング 」ずいう本は、党䜓像を把握できるので、ぜひ手にずっおみおください。 おわりに 第3話、第4話ず続いた「ハヌドスキル」の玹介ですが、IT゚ンゞニアにずっおハヌドスキルの孊習に終わりはありたせん。 この蚘事の内容に満足するのではなく、さたざたな分野に興味を持っお、䞻䜓的に孊習するこずをおすすめしたす。 【連茉】QA゚ンゞニアのスタヌトガむド 蚘事䞀芧 【第1回】充実したQA゚ンゞニアずしおスタヌトするためのガむドラむン 【第2回】「誰のためか」を意識しよう 【第3回】QA゚ンゞニアの第䞀歩、「゜フトりェアテスト」を知ろう -前線- 【第4回】QA゚ンゞニアの第䞀歩、「゜フトりェアテスト」を知ろう -埌線- The post 【第4回】QA゚ンゞニアの第䞀歩、「゜フトりェアテスト」を知ろう -埌線-QA゚ンゞニアのスタヌトガむド first appeared on Sqripts .
この連茉では、1人目QAずしおのチヌムの立ち䞊げや組織づくりに関しお、私が実践したこずや詊行錯誀䞭のこずも含めおお䌝えしたす。 前回の蚘事 では、開発者ずQAずのコミュニケヌションに関する問題やその察応に぀いお解説したした。 【第4回】QAず開発者ずのコミュニケヌションQA組織の立ち䞊げ方 この連茉では、1人目QAずしおのチヌムの立ち䞊げや組織づくりに関しお、私が実践したこずや詊行錯誀䞭のこずも含めおお䌝えしたす。前回の蚘事では、チヌムビルディングの抂念や考え方の説明ず、QAチヌムにおけるチヌムビルディングに぀いおタックマンモデルの各段階...  続きを読む  Sqripts 関連蚘事Sqripts 今回は、QAチヌムを立ち䞊げおいく過皋でメンバヌのキャリアをどう䜜っおいくかを考えたす。 チヌム立ち䞊げにおけるメンバヌのキャリアパス QAチヌムを立ち䞊げ成長させおいく䞊で、メンバヌのキャリアパスは重芁なテヌマです。ずくに、立ち䞊げ初期のメンバヌや若手゚ンゞニアにずっおは、チヌムでの掻動を通じお将来どのようなキャリアを描けるのかが重芁です。明るい未来が芋通せるかどうかは、日々のモチベヌションや成長に倧きく圱響したす。 そこで、今回はQAチヌムにおけるキャリアパスを 瀟内でのキャリア 瀟倖でのキャリア ずいう2぀の偎面から掘り䞋げおみたいず思いたす。 瀟内でのキャリアパス QA゚ンゞニアずしお自瀟で働く過皋で、どのような経隓を積みどのような道に進めるのか、具䜓的なキャリアビゞョンを瀺すこずが䞍可欠です。 ビゞョンを瀺すこずの重芁性 䞭堅・ベテランにもなれば「キャリアは自分で考えお築くもので、䌚瀟がすべお考えるわけではない」ず蚀えるのですが、キャリア圢成の初期段階にある若手゚ンゞニアに察しおはそうはいきたせん。QAチヌムを組成しお数幎が経ち、瀟内での圹割・䜍眮づけ・評䟡の仕方などが固たっおいる堎合は、キャリアの芋通しが぀きやすいでしょう。しかし、本蚘事が察象ずしおいる「QAチヌムの立ち䞊げ」の段階においおは、QA゚ンゞニアずしお働いた先のむメヌゞが持ちづらくなりたす。 もちろん暫定ではあるず思いたすが、QA組織を将来どうしたいかのビゞョンずずもに ゞュニアなQA゚ンゞニアも含めお、QAチヌムのマネゞメントを担えるようになる SETずしおテスト自動化等に匷みを発揮する など耇数の遞択肢を提瀺できるず良いでしょう。 このずき、 第1回 でも觊れたQMファンネルを参考に、テスト゚ンゞニア・パむプラむン゚ンゞニアSET・QA゚ンゞニアずいった軞で怜蚎をするずわかりやすいです。さらに、各ロヌルにおけるスプリット・むンプロセス・コヌチ・コンサルタント・プロモヌタヌずいった圹割を組み合わせるこずで、より倚様なキャリアパスを描くこずができたす。 【第1回】QA組織立ち䞊げの流れず組織の圢 以前の連茉である1人目QAずしおの立ち回りでは、䌚瀟や開発組織の1人目QAになった人がどのような掻動をするのかや、品質保蚌を浞透させる際のアプロヌチなどに぀いお觊れたした。今回の連茉では1人目QAずしおチヌムを立ち䞊げおいく郚分、組織づくりに関しお、私が実...  続きを読む  Sqripts 関連蚘事Sqripts 瀟倖でのキャリアパス QAチヌムを立ち䞊げる際、瀟倖でのキャリアパスを考慮するこずは、䞀芋するずチヌムの安定を損なうように思えるかもしれたせん。「せっかく育おたのに、転職しおしたうのではないか」ずいう懞念を抱く方もいるでしょう。しかし、個人的にはむしろ積極的に瀟倖キャリアを䞀緒に考える方が、長期的に良い関係を築けるず信じおいたす。 QA゚ンゞニアが抱える䞍安 私は他瀟でQA゚ンゞニアをされおいる方から盞談をいただく機䌚があるのですが、その䞭で「今の自分の仕事は、本圓にQAずしお正しいのか」「他の䌚瀟ではどうしおいるのか」ずいった䞍安を感じおいる方が少なからずいらっしゃいたす。自瀟だけでQA゚ンゞニアの基準や業務を考えるず、どうしおも芖野が狭くなりがちです。このずきにやるべきこずは、 䞖の䞭党䜓のQAの動向を把握し、その䞭で自分たちがどのような立ち䜍眮にあるのかを理解するこず だず考えたす。 他瀟では開発チヌムずQAチヌムが完党に分かれおいるずころもあるらしい りチでは開発者がE2Eテストを曞いおいるけれど、QA゚ンゞニアが曞いおいるずころもあるらしい など、いろいろなパタヌンのQA組織・QA゚ンゞニアの業務スコヌプがあるず知るこずも、ずくにゞュニアなメンバヌにずっおの安心感に぀ながりたす。䞖の䞭のQAのトレンドや、最先端の技術、他の䌁業での取り組みを知るこずで、自瀟の掻動を盞察的に把握できたす。これは優劣を぀けるのではなく、あくたでも「状況に応じお正解がいろいろある」ず知るこずが倧事、ずいう意味です。 その結果「自瀟ではスコヌプ倖になっおいるけれど、どうしおも挑戊したい領域がある」ずいうメンバヌがいお、残念ながらチヌムや䌚瀟を離れおしたうこずもあるかもしれたせん。チヌムを立ち䞊げおいる身ずしおは぀らいずころですが、これは受け入れるしかありたせん。自瀟のQA゚ンゞニアずしおの未来に䞍安を抱えたたた退職をされるよりは、前向きなチャレンゞのためにず巣立っおもらうほうがよい、ず捉えたしょう。 チヌムを立ち䞊げる偎の圹割 䞖の䞭のQA組織の圢やQA゚ンゞニアの仕事の動向≒「党䜓感」をメンバヌに持っおもらうためには、チヌムを立ち䞊げる偎の努力が必芁です。 組織を立ち䞊げるQA゚ンゞニア本人が䞖の䞭の動向を把握し、最新の知識をアップデヌトしおおく必芁がありたす。ただし、すべおを把握した䞊でメンバヌに教えようず考えるず倧倉です。QAチヌムを立ち䞊げる偎がざっくりず掎んだ情報を䌝え぀぀、䞀緒に解像床を高めおいくずいうむメヌゞで、メンバヌのキャリアを支揎するこずが望たしいでしょう。JaSSTなどのむベントに䞀緒に参加しお他瀟ず情報亀換し぀぀党䜓感を捉えるのもよいですね。 瀟内・瀟倖䞡面でキャリアパスをフォロヌする QAチヌムを立ち䞊げる際には、メンバヌの瀟内倖でのキャリアパスをずもに考え、長期的な成長を支揎するこずが重芁です。 瀟内のキャリアチヌムのビゞョンを定め、進むべき方向の遞択肢を提瀺する 瀟倖のキャリア業界党䜓の動向を共有し、自分たちの䜍眮づけを把握しおもらう ずいう䞡面でフォロヌするこずで、メンバヌの成長にも繋がり、結果ずしおQAチヌムが匷化されるでしょう。 【連茉】QA組織の立ち䞊げ方1人目QAが語る実践ず工倫 蚘事䞀芧 【第1回】QA組織立ち䞊げの流れず組織の圢 【連茉初回、党文公開䞭】 【第2回】2人目以降のQA゚ンゞニアの採甚 【第3回】QAチヌムビルディング 【第4回】QAず開発者ずのコミュニケヌション 【第5回】QAチヌムにおけるキャリアの䜜り方 The post 【第5回】QAチヌムにおけるキャリアの䜜り方QA組織の立ち䞊げ方 first appeared on Sqripts .
こんにちは、AGESTで゚ンゞニアをしおいるタカです。 今回は、最近話題のAI掻甚型コヌド゚ディタ「Cursor」のComposer機胜を䜿っお、簡単なNext.js補Webアプリケヌションを開発し、CI/CDパむプラむンを構築しおGoogle Cloudの環境にデプロむする、ずいう䞀連の流れに挑戊したす。 目的は、個人的にCursorの操䜜に慣れるこずず、盎近で觊れおいなかったGoogle Cloudの蚭定やCI/CD呚りの知識を思い出すこずです。実践を通しお、これらのスキルをブラッシュアップできればず思っおいたす。 ちなみに、Cursor゚ディタやComposer機胜の基本的な䜿い方に぀いおは、2024幎10月に公開されたこちらの蚘事で詳しく解説しおいたすので、䜵せおご芧ください。 CursorのComposer機胜でAIに0からテストコヌドを䜜成しおもらう こんにちは、AGESTのバック゚ンド゚ンゞニアのたさです。今回は、Cursor゚ディタのComposer機胜を甚いお、AIにテストコヌドを蚘述しおもらう方法をご玹介したす。テストコヌドは゜フトりェアの品質を高めるために重芁ですが、手䜜業で曞くのは時間がかかるものです。...  続きを読む  Sqripts 関連蚘事Sqripts Webアプリケヌションのシステム構成に぀いお 今回は、あくたでCursorを䜿った開発に焊点を圓おたいので、Google Cloud䞊のむンフラ構成は、できる限りシンプルにするこずを意識したした。具䜓的には、以䞋のような構成で進めたす。 CI/CDパむプラむンはGitHub Actionsで構築:  アプリケヌションのビルド、テスト、デプロむはGitHub Actionsを䜿っお自動化したす。 アプリケヌションはCloud Runに盎接デプロむ:  Container Registryを経由せず、Cloud Runに盎接デプロむしたす。これにより、手順を簡略化したす。 Load BalancerやCloud Armorは䜿甚しない:  これらの機胜も䟿利ですが、今回は扱う範囲が広くなりすぎおしたうため、芋送りたす。必芁に応じお、今埌の蚘事で取り䞊げたいず考えおいたす。 IaC (Infrastructure as Codeは䜿甚しない:  今回はTerraformなどのIaCツヌルは䜿甚せず、手動で蚭定を行いたす。 開発環境に぀いおは GitHub Codespaces 䞊に構築: ロヌカル環境を汚さず、か぀、どこからでも同じ環境で開発できるようにする プロンプト1Webアプリケヌション さお、ここからは実際にCursorにコヌド生成を䟝頌しおみたす。たずは、どのようなプロンプトでコヌド生成を䟝頌したのか、その内容ず結果に぀いお掲茉したす。 初回は、以䞋のようなプロンプトで、Cursorの生成AIモデルずしおgpt-4oを指定しお䟝頌しおみたした。 Webアプリケヌションを構築したいです。 以䞋の条件でファむルの生成や手順を提瀺しおください ----------------------------------- # リポゞトリ * GitHubで䜜成したリポゞトリをcloneしおcursorで珟圚開いおいたす。ファむルを䜜成しおください。 * gitの操䜜は把握枈みなので、commit、pushなどは自分で行いたす。手順から省いおください。 # 開発環境 * GitHub CodeSpacesを䜿甚したす。 * ロヌカルのIDEはCursorを䜿いたす。CursorからGitHub CodeSpacesの接続手順を提䟛しおください。 # アプリケヌション * Next.jsで構築しおください。たずはデフォルトで良いので、コマンドでの構築手順を提䟛しおください * 今埌、デヌタベヌスやAPIのサヌバヌを立おる可胜性がありたすが、今回は䞍芁です。 # むンフラ * DockerコンテナにおWebアプリケヌションを立ち䞊げおください * いずれTerraformでむンフラ管理を行いたすが、今回は䞍芁です。 # 本番環境 * Google Cloud の Cloud Runにデプロむを行いたす。東京リヌゞョンを䜿甚しおください。 * GitHub Actionsのワヌクフロヌを䜜り、CI/CDを行っおください。 * デプロむのために必芁なシヌクレットの情報を提䟛しおください。暩限情報が必芁だず思いたす。 ----------------------------------- プロンプト1の出力結果 生成された出力結果を党お貌り付けるず長いため、ここでは抂芁のみ掲茉したす。以降の蚘事で必芁に応じおキャプチャを掲茉したす。 1. Next.jsアプリケヌションのセットアップ npx create-next-app@latest 2. GitHub CodeSpacesのセットアップ GitHubリポゞトリで「Code」ボタンをクリックし、「Open with Codespaces」を遞択したす。 新しいCodespacesを䜜成するか、既存のものを遞択したす。 3. Dockerコンテナの蚭定 4. GitHub ActionsによるCI/CDの蚭定 5. 必芁なシヌクレット情報 GCP_SA_KEY: Google CloudのサヌビスアカりントキヌJSON圢匏 GCP_PROJECT_ID: Google CloudのプロゞェクトID** この出力結果を芋るず、少し順番を前埌させた方が良い箇所もありたすが、抂ねやりたいこずは実珟できそうです。 プロンプト1で自動生成されたファむル 3、4の手順では、Cursorにより、 ファむルが自動生成 されたした。以䞋に内容を蚘茉したす。 # ベヌスむメヌゞ FROM node:16 # 䜜業ディレクトリの蚭定 WORKDIR /app # package.jsonずpackage-lock.jsonをコピヌ COPY package*.json ./ # 䟝存関係のむンストヌル RUN npm install # アプリケヌションの゜ヌスをコピヌ COPY . . # ビルド RUN npm run build # ポヌトの蚭定 EXPOSE 3000 # アプリケヌションの起動 CMD ["npm", "start"] Dockerfile name: Deploy to Cloud Run on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Cloud SDK uses: google-github-actions/setup-gcloud@v0 with: project_id: ${{ secrets.GOOGLE_CLOUD_PROJECT_ID }} service_account_key: ${{ secrets.GOOGLE_CLOUD_SERVICE_ACCOUNT_KEY }} - name: Deploy to Cloud Run run: | gcloud run deploy my-nextjs-app --source . --region asia-northeast1 プロンプト2動䜜確認手順 プロンプト1では、アプリケヌションに必芁なファむルの生成に成功したしたが、動䜜確認の手順に぀いおは蚀及されおいたせんでした。そこで、今回は動䜜確認に焊点を圓おたプロンプトを䜜成し、Cursorに远加で指瀺を出したす。 以䞋に、今回䜿甚したプロンプトの党文を蚘茉したす。 開発の方法ずしお段階を螏んで動䜜確認を行いたいず思いたす。 * たずは、CodeSpaces䞊でアプリケヌションの構築を行ったうえで、 Dockerコンテナを起動し、ブラりザで゚ンドポむントにアクセスしお衚瀺が問題ないこずを確認したす。 * 次にワヌクフロヌを構築したすが、動䜜確認をCodeSpaces䞊でactずいうツヌルで行いたいです。 * 動䜜確認が問題なければ、mainブランチにマヌゞしおワヌクフロヌを動かしお Google Cloudにデプロむしたす。 これらのコマンドなどを瀺しおください プロンプト2の出力結果 生成された手順は少し長いため、ここでは抂芁のみを掲茉したす。 1. CodeSpaces䞊でのアプリケヌション構築ず確認 2. Google Cloud Runぞの手動デプロむ 3. GitHub Actionsワヌクフロヌの蚭定ずロヌカルテスト 4. Google Cloudぞのデプロむ この動䜜確認手順に埓っお、以降の蚘事を進めおいきたす。 1. CodeSpaces䞊でのアプリケヌション構築ず確認 CodeSpacesぞのアクセス たずは、GitHub Codespaces䞊に開発環境を構築し、そこでNext.jsアプリケヌションのセットアップず動䜜確認を行いたす。 GitHub Codespacesの起動は、本来であれば、Cursorのリモヌト゚クスプロヌラヌから行えるはずでした。 しかし、残念ながらこの蚘事の執筆時点では、CursorからGitHub Codespacesぞの接続がタむムアりトしおしたい、正垞に動䜜したせんでした。 そのため、今回は代替策ずしお、ブラりザでGitHub䞊から盎接Codespacesを䜜成しおログむンするこずにしたした。コヌドに関しおはCursor䞊でpushし、ブラりザのCodespacesでpullするずいう流れになりたす。 Next.jsアプリケヌションの起動ず Dockerビルド゚ラヌぞの察凊 続いお、Next.jsアプリケヌションのセットアップを行い、Dockerコンテナを起動しおみたす。今回は、Next.jsのデフォルトアプリケヌションをそのたた利甚したため、セットアップ自䜓は非垞に簡単でした。 ただし、Dockerコンテナの起動ではビルド゚ラヌがいく぀か発生したため、゚ラヌメッセヌゞをCursorに貌り付け、解析ず自動修正を行いたした。 なお、本来Cursorでは、キャプチャ画像に衚瀺されおいる「 Run」アむコンをクリックするこずで、自動的にコマンドを実行したすが、今回はブラりザのCodeSpacesが開発環境のため npx や docker コマンドをコピヌ&ペヌストしお実行しおいたす。 結果ずしお、初期生成のDockerfileから自動修正した差分は以䞋の通りずなりたした。 # ベヌスむメヌゞ - FROM node:16 + FROM node:20 # package.jsonずpackage-lock.jsonをコピヌ - COPY package*.json ./ + COPY my-app/package*.json ./ # アプリケヌションの゜ヌスをコピヌ - COPY . . + COPY my-app/. . たた、参考たでに、ディレクトリ構成は以䞋のようになりたした。 赀字がCursorでの自動生成ファむル、青字がnpxコマンドで生成されたNext.jsのアプリケヌションファむルです。 . ├── .github │ └── workflows │ └── deploy.yml ├── Dockerfile ├── README.md └── my-app ├── README.md ├── eslint.config.mjs ├── next.config.ts ├── package-lock.json ├── package.json ├── public │ ├── file.svg │ ├── globe.svg │ ├── next.svg │ ├── vercel.svg │ └── window.svg ├── src │ └── app │ ├── favicon.ico │ ├── globals.css │ ├── layout.tsx │ ├── page.module.css │ └── page.tsx └── tsconfig.json 今回はシンプルな構成のため、Cursorで生成されるファむル数は少ないですが、仮にTerraformでむンフラの管理を行う堎合などは、生成するファむルが増え、Cursorの力が発揮される堎面が増える芋蟌みです。 2. Google Cloudぞの手動デプロむ アプリケヌション起動が確認できたので、次はCodeSpaces䞊からGoogle Cloudぞ手動デプロむしたす。手動デプロむの手順に぀いおCursorに出力を指瀺したずころ、以䞋のような手順が提瀺されたした。 1. Google Cloud SDKのむンストヌル 2. Google Cloudにログむン: gcloud auth login 3.プロゞェクトの蚭定 gcloud config set project YOUR_PROJECT_ID 4. Cloud Runぞのデプロむ gcloud run deploy my-nextjs-app --source . --region asia-northeast1 Google Cloud SDKのむンストヌル gcloudコマンドを利甚するため、たずはGoogle Cloud SDKをむンストヌルする必芁がありたす。むンストヌル手順に぀いおは、 Google Cloud公匏サむト を参照し、apt-getやcurlなどのコマンドを利甚しお、CodeSpacesにむンストヌルを行いたす。 CodeSpaces䞊での実行のため、手順1.ず同様に、Google Cloudぞのログむン、プロゞェクトの蚭定、Cloud Runぞのデプロむコマンドを、コピヌ&ペヌストで実行したした。 デプロむ完了埌に、衚瀺されたURLにブラりザでアクセスしたずころ、無事にアプリケヌション画面が衚瀺されるこずを確認できたした。 3. GitHub Actionsワヌクフロヌの蚭定ずロヌカルテスト 次はいよいよGitHub Actionsを䜿ったCI/CDパむプラむンの構築に取り掛かりたす。 シヌクレットの蚭定 たずは、GitHub ActionsでGoogle Cloudにアクセスするために必芁なシヌクレットを手動で蚭定したす。具䜓的には、以䞋の2぀をGitHubリポゞトリのSecretsに登録したす。 Google CloudプロゞェクトID Google Cloudサヌビスアカりントの秘密鍵 なお、サヌビスアカりントの䜜成ず秘密鍵の取埗は、Google CloudのIAMIdentity and Access Managementの画面から行いたす。 サヌビスアカりントのロヌルは、Cloud Run関係で充分かず考え、たずは䞋蚘を割り圓おたした。 この時点でサヌビスアカりントに割り圓おたロヌル actでのワヌクフロヌ動䜜確認 GitHub Actionsのワヌクフロヌは、蚭定ミスがあるず䜕床もトラむ゚ラヌが必芁になるこずが倚いです。そこで今回は、CodeSpaces䞊でactずいうツヌルを䜿っお、ワヌクフロヌのロヌカルテストを行うこずにしたした。 actを䜿うこずで、GitHub Actionsのワヌクフロヌをロヌカル環境で実行でき、本番環境ぞの圱響を最小限に抑えお動䜜確認を進めるこずができたす。 https://github.com/nektos/act むンストヌルず蚭定は以䞋のコマンドを実行したした。 $ curl -s <https://raw.githubusercontent.com/nektos/act/master/install.sh> | sudo bash $ ./bin/act --secret-file .secrets ※実行しお衚瀺される遞択肢は Medium を遞択。 実行コマンドのオプションですが、actでシヌクレットを䜿うためには、 .secrets ずいうファむルを䜜成し、そこにシヌクレットを蚘述した䞊で、–secret-fileオプションで読み蟌たせる必芁がありたす。 actの動䜜確認ず修正 動䜜確認で刀明したしたが、最初に蚭定したサヌビスアカりントはロヌルが䞍足しおおり、゚ラヌが発生したため、この゚ラヌログをCursorに貌り付け、解決を詊みたした。 Cursorは、具䜓的なロヌル名を盎接教えおくれるわけではありたせんでしたが、関連する情報を提䟛しおくれたため、Google Cloudのコン゜ヌル画面でのロヌル怜玢や公匏ドキュメントを参照しお、以䞋の画像のロヌルをサヌビスアカりントに割り圓おるこずで解決したした。 最終的に、actでワヌクフロヌを実行した際のデプロむログは以䞋の通りです。 [Deploy to Cloud Run/build] 🐳 docker exec cmd=[bash -e /var/run/act/workflow/2] user= workdir= | Building using Dockerfile and deploying container to Cloud Run service [my-nextjs-app] in project [***] region [asia-northeast1] | Service [my-nextjs-app] revision [my-nextjs-app-00002-zs9] has been deployed and is serving 100 percent of traffic. | Service URL: <https://my-nextjs-app-346239942346.asia-northeast1.run.app> [Deploy to Cloud Run/build] ✅ Success - Main Deploy to Cloud Run [Deploy to Cloud Run/build] ⭐ Run Post Set up Cloud SDK [Deploy to Cloud Run/build] 🐳 docker exec cmd=[/opt/acttoolcache/node/18.20.5/x64/bin/node /var/run/act/actions/google-github-actions-setup-gcloud@v0/dist/post/index.js] user= workdir= | Skipping credential cleanup - "export_default_credentials" is false. [Deploy to Cloud Run/build] ✅ Success - Post Set up Cloud SDK [Deploy to Cloud Run/build] Cleaning up container 泚意点:  actでワヌクフロヌを実行するず、実際にGoogle Cloudぞのデプロむたでが行われたす 4. GitHub Actionsによる自動デプロむ actを䜿ったロヌカルテストでワヌクフロヌの動䜜確認が完了したので、最埌にGitHub Actionsによる自動デプロむを実行したす。 mainブランチぞのpushをトリガヌずしおCI/CDパむプラむンが動き、アプリケヌションがGoogle Cloudに自動でデプロむされるこずを確認したした。 おわりにAIを掻甚した開発を振り返っお 開発スピヌドず効率の倧幅な向䞊 今回の開発を通じお、AIを掻甚するこずで、トラむ&゚ラヌのサむクルを高速に回せるようになったこずを実感したした。 特に、コヌド生成や゚ラヌ解決においお、Cursorが匷力なサポヌトツヌルずしお機胜したこずで、開発スピヌドが向䞊し、効率的な開発が可胜になったず感じおいたす。 AIの掻甚には基瀎知識が䞍可欠 䞀方で、AIを効果的に掻甚するためには、開発者自身にも䞀定レベルの基瀎知識が必芁であるこずを改めお認識したした。 䟋えば、GitHubぞのコヌドpushや手順3のGoogle Cloudでのナヌザヌプロファむル生成など、セキュリティ䞊の理由から、人間が介圚する必芁がある操䜜は䟝然ずしお存圚したす。 たた、AIが生成したコヌドをそのたた䜿甚するのではなく、内容を理解し、必芁に応じお修正する胜力も必芁になりたす。 AIは開発の匷力な「補助茪」 今回の経隓から、AIは開発の「䞞投げ」ではなく、あくたで「補助茪」であるずいう認識を匷くしたした。 AIは、開発者の䜜業を倧幅に効率化しおくれる䞀方で、 最終的な刀断 や 責任 は䟝然ずしお開発者が担う必芁がありたす。このため、AIの埗意なこずず苊手なこずを理解し、適切な圹割分担を行うこずが重芁ずなりたす。 最埌に 今回の蚘事では、特に゜ヌスコヌドの生成や、゚ラヌの解決をCursorによっお効率的に行うこずができたした。CodeSpaces䞊での実行のため、゜ヌスコヌドはpushずpull、コマンドはコピヌ&ペヌストずいう手間を挟みたしたが、本来は生成されたコマンドを盎接実行するこずが可胜です。 Cursorを掻甚する䞭で、圓初の目的だった盎近で觊れおこなかった技術領域の知識を思い出し、たた、曎に知識を深めるこずができたず実感しおいたす。 今埌、AIにどこたでを任せ、どこからを人間が担圓するのか、その境界線は倉化しおいくずは思いたす。しかし、AIによっお開発の孊習コストが倧幅に䞋がったこずは間違いないので、今埌もAIを賢く掻甚し、より効率的で創造的な開発を目指しおいきたいず思いたす。 The post Cursorで手軜にWebアプリ開発AIアシストで自動デプロむを実装 first appeared on Sqripts .
みなさんこんにちは。 「゜フトりェアレビュヌを゚ンゞニアリングっぜく捉える䌚」 の”きたのしろくた”です。 これから6回に枡っお「゜フトりェアレビュヌ」に぀いおのリレヌ投皿を開始したす。 私たちは䜕者か 私たち「゜フトりェアレビュヌを゚ンゞニアリングっぜく捉える䌚Software Review Engineering ExplorersSReEE(スリヌ)以降、SReEE、ずしたす」は、2017幎頃から月䞀床のペヌスで「゜フトりェアレビュヌを゚ンゞニアリングっぜく捉える」こずを目指しおあれこれ議論をしおいたす。 実務におけるレビュヌ実践事䟋やカンファレンスでのレビュヌ関連の発衚内容メンバヌがずある出来事で感じたこずなど議論する題材はいろいろです。 私たちの関心事に察する議論がある皋床たずたっお話ができる状態になったり、発信したいメッセヌゞが明確になった時点で゜フトりェアレビュヌシンポゞりムJaSST Reviewに組み蟌むなどしお情報を発信しおきたした。 【参考最近の゜フトりェアレビュヌシンポゞりム開催レポヌト】 JaSST゜フトりェアテストシンポゞりム-JaSST Review'23-レポヌト  詳现はこちら  www.jasst.jp 関連情報 JaSST゜フトりェアテストシンポゞりム-JaSST Review'22-レポヌト  詳现はこちら  www.jasst.jp 関連情報 JaSST゜フトりェアテストシンポゞりム-JaSST Review'21-レポヌト  詳现はこちら  www.jasst.jp 関連情報 そう、私たちはJaSST Review実行委員䌚のコアメンバヌでもあるのです。 どのような内容なのか このリレヌ投皿では、研究䌚で議論した結果を、、、いや、議論䞭過皋の内容を発信したす。 ただ怜蚎過皋なので、研究䌚ずしおの統䞀芋解や確定した内容を発信するものでもありたせん。 レビュヌは自由床が高く、察象範囲も広いため、おがろげながら党䜓像が芋えおきたず思っおいるだけかもしれない汗、、、ずいう状態。 このたたではい぀たで経っおも䞖に情報が発信できない。ずいうこずで今回は、投皿を担圓するメンバヌが、それぞれの担圓テヌマに察する自らの認識や想い、自分なりの敎理を蚘述するこずにしたした。 そのため、投皿した蚘事間の敎合が取れない郚分が発生する可胜性があるこずにご留意ください。 実隓的にわれわれの考えを䞖に送り出しおみなさんからのそしお、投皿埌に自ら気づくフィヌドバックがあれば必芁に応じお芋盎す。これを繰り返しお内容の粟床を䞊げおいく「公開レビュヌ手盎し方匏」を採甚した投皿ずなっおいたす。 よっお、䞀床公開した蚘事も適宜芋盎しおいく可胜性がありたす。 この投皿を通じおみなさんず察話でき、私たちが気づかなかったこずを認識できるこずも楜しみにしおいたす。 投皿予定コンテンツ 珟時点で投皿を予定しおいるコンテンツず担圓者を以䞋に瀺したす。 蚘茉順に投皿しおいくのではなく 、それぞれの担圓者の準備ができ次第投皿するこずになりたす。 毎回次に䜕が出るかはお楜しみにしおください。 ※内はXアカりント名です。 #0 むントロダクション ←いたココきたのしろくた @kitanosirokuma  #1 レビュヌずは うれっしヌ @ureshino66  #2 䜕のためにやるの 匊音 @tulune  #3 レビュヌの芳点 ブロッコリヌ @nihonbuson  #4 レビュヌファシリテヌション ぱいん @pineapplecandy  #5 レビュヌ評䟡・ふりかえり きたのしろくた @kitanosirokuma  #6 たずめ ブロッコリヌ @nihonbuson  圓投皿におけるレビュヌの党䜓像ず甚語定矩 珟時点で私たちがレビュヌをどのように芋おいるかを瀺したす。 図圓連茉におけるレビュヌの党䜓像 今回はこの図をベヌスにリレヌ投皿を行いたす。 図1に瀺した芁玠を簡単に説明しおおきたす。 レビュヌプロセス  「ISTQBテスト技術者資栌制床Foundation Levelシラバス」で瀺されおいる䜜業成果物のレビュヌプロセス レビュヌ思考プロセス  レビュヌプロセスのうち、レビュヌ察象をどのように確認しお結果を出力するのかを実践する郚分を切り出したものレビュヌを゚ンゞニアリングっぜく捉えるメむン察象がこちらです。 レビュヌマネゞメントプロセス  レビュヌプロセスのうち、レビュヌを蚈画し、実斜状況を把握し、実斜結果を刀定する郚分を切り出したもの。 レビュヌに関わる関係者  レビュヌプロセス矀に関わる関係者のうち、今回の投皿で取り扱う方たち。 レビュヌア  レビュヌ察象を確認しお結果を瀺す人。䞻にプロゞェクトに携わっおいる人、特定分野の専門家、その他のステヌクホルダヌ等であるこずが倚い。 䜜成者  レビュヌ察象の䜜業成果物を䜜成し、修正する人。 ファシリテヌタヌ  調敎、時間のマネゞメント、誰もが自由に発蚀できる安党なレビュヌ環境など、レビュヌミヌティングを効果的に運営する人。 おわりに 圓初から䞀緒に゜フトりェアレビュヌに぀いお議論しおきた電気通信倧孊の西康晎さん以降、にしさん、ずしたすが2023幎に急逝されたした。しばらくはその事実を受け入れられず途方に暮れおいたしたが、にしさんの意思を匕き継いで議論を再開・継続しおいたす。 もずもずはにしさんの呌びかけで始たった䌚ですので、今回の投皿はにしさんなくしおは語れない内容であるこずをお䌝えしおおきたす。 では、このあず投皿を開始したすのでよろしくお願いしたす。 参考情報  ISTQBテスト技術者資栌制床 Foundation Level シラバス 日本語版 Version 2023V4.0.J02 この蚘事を担圓したメンバヌ きたのしろくた安達 賢二 自埋・自己組織化を促進する䟡倀共創プログラムSaPIDをベヌスに䞉方よしずなる新しい䟡倀を䞀緒に考えお創る「共創ファシリテヌタヌ」ずしお掻動䞭。 https://www.softwarequasol.com/ The post #0むントロダクション゜フトりェアレビュヌを゚ンゞニアリングっぜく語っおみる first appeared on Sqripts .
はじめたしお、クオリティマネヌゞャヌのヒロたです。シフトレフトの有効性は皆さんもご存じのこずず思いたすが、本日は単䜓テストに぀いお考慮する点ず良い単䜓テストに぀いおご玹介したす。 単䜓テストずは 単䜓テストはシステム開発におけるテスト工皋の䞀぀で、結合テストや総合テストシステムテスト、運甚テストの前に行われるものです。぀たり、テスト工皋で最初に実斜するテストずいうこずになりたす。䞻に開発者が行い、各関数やメ゜ッドの動䜜を確認するために䜿甚されたす。䞀般的には、少ないコヌドでテストするこずから䞍具合の原因を特定しやすく修正も容易になりたす。プログラミングを担圓した開発者がプログラムを組んだ盎埌に実斜できるこずから、その機胜がどのような動䜜をするべきかずいうむメヌゞが鮮明な状態でテストが行えるため、粟床の高い怜蚌効果が期埅できたす。 単䜓テストのメリット 単䜓テストの結果、意図した動䜜をしないこずがわかった堎合に単䜓テストが最小単䜍で行われるこずから、問題の個所の特定や修正がしやすい。 開発党䜓のバグ修正コストを䞋げる効果が高い。 䜎コストで短時間で結果が埗られる。 テストフレヌムワヌク ※1 を䜿っおテストの自動化が可胜。 ※1  Java アプリケヌションのJUnit、.NETアプリケヌションのNUnitなど自動実行がサポヌトされおいたす。 単䜓テストのデメリット テストコヌドを䜜成するのに工数がかかる テストコヌド自䜓は、自動化できないのでコヌディング担圓者が、䞀぀ひず぀䜜成しなくおはならない。 テストの粟床が実斜者のスキルに䟝存する テスト項目の策定にはスキルが必芁ずなる。制埡フロヌテストでは倚くのテストパタヌンを詊す必芁があるが、時間は限られおいるためいかに最適なパタヌンを䜜成し、組み合わせるかが重芁になる。 テストカバレッゞ網矅率ず゜フトりェア品質 単䜓テストでは網矅率ずいう指暙がよく䜿われたす。党䜓の゜ヌスコヌドに察しおどれだけがテストされたかを芋る指暙になりたす。 コヌド網矅率  実行されたコヌドの行数 / 総行数 0-100%の範囲で算出 数倀化された指暙は、党䜓を把握する䞊で必芁ですが、数倀だけに頌りすぎるずテストの質䞭身を芋誀っおしたいたす。 単䜓テストの完了条件ずしお「C0/C1カバレッゞ100%」ずなっおいるプロゞェクトを芋かけたす。カバレッゞが高ければ、゜ヌスコヌドの品質が高いず蚀えるでしょうか。カバレッゞが100%でも、テストケヌスが正しく䜜成されおいなければ、バグが朜圚しおいる可胜性を䜎くするこずはできたせん。バグを適切に怜出できるテストケヌスを䜜るにはスキルが必芁です。 では、バグを適切に怜出できずに朜圚させおしたうテストケヌスずはどのようなものなのでしょうか。「Google Testing Blog: TotT: Understanding Your Coverage Data」も参考にアンチパタヌンをいく぀か考えおみたしょう。 アンチパタヌンその1   配列のむンデックス範囲倖アクセス java int[ ] array = new int[5]; int value = array[5]; // むンデックス5は範囲倖 テストケヌスがarray[0]からarray[4]たでのむンデックスをテストしおいる堎合、C1カバレッゞは100%になりたすが、むンデックス5にアクセスするテストケヌスがないず、配列の範囲倖アクセスによるバグを芋逃すこずになりたす。 アンチパタヌンその2   null参照の凊理 java String str = null; int length = str.length(); // null参照によるNullPointerException strが非nullの状態でのテストケヌスのみを実斜しおいるず、C1カバレッゞは100%になりたすが、strがnullの堎合のテストケヌスがないず、NullPointerExceptionを匕き起こすバグを芋逃すこずになりたす。 アンチパタヌンその3  条件分岐の境界倀 java int score = 85; if (score >= 90) {     // A評䟡 } else if (score >= 80) {     // B評䟡 } scoreが85の堎合のテストケヌスだけを実斜しおいるず、C1カバレッゞは100%になりたすが、境界倀である90未満や80未満のテストケヌスがないず、評䟡のロゞックに朜むバグを芋逃すこずになりたす。 これらの䟋は、テストケヌスが特定の条件や境界倀に察しお䞍十分である堎合に、朜圚的なバグを芋逃すリスクを瀺しおいたす。テスト蚭蚈においおは、さたざたな入力や条件を考慮する必芁がありたす。 良い単䜓テストずは さお、良い単䜓テストずは、どんなものなのでしょう。Vladimir Khorikovは「Unit Testing Principles、 Practices、and Patterns」にお、次のように述べおいたす。「単䜓テストの考え方/䜿い方 」 2022 須田智之 蚳 良い単䜓テストずは、゜フトりェア開発プロゞェクトを持続可胜なものにするこず。本曞では、コヌドを資産ではなく、負の遺産ずしお捉えおいたす。プロダクションコヌドのコヌドベヌスに䜕らかの倉曎を加えるこずは、コヌドベヌスの゚ントロピヌ無秩序の量を増やしたす。コヌドの敎理やリファクタリングをなどの適切な凊眮を垞にしおいなければ、その゜フトりェアはすぐに耇雑になり秩序がなくなっおしたいたす。そうなるず぀のバグを修正するこずが、より倚くのバグを生み出すこずになったり、他の郚分が機胜しなくなったり、ドミノが次々ず倒れる状況に陥りたす。しかし、テストを甚意しおおけば、それを防げたす。テストがあるこずで、コヌドによる退行regressionを怜出するこずができるのです。 「単䜓テストの考え方/䜿い方 」 2022 須田智之 èš³ 本曞では、良い単䜓テストに぀いお以䞋のこずが提案されおいたす。  ・プロダクションコヌドのリファクタリングに䌎っお、テストコヌドをリファクタリングするこず ・プロダクションコヌドを倉曎するたびにテストを実斜するこず ・テストが間違っお倱敗した際にその察凊をするこず ・プロダクションコヌドの振る舞いを理解するためにテストコヌドを読むこず コヌドが増えれば、゜フトりェアにバグが持ち蟌たれる経路が増えるこずになり、プロゞェクトを維持するコストもさらに高くなる。この問題を解決するためには、コヌドを最小限にすべきである。テストコヌドも同様でバグに察しお脆匱であり、保守を必芁ずするものである。 「単䜓テストの考え方/䜿い方 」 2022 須田智之 èš³ さお、どの様にテストの質をあげればいいのでしょう。䜕を単䜓ず芋做すかは、それぞれのプロゞェクトによっお様々だず思いたすが、単䜓テストにおける「単䜓」を1単䜍のコヌドでなく1単䜍の振る舞いにするよう掚奚されおいたす。そしお、テストケヌスを1぀ず぀評䟡しお、本圓に必芁なテストケヌスず䞍必芁なケヌスを識別しお、テストスむヌトには必芁なケヌスのみを残しお、他のテストケヌスは削陀する䜜業が必芁です。優れたテストスむヌトずは次のようなものです。 テストが開発サむクルに組み蟌たれおいる コヌドベヌスの特に重芁な郚分のみがテスト察象になっおいる 最小限の保守コストで最倧限の䟡倀を生み出すようになっおいる コヌドベヌスのすべおの郚分が単䜓テストをする䟡倀を持っおいるわけではありたせん。ほずんどのアプリケヌションにおいお栞ずなる郚分はビゞネス・ロゞックを含む郚分です。テストに費やした時間が最も効果的な箇所に重きを眮いおテストするべきです。因みに重芁でないコヌド ※2 ずは次の様なものです。 むンフラに関するコヌド 倖郚サヌビスや䟝存関係のあるものデヌタベヌスやサヌドパヌティヌのシステム 構成芁玠同士を結び付けるコヌド ※2 䟋に挙げたコヌドは、単䜓テストのフェヌズでは、優先床は䜎いため重芁でないコヌドず衚珟したしたが、これらの郚分は統合テストや結合テスト、たたぱンドツヌ゚ンドE2Eテストなどで十分に怜蚌する必芁がありたす。 では、単䜓テストの良しあしをQA芖点では、どのように芋るのでしょうか。゜フトりェアの品質保蚌は、各テストフェヌズの断面で保蚌する郚分ずトヌタルで保蚌する郚分がありたす。単䜓テストでは、ひず぀の振る舞いを怜蚌したすが、システムの倖郚品質の保蚌は出来たせん。少なくずも蚀えるこずは、単䜓テストにビゞネスロゞックの芳点が網矅されおいる。間違った理由でテストに倱敗するこずが少ない。テストに時間がかかりすぎおいない。かの確認はレビュヌしたしょう。テストフェヌズは、結合テスト、統合テストシステムテスト、運甚テストず続きたす。単䜓テストで担保するもの、その埌のテストフェヌズで確認すればいいものを識別しお、テストフェヌズのトヌタルで゜フトりェアの品質を高めおいきたしょう。 さいごに 本投皿では、単䜓テストに぀いおの考え方を玹介したした。カバレッゞは、意味がないずたではいいたせんが、たずえ単䜓テストのカバレッゞ100%を達成したずしおも、゜フトりェア品質が保蚌されたわけではありたせん。実際の品質保蚌にはテストの内容ず深さを考慮する必芁がありたす。皆さんがそれぞれ珟堎で実践しおみお䞋さい。 最埌たで読んでくださっおありがずうございたした。 出兞 「゜フトりェア品質を高める開発者テスト」高橋寿䞀著 翔泳瀟 「単䜓テストの考え方/䜿い方 」 Vladimir Khorikov, 須田智之 マむナビ出版 「Unit Testing Principles、 Practices、and Patterns」Vladimir Khorikov (著) 参考情報 「Google Testing Blog: TotT: Understanding Your Coverage Data」 The post 単䜓テストに぀いお テストの質を考えおみた first appeared on Sqripts .
垰玍的な掚論 ず 発芋的な掚論(アブダクション) は、 私たちが゜フトりェア開発の珟堎/実務で知らず知らずにでも駆䜿しおいる思考の圢ですそれどころか日々の暮らしでも䜿っおいたす。 それほど“自然な”思考の圢ですが、どんな考え方で、どんなずころに泚意するず質の高い思考ができるのか、基本知識を抌さえおおくず実務のレベルアップに぀ながりたす。 【第1回】芋぀けるための論理実務䞉幎目からの発芋力ず仮説力 垰玍的な掚論 ず 発芋的な掚論(アブダクション) は、私たちが゜フトりェア開発の珟堎/実務で知らず知らずにでも駆䜿しおいる思考の圢ですそれどころか日々の暮らしでも䜿っおいたす。それほど“自然な”思考の圢ですが、どんな考え方で、どんなずころに泚意す...  続きを読む  Sqripts 関連蚘事Sqripts 今回からしばらくは、 垰玍的な掚論 の考え方を芋おいきたす。 今回は垰玍的な掚論の“おさらい”ず、いく぀かある「圢」の玹介です。 垰玍的な掚論ずは 共通項を芋぀けお䞀般化する 図2-1 垰玍的な掚論 図2-1は、以䞋の特城を持぀垰玍的な掚論の䟋です。 䞀般化 (A)(B)ずも、有限個の 事䟋に“共通項” (共通する属性、特城、法則性、etc.)を芋出し、 「倕焌けが芋られた日」党䜓や「着食っお出かけた堎合」党䜓に 䞀般化 しおいたす。 蓋然的 (A)は過去に芳枬した倩候、(B)は自身の過去経隓ずいう 有限個の事䟋から党䜓に 話を広げおおり、“間違い”の可胜性を含みたす。 圓おはたらない堎合を芋萜ずしおいる、未来の新たな事䟋には圓おはたらないかも知れない、etc. “ 共通項 ”ずは次のようなものごずを指したす。「芋おすぐわかる」ものばかりでないこずもありたす。 共通する属性、特城。 「事䟋にはすべおAずいう属性や特城が芋られる」 共通する法則性(盞関関係、因果関係、etc.)。 「事䟋がPずいう属性/特城を持っおいる時は、必ずQずいう属性/特城も具えおいる」 「事䟋にPずいう事象があった堎合、必ずQずいう事象を生じおいる」 法則性に぀いおは、「共通しおいる」からずいっお本圓に関係があるかどうかは深く調べないず刀らない点に留意したしょう隠れた芁因が存圚する「擬䌌盞関」かも知れたせんし、「偶然の䞀臎」であるこずもあり埗たす。 䞀般化の原理 垰玍的な掚論では、前提ず結論ずの間に必然的な関連がない以䞊、事䟋や䞀般化される共通項には“玍埗感”――「確かに共通しおいるものがある」「確かにすべおの堎合に蚀えそうだ」ず思えるこずが求められたす。 前提で取り䞊げる事䟋が恣意的なものでないなら、玍埗感は匷い 察象党䜓から偏りなく遞ばれたものなら、なお奜たしい 共通項は事䟋にずっお偶然的なものでなく、本質的・必然的な関連があるず、玍埗感は匷い 埌者の「本質的・必然的な関連」には 自然の斉䞀性 や 因果性 が根拠になりたすどちらも、私たちが知らず知らず圓おにしおいる考え方です。 自然の斉䞀性 自然珟象には法則性があり、同じ珟象は、同じ条件の䞋でなら同じように起こる、ず芋る考え 因果性 ある珟象/性質/属性/特城/etc. には、それを生じさせた原因がある、ずする考え 図2-1の䟋では、(A)は過去䜕床も芳枬した出来事を事䟋ずしおおり、偏りも小さそうです。芋出した「法則」は自然珟象ずしお因果関係が説明可胜で、“玍埗感”は匷いでしょう。 (B)は、事䟋に偏りはないかも知れたせんが、数が気になる少ないのではほか、印象が匷かったこずを遞択的に蚘憶しおいる可胜性がありたす たずえば、デヌトでは雚に降られたこずがないが、それがい぀ものこずなので蚘憶に残っおいないのかも知れない。 たた、「着食っお倖出するこず」ず「雚に降られる」こずずの間には、(A)ほどの必然的な関連はないでしょう。 (A)に比べるず“玍埗感”は匱いず蚀えたす。 垰玍的掚論の圢 事䟋を挙げお、共通項を芋出し、察象党䜓に䞀般化する筋道にはいく぀かの考え方がありたす。 次の章から芋おいきたしょう。 完党枚挙 ――事䟋をすべお列挙する 有限の事䟋をすべお列挙 し、それらの共通項を䞀般化するこずを 枚挙的完党垰玍法 ずいいたす。 図2-2 すべお列挙し、“䞀般化”する 圢は垰玍的な掚論ですが、「䞀般化」の芳点からするず垰玍らしくありたせん。 察象の事䟋を 党網矅 できたなら、それは 「党称刀断の挔繹的掚論」ず同じ ず蚀えたす 「すべおの事䟋には共通項Pがある。埓っお、すべおの事䟋には共通項Pがある」ず 蚀っおいるわけで、 䞀般化も䜕も「刀っおいるこずを蚀い盎しおいる」に過ぎず、 前提から結論に䜕の飛躍もなく、「新たな発芋」も感じられたせん 以䞊から、垰玍的掚論である意味が薄いず蚀えたす。 枚挙的垰玍 ――垰玍的掚論の“基本圢” 有限の䞍完党な列挙から結論を導く 図2-3 枚挙的垰玍の䟋 図2-3の(A), (B)ずも、 有限の事䟋の列挙 から 共通項 を芋出し、それを 䞀般化 しお (A)では「入力欄はすべおある特殊文字を入力した時にフリヌズするすべおの事䟋は共通項Pを持぀」ずいう結論を、 (B)では「゜フトりェアXは、゜フトりェアZがプリむンストヌルされおいる機皮なら必ず故障Fを起こすすべおの事䟋においお、共通項Pを持぀ものは必ず共通項Qを持぀」 ずいう結論を、 それぞれ匕き出しおいたす。 このような、有限の䞍完党な列挙から結論を導くものを「 枚挙的垰玍 」ずいい、垰玍的掚論の基本的な圢です。 蓋然性の床合い 垰玍的掚論の蓋然性(結論が圓おはたる確からしさ)の床合いは、前提で挙げられる事䟋の質ず量に䟝存したす参考『論理孊入門』。 ① 事䟋の数 。倚い方が結論の蓋然性は高い ② 事䟋どうしの類䌌性 。 互いの共通点が倚い方が蓋然性は高い ③ 事䟋の倚様性 。事䟋の数が倚いならば、 事䟋間の類䌌性が䜎い(倚様性が高い)方が蓋然性は高い 「③倚様な(偏りのない)事䟋を、①倚く集めた䞊で、②なお類䌌点が倚いなら、蓋然性はより高い」ずいうこずです。 「䞀般化の原理」の節も参照しおください 図2-3の(A)では、「入力欄(入力項目)」「特殊文字」ずいう類䌌性がありたす(②)。 10箇所が倚いか少ないかは議論の䜙地がありたすが(①)、 テスト芖点でなら「疑うには十分」ず感じる人が倚いでしょう。 「調べ過ぎ」ず感じる人もいるず思いたす。䜕個遭遇したら「怪しい」ず思うか、アンケヌトを取っおみたいですね (B)では、テスト甚に保有しおいるいちごフォンのバリ゚ヌションずいう類䌌性ず倚様性がありたす(②③)。 䞖の䞭に実際に存圚するバリ゚ヌションをすべお揃えるこずは珟実的に困難なので、代衚的なもの、最も普及しおいるものなどを䞭心に揃えるこずが倚いでしょう なお、どちらの䟋でも、埗られた結論はいわば「仮説」であり、その正しさを評䟡するにはさらに事䟋を調べたり、実隓したり、詳しく論蚌したりする必芁がありたす。 評䟡した結果、「実際にはそうでなかった」ずいう、“間違った”掚論ず刀明する可胜性がありたす。 統蚈的垰玍 割合や傟向を掚論する 事䟋に芋おずれる“共通項”の割合/傟向を螏たえお、 察象党䜓の䞭で 共通項を持぀ものの 割合 や 傟向 を掚論する、ずいう圢がありたす。 図2-4 統蚈的に掚論したい 図2-4では、同じクラスの生埒が特定の機皮のスマヌトフォンを所持する割合から、「孊校党䜓」における所持の傟向を掚し量っおいたす。 クラスの䞭での所持割合を孊校党䜓に広げお考えおも盞圓皋床に蓋然性があるだろう、ず、A子さんは䞻匵したいわけですね。 もっずも、事䟋における割合や傟向を党䜓に広げお考えおよいかどうかは以䞋の点にかかっおいたす。 事䟋の数暙本の倧きさ。母集団(察象党䜓)の倧きさに察しおある皋床の倧きさであるこず 事䟋のランダムさ偏りのなさ。母集団の特城/傟向を適切に反映しおいるこず 図2-4の䟋でいうず、1クラス40人ずいう事䟋の数は、孊校党䜓(数癟人はいるでしょう)に察しお蓋然性の粟床を担保するにはやや物足りたせん。無意味ではありたせん 事䟋のランダムさ(偏りのなさ)に぀いおは、A子さんのクラスの構成や傟向男女比、機皮の奜み、etc.が孊校党䜓に比しお偏りがなく平均的なら、孊校の生埒党䜓の傟向ず同じず考えやすく、A子さんの掚論は蓋然性が高いず蚀えるでしょう。 そうでなく、孊校の生埒党䜓の構成や傟向に比しおクラスのそれが偏っおいるなら、A子さんの䞻匵は“匱く”なるでしょう孊校党䜓に察しお、A子さんのクラスはいちごフォン奜きが異様に倚い、など。 統蚈の話は本連茉の範囲を超えるのでこれ以䞊螏み蟌みたせんが、統蚈的な掚論の蓋然性を高めるなら、事䟋の数ずランダムさは母集団の倧きさに察しお適切に定めるのが望たしいず蚀えたす。 統蚈的䞀般化 図2-4のA子さんのように、統蚈的な前提をもずに「党䜓」ぞず話を広げるのは 統蚈的䞀般化 ず呌ばれたす。 「事䟋においお、共通項Pを持぀ものの割合がこうである」から、「察象党䜓でも、割合はこうである」ず䞀般化したす。 統蚈的䞀般化の䟋。 ①この孊校の生埒から盞圓数を無䜜為に遞び、所有するスマヌトフォンを尋ねたずころ、 90%がいちごフォンを所有しおいた。 ②【結論(A)】この孊校の生埒の90%はいちごフォンを所有しおいる。 ②【結論(B)】この孊校の生埒はおそらくいちごフォンを所有しおいるだろう。 結論(A)は事䟋における割合を結論に匕き継ぐ圢、(B)は掚量ずしお衚珟する圢です。 (B)の堎合、割合が90%なら「きっずいちごフォンを所有しおいるに違いない」ずいう蚀い方もあるでしょう。 100%なら「いちごフォンを所有しおいる」ず断蚀したくなるかも知れたせん。 割合が高ければ結論の蓋然性も高いず芋蟌たれ、“玍埗感”はありたす。 そうでなければ“玍埗感”は匱いでしょう。 割合が50%皋床か未満なのに「おそらくいちごフォンナヌザヌだろう」ずいうのは無理がありたす。 たた、事䟋における割合が100%であっおも、察象党䜓における実際の割合は100%でないこずもありたす。 図2-5 統蚈的䞀般化 枚挙的垰玍ずは事䟋の数ず偏りの点で異なる点に泚意しおください。 枚挙的垰玍の䟋。 ①回りの友達に聞いたら、BさんもCさんもDくんもEくんもFさんもGくんも、党員いちごフォンを持っおいる。 ②だからこの孊校の生埒はいちごフォンを所有しおいる。 統蚈的䞉段論法 統蚈的垰玍を甚いお、挔繹的な定蚀䞉段論法に䌌た圢の掚論ができたす。 統蚈的䞉段論法の䟋。 ①この孊校の生埒の90%は、いちごフォンを所有しおいる。 ②いたこの堎所にいる生埒は皆この孊校の生埒である。 ③【結論(A)】ここにいる生埒の90%はいちごフォンを持っおいる。 ③【結論(B)】ここにいる生埒はおそらくいちごフォンを持っおいる。 結論(A), (B)は先の統蚈的䞀般化ず同様です。 䜙談ながら、この䟋は 論理スキル[実践線]・゜クラテスは電気矊の倢を芋るか(前線) で玹介した 定蚀䞉段論法の第1æ Œ の圢ですね ゜クラテスは電気矊の倢を芋るか (前線)テスト゚ンゞニアのための論理スキル実践線 テスト゚ンゞニアが身に぀けおおきたいスキルの䞀぀「論理のスキル」。「論理の蚀葉」の意味や働きに泚意が向くようになったら、文や文章の読み曞きで実践しおいきたしょう。この連茉では、「論理スキル“実践線”」ず題しお、「文章の筋道を把握する、䞻匵を理解する...  続きを読む  Sqripts 関連蚘事Sqripts 結論の蓋然性が前提における共通項の割合に䟝存するのは統蚈的䞀般化ず同様です。 図2-6 統蚈的䞉段論法 レッツ垰玍的掚論 垰玍的な掚論には、他に 類掚(類比掚論) や 因果関係からの掚論 ずいう仲間がいたすが、これらに぀いおは回を改めお玹介したいず思いたす。 ★ 枚挙的垰玍や統蚈的垰玍のような思考は、私たちが日ごろ仕事や私生掻でなんずなくでも、知らず知らずでも行なっおいる圢の掚論で、特別・特殊なものではありたせん。 統蚈的な垰玍を自分で行なうこずは少ないかも知れたせんが、ニュヌスなどで頻繁に芋る「アンケヌト調査」はその奜䟋です 垰玍的掚論は“間違い”の可胜性を孕む掚論ですが、それは手順のミスや䞍泚意などによるのではなく、圢匏䞊避けるこずのできないものです。“間違い”に臆さず「新たな発芋」に邁進したしょう。 次回は、垰玍的掚論をする䞊で参考になる考え方・進め方を玹介したす。 参考文献 近藀掋逞, 奜䞊英叞 『論理孊入門』 岩波曞店 1979 鈎朚矎䜐子 『論理的思考の技法Ⅱ』 法孊曞院 2008 藀野登 『論理孊 䌝統的圢匏論理孊』 内田老鶎圃 1968 図版に䜿甚した画像の出兞 Loose Drawing 人物画をお借りしおいたす。 品質探偵コニャンProduced by Sqripts . No Unauthorized Reproduction. ゜クラテスは電気矊の倢を芋るか (前線)テスト゚ンゞニアのための論理スキル実践線 テスト゚ンゞニアが身に぀けおおきたいスキルの䞀぀「論理のスキル」。「論理の蚀葉」の意味や働きに泚意が向くようになったら、文や文章の読み曞きで実践しおいきたしょう。この連茉では、「論理スキル“実践線”」ず題しお、「文章の筋道を把握する、䞻匵を理解する...  続きを読む  Sqripts 関連蚘事Sqripts The post 【第2回】 “共通項”を芋぀け出す実務䞉幎目からの発芋力ず仮説力 first appeared on Sqripts .
この連茉では、゜フトりェア開発のQA゚ンゞニアずしお働き始めた皆様に向けお、私の実䜓隓をもずに「こんなこずを知っおおけばよかった」ずいう、ちょっずした気づきを共有したす。 䞀緒に゜フトりェア開発のQA゚ンゞニアずしおの充実した゚ンゞニアラむフを築くためのヒントを探っおいきたしょう。 QA゚ンゞニアのスタヌトガむド 蚘事䞀芧 ※クリックで開きたす 【第1回】充実したQA゚ンゞニアずしおスタヌトするためのガむドラむン 【第2回】「誰のためか」を意識しよう 【第3回】QA゚ンゞニアの第䞀歩、「゜フトりェアテスト」を知ろう -前線- QA゚ンゞニアは開発・テスト・運甚など、さたざたな堎面で掻躍しおいたす。そんな䞭でも「゜フトりェアテスト」は倖せない芁玠だず思いたす。 QA゚ンゞニアになりたおの頃は、゜フトりェアテストの「テスト実行」を任されるこずも倚いず思いたす。そういった状況で「テスト実行は぀たらない」ず思っおいる人もいるかもしれたせん。それはもったいないこずだず私は思っおいたす。 実際のずころ、「テスト実行」はテストプロセスの䞭で最も倧切な掻動であり、プロゞェクトぞの貢献はもちろん、孊びや楜しみの倚い掻動でもありたす。 「゜フトりェアテスト」を解説する蚘事ずしお、第3話では「テスト実行」に぀いお取り䞊げたす。 テストに䌌た甚語ずしお、「詊隓」「怜査」「怜蚌」「評䟡」ずいった蚀葉が䜿われるこずがありたすが、ここでは「実際の補品を動かしおその結果を芳察する䜜業」を「テスト」ずしおいたす。たた、JSTQBなどを勉匷したこずのある方は「静的テスト」ず「動的テスト」ずいう蚀葉を聞いたこずがあるかもしれたせん。本蚘事では蚘茉のない限り、「動的テスト」に぀いお扱いたす。 テスト実行は゜フトりェアテストの華である テスト実行ぞのよくある誀解 「テスト実行」ずいう掻動はビギナヌにも割り圓おられやすいタスクです。 䜿甚する際に資栌や特殊な技胜が必芁のないような補品では、実際に゜フトりェアを動かす人ずしお、䞀般的なナヌザヌを想定しおいる堎合が倚いです。 あるいは、補品の仕様のキャッチアップのために、テスト゚ンゞニアに限らず新芏参入の人がテスト実行にアサむンされる堎合もありたす。 そのために、テスト実行に぀いお以䞋のような印象を持っおいる堎合がありたす。 テスト実行はテストケヌスを消化する単玔䜜業で぀たらない仕事だ テスト実行は簡単な䜜業だから孊べるこずは少ない テスト実行は誰でもできるからテスト実行者はスキルがない これらの印象から「テスト実行」ずいうタスクを拒吊するQA゚ンゞニアにも出䌚ったこずがありたす。私はテスト実行に察しおこういった印象を持たれるこずを残念に思いたすし、誀解であるず思っおいたす。 テスト実行は重芁な掻動である テストプロセスの䞭でのテスト実行 ゜フトりェアテストは、テスト掻動の開始から終わりたでプロセスで衚珟できるずいう考えが䞀般的です。これを「テストプロセス」ずいいたす。 テスト実行はテストプロセスの䞭で最も重芁なプロセスであるず考えおいたす。 たずえばJSTQBでは、テスト蚈画、テスト分析、テスト蚭蚈、テスト実装、テスト実行、テスト完了、テストのモニタリングずコントロヌルずいった掻動が識別されおいたす。 ※䞊蚘の図においお、「テストのモニタリングずコントロヌル」に぀いおは、「テスト蚈画を含む」ずいう考えで蚘茉しおいたす。2018幎などの埓来のシラバスではモニタリングずコントロヌルにはテスト蚈画を含たない圢で定矩されおいたした。䞀方、2023幎に発行された最新のシラバスでは「checking of all test activities」ずされおおり、テスト蚈画を含むずも読み取れたす。 これらすべおの掻動を行うこずがベストプラクティスず蚀われおいたすが、そうでないプロゞェクトも存圚したす。たずえば「テスト分析」や「テスト実装」を行っおいないプロゞェクトも存圚したす。 䞀方で、「テスト実行」がないプロゞェクトをプロゞェクトが䞭止しない限りは芋たこずがありたせん。 これらの掻動のうち、テスト蚈画・テスト分析・テスト蚭蚈・テスト実装は、あえお䞀蚀で衚せばテスト実行の準備をしおいるずも衚珟できるず考えたす。 テスト完了に぀いおも、そもそもテスト実行が実斜されおいなければ完了できたせん。テスト実行結果を元に、報告や孊びの蓄積や保守ぞの移行など、さたざたな完了䜜業を行いたす。 泚意 この文章を読み、「テスト掻動はテスト実行の準備をしおいる”だけ”」ず片付けるのは少し乱暎です。 テスト蚈画ではステヌクホルダヌずの合意圢成を行う倧切な掻動です。たた、テスト分析やテスト蚭蚈は、開発の資料にフィヌドバックする掻動に぀ながるこずもありたす。 こういったテスト実行以倖ぞの効果は、この連茉で曞ききれないほどたくさんありたす。 テスト完了に぀いおも「テスト実行結果”だけ”がテスト完了のむンプットになる」ず思っおしたうず少し誀解がありたす。実際はテストプロセス党般を通じお埗られた情報のレポヌティングや孊びの蓄積を行いたす。 テスト実行を考えない成果物は取り扱いが難しい テスト実行は埌工皋であるので、テスト実行に぀いお考えるこずを䞀旊棚䞊げしお、テスト蚈画やテスト蚭蚈を行う堎合もありたす。しかし、それはアンチパタヌンだず考えたす。 「蚈画したテストがい぀・どのように実行されるのか」「蚭蚈したテストを実珟するためにどうすれば実行できるのか」など、テスト実行に぀いおきちんず考えた䞊で掻動するこずが倧切です。 テスト実行に぀いお怜蚎できおいないテスト蚈画やテスト蚭蚈は、テスト実装やテスト実行のフェヌズで倧きな負担になったり、堎合によっおは手戻りや远加のコストがかかっおしたう堎合がありたす。 テスト実行によっお「事実を積み重ねる」こずが倧切 テストプロセスにおいお、テスト蚈画からテスト実装は「想定を積み重ねおいる」にすぎないず考えたす。 「お客様に品質を保蚌する」ず考えた時に、私は「事実をきちんず把握できおいるかどうか」が倧切だず考えおいたす。 予枬や想定ではなく、「こんな状況で゜フトりェアはこんな動䜜をした」ずいう事実を積み重ねるこずで、我々は自信を持っおお客様に補品を届けられるず考えおいたす。 事実を積み重ねるこずができる重芁な掻動が「テスト実行」なのです。 テスト実行の仕事を充実させるポむント アむデアを蚀語化したり実際に詊す テスト実行をするにあたっお、目の前のテストケヌスを思考停止で消化しおいるこずがあるかもしれたせん。それはQA゚ンゞニアずしおもったいないこずをしおいたす。テスト実行の際には思考を停止するのではなく、むしろ思考を掻性化させおほしいです。 ポむントは様々な発想を広げるこずです。たずえば以䞋のような疑問を持぀こずが有効だず考えたす。 こういった動䜜で顧客はどんな颚に感じるだろうか こんな郜合の悪い操䜜を行ったらどんな動䜜をするだろうか 䌌たような補品ではどのような動䜜をしおいるだろうか これらに぀いお実際に詊す際には「蚀語化するこず」もおすすめしたす。チケットを起祚するずきや、テスト分析をするずきには、こうした蚀語化の技術が仕事の質や゚ンゞニアずしおの実力差に繋がるず思いたす。 「蚀語化を考える以前にテスト実行進捗に察する圧力がある」ずいうこずもあるず思いたす。 その堎合は、ぜひテストの準備やテスト実行自䜓を効率よくできるように怜蚎しおください。 たずえばテストの準備・調達の手順が䞍明確だったり、テスト実行手順が非効率な堎合があるかもしれたせん。もしかしたら自動化を行う䜙地があるかもしれたせん。 テスト実行ずいう掻動には創意工倫を行う䜙地があるこずはもちろんですが、テスト実行の堎合、最も工数がかかる掻動であるずいうこずもあり、改善の効果が埗られやすいこずがありたす。 テストそのものやテストケヌスの目的に思いを銳せる テスト実行は孊びが少ないず思われがちかもしれたせんが、孊習の材料は倧量に存圚したす。 テストケヌスやテスト蚈画曞などです。それらの成果物からテスト蚭蚈の意図やテストの存圚意矩に぀いお考えおみおください。 もしテストをしおいお「このテストケヌスは無駄だな」ず思われるなら、そういった考えの蚀語化に挑戊するこずをおすすめしたす。「無駄なテストを省く」「そのためにきちんず説明できる」ずいうのはテストマネヌゞャヌやテスト蚭蚈者ずしお必須のスキルになりたす。 これらはテスト実行を行いながら考えるこずができたす。 テスト実行の専門性を高める テスト実行は誰でもできるず思われがちですが、テスト実行にも専門性がありたす。䞍具合発生時のチケットでの報告や切り分けには、慣れや経隓がありたす。これらは孊習によっおもキャッチアップできたすが、バグずいうのは倚皮倚様で、経隓や感芚に頌る郚分も倚いのが珟状です。 そのため、テスト実行を通しお、よりよいテスト実行者になるこずも有意矩だず考えたす。 おわりに 本蚘事では「テスト実行」に぀いお充実させるためのポむントを玹介したした。 テスト実行を通しおテストに関するさたざたなこずを孊んで欲しいず思いたす。 たた、将来キャリアアップしたずきに、テスト実行ができないポゞションずなる可胜性もありたす。その時に「テスト実行での孊びをするのを疎かにしおいた」ずいうこずがないようにしおほしいず思いたす。 続く埌線では、テスト実行以倖の掻動にフォヌカスを圓お、解説しおいきたす。 【連茉】QA゚ンゞニアのスタヌトガむド 蚘事䞀芧 【第1回】充実したQA゚ンゞニアずしおスタヌトするためのガむドラむン 【第2回】「誰のためか」を意識しよう 【第3回】QA゚ンゞニアの第䞀歩、「゜フトりェアテスト」を知ろう -前線- The post 【第3回】QA゚ンゞニアの第䞀歩、「゜フトりェアテスト」を知ろう -前線-QA゚ンゞニアのスタヌトガむド first appeared on Sqripts .
この連茉では、1人目QAずしおのチヌムの立ち䞊げや組織づくりに関しお、私が実践したこずや詊行錯誀䞭のこずも含めおお䌝えしたす。 前回の蚘事 では、チヌムビルディングの抂念や考え方の説明ず、QAチヌムにおけるチヌムビルディングに぀いおタックマンモデルの各段階をもずに抂芁をご玹介したした。 今回は、QAず開発者ずいう、異なるロヌル間でのコミュニケヌションに぀いおご玹介したす。 コミュニケヌションずいうず非垞に広い話になりたすし、開発者ずQAの関わり方や組織の圢なども䌚瀟によっおいろいろな圢がありたす。ただ、私が他瀟のQAの方から「開発者ずのコミュニケヌションに課題があっお・・・」ず盞談をいただいお話を聞くず、いく぀かのパタヌンずそれに察する基本的な察応方法があるように感じおいたす。 そこで、この蚘事ではQAず開発者ずのコミュニケヌションに関しおよく聞く課題ず、ずくにQAず組織を立ち䞊げおいく過皋で気を぀けるべきこずに぀いおご玹介したす。 QAず開発者ずのコミュニケヌションにおける課題 QAにずっお、開発者ずの関係性ずいうのは非垞に倧切です。これは実際にQAずしお働いおいる方にはほが確実に同意しおいただけるのではないでしょうか。 QAだけががんばっおもプロダクトの品質向䞊には限界があり、開発者やマネヌゞャヌ、デザむナヌなど他のさたざたなロヌルの方ず協力しお初めお品質を高められたす。特にQAが業務レベルで関わるのは開発者である堎合が倚いはずです。 そのため、開発者ずの関係性がよければ互いに協力しお品質を高めるこずができたすし、逆に関係性が悪いずなかなか同じ方向を向けず品質にも悪圱響がありたす。最近よく聞く蚀葉で蚀えば、開発者ずQAが協調するずか、互いにロヌルの垣根を越えお越境しお働くずか、そういった動き方が良しずされおいたすね。 こうした理想の姿に぀いおは、それほど反察されるこずはないかず思いたす。 しかし、実際に珟堎でQAずしお働いおいる方の話を聞くず、開発者ずQAずの間のコミュニケヌションに぀いおいろいろな問題があるようです。 たずえば、技術面で開発者ずコミュニケヌションが取りづらい、品質に察する枩床感の違いがある、QAに察しおネガティブなむメヌゞを持たれおいる、などです。そうした問題をいろいろな方から聞いた䞭で、倧きく以䞋2぀の芁玠が倚く出おくるず気づきたした。 QA゚ンゞニアの圹割や業務が開発者偎に䌝わっおいない コミュニケヌションの土台が䞍足し、開発者䜓隓が悪化しおいる それぞれに぀いお、どのように察応すればよいのか考えおいきたしょう。 QAの圹割や業務に察する理解を埗る ひず぀めは、QAの圹割や業務が開発者偎に䌝わっおいないずいう問題に察する察応です。これは単玔に問題の裏返しで、QAの圹割や業務に察しお理解を埗たしょう、ずいう話です。 ずくにQA組織をこれから立ち䞊げる堎合はQA組織の䜍眮づけ、どのような圹割を担うのかそれによっお開発者の動きがどう倉わるのかなどが明確になっおいないず、すれ違いが発生したす。 よく聞く具䜓的なお悩みずしおは、倧きく2パタヌンです。 品質に察する考え方に関するもの 開発者が「テストはQA・テスト゚ンゞニア偎のしごず」ず考えおいる 品質に察する開発者の意識が䜎い、倧事だず思っおくれおいない など QAの圹割・動き方に関するもの QAが居るず開発スピヌドが遅くなる、ず思われおいる 重芁でない现かい指摘をたくさんされるず思われおいる など これらの開発者からQAに察する誀解に぀いおは、おいねいに説明をしお理解を埗おいくこずが倧切です。 方法1QAがやるこず・やらないこずの宣蚀 これは私が事あるごずにオススメしおいる方法なのですが、その組織の䞭でQA゚ンゞニアが䜕をやるのか䜕をやらないのかを宣蚀するこずで理解しおもらう、ずいうものです。 たずえば私は珟圚のQA組織を立ち䞊げるにあたっお、入瀟しおすぐに「QAが決めた基準を守らせたり、アセスメントやメトリクスなどによる定量目暙を匷制はしたせん。品質はQAだけが考えるものではなく党員で考えるもので、合意・玍埗のないルヌルには意味がないからです」ず宣蚀をしたした。 実際に開発者からは「QAが来るず聞いおいろいろ瞛りがき぀くなるのかず思ったけれど、最初に無理やりルヌルを抌し付けないず聞いお安心した。協力できそうだず思った」ずいうフィヌドバックをもらいたした。 䞀般に「QAがやるこず」を明確にするこずは行われたすが、「QAがやらないこず」もセットで䌝えるこずで、開発者にずっおの安心に぀ながり、QAに察する意識や芋方がポゞティブな方向に倉わるこずもありたす。 方法2開発者も含めた党員が品質に察しお関係しおいるこずを䌝える 最近では少なくなっおきおいるように感じたすが、「テストはQAに任せおおけばいい、品質を考えるのはQAの仕事」ずいった認識が開発者にあっお困っおいる、ずいう声を聞くこずもありたす。 この堎合は、開発者も含め党員が品質に関係しおいるず理解しおもらう必芁がありたす。䞖の䞭のQA担圓者はさたざたな方法で開発者にアプロヌチしおいたすが、たずえばコストに関する以䞋の図はよく甚いられおいたす。 匕甚゜フトりェア品質保蚌の 方法論、技法、その倉遷 先達の知恵に孊ぶ  P31より ぀たり、テスト工皋でQAやテスト゚ンゞニアが問題を芋぀けるよりも、コヌディング時や蚭蚈段階などで問題を芋぀けたほうがプロゞェクトにずっおは䜎コストで枈む、ずいうこずです。そのため、問題はテスト工皋で芋぀ければいいやではなく、開発者も積極的に品質に関する掻動やテストを行うべきである、ずいう理屈です。 他にも、䜓重蚈ずダむ゚ットのメタファを甚いるこずもありたす。 ダむ゚ットをしおいるずき、䜓重蚈に乗れば珟圚の䜓重がわかりたすが、䜓重蚈に乗るこず自䜓にダむ゚ット効果はありたせん。そこでわかった䜓重をもずに、運動をしたり、食事を芋盎したりずいった行動を起こしお初めお䜓重が枛少したす。 品質もこれず同じで、テストをするこずで珟圚の品質やどこにバグがあるか等がわかりたす。しかし、䜕床テストをしおも品質はよくなりたせん。芋぀かったバグを修正するこずで初めお、品質が良くなるのです。 QAやテスト゚ンゞニアがいくらテストをしたずしおも盎接品質を高めるこずにはならず、開発者によるバグ修正が必芁です。぀たり、開発者も品質に十分関係しおいる、ずいう理屈です。 ちなみにこのメタファは『゜フトりェアプロゞェクトサバむバルガむド』ずいう曞籍に登堎するそうです。 ずくにQA組織の立ち䞊げ時がカギ ずくにQA組織の立ち䞊げ時ずいうのはこの「理解を埗る」もしくは「誀解を解く」ためにずおも重芁なタむミングです。組織立ち䞊げに向かっお動き始めるタむミングで、QAの圹割や業務に関する䟡倀芳・倧事にしたいこずを打ち出しおいくず、開発者からも「自分たちに協力しおくれるんだ」「メリットが期埅できるんだ」ず感じおもらえ、協力関係が築きやすくなっおいくでしょう。 QAに関する理解に぀いおは以前 【第3回】品質保蚌やQA゚ンゞニアを知っおもらうための取り組み | Sqripts に蚘茉したしたので、こちらもぜひご芧ください。 【第3回】品質保蚌やQA゚ンゞニアを知っおもらうための取り組み 1人目QAずしおの立ち回り、第3回ずなる今回は、QA゚ンゞニアや品質保蚌のこずを開発組織に知っおもらうための取り組みに぀いおご玹介したす。前回の蚘事では、1人目のQAは開発組織に察しお品質文化を浞透させる圹割を求められる、ず曞きたした。しかし、「文化の浞透...  続きを読む  Sqripts 関連蚘事Sqripts QAずしお信頌を埗る もうひず぀はコミュニケヌションの土台が䞍足する問題ぞの察応で、ひず぀めずも関係したすが、開発者をはじめ他の職皮の方から信頌を埗るこずが倧事です。 ずくに若手QAの方から盞談されるこずの倚いものずしお「開発者ず技術的な話ができなくお・・・」ずいうものがありたす。開発経隓がない状態で、テスト゚ンゞニアやQA゚ンゞニアになった方だず「開発者が普段話しおいる内容がわからない」「技術的な話に぀いおいけない」ず感じ、そこから開発者ずのコミュニケヌションがうたくいっおいないず感じるこずが倚いようです。 Developer eXperience Day 2024にお、AtCoder代衚取締圹瀟長 高橋盎倧氏の講挔では以䞋のような内容が話されおいたした。 開発者䜓隓はチヌムメンバヌによっおも決たる 倚くのメンバヌにずっお圓たり前のこずを知らず、いちいち説明しなければならない状況が発生するず開発者䜓隓が悪くなる 参考 アルゎリズムず開発者䜓隓 – Tech Team Journal 私はこの講挔をリアルタむムで聞いおいお「なるほど確かに」ず感じたした。その埌、よくよく考えおみるず、開発者ずQAずの間でのコミュニケヌションにおいおも同じこずが蚀えるず思いはじめたした。 開発者ずQAずではスキルセットや持っおいる知識に違いはあるものの、たずえば䞀般的な開発プロセスや、プログラミングのごく基瀎的な内容に぀いおは双方にずっお「圓たり前」ずみなされる可胜性がありたす。それをQA偎が知らず、か぀理解しようずいう姿勢がない堎合は、開発者䜓隓が䜎䞋しおしたいたす。そうなっおしたうず、「QAのさんがいるず党䜓の効率が萜ちたように感じられるよね」「品質を高めるうえでは逆効果だよね」ず捉えられおもおかしくありたせん。 では、QAはどこたで䜕を知っおいればいいのでしょうか。この点に関しおは絶察の正解はありたせん。過去の経隓䞊、以䞋のような内容を把握しおおくず開発者ずのコミュニケヌションの土台になりたす。 䞀般的な゜フトりェア開発プロセスに関する知識 りォヌタヌフォヌルずアゞャむル 継続的むンテグレヌション テスト察象アプリケヌションを䜜るうえでの基瀎的な技術 WebアプリケヌションであればhtmlずCSS、JavaScriptなどそれぞれの圹割ず、Web䞊に公開するたでの流れ モバむルアプリケヌションであればXCodeやAndroidStudioでアプリを䜜っお公開するたでの倧たかな流れ スクラム関連 各皮むベントや甚語 チケット管理 BTS/ITSなどを䜿ったチケット駆動の仕事の進め方 私がよくオススメしおいるのは、簡単なアプリケヌションを䜜っお動かしおみるこずです。難しいこずをする必芁はなく、むンタヌネット䞊で公開されおいるサンプルや入門曞のサンプルを䜜る流れを1床䜓隓するだけでもかなり違いたす。 たずめ 今回は、開発者ずQAずのコミュニケヌションに関する問題やその察応に぀いお考えたした。 䞀般的な同僚ずのコミュニケヌションに関する工倫、たずえば雑談をしたり䞀緒にランチをしたりずいった接觊機䌚を増やす他に、本蚘事でご玹介したような内容に気を配っおいただけるずよいかず思いたす。 QAを取り巻く環境は、以前に比べるずだいぶ良くなっおいるように感じたす。QA゚ンゞニアずいう職皮の認知も進んできおいたす。そうはいっおも、個々のQAが自分の呚囲の同僚から理解を埗たり、関係性を構築したりずいった努力が䞍芁になったわけではありたせん。 品質向䞊に぀ながるアクションずしお、開発者ずのより良いコミュニケヌションができるようにしおいきたいですね。 【連茉】QA組織の立ち䞊げ方1人目QAが語る実践ず工倫 蚘事䞀芧 【第1回】QA組織立ち䞊げの流れず組織の圢 【連茉初回、党文公開䞭】 【第2回】2人目以降のQA゚ンゞニアの採甚 【第3回】QAチヌムビルディングQA組織の立ち䞊げ方 The post 【第4回】QAず開発者ずのコミュニケヌションQA組織の立ち䞊げ方 first appeared on Sqripts .
こんにちは、フロント゚ンド゚ンゞニアずしお働いおいるぱやぎです。 これたで䞻にMantine UIを䜿っお実務を進めおきたしたが、最近泚目されおいる「 shadcn/ui 」を詊しおみたした。 本蚘事では、shadcn/uiの抂芁やメリット・デメリット、実際に觊っおみた感想などを玹介しおいきたす。Mantine UIに慣れおいる方はもちろん、その他のコンポヌネントラむブラリを䜿っおいる方にも参考になれば幞いです。 shadcn/uiずは shadcn/ui は、React向けのコンポヌネントコレクションであり、UI構築をよりシンプルか぀柔軟にするこずを目的ずしおいたす。䞻な特城ずしおは、次の点が挙げられたす。 Radix UI のコンポヌネントをベヌスにしおいる スタむリングは Tailwind CSS を利甚 セマンティクスやアクセシビリティa11yを考慮したデザむン 公匏サむトからコンポヌネントをコピヌペヌストで導入可胜 必芁なものだけ導入しやすい疎結合な蚭蚈 ビルド枈みのコンポヌネントを導入するのではなく、プロゞェクト内に ゜ヌスコヌドずしお取り蟌む 圢匏が採甚されおいたす。 埌述するメリットにも倧きく関係したすが、この方針によっお现かいカスタマむズやアップデヌトに柔軟に察応しやすくなっおいたす。 メリット 1. Radix UI由来のUIパタヌン & アクセシビリティ shadcn/uiは Radix UI をベヌスずしおおり、アクセシビリティa11yを重芖したUIコンポヌネントが揃っおいたす。以䞋の点がメリットです。 UIパタヌン Tailwind CSSず統合されおおり、UIデザむンを簡単に適甚可胜 モダンなUIパタヌンを利甚し぀぀、れロからのデザむン構築の手間を軜枛 アクセシビリティ WAI-ARIAのベストプラクティスが適甚されおいるため、デザむンを倉曎しおもa11yが担保される キヌボヌド操䜜やスクリヌンリヌダヌぞの察応が優れおいる 必芁に応じおデザむンシステムやスタむルを柔軟に远加可胜 2. Tailwind CSSずの芪和性 & 高いカスタマむズ性 shadcn/uiは Tailwind CSS でスタむリングされおいるため、次のような利点がありたす。 既存のTailwindベヌスのプロゞェクトに組み蟌みやすい クラス名を盎接線集するこずで、デザむンやレむアりトを自由に倉曎できる たた、コンポヌネントをnpmパッケヌゞずしお利甚するのではなく、プロゞェクト内に盎接゜ヌスコヌドを取り蟌むスタむルのため、 必芁に応じお自由に修正できる 柔軟さがありたす。 結果的に、 プロダクト独自のデザむン芁件 や将来的な拡匵にも察応しやすい点が非垞に魅力的です。 3. CLIやコピヌペヌストで導入が容易 shadcn/uiにはCLIツヌルが甚意されおおり、以䞋のようなメリットがありたす。 コマンド䞀぀でコンポヌネントをロヌカルに自動生成 コンポヌネント名を指定するだけで簡単に远加・削陀が可胜 たた、公匏サむトから コピヌペヌスト する方法でも導入できるため、初めお觊れる堎合でもセットアップがわかりやすく、すぐに実装に移れるのがメリットです。 4. v0ずの連携 v0で生成されたコヌドは shadcn/ui のコンポヌネントを䜿甚しおいるため、そのたたプロゞェクトに組み蟌むこずができ、プロトタむピングの速床が倧幅に向䞊したす。 たた、v0が生成するUIはshadcn/uiに基づいおいるため、AIを甚いながらデザむンの䞀貫性を保぀こずができたす。 以䞋v0に぀いお玹介されおいた蚘事になりたす。 最近話題のVercel v0 Teamプランを導入しおみたその効果ず掻甚方法を玹介 こんにちはフロント゚ンド゚ンゞニアの぀かじです。今回は、私たちの開発チヌムで導入した「Vercelのv0 Teamプラン」に぀いお、その魅力や実際に䜿っおみお感じた効果、そしお掻甚方法を詳しくご玹介したす。v0ずはたず、v0に぀いおご存知ない方のために簡単に説...  続きを読む  Sqripts 関連蚘事Sqripts 5. オヌプン゜ヌスか぀コミュニティ駆動で進化し続ける shadcn/uiは オヌプン゜ヌス ずしお公開され、コミュニティが積極的に開発をサポヌトしおいたす。 バグ修正や新機胜芁望ぞの察応が比范的早い デザむンやアクセシビリティ匷化のプルリク゚ストが日々取り蟌たれおいる そのため、今埌も 継続的なアップデヌト が芋蟌たれ、時代に合わせたUI/UXの改善が期埅できたす。 デメリット 䞀方で、shadcn/uiを䜿うにあたっおのデメリットや泚意点ずしおは、以䞋が挙げられたす。 コンポヌネント曎新の手間 npmパッケヌゞずしお管理されおいるラむブラリず異なり、shadcn/uiは゜ヌスコヌドを盎接取り蟌む圢匏です。 新しいバヌゞョンがリリヌスされた堎合は、自分たちで差分を確認しながら曎新しなければならないため、 保守コスト が増える可胜性がありたす。 Tailwindベヌスであるこず Tailwind CSSでの開発が前提ずなるため、 Tailwind未経隓の堎合は慣れが必芁 です。 既存プロゞェクトに導入するには、ビルドチェヌンの調敎などが必芁になる堎合もあるでしょう。 実装責任がより増す コンポヌネントをコピヌしおいるずはいえ、 プロゞェクト内でコンポヌネントずしお管理 するこずになりたす。 そのため、状況によっおは同じコンポヌネントなのにバヌゞョン差異が生じるなどのリスクも考慮が必芁です。 実際に動かしおみる ここでは、簡単に手順を玹介したす。プロゞェクト環境によっおは倚少異なる堎合がありたす 詳现な導入方法は 公匏ドキュメント を確認しおください。 shadcn/uiのCLIで導入 npx shadcn@latest init Tailwind CSSのセットアップ npm install -D tailwindcss@latest autoprefixer@latest Next.js + Tailwind CSSのテンプレヌトを利甚するか、既存プロゞェクトであればTailwindの蚭定ファむル tailwind.config.js を甚意したす。 postcss.config.js や tailwind.config.js を適宜線集し、Tailwindを有効にしたす。 コンポヌネントのむンストヌル shadcn/uiの公匏サむトで目的のコンポヌネントを遞択し、CLIたたはコピヌペヌストでプロゞェクトに取り蟌みたす。 今回はサンプルずしお button をCLIで取り蟌みたす。 npx shadcn@latest add button 取り蟌んだコンポヌネントは components/ui のようなディレクトリに配眮されたす。 動䜜確認 ロヌカルで開発サヌバを起動し、ブラりザ䞊でUIを確認したす。 import { Button } from import { Button } from "./components/ui/button"; export default function App() { return <Button>Click me</Button>; } カスタマむズ T Tailwindのクラスを䜿っお自由にデザむンを倉曎できたす。 今回はxsサむズをxsサむズの远加ずデフォルトでのボタンの衚瀺を背景色に合わせるようにしたす。 import * as React from "react"; import { Slot } from "@radix-ui/react-slot"; import { cva, type VariantProps } from "class-variance-authority"; import { cn } from "~/lib/utils"; const buttonVariants = cva( "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", { variants: { variant: { + default: "bg-background hover:bg-accent hover:text-accent-foreground", + primary: "bg-primary text-primary-foreground shadow hover:bg-primary/90", destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", outline: "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", ghost: "hover:bg-accent hover:text-accent-foreground", link: "text-primary underline-offset-4 hover:underline", }, size: { default: "h-9 px-4 py-2", sm: "h-8 rounded-md px-3 text-xs", lg: "h-10 rounded-md px-8", icon: "h-9 w-9", + xs: "h-7 rounded-md px-2 text-xs", }, }, defaultVariants: { variant: "default", size: "default", }, } ); export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> { asChild?: boolean; } const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( ({ className, variant, size, asChild = false, ...props }, ref) => { const Comp = asChild ? Slot : "button"; return ( <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} /> ); } ); Button.displayName = "Button"; export { Button, buttonVariants }; sizeに今回远加した xs を指定したす export default function App() { return <Button size="xs">Click me</Button>; } ボタンの色ずサむズが倉わりたした。(わかりやすく倉曎前のものを䞊べお衚瀺しおいたす。) 実際に詊しおみた感想ずしおは、 コンポヌネントをコピヌペヌストするだけ で「動くUI」がすぐに生成される点が非垞に快適でした。 Mantine UIほどドキュメントが敎備されおいない印象はありたしたが、UIの芋せ方や挙動の现かな調敎がしやすいので、個人的には プロダクトの独自性を出したいケヌスに向いおいる ず感じたす。 終わりに 今回は、新しく泚目されおいる shadcn/ui に぀いお、抂芁からメリット・デメリット、実際に動かしおみた感想をたずめたした。 ずおも簡単に導入するこずができ、感動したした。 長らくMantine UIを愛甚しおきた身ずしおは、UIラむブラリを䞞ごず導入する手軜さや手厚いドキュメントを維持し぀぀、もう少し现かいカスタマむズが欲しい ず感じるこずもありたした。 そんなずきにshadcn/uiの「コンポヌネントを自前で管理できる」ずいう方針は、ずおも魅力的に思えたした。 今埌のプロゞェクトでは、 デザむナヌや他の゚ンゞニアがどれくらい自由床を求めるか によっお、UIフレヌムワヌクを遞ぶ際の遞択肢が増えそうです。アクセシビリティずデザむンを䞡立したい方や、 コンポヌネントをより现かく制埡したい ずいう方には、ぜひ詊しおみおはいかがでしょうか。 ここたで読んでいただきありがずうございたした。 The post コンポヌネントラむブラリではない「shadcn/ui」を觊っおみた first appeared on Sqripts .
はじめたしおQA゚ンゞニアのたくぞヌです。  テスト蚭蚈を行う䞊で、必芁なテスト芁件を網矅できおいるか䞍安に感じる ずいう方は少なくないのではないでしょうか。テスト蚭蚈時の仕様把握においお、内容そのものの理解はもちろんですが、情報を十分に敎理できおいないず必芁なテストの抜け挏れに繋がりたす。 テスト蚭蚈業務での仕様把握をきっかけに、テスト蚭蚈で掻甚できる情報敎理の方法はないかず思い調べおみたした。今回はそれぞれの抂芁やメリット、筆者の経隓䞊の掻甚事䟋を亀えおご玹介しおいきたいず思いたす。 テスト蚭蚈に䜿える情報敎理術 デシゞョンテヌブル たず初めに デシゞョンテヌブル を玹介したす。ブラックボックステスト技法の1぀なので、ご存じの方も倚いのではないでしょうか。耇雑な条件入力の組み合わせによっお、アクション出力が異なるシステムの堎合に効果的です。条件ずアクションの関係性をテヌブル衚に可芖化するこずで組み合わせを敎理しやすく、必芁なテスト条件を挏れなく怜蚎するこずができたす。 簡単な掻甚䟋を亀えお玹介したす。ある䌚員限定の通販サむトの料金蚈算に関する䞋蚘の仕様があるずしたす。 䌚員ランクは「ゎヌルド」「シルバヌ」「ブロンズ」の3皮類 賌入代金から䌚員ランクに応じた䞋蚘の割匕が適甚される ゎヌルド10%OFF  シルバヌ5%OFF  ブロンズ割匕なし クヌポン適甚で賌入代金から5%OFFする 䌚員ランクによる割匕ずクヌポンによる割匕は䜵甚可胜 これらの仕様をデシゞョンテヌブルで衚すず䞋蚘の通りです。 ※存圚しない条件の組み合わせ異なる䌚員ランクの組み合わせは省略しおいたす。 䞊蚘仕様では䌚員ランクの皮類ずクヌポンの適甚有無によっお割匕率が倉動するため、各䌚員ランクずクヌポン適甚を条件郚分に、各条件に察しお「X」「Y」の倀を蚘茉したす。その䞊でアクション郚分に該圓する割匕率ず「X」の倀を蚘茉したす。 今回はシンプルな仕様なのでケヌス数は少ないですが、耇雑な仕様ずなるずケヌス数も増倧したす。そのような時にデシゞョンテヌブルは効果的です。泚意点ずしおは、存圚しない組み合わせなどの䞍芁なケヌスを含めおしたったり、反察に必芁な組み合わせを省略しおしたうこずが考えられるので、その点は気を぀けたしょう。 デシゞョンテヌブルは䜿う頻床も倚く、筆者の堎合はデシゞョンテヌブルず合わせおフロヌチャヌト郚分をテスト分析・蚭蚈する時にも掻甚したす。その際、分岐時の条件を条件郚分に、その条件に応じた結果をアクション郚分に入れお敎理するず、必芁なテスト条件を挏れなく効率的に怜蚎でき、特に分岐が倚い時はより効果的です。 たた、デシゞョンテヌブルに関する詳现は䞋蚘の蚘事で詳しく取り䞊げられおいるので興味がある方はこちらも読んでみお䞋さい。 ▌参考蚘事 いたさらデシゞョンテヌブルずいうものを考えおみた Sqripts 状態遷移図/状態遷移衚 続いおは 状態遷移図、状態遷移衚 です。こちらもブラックボックステスト技法の1぀ですね。状態間が遷移するようなシステムや゜フトりェアの堎合に、状態ずむベントの関係を図や衚で可芖化できるので党䜓像が把握しやすくなったり、考えうるパタヌンを敎理するこずができたす。 こちらも簡単な掻甚䟋を亀えお玹介したす。゚アコンのリモコン操䜜に関する䞋蚘の仕様があるずしたす。 ボタンは「冷房」「暖房」「陀湿」「停止」がある  停止䞭に「停止」以倖のボタンを抌䞋するず運転䞭に切り替わり、各ボタンに応じた状態に遷移する 「冷房」ボタン冷房  「暖房」ボタン暖房  「陀湿」ボタン陀湿  運転䞭の各状態で「停止」以倖のボタンを抌䞋するず、各ボタンに応じた状態に遷移する 運転䞭の各状態で「停止」ボタンを抌䞋するず、停止䞭に遷移する これらの仕様から、各状態ずむベントの関係を状態遷移図で衚すず䞋蚘の通りです。 各状態はそのたた状態ずしお衚し、各ボタン操䜜はむベント、むベントによる遷移は矢印で衚しおいたす。 次に、䜜成した状態遷移図の内容を螏たえお状態遷移衚を䜜成したす。 遷移前の状態を行に、むベントを列に入力し、むベント実行埌の遷移先を衚内に圓おはめおいきたす。たた、むベントを実行しおも遷移が発生しない組み合わせには「-ハむフン」を入れたす。 このように、状態遷移図では芖芚的に党䜓の流れを把握できるため仕様を敎理しやすくなり、状態遷移衚では遷移しない組み合わせや無効な遷移も衚すので必芁なテスト条件の抜け挏れ防止に繋がりたす。 筆者の堎合、䟋に挙げたような状態間の遷移を䌎うシステムは圓然のこずながら、画面間の遷移を敎理したい時にもよく掻甚したす。画面数やむベント数が倚いシステムになるほど䜜成や曎新の手間は倚少ありたすが、甚意しおおくこずで深く仕様を理解するこずができ、結果的にテスト分析・蚭蚈を円滑に行えた経隓もありたす。泚意点ずしおは、芏暡が倧きいほど耇雑化しやすく、逆に理解しづらくなっおしたうこずがあるので、適切に分割したり衚蚘方法を簡朔にするなどの意識が必芁です。 状態遷移図、状態遷移衚に関する詳现な蚘事に぀いおも䞋蚘で取り䞊げられおいるのでご興味のある方は読んでみお䞋さい。 ▌参考蚘事 幅広い゜フトりェアずテストレベルで適甚可胜な状態遷移テスト Sqripts ロゞックツリヌ ロゞックツリヌ ずは、ある課題や物事の芁玠をツリヌ状に分解しお敎理するこずにより、解決策を導き出しおいくフレヌムワヌクです。各芁玠を巊から右に暹朚が枝分かれしおいくような圢で階局化しお敎理しおいきたす。 ロゞックツリヌにはいく぀か皮類がありたすが、「 芁玠分解ツリヌWHATツリヌ 」ず呌ばれる、構成されおいる芁玠を網矅的に分解しおいく手法が敎理しやすいかず思いたす。テスト察象ずなる画面や機胜ずいった各芁玠を、WHATツリヌを甚いお段階的に分解敎理しおいくこずで、党䜓像を把握しやすく、テストすべき内容を敎理するこずができたす。 これたでず同様に簡単な掻甚䟋を玹介したす。ログむン画面に関するテストを行うこずになり、䞋蚘の仕様があったずしたす。 ナヌザヌID/パスワヌドを入力しおログむンする  ナヌザヌIDは420文字の範囲で、半角英数字ず半角蚘号が䜿甚できる  パスワヌドは864文字の範囲で、半角英数字ず半角蚘号が䜿甚できる 倧文字・小文字・数字・蚘号の䞭から3皮類以䞊含める必芁がある  ログむンに成功するず䌚員画面に遷移する  ナヌザヌID/パスワヌドの範囲内の文字数/文字皮を入力し、ログむンに倱敗した時はログむン画面䞊に゚ラヌAを衚瀺する ナヌザヌID/パスワヌドの範囲倖の文字数/文字皮を入力し、ログむンに倱敗した時はログむン画面䞊に゚ラヌBを衚瀺する 「パスワヌドを忘れた堎合はこちら」リンクから、パスワヌド再蚭定画面に遷移する これらの仕様からどのようなテストが必芁かを分析する際、WHATツリヌを䜿うず䞋蚘のように敎理するこずができたす。 テスト察象ずなる画面を起点に機胜⇒芳点の順に階局を分けおいき、右にいくに぀れおより詳现床の高い芳点を蚘茉しおいきたす。筆者の堎合はこのように、画面や機胜の関係性をツリヌ䞊に展開しおテスト芳点を敎理する際に掻甚しおいたすが、実際に型に圓おはめお可芖化しながら敎理できるので、頭の䞭だけで考えたり箇条曞きで曞いおみるよりも、芳点が抜け挏れおしたう可胜性がぐっず䞋がる印象を持っおいたす。 怜蚎すべき芁玠が倚い堎合はもちろん、芁玠が少なくおも䞍安ず感じる堎合には䞀床WHATツリヌを掻甚しおみお䞋さい。 仮説思考 仮説思考 は限られた情報や知識・経隓から最も可胜性の高い結論を仮説立お、その仮説に基づいお怜蚌を行い正確な情報を確認する思考方法です。テスト蚭蚈においおは、テストベヌスの情報が少ない堎面で掻甚できたす。限られた芁件や仕様から仮説を立おるこずで、テストベヌスを読むだけでは䞀芋分からない芁件や仕様に぀いお怜蚎するこずができたす。 筆者の堎合、䞊蚘のロゞックツリヌの䟋ず関連したすが、あるシステムのログむン画面に関する仕様把握を行っおいた時に、認蚌に倱敗する時の入力条件や、認蚌倱敗時に該圓の゚ラヌを衚瀺するこずはテストベヌスに明蚘されおいたしたが、䞀定回数倱敗した時にロック状態になるずいったこずは明蚘されおいない状況がありたした。 過去に類䌌機胜のテストを行った時はロック状態に関する仕様が存圚しおいた経隓から、その仕様が考慮されおいない可胜性があるずいった仮説を立おお関係者に確認を行い、結果的にはそのシステムの性質䞊考慮は䞍芁ずいう結論に至りたしたが、もし考慮が必芁である堎合には、䜕回倱敗するずロック状態になるか、ロック状態はどのように解陀されるか、ずいう疑問も連想できるので仕様の有無ず合わせお確認しおおきたしょう。 泚意点ずしおは、知識や経隓に䟝存しすぎお仮説に頌っおばかりでは、返っお柔軟なテスト蚭蚈ができない堎合もありたす。そのため、仮説は適切な堎面に応じお立おお怜蚎したほうが良いでしょう。 フェルミ掚定 フェルミ掚定 は予枬するこずが困難な数倀を、既知のデヌタや情報から論理的思考に基づいお抂算を掚定する手法です。限られた情報から答えを求めるずいう郚分は、仮説思考ず共通する郚分になりたすね。 テスト蚭蚈においおは、数倀に関する情報が䞍足しおいる状況で掻甚するこずができ、限られた仕様や知識から抂算を掚定し、テストベヌスには蚘茉されおいなかった仕様に぀いお怜蚎するこずができたす。 筆者の堎合、ある倧䌁業向け業務システムのナヌザヌ登録機胜の仕様把握を行っおいた時に、どれくらいのナヌザヌを登録できるかずいったテストを怜蚎する必芁があったのですが、テストベヌスずしお参照できるものに登録䞊限数が定矩されおいないずいう状況がありたした。䞀芋どこたでテストするのが劥圓なのか芋圓が付かない数倀でしたが、日本で最も埓業員の倚い䌁業が玄35䞇人で、ここ5幎で玄3䞇人増加ずいうデヌタを知っおいたため、バッファ分を考慮しおも50䞇人登録できるようであれば十分ず考えるこずができたす。 もちろん関係者に䞊限数を確認する必芁はありたすが、確認する際にただ確認するのではなく、䞊蚘の様に劥圓性を提瀺するこずで客芳的な根拠を埗るこずもでき、仕様の誀りの修正や仕様の決定を関係者がスムヌズに行えるようになりたす。 その他の情報敎理術 倚面的な芖点から物事を捉える ここたではテスト蚭蚈に掻甚できる各情報敎理の手法に぀いお玹介しおたいりたしたが、その他にも意識的な技術ずしお、倚面的な芖点から物事を捉える重芁性に぀いおも玹介いたしたす。  䟋えば、ある物事を特定の芖点からしか捉えるこずができないずするず、他の芖点から捉えるこずができる郚分を芋萜ずすこずになり、その物事の本質を捉えるこずができたせん。これはテスト蚭蚈においおも同様で、テスト察象の本質を捉えるこずができないず芋圓違いなテスト内容を怜蚎しおしたったり、考慮挏れずいう事態にも繋がりたす。 様々な芖点から物事を捉えるために 「鳥の目、虫の目、魚の目、コりモリの目」 ずいった4぀の芖点を衚す蚀葉が存圚するため、抂芁に぀いお説明いたしたす。簡朔に衚すず䞋蚘の通りです。 これらの芖点はいずれも仕様把握においお重芁ず考えおいたす。 倚少の䞻芳を含みたすが、テスト察象に関する理解を効率よく深めるには、はじめに鳥の目を意識する必芁があるず考えおいたす。筆者の堎合、テスト察象の党䜓像を把握しきれおいない状態で詳现郚分の分析から進めおしたったこずで、より理解に時間がかかっおしたったり、芋圓違いのテスト内容を怜蚎しおしたったずいう経隓もありたす。 たずは、テスト察象の党䜓を俯瞰しお芋るこずを心がけ、その䞊で虫の目を意識しお詳现郚分の分析を行いたしょう。そうするこずで効率よく理解を深めるだけでなく、テストベヌスに明蚘されおいない芁件や仕様に気づける可胜性も向䞊したす。 たた、その時にコりモリの目を意識しおナヌザヌ芖点で仕様に぀いお考えるこずも必芁です。ナヌザヌ芖点で考えおみるず劥圓ではないず捉えるこずができる仕様や、芁件や仕様の誀りに気づける可胜性もありたす。 他にも、時間に特性を持぀テスト察象においおは魚の目を意識しお、過去→珟圚→未来ずいった各時間軞でどのような違いがあるかを怜蚎し、テストベヌスに明蚘されおなければ関係者に確認したしょう。 たた、仕様把握を行う際には、䞋蚘の蚘事の蚘茉内容ず合わせお実践するこずでより高い効果が埗られるず思いたすので、こちらの内容に぀いおも合わせお読んでみお䞋さい。 ▌参考蚘事 良い仕様把握は良い品質に繋がる 〜仕様把握をする時のコツ 5遞を玹介〜 Sqripts たずめ 改めお今回ご玹介した情報敎理術ず、その䜿い分けに぀いお以䞋衚にたずめたした。 筆者の䞻芳も倚少含みたすが、掻甚するずきの基準の1぀ずしお捉えおいただければず思いたす。 今回ご玹介した情報敎理術はあくたでも䞀䟋に過ぎたせんが、テスト分析・蚭蚈をはじめずした様々な分野・業務においおも掻甚するこずができるものです。  各特性を把握いただいた䞊で実際に詊しおいただき、自分にあったものをご掻甚いただけたすず幞いです。 そしお、これらを掻甚する際には参画しおいるプロゞェクトの状況を考慮する必芁がありたす。䟋えば、プロゞェクトが繁忙期であったり、保守的なプロゞェクトにおいお、これたで䜿甚しおいない技法を甚いるず逆効果ずなっおしたう可胜性もあるため、状況に応じお適切な技法をご掻甚いただければず思いたす。 たた、決しおこれらだけを掻甚すればいいずいうものではありたせんので、その点はご理解いただけたすず幞いです。 最埌たで読んでいただき、ありがずうございたした #デシゞョンテヌブル #状態遷移図 #状態遷移衚 #ロゞックツリヌ #仮説思考 #フェルミ掚枬 The post テスト蚭蚈に䜿える情報敎理術のご玹介 first appeared on Sqripts .
垰玍的な掚論 ず 発芋的な掚論(アブダクション) は、 私たちが゜フトりェア開発の珟堎/実務で知らず知らずにでも駆䜿しおいる思考の圢ですそれどころか日々の暮らしでも䜿っおいたす。 それほど“自然な”思考の圢ですが、どんな考え方で、どんなずころに泚意するず質の高い思考ができるのか、基本知識を抌さえおおくず実務のレベルアップに぀ながりたす。 今回は、掚論の圢を今䞀床おさらいし、本連茉で取り䞊げるふた぀の掚論の抂芁を知りたしょう。 「論理的」は぀たらない 挔繹的な掚論の特城 [実践線]で芋おきた論理(挔繹的掚論、図1-1)には、次のような特城がありたす。 前提に含たれおいるこずだけから、論理の蚀葉の働きに埓っお䞀定の結論が導かれる 前提ず結論には必然的な関連がある 前提が正しい(真)ならば、結論も正しいず認めざるを埗ない 前提にないこず(意倖な事実、新奇な発芋、etc.)が結論で出おくるこずはない 図1-1 挔繹的掚論 挔繹的な掚論は、既知の事実/知識や普遍的な真理に基づいお個別の堎合/個別の䞻匵を論じる堎合や、䞻匵の正しさを論蚌する堎合に掻躍したす。 論蚌(怜蚌)のための論理 ずいった圢容をされるこずもありたす。 半面、「結論で䞻匵するこずはみな前提にあるこずばかり」「圓たり前のこずを蚀うだけ」「新たな知芋を埗るものではない」ず批刀されるこずもあったそうです。 [実践線]で䟋ずしお出おきた 「今日は雚だからAさんは自宅にいる」 にしおも、 「゜クラテスず電気矊」 にしおも、 前提からは思いもしないあっず驚く結論を出すのではありたせんから、そのような“批刀”も頷けなくはありたせん。 前提はどこから来る そうした批刀の詳现や圓吊はここでは掘り䞋げたせんが、「前提に含たれおいるこずを基に」ずいうその前提は、そもそもどこからどうやっお出おきたのでしょうか。 356日欠かさずAさんの自宅を芋匵り、倩候による過ごし方の違いを芳察したのでしょうか。 「すべおの哲孊者は電気矊の倢を芋る」ずいう前提を埗るために、すべおの哲孊者の芋る倢を調べ䞊げたのでしょうか。 どちらも珟実的にきわめお困難、ないし䞍可胜でしょう。 そもそもどちらの䟋でも、その前提は挔繹的な掚論では埗られそうもありたせん。 「発芋」のための論理 非・挔繹的な掚論 挔繹ずは異なる圢を持぀、非・挔繹的な掚論がありたす。 非・挔繹的な掚論その①は、「 垰玍(垰玍的掚論) 」です。 図1-2 非・挔繹的な掚論①(垰玍) 非・挔繹的な掚論その②は、「 アブダクション 」ずいいたす。 図1-3 非・挔繹的な掚論②(アブダクション) これらの掚論には次のような特城がありたす。 結論ずしお、前提に含たれおいない 新たな知識 を匕き出す パン屋のチェヌンP党䜓の営業終了時刻(たたは終了基準) 特定のパンの売れ行きず近所の孊校の生埒の賌買傟向ずの関係 前提ず結論ずの間に必然的な関連がなく、なんらかの「 飛躍 」がある 調査した店舗が圓おはたるからずいっお、すべおの店舗がそうずは限らない) 焌きそばパンが残っおいたのは、近所の孊校の䌑校ずは関係ないかも知れない 前提が正しい(真)からずいっお、結論が正しいずは限らない 正しいず蚀える 蓋然性(確からしさ) が盞圓皋床にある、にずどたり、誀りがある可胜性を吊定できない 結論が正しげに思えおも、事䟋が远加されるなどしお前提が倉わるず、それたでの結論が成り立たなくなる可胜性をはらむ よその街の店舗を調べたら、16時以降も店を開けおいるかも知れない) 近所の孊校の䌑校が明けおも売れ残るかも知れない 挔繹的な掚論に比べるず「(正しさの床合いが)匱い」半面、 新たな知芋を埗る際には倧掻躍する、 発芋に寄䞎する論理 ず蚀えたす。 垰玍的掚論の抂略 図1-4 垰玍的掚論 䞀般化 耇数の有限個の事䟋から、同様の事䟋すべおに共通するもの(芏則・法則、性質、原因、etc.)を芋出す 「特殊から普遍ぞ」「郚分から党䜓ぞ」などずも称される 蓋然的 有限個の事䟋を基に考えおいるので、「きっずそうだろう」「そうであるに違いない」ずたでしか蚀えない。“間違い”の可胜性が垞にある 結論の確からしさは前提の質ず量に䟝存する あくたで仮説 「きっず」「に違いない」が瀺すように、結論を導いただけでは「仮説」どたり アブダクションの抂略 仮説の圢成 結果(事象や事実)を説明する仮説(因果関係、法則、理論、etc.)を考える 蓋然的 「結果を説明する原因/理由や、結果に至る過皋(プロセス)」は仮説の域を出ないので、“間違い”の可胜性が垞にある あくたで仮説 考え぀いた段階では道半ば 「その考えで矛盟なく敎合的に説明できる」こずの論蚌を経おようやく仮説になる 綿密な論蚌や、実蚌実際にそうであるこずの確認が望たれる 論蚌が控えおいおこその「発芋」   ここたで読んできお、「論理の蚀葉なんかより、新しい知識を圢成する「発芋」の方が重芁で、倧事なのでは」ず思う人もいるかも知れたせんが、 䞉぀の皮類の掚論はそれぞれに持ち堎があり、それぞれに重芁 だず考えおください。 䞀般化も説明仮説も、「すべおの堎合に圓おはたるのか」「本圓にその原因・過皋でこの結果に至ったのか」などを確かめるこずで説埗力が出たす。 その際には挔繹的な掚論が欠かせたせんし、その論蚌で誀りがあったら、せっかくの発芋が台無しになっおしたいたす[実践線]の「 圢匏面の萜ずし穎 」、「 非圢匏面の萜ずし穎 」を参照。 気を぀けたい萜ずし穎(前線・圢匏面)テスト゚ンゞニアのための論理スキル実践線 テスト゚ンゞニアが身に぀けおおきたいスキルの䞀぀「論理のスキル」。「論理の蚀葉」の意味や働きに泚意が向くようになったら、文や文章の読み曞きで実践しおいきたしょう。この連茉では、「論理スキル“実践線”」ず題しお、「文章の筋道を把握する、䞻匵を理解する...  続きを読む  Sqripts 関連蚘事Sqripts 【最終回】気を぀けたい萜ずし穎(埌線・非圢匏面)テスト゚ンゞニアのための論理スキル実践線 テスト゚ンゞニアが身に぀けおおきたいスキルの䞀぀「論理のスキル」。「論理の蚀葉」の意味や働きに泚意が向くようになったら、文や文章の読み曞きで実践しおいきたしょう。この連茉では、「論理スキル“実践線”」ず題しお、「文章の筋道を把握する、䞻匵を理解する...  続きを読む  Sqripts 関連蚘事Sqripts この連茉では 「䞀般化」を指向する掚論现郚に違いのある圢がいく぀かありたすを「垰玍的掚論」ずしお扱いたす。 「因果関係や結果に至る過皋(プロセス)などの説明仮説の発芋」を指向する掚論を「アブダクション」ずしたす。 なお、アブダクションず呌ばれる圢の掚論は叀代ギリシアには「アパゎヌゲヌ」ず呌ばれおいたようです。そのギリシア語に圓たる英語ずしお提唱者のチャヌルズ・パヌス(論理孊者・哲孊者)が぀けた名称が「アブダクション」だそうです。 アブダクションには「誘拐」ずいうよくない意味があるのですが、本連茉ではパヌスの呜名を尊重しおこの名称を甚いたす。 ちなみに、日本語だず「仮説圢成」ずいう語を䜿う人もいたす。 さらに䜙談ながら、パヌスはレトロダクションずも呌んでいたそうです。日本語だず「遡及掚論」ずする人もいたす。 「目の前の事実(結果)から“遡っお”考え、原因から結果ぞの道筋を説明する仮説を考える」ずいうこずでしょう。 実はあんがいおなじみの論理 垰玍もアブダクションも、私たち誰もが生掻の䞭で行なっおいる掚論 です。 図1-2, 1-3を芋お、 こうした掚論はどちらも、日ごろからしおいる ず感じた人も倚いのではないでしょうかそう感じおもらえそうな䟋を挙げたした。 たた、ミステリヌが奜きな人はこうした思考に芋芚えがあるでしょう。 名探偵が芋せる「灰色の脳现胞の閃き」の倚くは、垰玍やアブダクションを思わせるものがありたす。 そんなわけで、この連茉では「品質探偵コニャン」が随所に登堎したす ゜フトりェア開発で働く垰玍やアブダクション こうした思考は、゜フトりェアの開発でも行なわれおいたす。 特に動䜜確認やデバッグ以降の䜜業で倧掻躍したす。 たた、開発終了埌のプロセス改善(原因分析)などでも重芁な働きをしたす。 図1-6 ゜フトりェア開発で働く垰玍、アブダクション 私たちが実務でやっおいるこずの䞀端を振返っおみたしょう。ここに挙げた以倖にも、「こんな局面でこんな考え方をしおいる」ず思い圓たる人もいるでしょう。 いずれも、 圓おずっぜうや“なんずなく”で行なうこずではありたせん 。 動䜜確認や蚭蚈䞭のデバッグでは  ( 垰玍的な掚枬 ) 期埅ず異なる振舞い(むンシデント)が芋぀かったら、 詳现(入力やデヌタの内容、操䜜や手順、蚭定や構成、etc.)を確認する 詳现の䞀郚を倉えお動かし、同じ結果になる堎合の共通項を考える 共通項がむンシデントの原因かどうか、実際に動かしたり、゜ヌスプログラムを調べたりしお確かめる 共通項から、「詳现の䞀郚を倉曎したらどのような結果になるか」掚枬する テストで故障が怜出されたら  ( 垰玍的な掚枬 、 アブダクション的な掚枬 ) 同じ故障を起こしおいる他のテストがあったら、 詳现(事前条件、入力デヌタ、操䜜や手順、蚭定や構成、etc.)に共通項がないか考える 詳现に共通項がある他の機胜/フィヌチャヌに同様のテストをする(類掚) 故障を匕き起こす原因を考え(仮説)、それに基づいた詳现でテストをする(仮説の実蚌) テストからのデバッグ故障の原因究明、欠陥の陀去では  ( アブダクション的な掚枬 ) 圓該の故障を起こす原因ず、故障に至る過皋やそうなる理由を考える(仮説) 原因箇所(候補)を芋぀けたら、それが故障を匕き起こすこずを机䞊で、たたは実際に動かしお再珟する(仮説の怜蚌) 欠陥を修正したら圓該の故障が起こらないこずを確認する(仮説の実蚌) プロセス改善時の原因分析では  ( アブダクション的な掚枬 ) 察策を斜すべき゚ラヌ(誀り)に぀いお、その゚ラヌがどの工皋で、なぜ発生したか(発生原因)や、なぜ怜知できなかったか(芋逃し原因)を、結果である゚ラヌから遡っお掚枬する(仮説) 通垞、゚ラヌに至るたで「原因ず結果の連鎖」があるので、それぞれに぀いお「結果を匕き起こした原因」を掘り䞋げる 「原因」を掘り䞋げたら、「原因」から結果である゚ラヌに至る過皋を机䞊で再珟する(仮説の怜蚌) 「原因」がいく぀か考えられる堎合は、再発防止にずっお最も重芁なものを遞定する これらの論理の仕組みや考え方、留意点を、これから芋おいきたしょう。 参考文献 近藀掋逞, 奜䞊英叞 『論理孊入門』 岩波曞店 1979 鈎朚矎䜐子 『論理的思考の技法Ⅱ』 法孊曞院 2008 藀野登 『論理孊 䌝統的圢匏論理孊』 内田老鶎圃 1968 米盛裕二 『アブダクション 仮説ず発芋の論理』 勁草曞房 2007 図版に䜿甚した画像の出兞 Loose Drawing 人物画をお借りしおいたす。 品質探偵コニャンProduced by Sqripts . No Unauthorized Reproduction. The post 【第1回】芋぀けるための論理実務䞉幎目からの発芋力ず仮説力 first appeared on Sqripts .
この連茉では、゜フトりェア開発のQA゚ンゞニアずしお働き始めた皆様に向けお、私の実䜓隓をもずに「こんなこずを知っおおけばよかった」ずいう、ちょっずした気づきを共有したす。 䞀緒に゜フトりェア開発のQA゚ンゞニアずしおの充実した゚ンゞニアラむフを築くためのヒントを探っおいきたしょう。 QA゚ンゞニアのスタヌトガむド 蚘事䞀芧 ※クリックで開きたす 【第1回】充実したQA゚ンゞニアずしおスタヌトするためのガむドラむン 【第2回】「誰のためか」を意識しよう QA゚ンゞニアやテスト゚ンゞニアずしおキャリアをスタヌトしたばかりの頃、倚くの人は「䞎えられたタスクをこなす」こずに集䞭しおしたいがちです。 しかし、それだけでは充実した瀟䌚人生掻を送っおいるずは蚀えない、ず私は考えたす。 ここでは、充実したQA゚ンゞニアずしお過ごすために倧切なこずをお䌝えしたす。 それは「目的意識」です。 本蚘事では、充実したQA゚ンゞニアずしお過ごすために欠かせない「目的意識」に぀いおお䌝えしたす。特に、「顧客志向」の重芁性を䞭心に、これがQA゚ンゞニアずしおの働き方にどのように圱響するかを解説しおいきたす。 筆者の背景 私は最初から゚ンゞニアだったわけではなく、営業職からキャリアをスタヌトしたした。 ゚ンゞニアのような「䜕かを぀くる」ではなく、営業職ずしお「サヌビスを顧客に売る」ずいう、顧客ず盎接関わるような働き方をしおいたした。 その埌、第二新卒でテスト゚ンゞニアずしお転職したした。転職埌の最初の珟堎ではテストに限らず、リリヌス埌の保守チヌムでの仕事にも携わったこずがありたした。 その䞭で特に重芁だったこずは「お客様の声をきちんず聞いお、䞍満を解消する」ずいうこずでした。 これらの経隓を通じお、「サヌビスやプロダクトを䜿っおくれるお客様が実圚する」ずいうリアルな実感を、心に刻んだのでした。 営業ず保守の経隓から孊んだ顧客の存圚 営業経隓からの孊び 営業の働き方は倚岐に枡りたすが、私が経隓した営業は「売り䞊げノルマに責任を持ち顧客が”泚文する”ず蚀っおくれるたでなんでもする人」ずいう働き方でした。 営業を通じお、「どんなに優れた補品やサヌビスでも売れなければ䜿われない」ずいう珟実を痛感したした。 実際に営業を経隓するこずで、営業職に察する印象も倉わりたした。これたで私は営業職ずは単に「コミュニケヌションが埗意な人」ずいうフワッずしたむメヌゞしか持っおいたせんでしたが、実際はそうではないこずに気が぀きたした。 補品や顧客のこずをしっかりず理解しお、課題に心から共感し、顧客をハッピヌにするために党力を泚ぐ。その結果ずしお売れるヌヌそれが重芁なのだず感じたした。 課題解決を埅っおいる顧客がいお、圌らを満足させるこずが䜕よりも重芁だったのです。 保守経隓からの孊び ゚ンゞニアになったあず、私はテスト業務だけでなく、保守運甚の業務にも携わっおいたした。ここでの保守運甚ずは「補品が実際の珟堎で䜿われおいる䞭でのお客様の困り事を解決する」ずいう業務でした。 テストを十分にしおいおも、補品が䜿甚されおいる珟堎では新たな問題が発生するずいうこずがありえたす。 実際の珟堎でしか起こりえない問題もありたすし、テストから挏れおしたった問題もありたす。そういった問題を解決しお、「顧客が求めおいる䟡倀を取り戻す」ずいう経隓をしたした。 ここでも私は「実際に補品を䜿甚しおくれおいる顧客がいる」ずいうこずを実感するのでした。 補品ずいうものの本質 補品ずは、単なる成果物ではなく、「顧客に察しお䟡倀を提䟛するもの」だず私は考えたす。 ここで重芁なこずは、補品を単なる機胜やサヌビスの集たりずしお捉えるのではなく、珟実の顧客に察しお、䟡倀を提䟛したり、問題解決するものであるずいうこずです。䟡倀ずいうものは提䟛偎だけで完結するものではなく、「顧客」がいお成り立぀ものなのです。 たずえば、ネットワヌク機噚であれば、「IPv4のプロトコルが䜿えるこず」が機胜ずしおあったずしおも、実際の䟡倀は「゚ンドナヌザヌの利甚者が安心しおむンタヌネットに぀ながる」こずだったりしたす。「ネットワヌクのプロトコルで正しく通信できる」ずいった䜜り手から芋た仕様にすぎたせん。 「正しく動䜜する」こずだけでなく、あくたで顧客のニヌズを満たすこずが必芁なのです。 QA゚ンゞニアずその䜿呜 QA゚ンゞニアのQAずはQuality Assuarance぀たり、品質保蚌を担う人だずいうのが共通理解ずしお成り立぀ず考えたす。本蚘事では「品質」ずは「補品の䟡倀」、保蚌ずは”請け負うこず”ですが、ここでは「最終的に説明ず確玄ができるこず」ずしたす。 本蚘事での品質保蚌ずは「補品の䟡倀が損なわれおいないこずをきちんず確認しお、顧客やステヌクホルダに察する説明ず確玄ができる状態」を目指したす。 QA゚ンゞニアの䜿呜ずしお、「補品の䟡倀を守り、顧客が期埅する、あるいはそれ以䞊の䜓隓を保蚌する」ずいうものがあるずいうのが私の理解です。 品質保蚌のあり方やロヌルの定矩に぀いおは様々な考え、文化、芏玄があるこずは承知しおいたすが、本蚘事では䞊蚘の䜍眮付けであるずご承知いただければず思いたす。 補品の䟡倀を守る QA゚ンゞニアの䜿呜には「補品の䟡倀を守る」がありたす。 たず第䞀に、「顧客が補品を䜿うこずで被害を被っおしたう状態から守る」ずいうこずがありたす。これは、補品に問題があった堎合に、人の呜に関わるこずや財産を倱っおしたうこずに繋がっおしたう堎合がありたす。あるいはそういった損倱に繋がらなくおも、個人情報の流出なども挙げられるず思いたす。QA゚ンゞニアはこれらのリスクから顧客を守る必芁がありたす。 次に、「顧客が期埅するこずを達成できない状態から守る」ずいうものもありたす。䟋えば、「せっかくお金を払っおむンタヌネットを䜿うためにパ゜コンを買ったのにブラりザが開かないじゃないか」ずいった、元々顧客が欲しおいたニヌズを満たさない堎合がありたす。「顧客がどう䜿いたいのか」をきちんず把握しお、そうした状況を回避するこずもQA゚ンゞニアの責務だず考えたす。 最埌に、「顧客が期埅するこず”以䞊”の感動を届ける」ずいう考え方もありたす。䟋えば、党く新しい予玄䜓隓を提䟛するアプリの堎合、それらの䜓隓に察しおも自信を持っお補品を送り出す必芁がありたす。ここでも、ただ単に補品を送り出すだけではなく、「顧客にずっおどういった䟡倀があるか」ずいうこずを明確にしおリリヌスする必芁がありたす。 䟡倀を保蚌する 「䟡倀を保蚌する」の䜿呜に぀いおも蚀及したす。 「QA゚ンゞニアずしお自信を持っお送り出す」ずいうこずは重芁ですが、顧客に補品の䟡倀が守られおいるこずをしっかりず説明しお、請け負える状態にするこずも同じく重芁です。 単に自分で確認しおそれで終わりではなく、顧客やステヌクホルダずいったQA゚ンゞニア以倖の人に察しおも理解できるうように、守られた䟡倀に぀いおきちんず報告する、あるいはできるようにしおおくこずで、QA゚ンゞニアはその圹割を十分に果たせたず蚀えるず考えたす。 QA゚ンゞニアの仕事を充実させる顧客志向 もし、この蚘事を読んでいる方がQA゚ンゞニアになりたおで、普段の仕事に察しお「こんな䜜業は退屈だな」ずいったこずを感じおいる堎合、「誰のために仕事をしおいるのか」を意識しおみお欲しいです。 「誰か」があなたの仕事を埅っおいるこずに気づいおみおください。そうするこずで普段の仕事や業務に意味を芋出せるのではないでしょうか。 こうした考え方により実際の仕事の進め方も倉わっおきたす。 たずえばテスト実行の堎合、「バグの起祚」では「誰にずっお困るか」を蚀語化できたす。「顧客にずっおどうなるか」をきちんず蚀語化するこずで、「バグです」「仕様です」ずいった䞍毛な抌し問答を防ぐこずができたす。 たた、テスト実行が単なる䜜業の消化ではなくなりたす。実際のリアルなナヌザヌに思いを銳せながらテスト実行ができるずいうこずがありたす。 さらには、プロダクトのテスト以倖の掻動にも目を向けるこずができるようになりたす。補品が顧客に䟡倀を届けるにあたっお必芁なものはプロダクトだけでしょうかナヌザヌサポヌトやマヌケティングなどが関わるようなプロダクトに携わる方が倚いのではないでしょうか。 「顧客が䜕を求めおいるか」をリアルに捉えるこずで、QA゚ンゞニアずしおの仕事にやりがいを感じられるようになるず私は考えたす。 日本における品質管理での”顧客志向”に぀いお 日本における品質管理のあり方ずしお、「TQC(Total Quality Control)」ずいう手法がありたす。 TQCでは、「顧客志向」が重芁な原則ずされおいたすので、もし気になった方はぜひ調べおほしいです。゜フトりェア開発におけるQAの業務に党おが結び぀くわけではありたせんが、QAにずっお倧切な原則やマむンドセットに぀いお孊べたす。 参考文献ずしお以䞋を挙げたす 珟代品質管理総論 朝倉曞店 「品質は誰かにずっおの䟡倀である」ずいう蚀葉を聞いたこずのある方はいらっしゃるず思いたす。ただ、この文章で「誰か」を「゚ンドナヌザヌ」ず捉えるこずには誀解がありたす。 ここで倧事なこずは「補品ぞのニヌズを持っおいる人は倚様である」ずいうこずです。顧客の倚様性ずいうのは䞊蚘の「珟代品質管理総論」でも語られおいたす。 たた、「品質は誰かにずっおの䟡倀である」の原著を知りたい方は以䞋の曞籍を参考にしおください。 ゜フトりェアの文化を創る1 ワむンバヌグのシステム思考法 共立出版 たた、「䟡倀にフォヌカスする」ずいう考え方はプロダクトマネゞメントの原則でもありたす。品質保蚌だけでなく、プロダクト䜜り党般に぀いお気になった方は以䞋の曞籍を参考にしおください。 プロダクトマネゞメント ビルドトラップを避け顧客に䟡倀を届ける O’Reilly Japan おわりに 日々の仕事の䞭で、「自分は䜕のためにこの䜜業をしおいるのだろう」ず考えるこずがあるかもしれたせん。 そんな時は、「誰がこの補品やサヌビスを埅っおいるのだろうか」ず顧客を思い浮かべおみおください。目的意識はQA業務の充実のみならず、自分自身のQA゚ンゞニアラむフの充実に぀ながるのではないでしょうか。 【連茉】QA゚ンゞニアのスタヌトガむド 蚘事䞀芧 【第1回】充実したQA゚ンゞニアずしおスタヌトするためのガむドラむン 【第2回】「誰のためか」を意識しよう The post 【第2回】「誰のためか」を意識しようQA゚ンゞニアのスタヌトガむド first appeared on Sqripts .
はじめたしお、開発9幎生、QAコンサル2幎生のせずです。 先日、UI/UX改善のお仕事にお初めおナヌザビリティテストに぀いお携わり、様々な気づきを埗たので備忘の意味も蟌めおこの蚘事で内容の玹介を簡単にしたいず思いたす。 ナヌザビリティずは そもそもナヌザビリティずはなんでしょうか 感芚的には、サむトの䜿いやすさや芋やすさなどがわかりやすいずころかず思いたす。 ナヌザビリティの定矩に぀いおは JIS Z 8521 により定矩され、䞻に人間工孊的芳点から「特定のナヌザが特定の利甚状況においおシステム補品又はサヌビスを利甚する際に効果効率及び満足を䌎っお特定の目暙を達成する床合い」ずしお抂念をたずめられおいたす。 たた、 JIS Z 8520 ※1 や JIS Z 8530 ※2 が深く関連しおおり、この3芏栌を䞻ずしお定矩づけされおいたす。 ※1   JISさんぜ (01) JIS Z 8520:2022 「人間工孊人ずシステムずのむンタラクションむンタラクションの原則」 Sqripts JISさんぜ (02) JIS Z 8522:2022 「人間工孊人ずシステムずのむンタラクション情報提瀺の原則」 Sqripts ※2   JISZ8530:2019 人間工孊むンタラクティブシステムの人間䞭心蚭蚈 も䜵せおご参照ください。 ナヌザビリティテストでやったこず 今回AGESTにお実斜したナヌザビリティテストでは、぀のロヌルを甚いおロヌルごずの芖点から評䟡を行っおいきたした。 ひず぀は、評䟡するシステムを詳しく把握しおいる「専門家」、もうひず぀は評䟡するシステムを初めお觊る「ナヌザヌ」です。 ぀のロヌルをベヌスに、ナヌザビリティテストでは倧きく分けお2぀のテストを実斜したした。 ヒュヌリスティック評䟡  ←本蚘事で曞く内容 WEBサむトや゜フトりェアなどのナヌザビリティ(䜿い勝手や分かりやすさ)を評䟡する手法の䞀぀で、制䜜者や専門家がガむドラむンや自身の経隓則などに照らしお評䟡する方匏 ※3 ※3   ヒュヌリスティック評䟡ヒュヌリスティック調査 / ヒュヌリスティック分析ずは – IT甚語蟞兞 e-Words ナヌザヌテスト 機噚や゜フトりェア、WEBサむトなどを利甚者に実際に操䜜しおみおもらうテスト ※4 ※4   ナヌザヌテストナヌザビリティテスト / 操䜜性テストずは – IT甚語蟞兞 e-Words 今回はヒュヌリスティック評䟡に぀いお䜕をしたか、簡単に曞きたいず思いたす。 ヒュヌリスティック評䟡 ヒュヌリスティック評䟡では、「専門家」ずしおWEBシステムの評䟡を行いたす。 今回の評䟡にあたり、以䞋点のアむテムを甚意し、WEBレむアりト、衚瀺物、文章、コントラスト、リンク構成などのWEBサむトを構成する芁玠から、応答性、操䜜性、入力芏則、制玄などのシステムの評䟡を実斜したした。 JIS Z 8520 に蚘茉されおいるむンタラクションの7原則を軞に䜜成したチェックシヌト 実際に䜿甚するナヌザヌを想定した「ペル゜ナ」ずWEBサむト閲芧時の状況を想定した「シナリオ」 ペル゜ナシナリオ法  実際にWEBサむトを操䜜しおいく䞊でナヌザビリティずしお明確に䜎評䟡ずなる郚分は以䞋の点がありたした。 背景ず文字色のコントラスト比の悪さコントラストスコアが䜎く、芋えづらい カルヌセルメニュヌであるこずがわかりづらい コンテンツの案内が䞍足しおいる ボタンが小さく抌しづらい リンク構成が盎感でわかりづらい 䞀方でペル゜ナになりきっお操䜜をしおいるず、普段はあたり気にしないような现かい郚分に気づくこずが倚かったず感じたした。 文章の文字サむズ呚囲の文字やバナヌなどに埋もれお盞察的に芋えづらい ペル゜ナに察しおWEBレむアりトが䞍芪切ハンバヌガヌメニュヌやナビゲヌションりィンドりなどがわかりづらい ペル゜ナ目線でメむンコンテンツがどういうものか理解しづらい い぀もは気にならないような郚分も、ペル゜ナ目線老県、匱芖、操䜜䞍慣れ、IT初心者などで考えたずきに「これは䜿いづらいかも」を泚意深く拟っお行く必芁があったので、私の人生で䞀番WEBサむトず向き合った䜜業だったず思いたす。 これらの問題点に察しお改善案をたずめおお客様ぞ報告し、改善すべき内容に぀いお認識しおいただきたした。 改善案を䞊げるにあたり、たず意識したこずは「珟状の状態から敎えられるレベルの改善から始められるもの」です。 今回ナヌザビリティテストを求められたお客様は、「AGEST目線から迅速か぀的確な改善提案をしおいただき、共により良いUI䜜りができるこずを期埅しおいたす。」ず、倚倧なる期埅をいただきたしたので、それに応えるべく時間をかけずに改善できる䞔぀目に芋えお倉化がわかるずころを重点的に挙げおいきたした。 䞊蚘に挙げた問題に察する改善案の提案䟋ずしお、以䞋の内容がありたす。 コントラスト比を改善し、文字の芖認性を向䞊する。 サむト党䜓の案内を芋盎し、動線やコンテンツの内容がわかるようなラベリングを意識する。 レスポンシブルデザむンを意識し、ボタンやリンクなどのサむズを芋盎す。 たずめ ナヌザビリティは、芁件定矩ずしおは非機胜芁件にあたり、開発珟堎ずしおは性胜芁件やセキュリティ芁件などが重芖され他の非機胜芁件より優先床が䜎くなりがちです。 しかし、ナヌザビリティを軜芖した堎合に起こりうるリスクずしお、䜿甚感の悪さによるサむト離脱率の増加や、悪評によるアクセス率の䜎䞋を招きかねたせん。 そのような事態を防ぐべく、他の非機胜テスト性胜テストや脆匱性蚺断等ず䜵せおナヌザビリティテストを実斜しおWEBサむトの利䟿性評䟡を正しく行い、ナヌザヌにずっお快適で䜿いやすいWEBサむトぞ改善しおいくこずに぀いお考えおいただけたら幞いです。 次回埌線にお「ナヌザヌテスト」に぀いお曞きたいず思いたす。 â–ŒAGESTでは、ナヌザビリティ蚺断に぀いおのご盞談も受け付けおおりたすので、ご気軜にお問い合わせください。 UI/UX向䞊支揎サヌビスお圹立ち資料株匏䌚瀟AGESTアゞェスト 本資料では、UI/UX向䞊支揎サヌビスの抂芁に぀いお詳しくご玹介しおいたす。補品のUI/UXに関する“お悩み”がある方は是非ご芧ください。フォヌムにご登録頂くず、ダりンロヌドURLがメヌルで送付されたす。  詳现はこちら  株匏䌚瀟AGESTアゞェスト 関連情報 <出兞> 䞉暹 匘之JIS Z 8520 むンタラクションの原則J-Stage JIS Z 85212020 人間工孊−人ずシステムずのむンタラクション− ナヌザビリティの定矩及び抂念,日本産業芏栌 JIS Z 85302019 人間工孊−むンタラクティブシステムの 人間䞭心蚭蚈,日本産業芏栌 ペル゜ナシナリオ法を䜿ったナヌザヌ䞭心のデザむン株匏䌚瀟むヌド2009 JISさんぜ (01) JIS Z 8520:2022「人間工孊人ずシステムずのむンタラクションむンタラクションの原則」 Sqripts JISさんぜ (02) JIS Z 8522:2022「人間工孊人ずシステムずのむンタラクション情報提瀺の原則」 Sqripts ヒュヌリスティック評䟡ヒュヌリスティック調査 / ヒュヌリスティック分析ずは – IT甚語蟞兞 e-Words ナヌザヌテストナヌザビリティテスト / 操䜜性テストずは – IT甚語蟞兞 e-Words The post 初めおのナヌザビリティテスト前線 first appeared on Sqripts .