with one click
hymme
hymme contains 60 collected skills from Hakkadaikon, with repository-level occupation coverage and site-owned skill detail pages.
Skills in this repository
å éšå®è£ ãèŠããå ¥åºå仿§ã ãããå ¥å空éã®åå²ã§ãã¹ãã±ãŒã¹ãæ©æ¢°çã«å°ããã©ãã¯ããã¯ã¹ææ³çŸ€ã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãåå€åå²(Equivalence Partitioning)ãå¢çå€åæ(Boundary Value Analysis)ã ãã¡ã€ã³åæãã¹ã(Domain Analysisãå€å€æ°ã®å¢çon/off/in/out)ããã·ãžã§ã³ããŒãã«(Decision Tableãæ¡ä»¶ã®çµåããšã¢ã¯ã·ã§ã³) ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
gitã³ãããéçšã«ãŒã«ã**äž»ç®çã¯è«ççã«ç¬ç«ããä¿®æ£ãéœåºŠã»é©åãªç²åºŠã§ã³ãããããããš**ãããã³ plan ã¢ãŒãã§å®è£ èšç»ãç«ãŠãéã«å¿ ãã³ãããèšç»ã plan æ¬æã«å«ããããšãã¡ãã»ãŒãžåœ¢åŒã¯ Conventional Commitsããã³ãããããŠããã³ãããåããŠããã³ãããèšç»ãç«ãŠãŠããåããŠã³ãããããå®è£ èšç»ãç«ãŠãŠããplanãç«ãŠãŠããå®è¡èšç»ãäœã£ãŠãããªãã¡ã¯ã¿ãªã³ã°èšç»ããšäŸé Œãããã`git commit`ãå®è¡ãããExitPlanMode åã« plan ãæç€ºãããè€æ°ã®ç¬ç«ããä¿®æ£ããŸãšãããåããã倿ãããã¬ãã¥ãŒã³ã¡ã³ã察å¿ãã³ããããããrebase/squash ã§å±¥æŽãæŽããã`gh pr create`æã«PRã¿ã€ãã«ãã³ãããæµåã«æããçã®å Žé¢ã§å¿ ãåç §ããã倿ŽãçŽ30ã50è¡ã®è«çåäœãžåå²ããŠã³ããããç©ãå®åæé 㯠micro-commit ã¹ãã«åŽãæ ããæ¬ã¹ãã«ã¯ç²åºŠã®å€æåºæºã»plan 段éã®ã³ãããèšç»ã»ã¡ãã»ãŒãžèŠçŽãå®ãã(äœµçšæã¯æ¬ã¹ãã«ã®åºæºã§åå²åäœã決ããmicro-commit ã§å®è¡ãã)ã
ãã¹ãã flaky ã«ãªãèŠå ã®ãã¡ãåŠçã©ããã®å調(ã¿ã€ãã³ã°ã»é åº)ãå®ãŸããªããã®ãžã®äœç³»ç察çã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšã䞊è¡ã»ç«¶å(å ±æç¶æ ãžã®åæã¢ã¯ã»ã¹ãã¬ãŒã¹çªã®æ€åºãšçŽååã«ããå°ã蟌ã)ã ãã¹ãéé åºã»ç¶æ æŒã(å®è¡é ã·ã£ããã«ã§ã®çãåºããbeforeEach/afterEachã§ã®åæåã»åŸå§æ«)ã æ€åº3軞ãšéé¢(quarantine)ã»retryç·è©ç§°ã®æããšãã£ã flaky 察çã®å ±éæ¹é ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
èªç¶èšèªã®èŠæ±ã EARS èšæ³ + ç¶æ /ãã¡ã€ã³ã¢ãã«ãžæ§é åããTLA+ ã§èšèšãç¶²çŸ æ€æ»ãã TLC ã®åäŸã Gherkin ã®åãå ¥ã仿§ã«èœãšããŸã§ã® 3 éãã£ãŒãããã¯ã«ãŒãã®å ¥å£(ã«ãŒã¿ãŒ)ã ãŠãŒã¶ãŒããã«ãŒããšã³ãžãã¢ãªã³ã°ããEARSããTLA+ããGherkinããèšèšãæ€èšŒããç¶æ æ©æ¢°ãæ€æ»ã ãèŠæ±ã圢åŒåããšèšã£ããšãããŸãã¯äžŠè¡ã»ç¶æ é·ç§»ã»ãããã³ã«èšèšã®æ£ãããå®è£ åã« ã¢ãã«æ€æ»ã§åºããããšãã«äœ¿çšãããèµ·å倿(2 åã²ãŒã)ãéã£ãåŸãå·¥çšã¯ loopeng-extract â loopeng-formalize â loopeng-modelcheck â loopeng-gherkin ã®åã¹ãã«ãžå§è²ããã èšèšã¯ TLA+ãå®è£ ã®æ°åŠç蚌æã¯ formal-verification(Lean)ã
Automatically create conventional commit-style micro-commits by splitting changes into logical units of ~30-50 lines each. Use this skill whenever the user asks to commit, says "ã³ãããããŠ", "commit this", or when a feature, fix, or refactoring task is completed and changes need to be committed. Also trigger when the user mentions "ãã€ã¯ãã³ããã", "micro commit", "conventional commit", or asks to split changes into smaller commits. If you detect that a coding task has just been completed and there are uncommitted changes, suggest using this skill. Grain-size judgment and plan-stage commit planning are handled by the commit-flow skill; when both apply, commit-flow decides the split and this skill executes it.
test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãéæ©èœãã¹ãã®æž¬å®ç³»(æ§èœãã¹ããè² è·ãã¹ãã ã¹ãã¬ã¹ãã¹ããã¹ãã€ã¯ãã¹ãããœãŒã¯ãã¹ã/èä¹ ãã¹ããã¹ã±ãŒã©ããªãã£ãã¹ãã ãã£ãã·ãã£ãã¹ã)ãæ€èšŒããããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
æåŸ å€ã1ã€ãã€æã§çšæã§ããªããšããæ£ãããšä¿¡ããããå¥å®è£ (åç §å®è£ ã»æ§å®è£ ã»å¥ã©ã€ãã©ãª)ãš åºåãçªãåãããå·®åãã¹ã(Differential Testing)ãæ±ããtest-catalog ã®ææ³ã«ã¿ãã°ã®äžéšã åç §å®è£ ã®ç¬ç«æ§ç¢ºèªãå ¥å空éã®å ±éåãåºåå·®ãŒãã® assertãæµ®åå°æ°ã®èš±å®¹èª€å·®æ¯èŒã ç§»è¡å®äºãŸã§ã®äœµèµ°éçšãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ãã é垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
æ©èœã®æ£ããããå€åŽã«ãããããã»ã¹éçšã»éçæ€æ»ã»åé¡ã«åãŸãã«ãã芳ç¹ãæ±ãã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšã矀B(BDD/GherkinãATDDãCIèªåå®è¡ãã·ããã¬ãã/ã·ããã©ã€ãã ã«ããªã¢ãªãªãŒã¹ããã«ãŒã°ãªãŒã³/A-Bããã£ãŒãã£ãŒãã©ã°æ®µéæ€èšŒãåæç£èŠã ãã¥ãŒããŒã·ã§ã³/ã«ãã¬ããžã®CIã²ãŒãããã¹ãããŒã¿ç®¡çããã¬ãŒã¯ãã¹ã察ç)ã 矀C(éçè§£æLinter/åãã§ãã«ãã³ãŒãã¬ãã¥ãŒãè€é床ã¡ããªã¯ã¹)ã 矀D(åªçæ§ãã¹ããäžŠè¡æ§/ã¬ãŒã¹ã³ã³ãã£ã·ã§ã³ãã¹ããå¢çå€/極å€ã»ãã¬ãã£ããã¹ã) ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ãã é垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
ã¬ãã¥ãŒææã»èªåæ€ç¥ãã倱æãžã®å¯Ÿå¿ã¯ãŒã¯ãããŒãPR ã®ã¬ãã¥ãŒã³ã¡ã³ãã人éããã®ææãåããŠä¿®æ£ãããšãããã¬ãã¥ãŒææã«å¯Ÿå¿ããŠããã¬ãã¥ãŒã³ã¡ã³ãããã£ãããææãçŽããŠããšé ŒãŸãããå¿ ã䜿ããã¬ãã¥ãŒçµç±ã§ãªããŠããåçºããã倱æ(CI ã®èµ€ãçå ãç¹å®ãããã°ãéçšäºæ )ãèªåã§èžãã§çŽããçŽåŸã«ãåããããŒãåããææãããç®æã ãçŽããŠçµããããªãââãªãäºåã®ã»ã«ãã¬ãã¥ãŒ(diff-review)ã§èŠã€ããããªãã£ãããåæããåçš®ã®ç©Žãå·®åå šäœããæ°Žå¹³å±éã§æ¢ãã芳ç¹ãã¬ã³ãºåºæºã»hookã»ãã¹ãçã®ã©ãããžåã蟌ã¿ãlessons ã«èšé²ãããåãçš®é¡ã®ææãäºåºŠãããã®ã¯åŠç¿ããªãã£ããšããææè¡šç€ºã
äœæ¥ãã©ã³ãã® diff ãè€æ°èгç¹(ã¬ã³ãº)ã§äžŠåã¬ãã¥ãŒãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ã¹ãã«ããã¬ãã¥ãŒããŠããdiff ãã¬ãã¥ãŒãããã芳ç¹ã§èŠãŠããªã©ãŠãŒã¶ãŒãæç€ºçã«ã³ãŒãã¬ãã¥ãŒãäŸé Œãããšãã«å¿ ã䜿çšãããæ±ºå®è«ã¹ã¯ãªããã§å·®åãåéããã¬ã³ãºããšã« diff-reviewer ãµããšãŒãžã§ã³ãã䞊åèµ·åããŠçµæãçµ±åå ±åãããã³ãŒãã®ä¿®æ£ã¯è¡ããªãã
鲿å°åž³ãšèšç»ã»åŒãç¶ãææžã®éçšã«ãŒã«ãtodoã»èšç»æžã»ãã¹ããªã¹ãã»STATUS çã®ãã§ãã¯ããã¯ã¹ä»ãææžãäœã/æŽæ°ããããå°åž³ãæŽæ°ããŠãã鲿ããŸãšããŠããåŒãç¶ãææžãæžããŠããtodo ãæŽçããŠããšé ŒãŸãããäœæ¥å®äºã§å°åž³ãæ¶ã蟌ããã¹ãããã·ã§ããææž(STATUS/RESUME)ãçºè¡ããããšãã£ãå Žé¢ã§åç §ãããèšæ³ã®å¡äŸãäžæ¬åããæ¶ã蟌ã¿å ã1ãã¡ã€ã«ã«åºå®ããå®äºäž»åŒµã«èšŒè·¡ãã€ã³ã¿ã矩åä»ããå®äºææžã closed ã§éãããå°åž³ãç·ãåœããªãã»å±¥æŽãæ¶ããªãã»èªã¿æãèå€åŠãããªãããã®èŠç¯ãã³ãããç²åºŠã¯ commit-flowãæèšã®èšé²ã¯ review-feedback ãæ ãã
Pull Request / Merge Request ãäœæãããšãã«å¿ ãåç §ããã`gh pr create`/`glab mr create` ã§ PR/MR ãäœããã³ãããæžã¿ã®äœæ¥ãã¬ãã¥ãŒã«åºãã䞊åã»stacked äœæ¥ã®åãã©ã³ãã§ PR ãèµ·ããããšãã£ãå Žé¢ã§äœ¿ãããªããžããªã® pull_request_template/merge_request_template ãæ±ºå®è«ã¹ã¯ãªããã§æ€åºããŠåªå ãããã³ãã¬ã®éªšçµã¿ïŒèŠåºãã»ãã§ãã¯ãªã¹ãã»é åºïŒãæ¹å€ããå ¥åç®æãåããã ãã«ããïŒäœæåã«éªšçµã¿ç §åã²ãŒãã§æ©æ¢°æ€èšŒïŒãç¡ããã°æ±çšèгç¹ã§æ¬æãæ§æãäœæåã« diff-review ã§ã®ã»ã«ãã¬ãã¥ãŒå埩ïŒmust ãŒããŸã§ïŒãå¿ é ãšãã蚌跡ã hook ãæ€æ»ãããæ¬æã®çŽ æã¯å¯Ÿè±¡ãªããžããªã® git å·®åã®ã¿ã«éå®ããä»ãªããžããªã»ä»ã¿ã¹ã¯ã®å å®¹ãæ··å ¥ãããªããdraft æ¢å®ã»äœæåã«ãŠãŒã¶ãŒæ¿èªãæª push ã®ãšã㯠AskUserQuestion ã§æ¿èªãåã£ãŠãã pushãGitHub(gh) åºæ¬ãGitLab(glab) çã«ã察å¿ã
GitHub Actions ã® CI 倱æã調æ»ããã¹ãã«ã倱æãã run / PR / job ã® URLïŒäŸ: https://github.com/OWNER/REPO/actions/runs/RUNIDãâŠ/pull/PRãâŠ/job/JOBIDïŒã run_idã»PR çªå·ã貌ãããŠããã®CIã倱æããŠãããåå ã調æ»ããŠãããã«ã/ãã¹ããã³ã±ãããªãèœã¡ãã調ã¹ãŠããworkflow ã failedãä¿®æ£æ¡ãåºããŠããjob ã®ãã°ãèŠãŠããšé ŒãŸãããå¿ ã䜿ããWebFetch ã§ã¯ github.com ã®ãã°ã¯åããªãïŒHTML ããè¿ãããã°ã¯åããªãïŒãããghïŒ`gh run view --log-failed` / `gh run view --job` / `gh pr checks` / `gh api`ïŒã§å€±æãžã§ãã»ã¹ããããšå€±æã¹ãããã®ãã°ã ããæ±ºå®è«ã¹ã¯ãªããã§åéãã倱æåå ãç¹å®ããŠä¿®æ£æ¡ãæç€ºãããGitHub Actions 以å€ïŒGitLab CI çïŒããURL ããã°ã§ã¯ãªããœãŒã¹é²èЧç®çã®ãšãã¯å¯Ÿè±¡å€ãGitHub(gh) åæã`/gh-ci-investigate` ã§æç€ºèµ·åãå¯ã
ãã¹ãå®è¡æã®çµã蟌ã¿éçšã«ãŒã«ããããžã§ã¯ãå šäœãã¹ãã§ã¯ãªãä¿®æ£ç¯å²ã«çµã£ããã¹ãå®è¡ãè¡ãã `gradlew test`/`pytest`/`jest`/`go test`çã®ãã¹ãã©ã³ããŒãå®è¡ãããšãããã¹ãå®è¡ã³ãã³ãã çµã¿ç«ãŠããšãã«å¿ ãåç §ãããã³ãããå·®åãä¿®æ£ãã¡ã€ã«ãã察象ãã¹ããç¹å®ããæé ãå«ãã
loop-engineering ã® 0 段(æœåºã«ãŒã)ãå 仿§(RFCãæšæºãèªç¶èšèªã®èŠæ±ãæ¢åã³ãŒã)ããèŠä»¶ã æ¡çªãã§ãã¯ãªã¹ãå°åž³ãžç¶²çŸ çã«æãåºãããã¬ãŒãµããªãã£ã»ãããªã¯ã¹ãç«ãŠãã ãèŠä»¶ãæœåºããŠãã仿§ããèŠä»¶ã«èœãšããŠããæœåºå°åž³ãããã¬ãŒãµããªãã£ããšèšããããšãã ãŸã㯠loop-engineering ã«ãŒã¿ãŒãã 0 段ãšããŠå§è²ããããšãã«äœ¿çšããã åŸç¶ã® loopeng-formalize(EARS/TLA+)ã¯ãã®å°åž³ã宿(å š ID `[x]`ã»æ¬ çªãªã)ããŠããã§ãªããšé²ããªãã é垞㯠loop-engineering ã«ãŒã¿ãŒã®å€æ(2 åã²ãŒã)ãéã£ãŠãã䜿ãã
loop-engineering ã®å€ã«ãŒã(èŠæ±åœ¢åŒå)ãæœåºæžã¿ã®èŠä»¶ã EARS èšæ³ + ç¶æ /ãã¡ã€ã³ã¢ãã«ãžæ§é åãã TLA+ spec(<Name>.tla / <Name>.cfg)ãš Gherkin ã®éªšæ Œ(<Name>.feature)ã«èœãšãã ãEARS ã«èœãšããŠããç¶æ ã¢ãã«ãäœã£ãŠããTLA+ spec ãæžããŠããèŠæ±ã圢åŒåããšèšããããšãã ãŸã㯠loop-engineering ã«ãŒã¿ãŒããå€ã«ãŒããšããŠå§è²ããããšãã«äœ¿çšããã åæ: loopeng-extract ã®æœåºå°åž³(tasks/loopeng/<Name>.extract.md)ã宿(å š ID `[x]`ã»æ¬ çªãªã)ããŠããããšã ç¡ããã°å ã« loopeng-extract ãžæ»ããé垞㯠loop-engineering ã«ãŒã¿ãŒã®å€æãéã£ãŠãã䜿ãã
loop-engineering ã®å ã«ãŒã(åãå ¥ã仿§å)ãTLC ã®åäŸãã¬ãŒã¹ã Gherkin ã® Scenario ãžæ©æ¢°å€æãã èšèšãåºãŸã£ããæ£åžžç³»ã®åãå ¥ãã·ããªãªãè¶³ããŠå®è£ ã®ãã¹ããžæ©æž¡ãããã ãåäŸã Gherkin ã«ããåãå ¥ã仿§ã«èœãšããŠããfeature ãã¡ã€ã«ã«ããŠããšèšããããšãã ãŸã㯠loop-engineering ã«ãŒã¿ãŒããå ã«ãŒããšããŠå§è²ããããšãã«äœ¿çšããã åæ: loopeng-modelcheck ã® TLC å®è¡çµæ(åäŸãã¬ãŒã¹ããŸã㯠No error)ãããããšã ç¡ããã°å ã« loopeng-modelcheck ãžæ»ããé垞㯠loop-engineering ã«ãŒã¿ãŒã®å€æãéã£ãŠãã䜿ãã
test-design ã® 0 段(æ¯ãèãæœåº)ã察象(æ©èœãã¢ãžã¥ãŒã«ãAPIãPR å·®å)ããããã¹ããã¹ãæ¯ãèããã T-ID æ¡çªãã§ãã¯ãªã¹ãå°åž³(tasks/test-design/<察象å>.md)ãžç¶²çŸ çã«åºãåãã ããã¹ããã¹ãæ¯ãèããæŽãåºããŠãããã¹ã芳ç¹ãåºããŠããT-ID å°åž³ããšèšããããšãã ãŸã㯠test-design ã«ãŒã¿ãŒãã 0 段ãšããŠå§è²ããããšãã«äœ¿çšãããæ¢åãã¹ãã®ã¬ãã¥ãŒã§ã æåã«ãã®å°åž³ãäœã(å°åž³ãäž¡åãã«èªãã§æãã»æ ¹æ ãªããã¹ããèŠã€ãã)ã åŸç¶ã® test-catalog(ææ³éžå®)ã¯ãã®å°åž³ã宿(å š T-ID `[x]`ã»æ¬ çªãªã)ããŠããã§ãªããšé²ããªãã é垞㯠test-design ã«ãŒã¿ãŒçµç±ã§äœ¿ãã
test-design ã®æ©æž¡ããšåºå®ã®å·¥çšãææ³å²ãåœãŠæžã¿ã® T-ID å°åž³ãå®è£ (coder ã® TDD / loop-engineering / formal-verification)ãžæž¡ããå®è¡ã²ãŒã(ç¶²çŸ éåŒãã»ç·ã»flakyã»mutation)ã§ å®äºãæ€èšŒããç·ã«ãããã¹ããååž°ãšã㊠CI ã«åºå®ããã ããã¹ãã®å®è£ ã«æž¡ããŠãããã¹ããå šéšæžããã確èªããŠããååž°ã«åºå®ããŠããšèšããããšãã ãŸã㯠test-design ã«ãŒã¿ãŒããæçµå·¥çšãšããŠå§è²ããããšãã«äœ¿çšããã åæ: test-catalog ã§å š T-ID ã«ææ³ãå²ãåœãŠæžã¿ã§ããããšãç¡ããã°å ã« test-catalog (å°åž³èªäœãç¡ããã° test-extract)ãžæ»ããé垞㯠test-design ã«ãŒã¿ãŒçµç±ã§äœ¿ãã
test-design ã®ææ³éžå®å·¥çšããã¹ãææ³ã«ã¿ãã°(åå¥ã¹ãã« 40 æ¬)ãžã®çŽ¢åŒãšã T-ID å°åž³ã®åæ¯ãèãã«ææ³ãå²ãåœãŠãã¯ãŒã¯ãããŒã ãã©ã®ãã¹ãææ³ã䜿ãã¹ãããããŸãã¯ææ³å(åå€åå²ãå¢çå€ããã¡ã€ã³åæããã·ãžã§ã³ããŒãã«ã ç¶æ é·ç§»ããã¢ã¯ã€ãºãçŽäº€è¡šãT-wayãå€å®/æ¡ä»¶ç¶²çŸ ãMC/DCãåºåºãã¹ãæ§æãã¹ããcontract/Pactã property basedãmutationãã¡ã¿ã¢ã«ãã£ãã¯ããŽãŒã«ãã³ãæ¿èªã仿§åãã¹ãããã§ãã¯ãªã¹ãããŒã¹ã ãã¹ãããã«ãLLMã»é決å®çåºåã®ãã¹ããEARS)ãæãããããšãã ããã¹ãã flakyããæåŸ å€ãçšæãã«ãããããã¹ããèããã®å°ãããšããææ³ãæ¢ããšãã ãŸã㯠test-design ã«ãŒã¿ãŒããææ³éžå®ãšããŠå§è²ããããšãã«äœ¿çšããã åæ: test-extract ã® T-ID å°åž³(tasks/test-design/<察象å>.md)ã宿ããŠããããšã ç¡ããã°å ã« test-extract ãžæ»ã(åçºã®ææ³è³ªåãªãå°åž³ãªãã§çŽ¢åŒã ãåŒããŠãã)ã
LLM/çæã¢ãã«ãé¢ãããã¹ãã2å±é¢(ãã¹ããæžãéå ·ãšããŠã®AI掻çšã補åã«çµã¿èŸŒãŸããéæ±ºå®çåºåãã®ãã®ã®æ€èšŒ)ã§æ±ãã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãAI/LLM æ¯æŽãã¹ãçæ(芳ç¹åºããåœéœæ§/åœé°æ§å¯Ÿç)ã éæ±ºå®çåºåã·ã¹ãã ã®ãã¹ã(éå±€åå質èšèšãå ¥å£/äžå€®/åºå£å±€ãã¹ããŒã匷å¶ãã¡ã¿ã¢ã«ãã£ãã¯ãè€æ°ãµã³ããªã³ã°åæ) ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
æ¡ä»¶ã®è«çé¢ä¿ãå ¥åã®å€æ¬¡å æ§é ãããçµåããçž®çŽããŠãã¹ããå°ããã©ãã¯ããã¯ã¹ææ³çŸ€ã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãåå çµæã°ã©ã(Cause-Effect GraphãAND/OR/NOTã§ãã·ãžã§ã³ããŒãã«ãæ©æ¢°å°åº)ã ã¯ã©ã·ãã£ã±ãŒã·ã§ã³ããªãŒæ³(Classification Tree Methodãåé¡è»žãåå€ã¯ã©ã¹ãžçްåãèã®çµåããéžã¶) ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
ç¬ç«ããå åãå€ãå šçµåããççºãããšããå åã®è¢«èŠãåçå²ä»ã§ã±ãŒã¹æ°ãçž®çŽãããã©ãã¯ããã¯ã¹ææ³çŸ€ã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšããã¢ã¯ã€ãº(Pairwise/All-pairsãå šãã¢ãæäœ1å被èŠ)ã çŽäº€è¡š(Orthogonal Arrayãå šãã¢ãååæ°ã§åçå²ä»ãäž»å¹æãŸã§èªã)ã T-way ãã¹ã(tåçµã®é«æ¬¡çµåããšå¶çŽä»ã covering array) ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
å éšå®è£ ãèŠããæ¯ãèããéå»ã®å±¥æŽã«äŸåãã察象ãããã¹ãã±ãŒã¹ãæ©æ¢°çã«å°ããã©ãã¯ããã¯ã¹ææ³çŸ€ã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãç¶æ é·ç§»ãã¹ã(State Transitionã0-switch/N-switchãçŠæ¢ä»æ§ããã®èš±å¯/çŠæ¢åå°åº)ã CRUD/ãšã³ãã£ãã£ã©ã€ããµã€ã¯ã«ãã¹ã(CRUD/Entity Lifecycleãæäœéã®æŽåãåé€åŸã®åç §) ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
仿§ã®æ§é ããæ©æ¢°çã«å°ãã®ã§ã¯ãªããçµéšã»éå»ã®æ¬ é¥ããã§ãã¯ãªã¹ãã«å€éšåããŠæ¶ã蟌ããã©ãã¯ããã¯ã¹ææ³çŸ€ã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšããã§ãã¯ãªã¹ãããŒã¹ãã¹ã(Checklist-based Testingãæºããã¹ã確èªäºé ãäœç³»çã«æ¶ã蟌ã)ã ãšã©ãŒæšæž¬(Error Guessingã空ã»nullã»å·šå€§å€ã»ç¹æ®æåã»éè€ã»äžŠè¡ãªã©å£ããããªå ¥åãçµéšãšçŽæã§çãæã€) ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
仿§ã®æ§é ããæ©æ¢°çã«å°ãã®ã§ã¯ãªããä¹±æ°ãšå³èã§å¯Ÿè±¡ãæºãã¶ã£ãŠæ¬ é¥ãçããã©ãã¯ããã¯ã¹ææ³çŸ€ã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãã©ã³ãã /ã¢ãããã¯ãã¡ãžã³ã°(Random/Ad Hoc Fuzzingãåºå®seedã§äžå€æ¡ä»¶ã ãèŠåŒµã軜éãã¡ãžã³ã°)ã æ¢çŽ¢çãã¹ã(Exploratory Testingããã£ãŒã¿ãŒãšã»ãã·ã§ã³ããŒãã§èšèšãšå®è¡ãåæé²è¡)ã ã¢ãããã¯ãã¹ã(Ad Hoc Testingãäºåèšèšãèšé²ãæããªãæãé圢åŒçãªç¢ºèª) ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
仿§ã®æ§é ããæ©æ¢°çã«å°ãã®ã§ã¯ãªããæ¥åãããŒãå©çšã®ç©èªããæ¬ é¥ãçããã©ãã¯ããã¯ã¹ææ³çŸ€ã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšããŠãŒã¹ã±ãŒã¹ãã¹ã(Use Case Testingãäž»æå/代æ¿/äŸå€ãããŒã1æ¬ãã€åã)ã ã·ããªãªãã¹ã(Scenario Testingãè€æ°ãŠãŒã¹ã±ãŒã¹ããŸããçŸå®çãªçµè·¯ãéãã§æ€èšŒ)ã æ§æãã¹ã(Syntax Testingãææ³production ã1ç®æã ãå£ãæ¬ èœ/äœå/é åºå ¥æ¿/åéå) ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
ãã¹ãã flaky ã«ãªãèŠå ã®ãã¡ãå€éšãµãŒãã¹ãšã®éä¿¡ãšå®æéã®çµéåŸ ã¡ã«ç±æ¥ãããã®ãžã®äœç³»ç察çã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãå€éšãããã¯ãŒã¯(å®éä¿¡ãžã®äŸåãããã鮿ã§çãåºãããã¹ãããã«ã§å¿çãåºå®ããå°ã蟌ã)ã ã¿ã€ããŒã»sleep(åºå®sleepäŸåãè² è·ç°å¢ã§çãåºãããã§ã€ã¯ã¿ã€ããŒãæ¡ä»¶åŸ ã¡ãžã®çœ®ãæã) ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
ãã¹ãã flaky ã«ãªãåå ã®ãã¡ãå€ãã®ãã®ãå®è¡ããšã«å€ããéæ±ºå®æ§(æå»/nowã»Dateã ä¹±æ°ã»UUIDãæµ®åå°æ°ã®äžžã誀差)ãæ€åºã»å°ã蟌ãããææ³ãæ±ãã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãæå»äŸåã®å¢çåºå®ãä¹±æ°/UUID ã®æ³šå ¥ãšseedååŸ©ã æµ®åå°æ°ã®èš±å®¹èª€å·®æ¯èŒ(toBeCloseTo)ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ãã é垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
æåŸ å€(oracle)ãçšæãã«ãã察象ã®é 奿§ããæ©æ¢°çæããäžæ£ã»æ¥µç«¯ã»ã©ã³ãã ãªå ¥åã 倧éã«æµã蟌ãã§å©ãææ³(ãã¡ãžã³ã°ãã«ãã¬ããžã¬ã€ããããã¡ãžã³ã°)ãæ±ãã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãããŒãµãŒã»ãã·ãªã¢ã©ã€ã¶ã»å ¥åæ€èšŒãªã©ä¿¡é Œã§ããªã å ¥åå¢çã§ãå£ããªãã»æ¢ãŸããªãã»äžå€æ¡ä»¶ãä¿ã€ãããšãæ€èšŒãããããŸãã¯å²ãåœãŠãã ãšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ã çŽæ¥åç §ããã
æåŸ å€(oracle)ãçšæãã«ãã察象ããå ¥åå šäœã«æãç«ã€æ§è³ªããã©ã¡ãŒã¿ã®çµåãã§ çžãçæãã¹ã(ããããã£ããŒã¹ãã¹ã/PBTãã³ã³ããããªã¢ã«ãã¹ã)ãæ±ãã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãåŸåŸ©(round-trip)ã»äžå€æ¡ä»¶ã»ã¡ã¿ã¢ã«ãã£ãã¯é¢ä¿ ã»æ¢ç¥ãªã©ã¯ã«äžèŽã«ããæ§è³ªã®åæãpairwise/t-way covering array ã«ããçµåãçž®çŽã æ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
è¯ãåäœãã¹ãã®åºæ¬èŠç¯(Khorikovãåäœãã¹ãã®èãæ¹/äœ¿ãæ¹ãæºæ )ãæ±ãã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãå€å žåŠæŽŸãšãã³ãã³åŠæŽŸã®äœ¿ãåãã芳å¯å¯èœãª æ¯ãèãã®ãã¹ããè¯ããã¹ãã®4æ¬æ±(éè¡ä¿è·ã»ãªãã¡ã¯ã¿ãªã³ã°èæ§ã»é«éãã£ãŒã ããã¯ã»ä¿å®æ§)ãåºåããŒã¹/ç¶æ ããŒã¹/ã³ãã¥ãã±ãŒã·ã§ã³ããŒã¹ã®æ€èšŒã¹ã¿ã€ã«ã® åªå é äœãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã® 玢åŒçµç±ã§ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
ãã¹ãã®ç²åºŠéžæã®ãã¡ãã·ã¹ãã å šäœãå€ããèŠãéçšç¢ºèªã®å±€(ã¹ã¢ãŒã¯ãã¹ãã ãµããã£ãã¹ããååž°ãã¹ã)ãæ±ãã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšããããã€çŽåŸã®èŽåœå·å³æ€ç¥ãå°ããªä¿®æ£åŸã® 倿Žç®æã®çã確èªãéå»ãã°ã®åçºé²æ¢ãšç¶ç¶çãªéè¡é²æ¢ãæ€èšŒãããããŸã㯠å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ææ³ãéžå®ããã åŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
ãã¹ãã®ç²åºŠéžæã®ãã¡ããµãŒãã¹ãç¬ç«ã«ãããã€å¯èœãªç®±ãšã¿ãªããµãŒãã¹éã®å±€ (ã³ã³ããŒãã³ããã¹ããã³ã³ãã©ã¯ããã¹ã/Consumer-Driven Contract/Pactã API ã¹ããŒãæ€èšŒ)ãæ±ãã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãå€éšäŸåã ãã¹ã¿ãåããç®±åäœã®æ¯ãèãæ€èšŒã æ¶è²»åŽé§åã®å¥çŽãã¹ãã«ãããµãŒãã¹éäºææ§ã®ä¿èšŒãOpenAPI/JSON Schema ãžã®æ§é æºæ ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒ çµç±ã§ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
ãã¹ãã®ç²åºŠéžæã®ãã¡ã1ãµãŒãã¹å éšã®å±€(åäœãã¹ã/Unit Testãçµåãã¹ã/ Integration Test)ãæ±ãã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãäŸåãåãé¢ããæå°åäœã®ããžãã¯ã»åå²ã»å¢ç ã»äŸå€ã®ç¶²çŸ ãè€æ°ã¢ãžã¥ãŒã«ãå®äŸå(DBããã¥ãŒãå¥ãµãŒãã¹)ãšã®æ¥ç¶éšã®ããã® æ€èšŒãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒ çµç±ã§ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
ãã¹ãã®ç²åºŠéžæã®ãã¡ãã·ã¹ãã å šäœãå€ããèŠãåºå確èªã®å±€(ã·ã¹ãã ãã¹ãã E2Eãã¹ããåãå ¥ããã¹ã/UAT)ãæ±ãã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãè€æ°ãµãŒãã¹ã»DBã»èšå®ãçµã¿åããã£ãæ¬çªã« è¿ãæ§æã§ã®æ©èœ/æ§èœ/ã»ãã¥ãªãã£èŠä»¶ã®æ€èšŒãå®ãã©ãŠã¶ã§ã®äž»èŠãŠãŒã¶ãŒãã㌠ã®éã確èªãããžãã¹åŽãšåæããåãå ¥ãåºæºãžã®ãã¬ãŒãµããªãã£ãæ€èšŒãããã ãŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ææ³ãéžå® ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšããã¹ãã®åŒ·ããæž¬ã(mutationããã¥ãŒããŒã·ã§ã³ãã¹ãã ãã¹ãã®æ¬ 饿€åºåãKilled/Survived/No coverageãMutation ScoreãStryker)ããšãæ€èšŒããã ãšãã«äœ¿ããã«ãã¬ããžçãé«ãã®ã«ãã°ãæŒããç¶æ³ã®æ£äœãæŽããã¢ãµãŒã·ã§ã³äžè¶³ãèŠã€ãã ãšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
éæ©èœã®ãã¡ãæ£ããã»å®å šã«ã»èª°ã«ã§ãåããããæ§è³ªã®å è¶³(éå0ä»¶ãå¥çŽç Žå£ãªãç) ã§ç¢ºãããå質ä¿èšŒç³»ã®èгç¹ãæ±ãã test-catalog ã®ææ³ã«ã¿ãã°ã®äžéšãã»ãã¥ãªãã£ãã¹ãããããã¬ãŒã·ã§ã³ãã¹ãã DAST/SAST/IASTãSCA(äŸåè匱æ§)ããŠãŒã¶ããªãã£ãã¢ã¯ã»ã·ããªãã£(a11y/WCAG)ã ã¯ãã¹ãã©ãŠã¶äºææ§ãi18n/l10nãä¿¡é Œæ§(MTBF)ãå¯çšæ§ãã§ã€ã«ãªãŒãã ã«ãªã¹ãšã³ãžãã¢ãªã³ã°ãå埩æ§ãã³ã³ãã©ã¯ããã¹ã(Consumer-Driven Contract/Pact) ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
éè² è·ãäŸåå£åãå°ã蟌ããä»çµã¿ãèšèšã©ããåãããã¹ããŒãç§»è¡ã»ããŒã¿å€æãæ å ±ãä¿åãããã éå®³æ³šå ¥ãšäžå€æ¡ä»¶ã§ç¢ºããã芳ç¹ãæ±ããtest-catalog ã®ææ³ã«ã¿ãã°ã®äžéšã ãã«ã¯ããã(éé¢)ãã¬ãŒããªãããããµãŒããããã¬ãŒã«(ç¶æ é·ç§»ã®å šé·ç§»ãšåŸ©åž°çµè·¯)ã ããŒã¿å質/ãã€ã°ã¬ãŒã·ã§ã³æŽåãã¹ã(åŸåŸ©äžèŽãè¡æ°ä¿åãå¿ é åã®éNULLãéèšäžèŽ) ãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ããé垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã
æåŸ å€ã1ã€ãã€æã§çšæã§ããªããšããã·ã¹ãã ã®æ¯ãèããæœè±¡ã¢ãã«(ç¶æ æ©æ¢°ãªã©)ã§è¡šãã ãããããã¹ãç³»å(æäœã®å)ãèªåçæããŠå®ã·ã¹ãã ãšçªãåãããã¢ãã«ããŒã¹ãã¹ã (Model-Based Testing)ãæ±ããtest-catalog ã®ææ³ã«ã¿ãã°ã®äžéšã æœè±¡ã¢ãã«ã®å®çŸ©ãfast-check ã® commands ã«ããã¹ããŒããã« PBTã ç¶æ ã»é·ç§»ã®ç¶²çŸ 確èªãã¢ãã«ã®çŽ æŽãã®ç¶æãæ€èšŒãããããŸãã¯å²ãåœãŠãããšãã«äœ¿ãã é垞㯠test-catalog ã¹ãã«ã®çŽ¢åŒçµç±ã§ææ³ãéžå®ãããåŸã«ãã®ã¹ãã«ãçŽæ¥åç §ããã