AGESTのブログ - TECH PLAY

TECH PLAY

AGEST

AGEST の技術ブログ

å…š487ä»¶

みなさんはじめたしお、QAコンサルタントのぐっちです。 私はこれたで制埡系゚ンゞニアずしお様々な案件に携わっおきたした。今回のブログでは、制埡系開発ずはどのような開発かずいうお話から自身が経隓しお孊んだ開発での課題や察策を玹介したいず思いたす。 制埡系開発ずはどんなものか 制埡系開発ず組蟌み開発は、よく混合されたすが、違う開発の皮類になりたす。 制埡系開発は具䜓的なモノを䜜るのではなく、モノを制埡するずいう考え方がわかりやすいず思いたす。 車を自動的に目的地に運ぶための仕組みを䜜り出すシステム開発を制埡系開発ず考えるこずがむメヌゞしやすいず考えたす。運転手がいない自動車や、ロボットが物を掎む動䜜をする堎合など、人が操䜜するこずなく、動䜜を制埡するシステムを䜜るのがシステム開発の抂芁になりたす。 䟋えば、自動車に乗っお高速道路を走っおいるずしたす。制埡系開発では、自動車が速床を䞀定に保぀ように制埡するシステムを䜜成したす。もしその速床が目暙倀よりも速くなったら、ブレヌキを軜くかけお速床を䞋げるよう指瀺し、目暙倀よりも遅くなったらアクセルを螏んで速床を䞊げるよう指瀺したす。これにより、自動車は目暙の速床をキヌプできるのです。 制埡系開発は、自動車の他にも、掗濯機の氎量調敎、゚アコンの枩床調敎、電車の自動運転など、さたざたな堎面で掻甚されおいたす。システムが䞀定の目暙を達成するように「指瀺」を出す仕組みなので、効率的か぀安党な動䜜を実珟するこずが可胜です。 制埡系開発は、私たちの生掻の䞭で自動化や効率化を実珟するために欠かせない技術なのです。 開発珟堎で苊劎したこず 次に、実際の開発にお苊劎したこずを蚘茉しおいきたす。Web開発やアプリ開発ずも重耇する内容もありたすが、䞻に苊劎したこずをピックアップしお蚘茉したす。 ゜フトりェアだけでなく、ハヌドりェアの知識も必芁 制埡系開発では゜フトりェアの知識だけでなく、ハヌドりェアの知識も必芁になりたす。もちろん専門家ほどの知芋は䞍芁ですが、開発では、デバックボヌドを䜿甚しお、プログラムを流し蟌んでプログラムの動䜜確認を行いたす。 怜蚌では、オシロスコヌプ ※1 やPLC ※2 などハヌドりェアを䜿甚しおプログラムを制埡するテストを行ったりしたす。普段䜿い慣れおいないものなので、最初䜿うずきには慣れるたで時間がかかりたした。 想定する仕様の耇雑さ 制埡系開発では、様々な条件で起動したり停止したりするため、耇雑な仕様になりやすいです。现かな制埡が必芁であるため、数孊的な蚈算匏を䜿っお制埡を行う堎合もありたす。 そういった堎合、なぜこの凊理になっおいるのか、どの仕様でこのプログラムが動䜜しおいるか等を調べるのが困難な堎合も倚いです。 たた、動䜜する環境は、自動車やセンサヌのようなモノであるため、実際の動䜜を芋るこずは䞭々できたせん。゚ミュレヌタ等を䜿甚し、仮想環境でプログラムを䜜成したりテストを行ったりしたす。そのため、䜿甚するツヌル等の理解や習埗も必芁になりたす。 玍期の厳しさ 玍期に぀いおはWeb開発やアプリ開発も同様になりたすが、制埡系開発ではモノハヌドりェアも含めお完成になりたす。今ではPCやスマヌトフォンは容易に準備できるものになるため、準備にそこたで時間が必芁にはなりたせん。 しかし、自動車やセンサヌなど動䜜環境を含めおリリヌスするずなるず様々な準備が必芁になりたす。よっお、゜フトりェアの開発だけでなく、ハヌドりェアの準備や進捗にも気を配る必芁がありたす。 課題に察する察策 䞊述した課題に察しおの察策に぀いお以䞋に蚘茉したす。 ハヌドりェアの知識もしっかり぀ける 先述でも蚘茉した通り、制埡系開発では色々なハヌドりェアを䜿甚しお開発を行うこずが倚いので゜フトりェアの勉匷だけを行っおいれば解決できるものではありたせん。よっお、各開発に䜿甚するハヌドりェアの理解を深める必芁がありたす。 そうするこずにより、ハヌドりェアを含めた動䜜を意識するこずができるようになり、゜フトりェアだけでなくモノずしお党䜓を含めた芖点で開発に着手できるようになりたす。 そうするこずによっお゜フトりェアの動䜜ずいう芳点だけでなく、システム党䜓を俯瞰しお意識しおいなかったこずに気付くようになりたす。 耇雑なロゞックを理解できる蚓緎をする 制埡系開発だけでなくその他の開発でも同じこずが蚀えたすが、耇雑な仕組みや仕様を理解するのは容易ではありたせん。私も最初は苊劎をしたしたが、なぜそのような蚈算匏を䜿うのか、なぜそのタむミングで制埡を行うのかずいう芖点で物事を考えるずだんだんず理解できるようになり、仕様曞に曞かれおいる内容に察しおも、問題があるずころに指摘できるようになっおいきたした。その際に圹に立ったのはロゞカルシンキングずいう考え方です。ロゞカルシンキングずは、物事を結論ず根拠に分け、その論理的な぀ながりを捉えながら物事を理解する思考法になりたす。今では曞籍や研修など様々な蚓緎方法がありたすので、興味がある方はぜひ勉匷いただくこずをお勧めしたす。 党䜓を芋据えたスケゞュヌル管理を意識する 先述も述べたように制埡系開発では゜フトりェアだけなく、ハヌドりェアも含めた開発になりたす。よっお、埓来であれば゜フトりェアのリリヌススケゞュヌルを考慮しおおけば問題ないですが、制埡系開発ではハヌドりェアのリリヌスも含めたスケゞュヌル管理が必芁になりたす。その分、課題管理やリスク管理もハヌドりェアを含めた管理が必芁になりたすので意識しおスケゞュヌル管理を行うようにしおください。 たずめ 今回は制埡系開発で気を付けるべき内容や察策に぀いお蚘茉させおいただきたした。ここに曞いおある内容に぀いおは、他の様々な開発にも流甚できる考え方だず思いたす。 珟圚はQAコンサルタントずしお業務に携わっおおりたすが、制埡系開発によっお埗た党䜓を俯瞰しお開発を進めおいく経隓やロゞカルシンキング思考を甚いおプロゞェクトの課題の解決するこずで、最終的な成果物の品質の向䞊に繋がっおいるこずを身をもっお実感しおおりたす。 今埌もプロゞェクトを成功に導けるように日々スキルアップを目指しお業務を遂行しおいきたいず考えおおりたす。 APPENDIX:甚語の説明 ※1 オシロスコヌプWikipedia オシロスコヌプ (英: oscilloscope) は、入力した信号の電圧の倉化を時間の関数ずしお芖芚的に衚瀺する電気蚈噚。衚瀺される波圢から、振幅・呚波数・立ち䞊がり時間英語版・時間間隔などの倀を埗るこずができる。昔のオシロスコヌプでは、これらの倀を埗るには画面に組み蟌たれた目盛りを䜿っお波圢を手動で読み取っお蚈算する必芁があったが、珟圚のオシロスコヌプはこれらの倀を自動で蚈算しお衚瀺する。 ※2 PLCWikipedia プログラマブルロゞックコントロヌラ英: programmable logic controller、PLCは、リレヌ回路の代替装眮ずしお開発された制埡装眮である。プログラマブルコントロヌラずも呌ばれ、䞀般的にシヌケンサ䞉菱電機の商品名であるが登録商暙ではないずも呌ばれる。 The post プロゞェクトを成功させる制埡系開発の進め方孊んだ教蚓ず察策 first appeared on Sqripts .
こんにちは。みぞぐちです。 アゞャむル開発のQAずしお日々業務を行っおいたす。 11/2に開催された JaSST’23 Kyushu にオンラむン参加しおきたした。今回は「E2Eテストの自動化導入」や「継続的テスト」をテヌマにした 『 テスト自動化から、 開発を支える継続的テストぞ 』 ずいうセッションに぀いお、芁点ず感じたこずをレポヌトしたいず思いたす。 セミナヌ抂芁 『 テスト自動化から、 開発を支える継続的テストぞ 』 今回のセッションは、ある開発チヌムがテスト自動化の導入を皮切りに、゜フトりェア開発サむクル党䜓に段階的にテストを導入しおいき「 継続的テスト 」を実珟するたでの進化の道のりに぀いおお話しされおいたした。 【登壇者】 末村 拓也すえむら たくやさん オヌティファむ株匏䌚瀟 シニアテクニカルサポヌト゚ンゞニアテスト自動化スペシャリスト ちなみに「笑わせないず生きおいけないタむプの人間なんですよ」ずご自身でおっしゃっおいた通り、70分の講挔は面癜くおあっずいう間でした。 資料は公開されおいたすので、興味のある方は芗いおみおください。 継続的テストに進化するたでの道のり これは末村さんが6幎前にQAや゜フトりェア開発に携わったずきの話だそうです。 明日リリヌスするずいうリリヌス日皋が差し迫っおいる状況のずきに  開発者 「QAテストしおください」 QA 「はい」 QA 「バグ芋぀かりたした」 開発者 「バグ盎りたした」←リリヌス圓日3時間前 QA 「えこっからテストするの」 みたいなこずがずおもストレスだったずいうこずで、開発者の実装ずQAのテストの間に䜕か芋えない壁があっおりォヌタヌフォヌルに近いものが残っおいたそうです。この苊しみの源泉は䜕なのかいろいろ勉匷しおいくうちにDevOpsずいうのを知りたした。 DevOpsずは DevOpsずは、Development開発ずOperation運甚を分けお仕事しおいたのを䞀緒にしよう、ずいうシステム開発の流れを良くする意味で䜿われる造語で、それを䞋支えする技術や抂念ずしお継続的むンテグレヌションや継続的デリバリヌずいう考え方が出おきたそうです。 出兞 テスト自動化から開発を支える継続的テストぞ P.9 では、今回の䞻圹ずも蚀える「継続的テスト」ずは䜕なのか。 出兞 テスト自動化から開発を支える継続的テストぞ P.10 䞊蚘図のように、継続的テストはすべおの堎所でテストできるず蚀われおいたす。 開発ずQAの間にあった壁が苊しみの源泉でしたが、確かにこの八の字なら壁を取っ払えそうです。ずいうこずで、「ある開発チヌムのテストが継続的テストに進化するたでの道のり」がスタヌトしたした。 クラむマックステスト 出兞 テスト自動化から開発を支える継続的テストぞ P.15 ある開発チヌムのお話です。1スプリント2週間で開発テストリリヌスずいう流れで仕事をしおいお「 䞀床にリリヌスする量が倚い 」、「 駆け蟌みマヌゞが倚い 」、「 手戻りが倚い 」ずいう課題があり、QAの手動テストがボトルネックになっおいたした。手動テストを自動化したらリリヌス頻床を増やせるのではないかずいうこずで、たずはクラむマックステストの゜リュヌションずしお E2Eテストの自動化 を導入したした。 ちなみに「クラむマックステスト」の名前はChatGPTに考えおもらったそうです。最埌の方にどっかヌヌんずテストするの、䜕かいい名前ないず聞いたら「クラむマックスはどうでしょう」ずいうこずで名付け芪になっおもらったそうです。いい仕事したすね テスト自動化 出兞 テスト自動化から開発を支える継続的テストぞ P.22 テスト自動化したらテスト実行速床は1/41/2たで短瞮し、4時間だったテストは12時間になりたした。 しかしここにも課題があり  出兞 テスト自動化から開発を支える継続的テストぞ P.25 E2Eテストの自動テストコヌドが叀かったり、新機胜远加に察応できおいなかったりず、実際に動かしおみお初めお問題に気が付きたした。 問題に気付くのが遅かった のです。テスト時間はテストコヌドのメンテナンス䜜業が远加発生しおむしろ増えおしたいたした。 実装の埌にテスト工皋が集䞭しおいるのが悪くお、これを開発䞭にE2Eテストを回したら、そのサむクルの䞭で問題にすぐに気付けるのではないか。 出兞 テスト自動化から開発を支える継続的テストぞ P.32 ずいうこずで次のチャレンゞです シフトレフト 出兞 テスト自動化から開発を支える継続的テストぞ P.35 今たで開発の埌に集䞭しおいたテストを開発の途䞭にもっおいこう、ずいう シフトレフト を取り入れたした。 開発䞭に開発者によっおテストコヌドの実装メンテナンスがされるので、 問題に気付くタむミングが早く なり、CIサむクルの䞭にE2Eテストを組み蟌めば自動的に実行されおリリヌス盎前のQAの負荷軜枛、コヌドフリヌズ期間の短瞮、リリヌスサむクルの短瞮が可胜ずなり、結果、「2週間スプリントを1週間に」、「2週に1回リリヌスを1週に1回に」改善しおいきたした。 ただし、ここにも課題があり  開発者たちにフラストレヌション がありたした。 「CIの実行時間が長くなった」 「UNITテストで充分なのにE2Eテストを曞かないずダメなの」 これは どのようなバグをどのように芋぀けるか、ずいうこずをチヌム内で充分共有されおいないのが原因 ずいうこずがわかり、課題がわかったので次のチャレンゞです。 テストリアヌキテクティング リアヌキテクティングはリファクタリングず類矩語で䜿われたすが、リアヌキテクティングは盎蚳するず再蚭蚈。テストリアヌキテクティングは、今たでE2Eテストに寄りすぎおいたテストをもっずいろんなテストレベルに寄せおいこうずいうものになりたす。 出兞 テスト自動化から開発を支える継続的テストぞ P.41 巊の図のアむスクリヌムコヌンずいうアンチパタヌンから、右の図の実行時間が短く実行コストが少ない順に充実させたテストピラミッドのバランスにもっおいこう、ずいうのを 開発チヌム内で共有したずは合意 を取りたした。 次にテストのバランスを考えおE2Eテストを枛らし、同時にテストを削っおもカバレッゞは保っおいるこずを裏付けるためのカバレッゞ蚈枬を1週間に1回やっお、このチヌムにずっお䞀番最適なテストピラミッドのバランスを確立したした。 これによっお、リリヌス頻床が週1回だったのをテストリアヌキテクティングで週4回に増やすこずができたした。 ただここでも課題が  品質に぀いお議論できおいない のではないか 。 次のチャレンゞです 継続的テスト 「 継続的テスト 」は䜜る前からリリヌスの埌たでずっずテストし続けるずいうこずです。 出兞 テスト自動化から開発を支える継続的テストぞ P.56 「 開発前 」 仕様を理解し、仕様の抜け挏れを枛らす。぀たりは開発デプロむたでの必芁なテストをリファむンメントで蚈画を立おお合意QA承認枈するため、自動テストが通ったらQAの刀断を埅たずにQAは開発者をブロックせずにデプロむできるようになりたす。 「 リリヌス前 」 未知の䞍具合を探るために、探玢的テストをしたす。 「 リリヌス時段階的ロヌルアりト 」 ナヌザヌの反応を芋るために䞀床にリリヌスしないでちょっずず぀リリヌスしおいく、段階的ロヌルアりトをしたす。 「 リリヌス埌GAGeneral Availability 」 党ナヌザヌに䜿っおもらい、GAGeneral Availability 監芖を䞀぀のテスト手段ずしお䜿い、ナヌザヌがどんなふうに䜿っおいるかずいうのをテストしたす。 䜜る前からリリヌスの埌たでずっずテストし続ける「継続的テスト」をしたこずにより、デプロむ頻床は週4回から毎日数回になりたした さらにはチヌムの課題感も倉わり、最初は開発プロセスの䞭の話ばかりしおいたのが、どんなテストが必芁か、自分たちがどういう䟡倀をナヌザヌに提䟛できるかなど、気付けばチヌム党䜓で 品質に぀いお議論できるように なっおいたした。 最埌に末村さんは、「この通りにやれずいうわけではありたせん。この話をたたき台にしお自分たちのチヌムでも話しおみおください。チヌムの状況に応じたアプロヌチが必芁です。」ずおっしゃっおいたした。 確かにおっしゃる通り、この「継続的テスト」の取り組みは䞀぀の事䟋で、党おの開発チヌムにそのたた適応できるものではなく、開発チヌムごずの課題やそれぞれの議論の結果があっお、解決しおいくためのプロセスやヒントに぀いおをこの講挔から孊ぶずずらえるのが良さそうだず思いたした。 感想 今回のセッションを聎いお、『品質を䌎う「継続的テスト」を続けるこず』が重芁だず思いたした。ただただ「継続的テスト」をするのではなく、PO開発者QAそれぞれが「品質」マむンドを持ち続けるこずでその先のナヌザヌぞの䟡倀提䟛に぀なげられるず解釈したした。さらに時代ず共にナヌザヌの求める䟡倀が倉化し続ける今だからこそ『品質を䌎う「継続的テスト」を続けるこず』がマッチしおいるのだず思いたす。ちなみに、今携わっおいる自身の開発チヌムはたさにこれを䜓珟しおいるので講挔を聎いた埌、にんたりず幞せを噛みしめおいたした。 たた、セッション内容ずは別の芳点で着目しおいたのは、今回䞀貫しお段階的に䜓系立おお怜蚌する進め方でした。末村さんがやっおいる「〇〇したこずでXXが起こっお、そこから出た課題、次のチャレンゞ、成果をその郜床䞁寧に明らかにしおいくサむクル」は本圓に圧巻でした。これは日々の業務で意識しおいる郚分ではあるものの茪郭ががやけおしたいがちなずころでもあったので、自身の課題を芋぀めなおす講挔にもなりたした。さっそく明日からの仕事にこの孊びを圹立おおいきたいず思いたす。 最埌たで読んでいただき、ありがずうございたした。 The post テスト自動化から、開発を支える継続的テストぞ JaSST’23 Kyushu 参加レポヌト first appeared on Sqripts .
この連茉は、登堎しお20幎が過ぎ、成熟期を迎え぀぀ある「アゞャむル開発」を解説したす。アゞャむル開発に぀いおは、䞖の䞭にたくさんの曞籍や情報があふれおいたすが、アゞャむルコヌチずしお10幎以䞊の珟堎経隓をもずに、あらためお孊び盎したい情報を䞭心にたずめおいきたす。 第12回目のテヌマは、「リヌン゜フトりェア開発」です。 この内容はUdemyで公開しおいるオンラむンコヌス「 珟圹アゞャむルコヌチが教える半日で理解できるアゞャむル開発ずスクラム 入門線 」の内容を元にしおいたす。 リヌンずいう思想 リヌン゜フトりェア開発は、リヌン開発ずも呌ばれおいたす。 日本で生たれたトペタ生産方匏は、アメリカやペヌロッパの゜フトりェア開発で掻甚・適甚され、䜓系化されお日本に逆茞入された開発手法です。リヌンの考えが、日本の゜フトりェア産業に盎結しおいかなかったのは、日本人ずしお残念に思いたす。 リヌンずいう蚀葉は、リヌンスタヌトアップなど、珟圚、様々な曞籍でも䜿われおいたすが、リヌン開発自䜓はあたり話題にならないように感じおいたす。どちらかずいうず䞍人気です。 その理由を考えおみるず、リヌン開発には、具䜓的なプラクティスが少なく、「22の思考ツヌル」ず呌ばれるリヌンの考え方スクラムでも出おきたリヌン思考が、倚く語られおいるからかもしれたせん。 リヌン関係の曞籍を読み解いおいくず、リヌン開発にはプラクティスがないのではなく、リヌン思考をベヌスに珟堎に即したプラクティスを考えおいきなさいずいうメッセヌゞずいうこずが芋えおきたす。このあたりもスクラムずずおも䌌おいたす。 しかし、自分たちで考えるのは倧切なこずですが、読者を突き攟したような蚀い方にも感じたす。せっかくいい思想であっおも、䜿われなければ意味がありたせん。せっかく、リヌン思考、リヌンの原則には、珟圚の開発でも通甚するものがたくさんあるのに、このあたりはもったいないず思わざるを埗たせん。 リヌン開発の本はこれたで3冊が日本語蚳されおいたす。もし、これからリヌン開発を孊ぶのであれば、廃盀になっおしたいたすが、『 リヌン開発の本質 』がおすすめです。 この蚘事でも『リヌン開発の本質』をベヌスに解説したす。 リヌン゜フトりェアの7぀の原則 リヌン゜フトりェアの7぀の原則をみおいきたしょう。曞籍『リヌン開発の本質』を芋るず、䟡倀より原則が先に登堎しおいたす。 原則1 ムダをなくす ひず぀めは「ムダをなくす」です。「ムダ」がカタカナなのは、リヌンが海倖からやっおきた考え方だからでしょう。英語だず「Waste無駄、浪費」ずいう蚀葉がありたすが、トペタの考えが尊重された結果、「無駄」が「ムダ」になり、その蚀葉自䜓が海倖でも通じるようになりたした。 トペタ生産方匏を源流ずするリヌン開発なので、ムダ取りは倧切な原則でしょう。ムダを芋぀け、ムダをなくすこずで、顧客ぞの䟡倀提䟛を最短距離で行っおいきたす。たた、ムダをなくすのは、さたざたなアゞャむル開発手法でも取り入れられおいる考え方です。そう考えるず、トペタ生産方匏はさたざたな開発手法に圱響を䞎えたのだず蚀えたす。 原則2 品質を䜜り蟌む 2぀目は「品質を䜜り蟌む」です。 事埌に欠陥を芋぀けるのではなく、最初から欠陥が入り蟌たないようにしおいくこず。これを「䜜り蟌む」ず衚珟しおいたす。 ゜フトりェアだず、䜜ったあずでも修正ができおしたうので、「䜜り蟌む」ずいう意識を持ちにくい郚分があるのかもしれたせん。しかし、トペタ生産方匏だず、生産物が車なので、欠陥を埌で取り陀けたせん。補品に欠陥が入り蟌むず、呜の危険にもなりたす。 日本だず、゜フトりェアのテストは、䜜ったものをテストするのが䞻流です。しかもバグを出すず倧隒ぎする文化なので、倧量のテストを、手動で実行する珟堎も倚いでしょう。トペタ出身の人が蚀っおいたこんな蚀葉がありたす。 すでにバグが埋め蟌たれおいるものをテストしおバグを取り陀いおも、品質がいいずは蚀えない。 バグを取り陀くこずに必死になるのではなく、バグそのものが埋め蟌たれない仕組みや方法を考える必芁がありたす。そうしなければ、開発がバグを䜜り、テストで発芋するずいう、非効率なもぐらたたきがずっず続いおしたいたす。 「品質を䜜り蟌む」も、開発手法党般で倧切にされおいる原則です。 原則3 知識を䜜り出す 3぀目は「知識を䜜り出す」です。 ゜フトりェア開発は知識創造のプロセスです。プロセスを運営しながら知識を生み出し、成果物だけでなくプロセス本䜓も改善しおいきたす。 原則4 決定を遅らせる 4぀目は「決定を遅らせる」です。 ゜フトりェア開発においお、最初にすべおを決めるのは䞍可胜ず蚀えたす。なぜなら、未来を芋通すのが難しいからです。 曞籍には「゜フトりェアの詳现な蚭蚈は、コヌディングの最䞭に行われるものである」ずも曞かれおいたす。蚭蚈を詳现に曞きすぎるずコヌドに近づいおしたいたす。だから、あえお決定を遅らせお、コヌディング䞭に蚭蚈しおいく・・・のもひず぀の手かもしれたせん。 意思決定は玠早く行うこずも倧切ですが、「決定を遅らせる」では、倧切な意思決定を「あえお」先延ばしし、ぎりぎりたで情報やフィヌドバックを集めお、決定を行いたす。 原則5 速く提䟛する 5぀目の原則は「速く提䟛する」です。ひず぀めの「ムダをなくす」でもでおきた「速い䟡倀提䟛」です。 スピヌドを匷みずするこずで、競合他瀟ずの競争に打ち勝ちたす。これはリヌンに限らず、アゞャむル開発の本質ずも蚀える内容です。 原則6 人を尊重する 6぀目の原則は「人を尊重する」です。 曞籍には「トペタの補品開発システムの4぀の基本理念のうち、3぀たでが、補品開発プロセスに携わる人に関係しおいる」ずありたす。゜フトりェア開発は人間䞭心の掻動です。 さらに、トペタ生産方匏では、自動化を、ニンベンの付いた「自働化」ずいう衚珟にしたす。人間を倧切にしたトペタ生産方匏らしい衚珟だず思いたす。 原則7 党䜓を最適化する 最埌の原則は「党䜓を最適化する」です。 リヌンではアむデアが生たれおリリヌスするたでの流れを「バリュヌストリヌム」ず捉えお改善しおいきたす。バリュヌストリヌムは、日本語にするず䟡倀の流れです。リヌン開発ではバリュヌストリヌムの䞀郚分ではなく、党䜓を最適化したす。 党䜓を芋ず、郚分最適をしおも、問題がどこかに移動しおたた別の問題が生たれおしたいたす。だから、党䜓を芋ながら改善を行っおいきたす。これは制玄理論ずいう有名な理論でも語られおいたす。 リヌン゜フトりェア開発の22の思考ツヌル 最埌に、リヌン゜フトりェア開発の22の思考ツヌルを解説したす。この思考ツヌルは、XPでいうプラクティスに䌌た立ち䜍眮のものです。これらのツヌルは7぀の原則に分類できたす。 1. ムダをなくす ムダを認識する バリュヌストリヌムマッピング 䟡倀の流れを図解し、流れる時間を蚈枬しお流れを短瞮しおいく 2. 品質を䜜り蟌む 認知統䞀性 統䞀性を䜜り蟌む コンセプト統䞀性 統䞀性を䜜り蟌む リファクタリング テスティング 3. 知識を䜜り出す フィヌドバック むテレヌション 同期 集合ベヌス開発 チヌム開発 4. 決定を遅らせる オプション思考 最終責任時点 意思決定 5. 速く提䟛する プルシステム かんばんの考え方 埅ち行列理論 リヌンずは別の理論 遅れのコスト 6. 人を尊重する 自発的決定 モチベヌション リヌダヌシップ 専門知識 7. 党䜓を最適化する 蚈枬 契玄 より詳现を知りたい堎合は、曞籍『 リヌン゜フトり゚ア開発 アゞャむル開発を実践する22の方法 』をご確認ください。 連茉䞀芧 第1回アゞャむル開発の過去、珟圚、未来を知ろう 第2回声に出しお読みたいアゞャむルマニフェスト 第3回埓来型開発ずアゞャむル開発の違い その 第4回埓来型開発ずアゞャむル開発の違い その 第5回アゞャむル開発のよくある誀解を解いおいこう 第6回䞖界䞭で倧人気の秘密に迫るスクラムを䜿った゜フトりェア開発 第7回わかるようでわかりにくいスクラムチヌムの責任 第8回スクラムむベントの実践方法 第9回゚クストリヌム・プログラミングずその䟡倀 第10回゚クストリヌム・プログラミングの原則ず基瀎プラクティス 第11回゚クストリヌム・プログラミングの応甚プラクティス 第12回リヌン゜フトりェア開発 The post 第12回 リヌン゜フトりェア開発 first appeared on Sqripts .
はじめたしおテスト゚ンゞニアの「倧の字」です。 私はゲヌム業界でテスタヌを経お、゚ンタヌプラむズ業界のテスト゚ンゞニアになりたした。 今回は、゚ンタヌプラむズ業界に転身したこずで気付くこずが出来た「デバッグ」ず「テスト」の違いに぀いおご玹介したいず思いたす。 気付き 前職のゲヌム業界では、「デバッグ」や「デバッガヌ」ずいう蚀葉が「テスト」「テスタヌ」ず同じ意味で扱われおいるこずが倚く、私自身も「デバッグ」ず「テスト」は同じ蚀葉の意味だず思っおいたした。 しかし、゚ンタヌプラむズ業界でテストの知識を孊ぶうちに2぀の蚀葉はたったく異なる蚀葉の意味だず知りたした。 今回はJSTQB認定テスト技術者資栌のシラバスを通しお、「デバッグ」「テスト」の意味や他にもよく誀解されやすい蚀葉「゚ラヌ」「故障」「欠陥」の意味を再確認しおみるこずにしたした。 デバッグずは 私は以前たで「デバッグ」は開発者がプログラムのバグを芋぀ける行為だず、ざっくりずしたむメヌゞで認識しおいたした。 では、実際にはどのような意味かをJSTQBのシラバスで確認しおみたしょう。 デバッグは、故障の基ずなる欠陥を芋぀けお、解析し、取り陀く䞀連の開発の掻動である。 JSTQB-SyllabusFoundation_Version2018.J03 JSTQB-FL 1.1.2 テストずデバッグ ふむふむ、なるほど぀たり、プログラム内に朜んでいる欠陥を芋぀けお、原因のプログラムコヌドをチェックしお欠陥を取り陀く行為自䜓が「デバッグ」ずいう意味なんですね。 では、故障の原因である欠陥を取り陀いた埌、本圓にその故障が無くなったかは確認しないのでしょうかその答えは、これから玹介する「テスト」にありそうです。 テストずは 私は「テスト」ずいえば、テスト手順通りに実行しお期埅する結果ず䞀臎しおいるかどうかを確認する行為だず思っおいたした。では、正しい意味はどうでしょうかJSTQBのシラバスを確認しおみたしょう。 テストは、実行するこずで゜フトりェアに存圚する欠陥に起因する故障を瀺すこずができる JSTQB-SyllabusFoundation_Version2018.J03 JSTQB-FL 1.1.2 テストずデバッグ 「テスト」ずは、欠陥が原因の故障が発生するかどうかを瀺すこずができるんですね。たた、故障の発生は確認できたすが、その欠陥の原因が特定できないこずも特城ず蚀えたす。 では、その欠陥を「デバッグ」で取り陀いた埌、発生しおいた故障が修正されたこずの確認は行わないのでしょうかその問いには、再床シラバスの蚘茉を芋おみたしょう。 テスト担圓者が確認テストを実斜し、修正により欠陥が解決したこずを確認する。 JSTQB-SyllabusFoundation_Version2018.J03 JSTQB-FL 1.1.2 テストずデバッグ なるほど。「デバッグ」を行っお修正埌に「テスト」を行い、怜出した欠陥が無くなったこずもきちんず確認するんですね。 ゚ラヌずは 私は「゚ラヌ」ずいえば、プログラム内で誀った動䜜が発生するこずだず思っおいたした。 では、たたたたJSTQBのシラバスで意味を確認しおみたしょう。 人間ぱラヌ誀りを犯す。その゚ラヌが゜ヌスコヌドや他の関連する䜜業成果物の欠陥フォヌルトたたはバグずなる。 JSTQB-SyllabusFoundation_Version2018.J03 JSTQB-FL 1.2.3 ゚ラヌ、欠陥、および故障 1 ぀の䜜業成果物で欠陥を発生させる゚ラヌは、他の関連する䜜業成果物でも欠陥を発生させる可胜性がある。 JSTQB-SyllabusFoundation_Version2018.J03 JSTQB-FL 1.2.3 ゚ラヌ、欠陥、および故障 テスト業界での「゚ラヌ」の意味は、プログラム内だけではなく、ヒュヌマン゚ラヌを含んだ意味なんですね。゜フトりェアの゚ラヌに留たらず、テストを行う䞊で発生する人為的なミステむクを含む意味であるこずが分かりたしたね。 次は「デバッグ」「テスト」「゚ラヌ」をより深く理解しおもらうため、䞊蚘3぀の䞭で䜿われおいる「故障」ず「欠陥」ずいう蚀葉の意味に぀いおご玹介したす 故障ずは JSTQBのシラバスでは䞋蚘のような定矩がされおいたす。 コンポヌネントやシステムが、期埅した機胜、サヌビス、結果から逞脱するこず 「故障」ずは、システムが期埅する結果ず異なる結果になるこずを意味するのですね。私の経隓則䞊では1぀の欠陥で耇数の故障が発生するこずがある印象がありたす。「故障」を怜出するための掻動ずしおテストを行うので、むメヌゞがしやすいですね。 欠陥ずは JSTQBのシラバスでは䞋蚘のような定矩がされおいたす。 システムの芁件や機胜が実珟できない原因になる䞍備や欠点 「欠陥」ずは、芁件や機胜が満たせない「故障」の原因のこずなんですね。たた、テストによっお「欠陥」が存圚しおいるこずは瀺せたすが、「欠陥」が存圚しないこずは蚌明できたせん。぀たり、゜フトりェアに残存する未怜出の欠陥数は枛らせたすが、「欠陥」が芋぀からないずしおも残存する「欠陥」は無いずは蚀い切れないのが特城です。 テストをもっず詳しく では、蚀葉の意味が分かったずころで少しテストに぀いお深掘りしおいきたいず思いたす。 テストずいえば、以前の私のように゜フトりェアの動䜜を確認しお期埅する結果が埗られるかを確認するだけず認識されおいる方もいるず思いたす。しかし、実はテストには䞋蚘のような様々な掻動のプロセスが存圚したす。 「テスト蚈画」「テストのモニタリングずコントロヌル」「テスト分析」 「テスト蚭蚈」「テスト実装」「テスト実行」「テスト完了」 たた、テストプロセスにはいく぀かのメリットがありたす。 プロセスを分けるこずで、各担圓の䜜業範囲霟霬などのヒュヌマン゚ラヌが予防できる プロセス毎に゚キスパヌトな人員をアサむンするこずにより、䜜業の効率化を実珟できる テストプロセスの䞭で問題点があった堎合、どのプロセスに問題があったかを分析し、改善を続けるこずができる テストプロセスを段階的に行うこずで、人為的なミスの防止や䜜業の効率化、各プロセスの改善等が可胜になり、リスクの軜枛にも繋がりたす。 たずめ 「デバッグ」ず「テスト」の圹割に぀いお、理解が深められたでしょうか。欠陥を取り陀く「デバッグ」も倧切ですが、「テスト」によっお故障を怜出するこずで欠陥があるこずが分かるため、「テスト」は必芁䞍可欠な存圚であり、゜フトりェア品質を保぀ための最埌の砊であるこずがお分かりいただけたず思いたす。 たた、゚ンタヌプラむズ業界ではシステムの倧芏暡化や耇雑化、短玍期化が日々進んできおいたす。これらを実珟するためにテストプロセスを䞊手く掻甚しお、ヒュヌマン゚ラヌの予防や䜜業の効率化、テストを改善しおいく仕組み䜜りが出来るこずを今回孊べたした。 みなさんも今回を機䌚に各テストプロセスにどのような圹割があるかを調べおみるのもいいかもしれたせんね。 「/Sqripts」では、テストプロセスに぀いおも玹介しおいたす。是非チェックしおみおください。 ・基本的なテストプロセス 基本的なテストプロセス ・テスト分析の重芁性テストを支える瞁の䞋の力持ち テスト分析の重芁性テストを支える瞁の䞋の力持ち ・テスト蚭蚈技法 テスト蚭蚈技法 The post テストずは䜕かデバッグずは違うの first appeared on Sqripts .
本連茉ではプロゞェクトマネゞメントの党䜓像ずプロゞェクトを成功させる䞊で最䜎限抑えるべき知識ず技術はもちろん、プロゞェクトを炎䞊させないための技術やコツをお䌝えしたいず思っおいたす。 みなさんのプロゞェクトが今以䞊に充実し、笑顔でプロゞェクト終結を迎えられるよう䞀緒に孊んでいきたしょう。 第2回ずなる今回は、プロゞェクトマネヌゞャヌの圹割や必芁なスキル、心構えに぀いおお䌝えしたす。 連茉第1回はこちら 【第1回】プロゞェクトマネゞメントずは䜕か 連茉初回党文公開䞭Sqripts䌚員以倖の方も党文お読みいただけたす PMプロゞェクトマネヌゞャヌずは プロゞェクトマネヌゞャヌは「プロゞェクト目暙を達成するこずに責任をも぀チヌムをリヌドするために、母䜓組織が任呜する人物である」ず定矩されたす。プロゞェクトの成吊に倧きな圱響を及がすものずしお、PMの存圚は第䞀に挙げられる芁玠であり、PMはあらゆる プロゞェクトマネゞメントの知識や技術、これたでの経隓や個人の人間力を「総動員」させ、プロゞェクトの目的・目暙を期限たでに達成し、プロゞェクト完了の責任を持぀ 存圚です。 PMの䞻な圹割 PMは プロゞェクトの目的・目暙を期限たでに達成させる為に、プロゞェクトマネゞメントのプロセスを実行しマネゞメント したす。 プロゞェクトマネゞメントのプロセスは䞻に立䞊げ、蚈画、実行、監芖・コントロヌル、終結の぀のプロセス矀に分けられたす。 「プロゞェクトマネゞメントのプロセス」が優れおいる点は「どの業皮業態でも適甚可胜」である点にありたす。ITでも補造業でもサヌビスでもあらゆる分野に適甚できるのがプロゞェクトマネゞメントプロセスです。 䞀方でプロゞェクト掻動においお生み出される「成果物自䜓を生み出すプロセス」は業皮業態によっお異なっおきたす。むベント䌁画のプロセスずダム建蚭のプロセスは明らかに違いたすね。この成果物を生み出すプロセスを実行するのはチヌムメンバヌであり、PMはこの「成果物を生み出すプロセスがメンバヌの掻動により円滑に進み、期日たでに成果物が玍品できるよう」に、 プロゞェクトマネゞメントのプロセスずアプロヌチを駆䜿しおマネヌゞメントする こずがその倧きな圹割です。 PMずしおの圹割に集䞭する 経隓のあるみなさんは、この成果物自䜓を生み出すプロセス珟堎・メンバヌずしおの掻動にずおも粟通されおいるのではないかず思いたす。たた自らが手を出した方がスムヌズに運ぶ堎合もあるかもしれたせん。しかしプロゞェクト成功に向ける䞊での定石ずいう点では、先ずは 「このプロゞェクトマネゞメントのプロセスPMずしおの掻動」に集䞭しおほしい ず思いたす。 小芏暡プロゞェクトや組織の状態によっおは、プロゞェクトマネヌゞャヌをしながら「メンバヌの圹割も兌任する」こずが少なく有りたせん。䟋えばシステム開発のPMずしお掻動しながら、同時にシステム開発自䜓にも゚ンゞニアずしおの圹割を持぀ような堎合です。もしもこのように兌務する堎合には「自分の掻動のどれがPMずしおの圹割で、どれがメンバヌの圹割なのかを意識」しお掻動するこずが倧切です。どうしおもメンバヌずしおの掻動に時間を割かれる、マネゞメントに必芁な掻動や時間が充おられない、ずいう事にならないよう泚意したしょう。 PMの掻動ず圱響範囲 以䞋はプロゞェクトマネゞメント専門職の䟡倀ず貢献を瀺すPM独自の掻動ずされたす。 プロゞェクト目暙ずステヌクホルダヌの期埅に応えられるよう、プロゞェクトチヌムを導くこず 利甚可胜な資源ず競合する制玄条件ずのバランスを維持するこず スポンサヌ、チヌム、メンバ、その他のステヌクホルダヌ間の子ミュりニケヌションをはかるこず PMぞの期埅ず責任の拡倧 最近ではPMがビゞネスアナリシスBAやビゞネスケヌスの䜜成、プロゞェクトのためのポヌトフォリオマネゞメント䜜成などぞの関䞎が求められるシヌンがありたす。ビゞネスケヌスずはプロゞェクトの「立ち䞊げ前」にプロゞェクトスポンサヌなどにより䜜成され、プロゞェクトの立ち䞊げ理由や目暙を蚭定したす。これらの掻動に早くからプロゞェクトマネヌゞャヌが参加し、評䟡や分析、目暙掚進方法や提案に関䞎するこずで、プロゞェクトの成功角床を高めおその埌のプロゞェクト掻動を円滑にするずいった期埅が蟌められおいたす。たた同じようにプロゞェクトベネフィットの実珟に向けお、プロゞェクト掻動埌の各皮察応ぞも関䞎するこずがありたす。プロゞェクトマネヌゞャヌの圹割、その期埅は組織やプロゞェクト毎に異なりその掻動もテヌラリング ※ されたすが、䞊蚘のような 期埅に臚機応倉に応えるこず が求められおいたす。 ※テヌラリングtailoring 盎蚳では「仕立お」、プロゞェクトマネゞメントにおいおはプロゞェクトマネゞメントの知識や技法等を「プロゞェクトに合わせお適切に調敎しお適応する」こずを意味したす。この察応を掋服の仕立おに芋立おテヌラリングず呌びたす。 プロゞェクトマネゞメントの成功指暙 プロゞェクトマネゞメントにおける成功刀断は、䌝統的にQCD品質・コスト・玍期の達成が基準ずされおいたしたが、昚今はそれだけではステヌクホルダヌの満足を埗られなくなっおいたす。「QCDS目暙を達成したのに、なぜプロゞェクトが成功ず蚀えないのか、評䟡されないのか」ずいう状況に陥らないよう、事前にプロゞェクト目暙等に成功指暙や達成事項を明確にしお蚘録するなどしお合意を埗おおくこずもPMずしおの重芁な掻動ずなっおいたす。埓来のQCD評䟡は党䜓の30に過ぎないずも蚀われたす 蚘茉しおおくずよい達成事項䟋 財務指暙や非財務指暙の達成 組織移行の完了 ステヌクホルダヌの満足 顧客や゚ンドナヌザヌからの受け入れ 組織や珟堎ぞの成果物の統合 ガバナンス基準の充足 など PMに必芁ずされるスキルずは 具䜓的にPMにはどのようなスキルが求められるのでしょうか。プロゞェクト掻動に必芁な知識や経隓の適甚、チヌムを導くリヌダヌシップ など、PMに求められるスキルは倚様で切り口は数倚く存圚したす。そこで今回はPMIが提唱する「PMIタレント・トラむアングル」を玹介したす。 タレント・トラむアングルずは、効果的なプロゞェクトマネゞメントを実斜する䞊で必芁ずされる぀のスキルセットです。これらのスキルを備え、トラむアングルの名の通り「バランスよく発揮」するこずがプロゞェクトの成功に効果的だずされおいたす。 Ways of Working Business Acumen Power Skills Ways of Working働き方、仕事の進め方 「仕事プロゞェクトなどを成し遂げるため」に さたざたな方法ずアプロヌチ予枬型、アゞャむル、デザむン思考、あるいはただ開発されおいない新しい手法を駆䜿しお成果を䞊げるスキル を指したす。 その為PMは倚様な働き方や仕事の進め方などを経隓・習埗するこず、たたそれらを適切なタむミングで掻甚させるこずが求められたす。 Business Acumenビゞネス掞察力 組織や業界におけるマクロずミクロの圱響力を理解し、適切な意思決定を行うための機胜たたはドメむン固有の知識を持぀ こずを指したす。効果的に意思決定を行い、自分たちのプロゞェクトが組織党䜓の戊略やグロヌバルなトレンドなどの党䜓像ずどのように「敎合」しおいるかを理解できるスキルが求められたす。 Power Skillsパワヌスキルずは 協調的リヌダヌシップ、コミュニケヌション、革新的マむンドセット、目的志向、共感力などの察人関係スキル を指したす。 プロゞェクトやチヌムに察するリヌダヌシップはもちろんのこず、「協調的」や「共感力」ずいった察人関係スキルを発揮しおステヌクホルダヌぞ関䞎し、圌らに圱響力を維持が求められおいたす。 いかがでしょうかタレント・トラむアングルに瀺される芁求スキルからもPMぞの期埅、ビゞネス戊略ずその達成にずっお倧きな圹割を持぀こずがわかりたすね。このほかにもみなさんがプロゞェクトに参加する䞭で、先茩PMの振る舞いなどを芋お「自分だったらこうする」「次のプロゞェクトならこうできる」ずいう発想から自身のPM像ずスキルセットのむメヌゞを膚らたせおみおください。 PMずしお倧切にしおほしいこず 人間性こそプロゞェクトの掚進力 いくら知識や技術、経隓があっおも人間性が適切でなければリヌダシップを発揮しプロゞェクトを円滑に進めるこずは困難です。 プロゞェクトは倚くの人ず共に団結しお目的・目暙の達成を目指したす。その為、メンバが「䞀緒にプロゞェクトを進めたい」「この人にならプロゞェクトを任せられる」ず思われるような存圚でなくおはなりたせん。技術ず知識ずいう基瀎力に加え、その人間性でリヌダヌシップを発揮しプロゞェクトを円滑に進めおいきたしょう。 management by walking around MBWA(Management By Walking Around)ずは「歩きたわるマネゞメント」぀たり「マネヌゞャヌが珟堎を歩いおマネヌゞメントする」ずいうこずです。「垭に座っお報告を埅っおいるだけ」「定䟋ミヌティングの堎でだけ情報収集する」ずいったマネヌゞメントではなく「自ら情報を取りに行く(pull)」スタむルです。察話をするこず、察話の機䌚を増やすこず、自らその空気ず堎を醞成するこず。メンバヌはその行動や空気を汲み取り、自然ず安心感やパフォヌマンスの倉化を呌び起こすはずです。ぜひ意識しおみおください。 「自己流PM」に陥らない為に 「自己流のPM」は自分の匷みを䞭心に、䌞ばせる範囲に手を䌞ばしおいきたす。それも決しお悪くはありたせんが「䞀流のPM」はどうかずいうず、プロダクトやプロゞェクトの党䜓像を理解した䞊で、自分がやるべき仕事を担いながら、自分ひずりでは手の届かない仕事を適切にチヌムに委任するなどしたす。倧切なのはバランスず意識です。 安易に自己流に走り「独走」しないよう、ご自身がも぀特性・芁玠ず䌞ばしおいくべき方向を意識しおいくこずからはじめたしょう。 誰よりも目的・目暙の達成にこだわりを持぀ PMはプロゞェクトの目的・目暙を期限たでに達成し、プロゞェクト完了の責任を負う存圚だずお話したした。しかし実際にプロゞェクトを実行するず、おそらく蚈画通りに行かないこずが倚々発生するはずです。前提や制玄条件、発生する困難に察凊しながらプロゞェクトを掚進するこずは簡単ではありたせんが、だからず蚀っおPMが簡単に諊めたり「このぐらいでいいか」ず安易な劥協をしおはいけたせん。PMはできればチヌムで最も「目的や目暙にこだわる思考」を持っおください。その思考が、どうすれば目的・目暙が達成できるだろうかずいう行動を呌び起こしチヌムを導きたす。 さいごに プロゞェクトの成功に倧きく関わるPMずその掻動。プロゞェクトにおいお非垞に重芁な存圚であるからこそ、その圹割や仕事内容、求められるスキルや玠逊は倚岐にわたりたす。PMはよく指揮者などにも䟋えられたすが、様々な知識をフル掻甚し、方向性を瀺し、柔軟性を持っお、繊现に、時に倧胆にプロゞェクトをたずめ䞊げおいく様子は、心技䜓バランスを持った「総合栌闘家」ずいう方がピンずくる気がしたす。みなさんもぜひPMずしおの「筋肉」をさらに鍛えお、プロゞェクトを支えおいきたしょう 今回は、PMの圹割や期埅されるスキルセットなどに぀いお考えおみたした。 次回は、「苊手な掻動、よくわからない」ず蚀われるこずも倚い「ステヌクホルダヌマネゞメント」を、具䜓的な手法も亀えお孊んでいきたしょう。 連茉䞀芧 【第1回】プロゞェクトマネゞメントずは䜕か The post 【第2回】プロゞェクトマネヌゞャヌの圹割ずは first appeared on Sqripts .
こんにちは゚ンゞニアのぱやぎです 党囜高等専門孊校プログラミングコンテスト(以䞋、高専プロコン)の第34回犏井倧䌚が2023幎10月14日〜10月15日に開催されたした。今回は私の䌚瀟AGESTが協賛するこずずなり、私もメンバヌずしお参加しおきたした。 私自身、高専プロコンのこずをよく知らなかったのですが、実際に参加しおみお、孊生の皆さんの技術力ず熱い想いにずおも刺激を受けたしたので、その様子をお届けしたいず思いたす。 高専プロコンずは 党囜の高等専門孊校の孊生がアむデアや技術力を競う倧䌚です。 「課題」「自由」「競技」の3郚門で開催されおいたす。 以䞋公匏HPです。 党囜高専プログラミングコンテスト 公匏サむト 第34回犏井倧䌚(2023) 課題郚門 課題郚門は2幎に1床テヌマが倉わり、そのテヌマに沿った䜜品を開発し最も優れたシステムを決める郚門になりたす。今回は昚幎に匕き続き「オンラむンで生み出す新しい楜しみ」ずいうテヌマでした。 将棋やカルタなどオンラむンで楜しめるゲヌムを開発しおいるチヌムや、普段の掻動や、ゲヌムなどをみんなでオンラむンで楜しめるように考えられた䜜品、音楜などをオンラむンでより楜しめるような工倫をしおいる䜜品などが倚く出おいたした。 自由郚門 自由郚門は課題郚門ずは違い自分たちが困っおいるこずや、関心のあるこずなど自由なテヌマで独創的な䜜品を開発し、最も優れたシステムを決める郚門になりたす。 孊生寮の掗濯管理に぀いおや、アクリル廃材の再利甚、高霢者の服薬管理など身近な問題から瀟䌚問題など幅広い問題に察凊する䜜品から、音楜やアヌトなどのナニヌクな芖点での䜜品が倚く出されおいたした 競技郚門 競技郚門は䞎えられたルヌルに沿っおプログラムを䜜成し、そのプログラムを甚いおゲヌムを行いチヌム察抗戊を行う郚門になりたす。 今回は「決戊n乗谷城」ずいうテヌマで行われおおり、2チヌム察戊型の陣取りゲヌムでした。静かに競技が進んでいくなか、出堎しおいる孊生さん等の真剣な衚情から緊匵感が䌝わり、熱い戊いが繰り広げられおいたした 䌚堎の様子 今回の䌚堎は犏井県鯖江垂の「サンドヌム犏井」ずいう堎所でした。 特城的な倖装の建物で、カッコよかったです 内郚では孊生さん等が、自分のような䌁業の方や䞀般の参加者さん等に説明しおくれたした。 孊生さん等はみんな自分たちの䜜品に぀いお熱く説明しおおり、聞いおいるず孊生さん等のフレッシュさや熱量、䜜品に察しおの自信が䌝わっおきおずおも玠晎らしかったです たた、䜿っおいる技術やテヌマを決めたきっかけ、デザむンなど質問をするずそれぞれ担圓の人が回答を返しおくれお「なるほど すごい 」ずなり続けながら説明を聞いおいたした 競技郚門も熱い戊いが繰り広げられおいたした次回参加するできたらもっずルヌルを最初から把握し、より熱く芳戊をしたいず思いたした 個人的に印象的だったもの 党郚の䜜品を䜓隓できたわけではなかったのですが、自分が䜓隓した䞭で印象的だったものを2぀玹介したいず思いたす。 VibraSymphony -党おの人にリアルなVR䜓隓を- こちらは石川県の石川高専の自由郚門の䜜品です。 芖芚・聎芚のみでしか䜓隓できなかったVRラむブに振動するデバむスを取り入れ、臚堎感を向䞊させるずいう目的の䜜品でした。 胞郚・腹郚に振動するスマヌトフォンを入れたベスト、振動デバむスを入れた靎を着甚し、VRラむブを䜓隓させおいただきたした。振動が本圓にラむブ䌚堎の音の振動を感じおいるようで本圓にその堎でラむブの音が鳎っおいるような感芚になりたした。 䜜品の完成床も孊生さん等の協力しお説明をしおくれたずころも非垞に玠晎らしいず思いたした Learn Mate 孊生の孊生による孊生のための連絡アプリ こちらは犏岡県の有明高専の課題郚門の䜜品です。 孊生同士の掲瀺板、先生ずの匿名のチャット、ToDoリストや時間割など孊生生掻を送るにあたっお欲しいものがたくさん入っおいる䜜品でした。実際に困っおいるこずやこうあったらいいなずいう孊生目線で䜜られおおり、自分も孊生の時にこのような仕組みがあればな ず思いたした 先生ぞ質問をする抵抗軜枛のために匿名にしたり、匿名でも悪戯等ができないようにしおいたりなど、䜿甚時の想定が现かくされおいお玠晎らしかったです AGEST䌁業賞 AGEST䌁業賞を授䞎したのは犏岡県の久留米高専の自由郚門「SeQuick気軜な孊習ゲヌムで、セキュリティ人材を増やそう」でしたおめでずうございたす SeQuick気軜な孊習ゲヌムで、セキュリティ人材を増やそう セキュリティ人材の䞍足を課題ずしおゲヌム圢匏で楜しく継続的にセキュリティの孊習を行う目的の䜜品でした。非垞にセキュリティを孊ぶのに効果的であり、䌚瀟の研修等でこのようなシステムがあれば、効果的に楜しくセキュリティに぀いお孊ぶこずができるず思いたした 感想 たず、チヌムでテヌマを決めおみんなで協力しお䜜成をやりずげたずいうこず本圓に尊敬したす たた、タむトルにもありたすが「熱を济びた」ず感じたした。゚ンゞニアずしお、ものづくりをしおいるものずしおその熱に感動し、自分も頑匵ろうず思えたした たた、今回参加しおいる䞭で䌁業玹介等を行う機䌚もあり、匊瀟が専門ずしおいる品質の話題など今回の䜜品䜜りのなかで共感しおもらえる郚分や興味を持っお聞いおくれる孊生さんが倚く、改めお匊瀟の領域に぀いお自信を持぀こずができたした 最埌に これからのITを匕っ匵っおいくであろう孊生さん等ず亀流できたこず、非垞に貎重な䜓隓をさせおいただきたした たた、孊生さん等のフレッシュさやものづくりぞの熱量、チヌムメンバヌず協力しおいるずころをみお非垞に゚ネルギヌをもらえたした 参加した皆さん、お疲れ様でした ここたで読んでいただきありがずうございたす。 The post 第34回高専プロコンで感じた未来の゚ンゞニアの熱量ず創造力 first appeared on Sqripts .
こんにちは。 ゚ンゞニアの nobushi です。 RDBが必芁な芏暡のデヌタを扱うWebアプリケヌションを構築する堎合、倚少なりずも「怜玢」機胜が求められるものだず思いたす。 しかし、この「怜玢」機胜、芁求事項の幅が非垞に倧きく、堎合によっおは実珟がかなり難しいず思われるこずもよくあるんじゃ無いでしょうか。 「党文怜玢」はその代衚ずも思われるもので、機胜自䜓はずおもメゞャヌなんですが、RDBだけでできるこずはそんなに倚くありたせん。 そこで Elasticsearch のような党文怜玢゚ンゞンを掻甚するケヌスも倚いず思いたす。 ただその堎合、デヌタ曎新をRDB、Elasticsearchの䞡方に察しお行う必芁があり、䜕かず煩雑になりがちです。 PGSync は PostgreSQL ずElasticsearchの同期ツヌルで、PostgreSQLのデヌタ倉曎を即時にElasticsearchに反映しおくれたす。 そのため、アプリケヌションではElasticsearchぞのデヌタ曎新を行う必芁がなく、コヌドがスッキリしたす。 今回は簡単にPGSyncの導入をしおみたいず思いたす。 導入 docker-compose が䜿える環境で、任意のディレクトリに以䞋のファむルを配眮しお / db/ initdb.sh postgresql.conf pgsync/ Dockerfile entrypoint.sh schema.json docker-compose.yml 配眮したディレクトリで起動しおください。 docker compose up -d docker-compose.yml services: pgsync: build: context: ./pgsync environment: PG_HOST: db PG_USER: postgres PG_PASSWORD: hoge ELASTICSEARCH_HOST: elasticsearch depends_on: db: condition: service_healthy elasticsearch: condition: service_healthy db: image: postgres:16.0 environment: - POSTGRES_PASSWORD=hoge command: >- -c "config_file=/etc/postgresql/postgresql.conf" volumes: - ./db/postgresql.conf:/etc/postgresql/postgresql.conf - ./db/initdb.sh:/docker-entrypoint-initdb.d/initdb.sh healthcheck: test: ["CMD", "pg_isready", "-U", "postgres"] pgadmin: image: dpage/pgadmin4:7.7 environment: - PGADMIN_DEFAULT_EMAIL=johndoe@example.com - PGADMIN_DEFAULT_PASSWORD=hoge ports: - 50080:80 elasticsearch_prepare: image: bash privileged: true user: root command: ["sysctl", "-w", "vm.max_map_count=262144"] elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.10.2 depends_on: elasticsearch_prepare: condition: service_completed_successfully environment: discovery.type: single-node xpack.security.enabled: "false" ES_JAVA_OPTS: -Xms1g -Xmx1g mem_limit: 2g healthcheck: test: ["CMD", "curl", "<http://localhost:9200>"] interval: 1s retries: 180 kibana: image: docker.elastic.co/kibana/kibana:8.10.2 environment: - ELASTICSEARCH_URL=http://elasticsearch:9200 depends_on: elasticsearch: condition: service_healthy healthcheck: test: ["CMD", "curl", "<http://localhost:5601>"] ports: - 55601:5601 PostgreSQL、Elasticsearchのむンスタンスず、PGSyncのむンスタンスを配眮しおいたす。 たたPostgreSQL、ElasticsearchそれぞれのViewerずしおpgAdmin、Kibanaを配眮しおいたす。 db/initdb.sh #!/bin/bash -xeu set -o pipefail psql -v ON_ERROR_STOP=1 <<- _EOT_ CREATE TABLE IF NOT EXISTS public.sample (id integer PRIMARY KEY, value text); _EOT_ db/postgresql.conf include = '/var/lib/postgresql/data/postgresql.conf' wal_level = logical max_replication_slots = 10 pgsync/Dockerfile FROM python:3.11.5-alpine3.18 RUN apk update --no-cache &&\\ apk add --no-cache redis RUN pip install pgsync==2.5.0 COPY entrypoint.sh . COPY schema.json . ENTRYPOINT ["sh"] CMD ["./entrypoint.sh"] pgsync/entrypoint.sh #!/bin/sh -xeu set -o pipefail redis-server --daemonize yes bootstrap --config schema.json pgsync --config schema.json --daemon pgsync/schema.json [ { "database": "postgres", "nodes": { "table": "sample" } } ] PGSyncの蚭定 PGSyncはPythonのアプリケヌションです。 䞊蚘 PGSyncサヌバヌの構築 ではPythonのコンテナむメヌゞをベヌスにしおいたす。 たた、 Redis が必須なのでRedisも組み蟌んでたす。 起動スクリプト ではRedisサヌバヌをバックグラりンド起動した埌に以䞋のコマンドでPGSyncを起動しおいたす。 bootstrap --config schema.json pgsync --config schema.json --daemon それぞれPGSyncの前準備、起動のコマンドです。 schema.json を匕数ずしお枡しおいたす。 schema.jsonはPGSyncの察象テヌブル等の蚭定を行いたす。 今回は最䜎限の蚭定ずしお察象DBを postgres 、テヌブルを sample ずしおいたす。 この蚭定だず察象テヌブルの党カラムをElasticsearchに同期するこずになりたす。 今回は割愛したすが、schema蚭定では察象のカラムを限定したり、スクリプトで倀を加工したりず自由床は高いです。 動䜜怜蚌 ではpgAdminずKibanaで確認しおみたす。 pgAdminぞのアクセスは䞊蚘の docker-compose の通りであれば http://127.0.0.1:50080 で、 KibanaのDevToolぞは http://127.0.0.1:55601/app/dev_tools#/console でアクセス可胜なはずです。 pgAdminぞのlogin http://127.0.0.1:50080 にアクセスするずログむン画面が衚瀺されるので docker-compose の環境倉数で蚭定した以䞋のメヌルアドレス、パスワヌドでログむンしたす。 johndoe@example.com / hoge pgAdminからDBぞの接続 ログむンしたらDBサヌバヌぞの接続を远加したす。 General / Name Connection / Host name Connection / Username Connection / Password db db postgres hoge この段階では sample テヌブルは空です。 KibanaでElasticsearchの確認 http://127.0.0.1:55601/app/dev_tools#/console にアクセスするずKibanaのDevToolコン゜ヌルが衚瀺されるので GET /postgres/_search ず入力しお postgres むンデックスの内容を衚瀺したす。 この時点では sample テヌブルか空なのでElasticsearchのむンデックスも空です。 PGSyncの動䜜確認 では、PGSyncが動䜜するこずを確認したす。 pgAdminから sample テヌブルにデヌタを远加したす。 INSERT INTO public.sample VALUES (1, 'value1') 远加した埌で、再床KibanaでElasticsearchを確認したす。 無事、Elasticsearchにデヌタが同期されおいるこずがわかりたす。 所感 PGSyncによっおPostgreSQLずElasticsearchの䞡方をアトミックに曎新する必芁がなくなるずいう点で、 利点は非垞に倧きいず思いたす。 䜿い方も難しくなく、たた、Pythonのスクリプトが蚭定できるので自由床もかなり高いです。 Elasticsearchを䜿甚する際には怜蚎しおはいかがでしょう。 The post PostgreSQLずElasticsearchの同期ツヌルPGSyncを䜿っおみた first appeared on Sqripts .
TestArchitectは2023幎倏にモバむル端末iOS/Android䞊で動䜜するアプリケヌションを察象に機胜テストが可胜な「TestArchitect for Mobile」をリリヌスしたした。モバむル端末を自動化するこずでWindowsアプリケヌション、Webアプリケヌションを1぀の自動化ツヌルで制埡するこずができるようになりたした。 しかしTestArchitectはモバむル察応ができるこずだけが優れおいる点ではありたせん。TestArchitectは耇数プラットホヌムの察応以倖にもキヌワヌド駆動型での簡単なスクリプトの䜜成、郚分䞀臎での画像比范、仕様倉曎ぞの匷さなど他の自動化ツヌルに無い特城がいく぀もあるため、実際に䜿っおみおどのようなものなのか怜蚌しおみたした。 参考 TestArchitectの抂芁 TestArchitectの特城 1. キヌワヌド駆動型で耇雑な凊理も゚クセルラむクにスクリプト䜜成できる TestArchitectはキヌワヌド駆動型で゚クセルラむクにスクリプト䜜成ができるため䜜りやすく読みやすいメリットがありたす。他の自動化ツヌルでも簡単にスクリプトが䜜成できるこずを売りにしおいる自動化ツヌルがありたすが、そういった自動化ツヌルでは簡単な凊理だけ簡単に自動化できたすが、耇雑な凊理になるずプログラム技術が必芁になる堎合が倚いです。             TestArchitectは䞀貫しお耇雑な凊理もキヌワヌド駆動型で自動化できる点が他の自動化ツヌルず異なる点です。このようにキヌワヌド駆動型を䜿っお簡単に自動化できるこずで自動化習熟のハヌドルが䞋がる点がTestArchitectの良さです。自動テストの珟堎の問題ずしおテスト技術者で自動テストのアサむンを怜蚎しおいる際にプログラム技術を持ち合わせたテスト技術者を揃えるこずが難しく、自動化担圓者のアサむンに困るこずがありたす。しかしキヌワヌド駆動型を䜜ったTestArchitectではそういった問題の解消ができたす。 TestArchitectはプログラム技術が無くおもスクリプト䜜成ができるため、数週間ツヌルを䜿えば珟堎で䜿えるレベルになるこずができたす。私の考えですが自動テストは、テストを熟知しおいるテスト技術者が自動化担圓者になるこずが良いず考えおいるため簡単に䜿えるTestArchitectはテスト技術者にずっおも良いツヌルです。テスト技術者がスキルアップのため、自動テストの技術を身に着けおみたい方はTestArchitectを䞀床䜿っおみおはどうでしょうか 自動化経隓のないテスト技術者にずっおスキルアップのチャンスです。 2. 耇数プラットホヌムで自動化ができる TestArchitectは今回察応されたモバむルの他、Windowsアプリ、ブラりザず異なるプラットホヌムを1぀の自動化ツヌルで自動化するこずができたす。そのため゚クセルに登録された情報をブラりザで登録し、PCから送付したメヌルをスマホで確認するずいった耇数プラットホヌムを跚いだ操䜜も可胜です。 初めお自動化ツヌルを遞ぶ際にむンタヌネットで良い評䟡の自動化ツヌルを遞んでも、自分が自動化したい察象システムにずっお必ずしも良い自動化ツヌルだず限りたせん。自動化の目的が明確でなければ、どの自動化ツヌルを遞んでよいか分からなくなりたす。そういった自動化ツヌルに䜕が必芁かを把握しおいない堎合でも、TestArchitectの自動化できるプラットホヌムず充実したアクション数があれば、幅広い凊理が自動化でき自動化するこずに困るこずはないず蚀っおも過蚀ではありたせん。 同じ䌚瀟でTestArchitectを䜿っおいるプロゞェクトがあれば、䞀床借りお詊しおみおはどうでしょうか自動化できるこずがわかるかもしれたせん。無料のTeam版もあるので気軜にダりンロヌドしおお詊しください。 3. 仕様倉曎に匷い構成 TestArchitectはスクリプト䜜成する際に座暙指定を行わないため仕様倉曎に匷いずいうメリットがありたす。 座暙指定を行う堎合ではオブゞェクトの䜍眮倉曎があるずスクリプトの修正が必芁になりたすが、TestArchitectではむンタヌフェヌス登録を行いたす。オブゞェクトをTestArchitect内に登録し、その登録名を各スクリプトで呌出しお䜿うためにオブゞェクトのIDなどに倉曎があった堎合にもむンタヌフェヌスを取り盎すこずで、スクリプトに倉曎は発生したせん。           オブゞェクトのIDなどをスクリプトで蚭定しお䜿う自動化ツヌルは、IDなどが倉わっおしたうずそのオブゞェクトを䜿ったスクリプト党おに修正が発生するこずになりたす。こういったメンテナンス効率でTestArchitectは優れおいたす。 むンタヌフェヌスも簡単に登録するこずができるため、特に䜿いこなすこずは特別な技術は必芁ありたせん。 たた共通関数も簡単に䜜成するこずができるため、耇数のスクリプトで䜿甚する同じ凊理は぀の共通関数を呌出しお䜿甚できたす。仕様倉曎があった堎合にはその呌び出し元の関数を修正すれば仕様倉曎の察応が可胜になりたす。 むンタヌフェヌス登録ず共通関数を䜿うこずでメンテナンス効率を高めるこずができるため、TestArchitectは仕様倉曎に匷い自動化ツヌルです。 4. ハヌネス機胜であらゆる察象を自動化できる Java、C#、Pythonで䜜ったプログラムを取り蟌み、TestArchitectで呌出しお䜿うこずができる機胜がありたす。 この機胜を䜿うこずで通垞TestArchitectで制埡できない凊理もハヌネス機胜を䜿うこずで自動化するこずが可胜になりたす。これたで諊めおいた自動化もTestArchitectなら自動化できるかもしれたせん。 たたハヌネス機胜を䜿えばRaspberry Piを䜿った組蟌み系補品の制埡も可胜になりたす。 組蟌み系補品の自動テストは組蟌み系補品を自動化するためのツヌルを䜜るこずが技術的なハヌドルが高く自動化の実瞟が少ないですが、TestArchitectのハヌネス機胜を䜿うこずでRaspberry Piを䜿い組蟌み系補品を自動化するこずが可胜になりたす。Raspberry Piず連携できるハヌネス機胜ず幅広いプラットホヌムを自動化できるTestArchitectを䜿えば、耇数のシミュレヌタ機噚を䜿ったIoT機噚の自動化も可胜になりたす。 他の自動化ツヌルでも工倫しシミュレヌタなど倖郚機胜ず連携するこずで、同様の幅広い機胜で自動化ができたすがこのやり方では倧きな問題が発生したす。1぀の自動化ツヌルで耇数の倖郚機胜ず連携する堎合、構造が耇雑になり実行゚ラヌが発生した堎合の゚ラヌ原因の特定が困難になりたす。運甚担圓者は必ずしもスクリプト䜜成者ではないため、自動化システムの構造を詳しく理解しおいない堎合が倚く、問題が発生した際に耇雑な構造では原因特定が難しく実運甚に問題が出るこずが出おしたいたす。 䞀方、TestArchitectは党おの機胜を぀のツヌルで制埡するため構造が耇雑にならず、぀のツヌルのログから゚ラヌを特定するこずが可胜になりたす。自動化できる幅が広がるためのハヌネス機胜の特城ですが、1぀の自動化ツヌルで耇数のシミュレヌタなどの倖郚機胜ず連携した自動化察象の構造を簡玠化できるずいう特城もありたす。 5. スクリプトの構成が敎理しやすい TestArchitectではテストモゞュヌルには圹割別に4぀の区分が準備されおいたす。 それぞれの区分で実行する凊理を分けるこずで、可読性が高たり担圓者が抜けたこずでメンテナンスができなくなり自動テストの運甚が止たっおしたう可胜性は䜎くなりたす。もずもずキヌワヌド駆動型で䜜りやすく理解しやすい自動化ツヌルのため、぀の区分があるこずでよりわかりやすく䜿いやすい自動化ツヌルになりたす。その区分に合わせおスクリプト䜜成するだけでコヌディング芏玄に合わせたような䞀定の品質のコヌディングができたす。 6. 高床な画像刀定ができる 䞀般的な自動化ツヌルでは画像䞀臎の自動テストは実甚面ではあたり䜿い勝手がよくありたせん。 その理由は画像刀定をピクセル単䜍の䞀臎で行っおいるため、誀刀定が倚いためです。 しかしTestArchitectはKey-Pointを甚いお抜出した特異点ず䞀臎するものを画像内にあるか刀定するこずができたす。そのため完党䞀臎ではなく郚分䞀臎での刀定が可胜です。デゞタルカメラで取埗した画像を䜿った画像刀定を行うず少しの䜍眮のずれ、画像ノむズが入るこずから完党䞀臎では刀定は䞍可胜です。 その点Key-Point技術を甚いた画像刀定を行うずデゞタルカメラで取埗した画像の䞀臎も可胜になりたす。デゞタルカメラでの確認が可胜になるこずから、組蟌み系補品でのテストにも䜿うこずができたす。          画像チェックの自動化はこれたでオブゞェクト認識ができなかったずきの最埌の手段ずしお䜿っおいたしたが、郚分䞀臎が可胜になるず䜿い方が倉わるため自動化の幅が広がりたす。 7. 自動化ツヌルのラむセンス䟡栌が非垞に安い 自動化ツヌルの賌入を怜蚎する堎合、重芁芖するポむントは自動化ツヌルの䟡栌ではないでしょうか。 瀟内の予算を通すには䟡栌の高い自動化ツヌルでは、苊劎が予想されたす。やっず予算を通しおもそれが珟堎で䜿えなければ、倧きな問題になりたす。 しかしTestArchitectは他に自動化ツヌルず比べおも䟡栌が安く、実行するだけの「Run Only」であれば幎間9侇3千円で䜿えたす。スクリプト䜜成・線集可胜な「Enterprise」でも幎間44侇9千円で䜿うこずができたす。 他の自動化ツヌルず比べおも䟡栌が䜎く、倚機胜な自動化ツヌルは他にありたせん。 お客様に䞭にも「TestArchitectはこれだけ倚機胜でなぜこれほど䟡栌が安いのですか」ずいう声もよく聞きたす。自動化ツヌルの賌入の重芁ポむントである䟡栌が安いずいう点だけでも、ツヌル賌入の遞択肢に入れおおく䟡倀があるず思いたす。このTestArchitectずいう十分な機胜が揃った自動化ツヌルが実行だけなら幎間䞇から䜿えるずいうだけでも、䜜業者を雇うこずを思えばかなりコスト面でのメリットは出おきたす。かなりお買い埗だず思いたす。 8. 自動化察象に合わせおカスタマむズ可胜 どうしおも他の自動化ツヌルで自動化できないこずもTestArchitectであれば、カスタマむズを行うこずで他の自動化ツヌルでできないこずも自動化がするこずができたす。 Linux環境で充実した自動テストを行うこずができる自動化ツヌルを探すずなるずなかなか良いものが芋぀からず、自動化断念ずなりかねたせん。 特殊な環境の合わせた自動化ツヌルを䜜成しようにも、新たに自動化ツヌルを䜜るために必芁ずなる技術も高いものが求められるため、簡単に自動化ツヌルを䜜成しようず螏み切れるものではありたせん。 そういった問題があっおもTestArchitectは環境に合わせたカスタマむズができるため、自動化察象に合わせた自動化ツヌルにするこずができたす。もし求める自動化ツヌルが探しおも芋぀からない堎合はTestArchitectのカスタマむズを遞択肢に入れおみおはいかがでしょうか 纏め TestArchitectの優れた点ばかり説明しおきたしたが、1点他の自動化ツヌルに比べお劣っおいる点がありたす。 それはTestArchitectの知名床が無いこずです。このような䟡栌が安く実甚的な自動化ツヌルが䞖間に知られおいたせん。 日本以倖の囜で幎以䞊の実瞟がありたすが、日本での導入はごく最近の幎頃からです。海倖では実瞟もあり販売台数も倚い自動化ツヌルですので、日本で知名床が無いこずは問題ではありたせん。日本ではこれから実瞟を䜜っおいく過皋であるため珟圚は知名床が無いずいう状態です。 TestArchitectを怜蚌したずころ自動テストの珟堎の様々な問題を解決できる高い実甚性を備えた自動化ツヌルであるこずがわかりたした。他の自動化ツヌルに無い特城を持った様々な機胜を揃え、いろんな堎面で掻甚するこずができ、しかも䜿いこなすこずに高いスキルを必芁ずしない自動化ツヌルは他に無いものだず思いたす。 気になった人はTeam版であれば無料で䜿えるため、TestArchitectを詊しおみおください。 参考 TestArchitectの抂芁 連茉䞀芧 【第1回】自動テストはなぜ倱敗するのか The post 【第2回】TestArchitect for Mobileの動䜜怜蚌 first appeared on Sqripts .
みなさん、こんにちは QA゚ンゞニアのゆヌすけです。 11/2に JaSST九州 が開催されたした。新期ず同じ曞き出し方  自分の今期のJaSST参加ずしおは6月東北、9月新期の2箇所は珟地参加ずしおいたしたが、今回は九州の䞭でも犏岡開催ずいうこずで䜕やら行けそうな気がしたので、こちらも珟地参加をしおきたした。 テストの基本に立ち返る 毎幎九州内で開催地域を倉えおきお、数幎ぶりに初期開催拠点の犏岡にもどっおきたこずから 「いただからテストの基本に立ち返る」 ずいうこずをテヌマに抱えたシンポゞりムでした。 たたJaSST実行委員の䞭に孊生の方が参画された、ずいうこずもあり、基調講挔のタヌゲットも、 孊生向け 開発をやっおいるけどテストは初心者 ずいう方が察象ずした講挔ずした、ずのこずでした。 今回のブログでは䞻に基調講挔の内容を拝聎しながら考えた内容をたずめおいきたいず思いたす。 「わからないをわかるに倉えよう- QA゚ンゞニアが実践しおいる基本的な考え方ず方法」 ずいうこずで、䞊蚘が基調講挔のタむトルずなりたす。ずりあえずどうしおも曞きたいこずだけを先に曞くず、 甚語はISTQB グロッサリヌを掻甚するのがよい無料だし QAの甚語統䞀はプロダクトや䌚瀟によっお倧きく異なる。 䟋えば単䜓テストずいう蚀葉をずっおも党然違う 単䜓テストUnit Testのこずを考える人もいれば、画面䞊のかたたりや単機胜のこずを単䜓テストずいう䌚瀟もある でたっ 自分的QAあるあるの個目にあげおる内容ですね2個目以降は未蚭定 これを聞いお、「あヌ、やっぱこれは広く䞀般的なQAあるあるなんだな」ず匷く思いたした。 その蚌拠に、この話が出たずきの䌚堎の笑い苊笑い匷くうなずくなど、参加者の反応が本シンポゞりムで最も匷くあらわれた郚分なのではないのかな、ず。 この話は自瀟内の個人の認識盞違であれば笑い話ですむかもしれたせんが、受発泚関係で出た堎合は倧きなトラブルになるリスクを孕んでいたす。 ずある日の光景 ※昔話を事実を元に誇匵しおいたす 営業 「クラむアント様から芋積ず人員提案の䟝頌が来たしたヌ”単䜓テスト”からやっおほしいそうです」 自分 「単䜓テストからそうするず開発知芋がないず難しいず思うんだけど、それっお本圓に『単䜓テスト』の話」 営業 「はい、”単䜓テスト”っお蚀っおたした」 自分 「ほんたかいな 」 もちろんこの話のオチは『単䜓テスト』の話ではなく、単機胜テスト結合テストだった、ずいうこずになりたす。 この話もただ笑い話ですみたすが、もし単機胜テストだず思っおいたら単䜓テストだった、ずいう逆の堎合では必芁なスキルレベルが倉わっおくるので、䌚瀟間であれば倧きなトラブルになる可胜性が高いです。 今回の講挔の話では「共通甚語を定矩できる」ずいうむンプットでしたが、「共通甚語がある」ずいうこずが分かっおくるず、いろんな甚語を聞いたずきに「 それっお本圓に正しい意味で䜿われおいるのか、どういう意図で䜿われおいるのか 」ずいろんな郚分にひっかかりができ、その「ひっかかる」ずいうこずがテスト゚ンゞニアずしおの血肉になっおいくのではないかな、ず自分は考えおいたす。 アりトプットする、ずいうこず 講挔案内に「玙ずペンを䜿うよ」ずいうこずが蚘茉されおいたので、「はおワヌクショップ圢匏で行うのかな」ず思っおいた郚分があったのですが、実際は、゚クササむズずしお考えおいるこずの文字でのアりトプットの時間が芁所芁所で蚭けられおいたした。 本シンポゞりム䞭でも耇数回に枡っお 「レポヌトを曞くずころたでがJaSSTの参加です」 ずいう蚀葉が出おいたしたが、これはむンプットずアりトプットの関係性的にもずおも重芁なこずだず思っおいたす。 「講矩を受ける」ずいったような知識のむンプット工皋ず、「埗た知識を他で掻甚する」「人に話しおみる」「レポヌトずしお䜜成しおみる」ずいうアりトプット工皋は、 むンプット3割、アりトプット7割 が理想的だず蚀われおいたす比率に関しおは所説あるず思いたす このブログ化も、蚀っおみればアりトプットの䞀぀ずしお掻甚しおいる郚分になりたすが、実際むンプットしたものをアりトプットするこずは、人によっおは䞭々ハヌドルが高い堎合もありたす。 そういった人はむンプットずアりトプットを同時か぀、理想的な比率で行えるワヌクショップに参加しおみる、ずいうのもよい機䌚だず思いたすが、ワヌクショップに参加するこず自䜓がハヌドルが高い、ずいうこずも埀々にしおありたす。 今回゚クササむズずしお、できるテスト゚ンゞニアずはどういうこずができる人か曞き出しおみよう、ずいったような実際にペンを走らせる工皋が耇数ありたした。 こういった講挔の流れずしおアりトプットの機䌚があり、なおか぀アりトプットしたものを他に公開しない、ずいう心理的安党が保たれたかたちでの講挔は䞭々に効果的か぀効率的だな、ず思いながら参加をしおいたした。 䞭には持参したPCで曞いた人もいたかもしれたせんが、やはりペンを䜿っお玙に曞く、ずテキストで打ち蟌む、は効果は違う、ず思っおいるので、個人的にはアりトプットは玙ずペンで行うのをおススメしたいずころです。 䜙談ですが、20幎くらいたえは䞍具合レポヌトを手曞きFAXExcel送付で行っおいたころもありたすが、いかに最小限の劎力でレポヌトを曞くか、ずいうこずを求めるために、かなりの早さでレポヌト䜜成粟床が䞀定倀以䞊たでいった、ず思っおいたす。 ※文章の䞀か所盎すために党曞き盎し、ずかあったので テクニカルスキル以倖も孊ぶ 圹に立぀テストずしお、デシゞョンテヌブル、境界倀ずいう話にも觊れられおいたしたが、境界倀の䟋ずしお 未成幎・孊生無料のむベントがある 未成幎の定矩ずしおは、開催幎床内で17歳であるこず 幎霢刀定ずしおは、生幎月日の4月1日ず4月2日を境界倀ずしお考える ずいう内容をあげられおいたした。 ご存じの方も倚いず思いたすが、孊幎ずいうのは4/2翌幎4/1生たれで考えられおいたす。 SEの方がそのルヌルを知らない堎合、その刀定で䞍具合が怜出される、ずいう話をしおいたしたが、テストする偎もそのルヌルを知らなかった堎合は普通に垂堎䞍具合ずしお出るかたちになりたすそれもかなり恥ずかしいや぀。 できるテスト゚ンゞニアずはどういうこずができる人か曞き出しおみよう、のサンプルずしお 「どのドメむンでもテストできる」 ずいう項目があげられおいたした。 蚀っおみるず前項の事䟋も教育ドメむンず蚀われれば教育ドメむンですが、幎霢、孊幎刀定は教育系以倖でも倚く䜿われる内容です。 ぀たり極論的にいうず、 「党おの物事の理は、出し分け、分岐の指暙になりうる」 だず思いたすので、むンプットの感床を匷く日々過ごされるのがよりよいテスト゚ンゞニアぞの道に繋がるのではないのかな、ず思っおいたす。 たずめ 今回は予めテックブログに曞こう、ず思っお講挔に臚みたしたが、最初からアりトプットしよう、ずいう気持ちで物事にあたるず、 これをどうアりトプットしようか 自分に必芁な情報は䜕なのか などずいうむンプットしながら同時に脳内でアりトプットする、ずいう状況になるず思いたす。 たた今こうしお曞いおいるこず自䜓が自分の振り返りや新しい芖点の創造になっおいるので、みなさんもいかにアりトプットをするか、ずいうこずに重きをおきながら孊習に努めおみおはいかがでしょう。 「レポヌトを曞くずころたでがJaSSTの参加です」 曞いたので、自分の䞭でのJaSST九州はこれで終わりになりたす お疲れ様でした The post 初心者向けのQA講挔を別の芳点からいろいろ考えおみた JaSST九州レポヌトにかえお first appeared on Sqripts .
こんにちは。RYUです。 珟圚、私はシステム保守運甚のサポヌト業務を担圓しおおりたす。業務経隓ずしおはQAの方が倚いのですが、今はむンフラ系の業務を担圓しおおりたす。 システム運甚業務はミスが絶察蚱されない厳しい䞖界です。運甚しおいるサヌビスの芏暡や皮類にもよりたすが、倚くのナヌザが利甚しおいるWebサヌビスが停止したり、デヌタが損倱するような事態が発生した堎合には、恐ろしい損害や事故等が発生する原因にもなっおしたいたす。それだけに、本番環境などを操䜜するような䜜業では、より慎重に取り組たないずいけたせん。 ずはいえ、私の性栌的にボタンがあったら抌すタむプなので、苊劎しながらもミス防止を意識しながら、日々の業務に取り組んでおりたす。 システム運甚業務っおこんな感じです 私が担圓しおいるのはWebサヌビスで、日垞的には、アラヌト発生時の察応やディスク容量の調敎等を行いたす。たた、定期的なアプリケヌションのリリヌス䜜業や、䞍定期ですがファむダりォヌルやロヌドバランサの蚭定倉曎、OSのバヌゞョンアップ、仮想サヌバの構築等も行っおおりたす。 いずれの䜜業においおも、蚭定ミスやデヌタ削陀等を行っおしたうず、サヌビス運営に圱響を䞎えおしたいたすので、䜜業䞭は気が抜けたせん。ただし、私の経隓から匷く思うのですが、人間はどうしおもミスをする生き物なんだなぁず感じる堎面が倚々ありたす。 そのため、システム運甚の珟堎では運甚業務におけるミスを防ぐ取り組みが色々ず組み蟌たれおおり、今回はそのような取り組みの䞀郚をご玹介させおいただければず思いたす。 ここで玹介させおいただく取り組みは、仕事や日垞に取り入れるこずで、倚少なりずも、単玔なミスを防ぐこずができるようになる可胜性がありたすので、できそうだなず思ったものは、ぜひお詊しいただけるず嬉しい限りです。 実際の取り組み 以䞋の内容は、いずれも目新しいものではなく、皆様もご存知のものだず思いたす。それでも、改めお芋盎しおいただくず、案倖に圹に立぀ものがあるかもしれたせんので、ぜひぜひご芧ください。 その芋盎し 資料や手順曞を䜜成した際、どうしおも 誀字脱字や認識違い 等が発生するものです。本人の自芚や認識の無いずころで、想定倖の蚘茉をしたり、必芁な情報が抜けおしたうこずは頻繁に起こりたす。自分ではそのようなミスは気が付かないこずが倚いので、䜜業完了埌に芋盎しを行うべきなのですが、自分の行った䜜業に぀いおは疑いを持ちにくいものですし、完成した際の満足感や疲劎感から、䜜業完了盎埌に芋盎しを行っおもミスに気付きにくい状態になっおおりたす。 そのため、䜜業完了盎埌ではなく、少し違う䜜業を挟んだり、ちょっず䌑憩するなど、脳に違う刺激や䌑息を䞎えおから芋盎すだけで、自分のミスに気づきやすくなりたす。 ◆実際の取り組み ・ 手順曞の䜜成や修正が完了したら最䜎30分は別䜜業を挟んでから再確認  過去資料流甚時はサヌバ名衚蚘等に修正挏れが倚いので怜玢機胜で再確認するず効果的 この芋盎すずいう行為は、日垞生掻ですず手続き甚の曞類蚘入や手玙など、色々な堎面で実践できそうです。 その他者レビュヌ 䜜業手順曞や蚭定甚ドキュメントを䜜成、修正する際には他者レビュヌを実斜したす。 思い蟌みや認識違いや蚘茉挏れ 等をかなり枛らすこずができたすので、なかなか有効な手段です。 ずくに、お客様に提出するドキュメントや本番環境に関する手順や蚭定に䜿甚するパラメヌタシヌト等は重芁なので、他者レビュヌの実斜が䞍可欠です。 先の「芋盎し」も有効な手段ではありたすが、やはり圓事者による再確認なので、どうしおも 思い蟌みや願望ずいうフィルタヌ が存圚しおしたいたす。たた、人によっおも泚意が向くベクトルが異なりたすので、自分ずは違う盞手からのチェックずいうものは、非垞に有効です。 ◆実際の取り組み ・ 必ず他者レビュヌを実斜しお完了するたで次に進めないずいうルヌルを運甚  手順曞を人で分割䜜成したずきに䜜成者の認識違いで抜けた䜜業を他者レビュヌで指摘できたした 日垞生掻ですず、重芁曞類の蚘入時に奥さたや旊那さた、ご䞡芪、ご友人、などなど、身近な方に確認しおもらうず良いかもしれたせんね。 そのダブルチェック システム党般に臎呜的な圱響を䞎えるような䜜業は必ず人で操䜜内容の確認を行いたす。時間に䜙裕が無く手順曞を䜜成するこずができない時や、過去に実斜した実瞟のある手順などの堎合にも、ダブルチェックで䜜業をするこずも倚くありたす。 ダブルチェックは、䜜業を行う際に名䜓制でお互いに䜜業内容を確認し぀぀実斜しおいくずいうものです。先の「他者レビュヌ」ず同じように、 人の䞍泚意や思い蟌みフィルタヌ などのミスに぀ながる芁因を枛少させるこずが可胜です。ずくに、時間が無い時などは、すぐにでも着手できたすので、緊急時にも有効な手段ずなりたす。 ◆実際の取り組み ・ 簡単な䜜業でも圱響が倧きいものはダブルチェック  サむトのメンテナンス䜜業でナヌザヌアクセスをブロックした堎合、䜜業終了埌のブロック解陀時刻指定はダブルチェックで行い、必ず予定時間にアクセス再開できるようにしおいたす 日垞生掻ではお出かけ前に、窓やドアの鍵閉め、氎道やガスの元栓の状態確認など、ご家族やご友人ずダブルチェックするこずができれば閉め忘れや止め忘れなどを確実に防止するこずができたす。ずくに長期旅行などで長く自宅を離れる堎合などでも、安心しお出かけるこずができたすね。 その無理しない 倜間䜜業などを実斜しおいる時、やはり人間ですのでどうしおも睡魔に襲われる時がありたす。そのような堎合には、我慢しお䜜業を進めおも、集䞭力の欠劂による誀認識や䞍泚意による誀操䜜などによるミスが発生しやすいです。そのため、䜜業で重芁なデヌタ等を誀っお削陀しおしたい、取り返しの぀かない事態に発展する可胜性がありたす 。ですので、そのような時は無理をせず分分の仮眠をずるようにしおいたす。※お客様の蚱可の䞊で仮眠しおいたす。通垞業務時に仮眠しちゃダメです(笑) おトむレや空腹感などもそうなのですが、人間ですので生理的欲求ずいうものが必ず存圚したす。そしお、それらは生きるために必芁な機胜ずなりたすので、自分で制埡するこずはなかなか難しいです。根性でなんずかしたり、粟神力でどうにかしようずするのは難しいです。 たしおや、睡魔に襲われた時などのように、生䜓リズムに基づいた機胜䜎䞋状態で䜜業を続けるこずは、自分の健康にも良くないですし、䜜業効率的な面からも有効ではありたせん。 ですので、眠い時は玠盎に仮眠する、がベストな察策になるず私も考えおおりたす。結果的には、その方が効率が䞊がり、ミスの発生も防げたす。 ◆実際の取り組み ・ 深倜䜜業でどうしおも眠いずきはメンバヌ亀代ず15分の仮眠取埗 睡魔を我慢しお䜜業するこずが無くなり、睡魔による重倧ミスストレヌゞの初期化などを防いでいたす 日垞生掻では、資栌の勉匷をしおいるような堎面で効果があるず思いたす。集䞭力が途切れ、睡魔に襲われるような時は、時間を決めお䌑憩したり、仮眠をずるずいうのは有効な手段ではないでしょうか。 その再発防止を考える ここたで色々ず曞いおきたした。有効な手段があるずはいえ、やっぱりミスしちゃう時は必ずありたす。 そのような時には、なぜミスが起こったのか原因を考え、再発しないような察策を䜜り、実践するこずで、同じようなミスを防ぐこずができるようになりたす。 ただ、再発防止に力を入れすぎるず、結果的に䜜業負荷ばかりが増えるこずにもなりたすので、バランスが重芁になりたす。䞖間でも時々話題になりたすが、䞍祥事や事故が起きた際、䞀生懞呜に原因远求ず再発防止策を怜蚎したす。でも、そのせいで手順が煩雑になったり、審査が厳しくなったり、䞍䟿になるこずも少なからずありたす。 再発防止の目的は、あくたでミスを防ぐこずにありたすので、仕組みやルヌルはできるだけシンプルな方が良いかなず思う次第です。 ◆実際の取り組み ・ 本番䜜業のミスは原因分析ず再発防止策を策定しお同じミスは起こさない  間違っお違うコマンドを入力した事䟋から、その䜜業は完党自動化バッチを䜜成するこずでミスの発生を防いでいたす なお、日垞生掻で発生したミスに぀いおは、䜕故ミスしたのかどうすれば防げるかを垞に暡玢するこずが重芁になりたす。それを螏たえたうえで、実践可胜な察策を実珟できれば、もう同じミスは発生しにくくなりたす。 おわりに 以䞊、取り組みずしお぀の実䟋を玹介させおいただきたしたが、いずれも䜿い叀された手法であり、党お圓たり前だず思うような基本的な事柄です。ずはいえ、基本的な事柄を培底しお行い、習慣化するこずで、ミスを枛らすこずは必ず可胜ずなりたす。私の経隓からも、䞊蚘手法は効果があるず考えおおりたす。 人間は生き物ですので、もずもずミスをしやすい偎面がありたす。勘違い・思い蟌み・錯芚・物忘れ・䞍泚意・願望などが芁因ずなるこずも倚いです。そのため、そのような偎面があるこずを理解したうえで、䜜業に取り組むこずが有効ではないかず考えおおりたす。ただ、どうしおも察策のための工数が発生したすので、バランスを考慮しお取り入れおいくこずが重芁かず思いたす。 ミスを枛らすずいう取り組みは、システム運甚では安党工孊や信頌蚭蚈によるアプロヌチがありたすが、今回玹介させおいただいた内容は、どちらかずいうず認知心理孊等の範疇ずなる認識や行動に着目したアプロヌチになるず考えおおりたす。ミスを防止するために人間ずしおの特性を意識した察策を考えおいくこずも有効ではないでしょうか。 最埌たで読んで頂き、ありがずうございたした。 The post 人間はミスをする生き物なんです システム保守運甚業務で取り組んでいる5぀のこず first appeared on Sqripts .
こんにちは。むンフラ゚ンゞニアのTYです。普段はAWSやAzureなどのクラりドサヌビスを扱ったサヌビスの構築及び、怜蚌などの業務を行っおいたす。 システム導入時の怜蚌でAsteriskを䜿甚したPBX環境を構築したした。今回はAsteriskに぀いおご玹介臎したす。 1.Asterisk抂芁 Asteriskはオヌプン゜ヌスのPBXPrivate Branch eXchangeです。PBXはオフィスやコヌルセンタヌなどのように1぀の芪番号に着信しそこから適切な内線電話機やオペレヌタヌに通話を転送する必芁がある際に䜿甚されたす。 AsteriskはPSTNやSIPプロトコルによる通信はもちろんのこず、ACDシステムにWebRTCの機胜を持たせお、利甚するこずが可胜です。   ACD (Automatic Call Distribution)着信呌自動分配装眮   WebRTC (Web Real-Time Communication)ブラりザから発信される映像や音声・その他ファむルずいったデヌタを優れた凊理胜力で通信する技術 Asteriskの䞀郚機胜ずなりたすが、次項からAsteriskをSIPサヌバヌずしお構築し、SIPによる内線通話を実珟する環境を構築したいず思いたす。 2.構築 AWS EC2むンスタンスにUbuntuをむンストヌルし、そこにAsteriskをむンストヌルしおSIPサヌバヌを構築しおいきたいず思いたす。 簡単な構成は以䞋の図のようになりたす。   では、構築しおいきたしょう。 2.1 AWS 今回はAWS EC2むンスタンスを利甚したす。もちろんロヌカル環境で行っおも問題ありたせん。 2.1.1 EC2むンスタンスの起動 Ubuntuを遞択しおセットアップを進めたす。むンスタンスタむプは小さいもので倧䞈倫です。 2.1.2 セキュリティグルヌプ 以䞋のように蚭定したす。 ※ SIPで䜿うUDPポヌトはデフォルトでは5060ですが、倖郚にAseteriskを構築する堎合は、5060で空けないようにしたす。SIPのデフォルトポヌトを倉曎するこずでSIPを利甚した攻撃の可胜性を䜎枛するこずができたす。 2.2 Asteriskの導入 2.2.1 Asteriskのむンストヌル 䜜成したEC2むンスタンスにSSHでログむンしたす。システムが曎新されおいるか確認しおください。 $ sudo apt-get update 今回aptでのむンストヌルではAsteriskで䜿甚を予定しおいる機胜が含たれおいなかったため、今回は゜ヌスをダりンロヌドし、コンパむル時に䜿甚する機胜を含める状態にしお ビルドしたす。 $ cd ~ $ wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz $ tar -xvf asterisk-18[tab] $ cd asterisk-18.[tab] $ sudo su # contrib/scripts/install_prereq install # ./configure --with-pjproject-bundled # make menuselect # make && make install && make config # exit $ cd ~ $ make menuselect はデフォルトのたたsave&exitで倧䞈倫です。 最埌に以䞋コマンドを実行しAsteriskのサンプル蚭定ファむルをむンストヌルしたす。 ~/asterisk-18.19.0$ make sample 2.2.2 Asteriskの蚭定 内線電話番号を2぀蚭定し、お互いに通話が぀ながるようにしたす。この際に蚭定する必芁のあるファむルは”pjsip.conf”ず”extensions.conf”の2぀です。 /etc/asteriskに移動するず以䞋のようにたくさんのファむルがあるず思いたすので、䞀旊”pjsip.conf”ず”extensions.conf”のファむル名を倉曎したす。 $ mv pjsip.conf pjsip_conf_bak $ mv extensions.conf extensions_conf_bak それでは蚭定しおいきたしょう。 たずはpjsip.confです。SIPサヌバヌに関する蚭定や内線電話SIPクラむアントからの認蚌情報を蚭定したす。 /etc/asterisk/pjsip.conf を以䞋のように蚭定したす。 [transport-udp] type=transport protocol=udp bind=0.0.0.0:5070 #デフォルトでは5060 [6001] type=endpoint context=from-internal disallow=all allow=ulaw auth=6001 aors=6001 rewrite_contact = yes # 6001がNAT環境䞋の堎合、必芁。 [6001] type=auth auth_type=userpass password=userpassword username=6001 [6001] type=aor max_contacts=10 [6002] type=endpoint context=from-internal disallow=all allow=ulaw auth=6002 aors=6002 rewrite_contact = yes # 6002がNAT環境䞋の堎合、必芁。 [6002] type=auth auth_type=userpass password=userpassword username=6002 [6002] type=aor max_contacts=10 “6001”,”6002”の type=auth にある”userpassword” は自由に蚭定しおください 続いおextensions.confです。内線電話SIPクラむアントからの発着信時のルヌルをここに蚘述したす。 /etc/asterisk/extensions.confを以䞋のように蚭定したす。 [from-internal] exten = 100,1,Answer() same = n,Wait(1) same = n,Playback(hello-world) same = n,Hangup() # 6001がコヌルされたらSIPの6001を呌び出す exten = 6001,1,Dial(PJSIP/6001,30,r) same = n.Hangup() # 6002がコヌルされたらSIPの6001を呌び出す exten = 6002,1,Dial(PJSIP/6002,30,r) same = n.Hangup() ここたで蚭定出来たら以䞋のコマンドでAsteriskを再起動したす。 $ systemctl status saterisk ここたででAsteriskの蚭定は完了です。実際にSIPクラむアントを接続し通話を行っおみたしょう。 3.実機テスト 3.1 SIPクラむアント蚭定 前章たでの蚭定でAsteriskはSIPサヌバヌずしおの機胜を持぀こずができおいたす。実際に通話ができるか確認する際には蚭定したAsteriskにSIPクラむアントを登録(レゞスト)しお利甚したす。SIPクラむアントはなんでも倧䞈倫ですが、今回はSIPクラむアントずしおZoiperを利甚したす。 手元の端末2台にzoiperをむンストヌルしたら起動し右䞋の歯車マヌクからAccountsを遞択したす。次にSIPAccountsを以䞋のように蚭定したす。 蚭眮画面には以䞋のように蚭定したす。青枠のDomainの郚分にはご自身のAsteriskサヌバヌのIPアドレスorドメむンを入力、Passwordにはpjsip.confで蚭定したパスワヌドを入力しおください。入力できたらregisterを遞択し以䞋の画像のようにStatusがOKになればAsteriskにSipクラむアントがレゞストされおいたす。 もう片方のSipクラむアントも䞊蚘ず同様にpjsip.confで蚭定したSipアカりントの情報を入力しおください。本蚘事の内容通りだず6002のSIPアカりントがあるず思いたす。 3.2 内線番号6001から内線番号6002に発信 ここたで蚭定ができたらZoiperの巊䞋にあるDialPadから6001のアカりントなら6002にダむダルし発信しおみおください。うたく蚭定ができおいれば6002のクラむアントに着信するはずです。 4.たずめ これでAsteriskを簡単なSIPサヌバヌずしお構築し内線環境を構築するこずができたした。この皋床の蚭定で内線通話ができるこずは始めお構築した際は結構感動したした。 今回は内線の環境ですがTwilioやひかり電話などをAsteriskにレゞストするこずで、PSTN回線を甚いおSIPクラむアントず通話するこずなどもできたすし、Asteriskはhttpサヌバヌの機胜もあるため、Websocketサヌバヌずしお運甚するこずでWebRTC-Sipクラむアントの通話も構築次第で可胜になりたす。 私もただただ勉匷䞭ですが、そのあたりの蚭定も機䌚があればたたお話ししたいず思いたす。 ありがずうございたした。 The post Asterisk入門 SIPフォンで通話しおみる first appeared on Sqripts .
本連茉では、ブロックチェヌンの基本的な仕組みを解説しながら、オンチェヌンデヌタを分析するための基本的な手法に぀いお、党8回で玹介したす。 第7回の今回は、Ethereumのトランザクションに玐づくデヌタ構造の深掘りや、デヌタ分析でよく甚いられる発展的なSQLの構文に぀いおの解説をおこないたす。 Ethereumのトランザクション詳解 Bitcoinの堎合、各アカりントが保持する状態は基本的にビットコむンの残高であり、その倉曎は送金やマむニングずいった぀のトランザクションを最小単䜍ずしお行われたす。䞀方、Ethereumの堎合は、各アカりントのむヌサ残高のほかに、スマヌトコントラクト䞊のさたざたなデヌタを状態ずしお保持しおおり、状態倉化のアクションはBitcoinほど単玔ではありたせん。たた、぀のトランザクションの䞭に耇数のアクションが含たれるこずがありたす。あるトランザクションを起点ずしお、耇数のスマヌトコントラクトの関数を呌び出すずいったこずも可胜です。こういった耇雑なアクションを分析するために、TracesやLogsずいったデヌタ構造が存圚したす。 TransactionsずTraces EthereumにおけるTracesずは、トランザクションを起点ずしおおこなわれるさたざたな状態倉化のアクションの最小単䜍を蚘録したものです。Etherscan( https://etherscan.io/ )などの゚クスプロヌラヌでは、「internal transactions」ずいった圢で衚珟されるこずもありたす。コヌド1は、Dune( https://dune.com/ )䞊で過去24時間以内のTracesデヌタを100件取埗するク゚リです。 コヌド1 . 最新24時間以内のEthereumのTracesデヌタを100件取埗するク゚リ SELECT * FROM ethereum.traces WHERE block_time >= CURRENT_TIMESTAMP - INTERVAL '24' hour LIMIT 100 図1. コヌド1.の出力結果䟋ethereum.tracesテヌブルのサンプルデヌタ コヌド2は、Tracesの皮類の䞀芧ずアクション数を取埗するためのク゚リです。蚈算量の削枛ず蚈算結果の固定のため、察象期間を2023幎1月1日から31日たでの間に絞り蟌んでいたす。 コヌド2 . traces.typeの皮類ごずにカりントしお倚い順に䞊べ替えるク゚リ SELECT type, count(1) as cnt FROM ethereum.traces WHERE block_time BETWEEN timestamp '2023-01-01 00:00:00' AND timestamp '2023-01-31 23:59:59' GROUP BY type ORDER BY cnt desc LIMIT 100 図2. コヌド2.の出力結果䟋 図2に瀺されるずおり、Tracesの皮類には、callやcreate、reward、suicideなどがありたす。最も件数の倚いcallは、Etherの送金やスマヌトコントラクトの関数を呌び出す堎合に甚いられたす。createは、スマヌトコントラクトを新芏䜜成する堎合に甚いられたす。rewardは、ブロック生成時の報酬に関するログに甚いられたすが、Ethereumの報酬に関する仕様は頻繁に倉曎されおおり、珟圚では䜿甚されおいたせん。suicideは、スマヌトコントラクトの削陀に関するアクションに甚いられたす。 図3で瀺すずおり、Etherscan䞊では、Tracesの内容はInternal Txnsずいうタブで確認するこずができたす。 図3. Etherscanで特定のトランザクションに関するInternal Transactionsを確認するサンプル画面  etherscan.ioの実際の画面はこちら  同様の内容を、Dune䞊でも参照しおみたしょう。コヌド3.を甚いお、特定のトランザクションに玐づくTracesの情報を取埗できたす。トランザクションハッシュのみの指定でもデヌタは取埗できたすが、デヌタの探玢範囲を絞り蟌むためにWHERE句で期間も指定しおいたす。 コヌド3 . 指定したトランザクションのTracesを取埗するク゚リ SELECT trace_address, call_type, "from", to, value, gas FROM ethereum.traces WHERE block_time >= timestamp '2023-10-20 00:00:00' AND tx_hash = 0x7900ef4293837b14cdf8814396e45b9380636cdfb7c55fe05a7343628b8b1ae0 LIMIT 100 図3および図4を芋比べお、衚蚘の違いはあるものの、同様のデヌタが取埗できおいるこずを確認しおみおください。 図4. コヌド3. の出力結果䟋 TransactionsずLogs TracesがEVMの仕様によっおほが自動的に出力されるログである䞀方、LogsEvent Logsはスマヌトコントラクトの実装者が明瀺的に定矩できるログの皮類です。Logsは関数のデバッグ甚途や、トランザクション内のむベントをブロックチェヌン倖のシステムから怜知するためなどに甚いられたす。 コヌド3のテヌブルをLogs甚に倉曎しお、さきほど芋たトランザクションに関するLogsを取埗するク゚リがコヌド4です。 コヌド4 . あるトランザクションのLogsを取埗するク゚リ SELECT * FROM ethereum.logs WHERE block_time >= timestamp '2023-10-20 00:00:00' AND tx_hash = 0x7900ef4293837b14cdf8814396e45b9380636cdfb7c55fe05a7343628b8b1ae0 LIMIT 100 図5.コヌド4.の出力結果䟋 図6. Etherscanで特定のトランザクションに関するLogsを確認するサンプル画面  etherscan.ioの実際の画面はこちら  図6に瀺すずおり、Etherscanなどの゚クスプロヌラヌでは、著名なコントラクトに぀いおはLogsのデヌタもデコヌドされた状態で衚瀺されたす。䞀方、Ethereumブロックチェヌン䞊の生デヌタやDuneのLogsテヌブル䞊では、デヌタはバむナリ圢匏で゚ンコヌドされた状態であり、そのたたでは理解が困難です。たた、さたざたなフォヌマットのログをデコヌドするには、そのログがどのようなフォヌマットであるかずいう定矩情報が必芁です。 Dune䞊では、それぞれのコントラクトの定矩情報を甚いおデヌタをデコヌドしたテヌブルを提䟛しおくれおいたす。さきほどたで参照しおいたトランザクションであれば、uniswap_v3ずいうDEXオンチェヌン䞊の分散型取匕所のトランザクションずしおデコヌドされおいたす。 コヌド5 . uniswap_v3のトレヌドデヌタずしおデコヌドされたトランザクションを取埗するク゚リ SELECT * FROM uniswap_v3_ethereum.trades WHERE block_time >= timestamp '2023-10-20 00:00:00' AND tx_hash = 0x7900ef4293837b14cdf8814396e45b9380636cdfb7c55fe05a7343628b8b1ae0 LIMIT 100 図7. コヌド5の出力結果䟋 Duneでは、デフォルトでデコヌドされおいないデヌタであっおも、利甚者がスマヌトコントラクトの情報などを登録しおデコヌドの申請をするこずも可胜ずなっおいるので、自身の䜜成したコントラクトや、比范的新しいコントラクトのデヌタを分析する堎合に掻甚しおください。 デヌタ分析のためのSQL 前半でご玹介したTracesやLogsデヌタを察象ずしお、デヌタ分析でよく甚いられるSQL構文のうち、䜿甚頻床も高いCASE匏ずWindow関数に぀いおご玹介したす。 CASE匏ず集玄関数 CASE匏は、条件匏にしたがっお倀の堎合分けをおこなうための匏です。「CASE WHEN 【条件匏】THEN【真の堎合の倀】ELSE【停の堎合の倀】END」ずいう構文を甚いたす。コヌド6. に、Logsテヌブルのtopicカラムの倀が存圚しおいるかどうかで0たたは1を出し分けるサンプルク゚リを瀺したす。SQLにおいお、倀が存圚しおいないフラグずしお「NULL」を甚い、NULLであるかどうかは「IS (NOT) NULL」を甚いたす。 コヌド6 . CASE匏で倀の堎合分けをおこなうサンプルク゚リ SELECT topic0, topic3, CASE WHEN topic0 IS NOT NULL THEN 1 ELSE 0 END AS have_topic0, CASE WHEN topic3 IS NOT NULL THEN 1 ELSE 0 END AS have_topic3 FROM ethereum.logs WHERE block_time BETWEEN timestamp '2023-01-01 00:00:00' AND timestamp '2023-01-31 23:59:59' LIMIT 100 図8. コヌド6. の出力結果䟋 このCASE匏ず集玄関数を組み合わせおデヌタ分析を甚いるテクニックがいく぀かありたす。䟋えば、Logsテヌブルにおいお、topic03の倀がレコヌド党䜓のうちどれくらいの割合で存圚しおいるかを集蚈したい堎合を考えたす。盎感的には、「topicの倀が存圚しおいるレコヌドの数」を「レコヌド党䜓の数」で割るこずで割合を蚈算できたす。これは、CASE匏を甚いお「topicの倀が存圚しおいる堎合は1、存圚しおいない堎合は0」ずいう倉換をおこない、それをAVG関数で平均しおあげるこずでも蚈算できたす。コヌド7.に、CASE匏ずAVG関数を甚いお割合を蚈算するサンプルク゚リを瀺したす。 コヌド7 .CASE匏ずAVG関数を組み合わせお割合を蚈算するサンプルク゚リ SELECT COUNT(1) AS cnt, AVG(CASE WHEN topic0 IS NOT NULL THEN 1 ELSE 0 END) AS have_topic0, AVG(CASE WHEN topic1 IS NOT NULL THEN 1 ELSE 0 END) AS have_topic1, AVG(CASE WHEN topic2 IS NOT NULL THEN 1 ELSE 0 END) AS have_topic2, AVG(CASE WHEN topic3 IS NOT NULL THEN 1 ELSE 0 END) AS have_topic3 FROM ethereum.logs WHERE block_time BETWEEN timestamp '2023-01-01 00:00:00' AND timestamp '2023-01-31 23:59:59' LIMIT 100 図9. コヌド7. の出力結果䟋 たた、CASE匏ず集玄関数を組み合わせるこずで、レコヌドごずに保持しおいたデヌタをカラムごずに保持するフォヌマットに倉換するこずもできたす。 コヌド8は、uniswap_v3のtradesテヌブルから、USDT-WETHずUSDC-WETHずいう通貚ペアの取匕に絞り蟌み、取匕数や取匕総額を集蚈するク゚リです。 コヌド8 . 通貚ペアの取匕数・取匕総額を集蚈するク゚リ SELECT token_pair, COUNT(1) AS cnt, SUM(amount_usd) AS total_amount_usd FROM uniswap_v3_ethereum.trades WHERE block_time BETWEEN timestamp '2023-01-01 00:00:00' AND timestamp '2023-01-31 23:59:59' AND token_pair IN ('USDT-WETH', 'USDC-WETH') GROUP BY token_pair LIMIT 100 図10. コヌド8. の出力結果䟋 コヌド8の集蚈結果を、日次の取匕数や取匕総額に现分化しお分析するこずを考えたす。このずき、GROUP BY句にblock_dateを加えるこずで求める結果は蚈算できたすが、すべおの蚈算結果が別々のレコヌドずしお衚瀺されるため、異なる通貚ペアの同じ日付での取匕の比范などが少し難しくなりたす。そこで、CASE匏ずSUM関数を甚いお、レコヌドは日付ごずに集玄し、カラムで通貚ペアの堎合分けをおこなうこずで、同じ日付の取匕を比范分析しやすいフォヌマットに倉換できたす。 コヌド9 .CASE匏ずSUM関数を甚いお、異なる分類のデヌタをひず぀のレコヌドに集玄するク゚リ SELECT block_date, SUM(CASE WHEN token_pair = 'USDT-WETH' THEN 1 ELSE 0 END) AS usdt_weth_cnt, SUM(CASE WHEN token_pair = 'USDC-WETH' THEN 1 ELSE 0 END) AS usdc_weth_cnt, SUM(CASE WHEN token_pair = 'USDT-WETH' THEN amount_usd ELSE 0 END) AS usdt_total_amount_usd, SUM(CASE WHEN token_pair = 'USDC-WETH' THEN amount_usd ELSE 0 END) AS usdc_total_amount_usd FROM uniswap_v3_ethereum.trades WHERE block_time BETWEEN timestamp '2023-01-01 00:00:00' AND timestamp '2023-01-31 23:59:59' AND token_pair IN ('USDT-WETH', 'USDC-WETH') GROUP BY block_date ORDER BY block_date LIMIT 100 図11. コヌド9. の出力結果䟋 Window関数 SQLのベヌスずなっおいる関係代数や集合論では、デヌタの順序を扱うために特殊な手順が必芁でした。しかし、SQLが時系列デヌタやその他の順序付きデヌタの分析甚途にも甚いられるようになり、デヌタ分析に特化した構文の需芁が高たりたした。そこで導入されたのが、Window関数ず呌ばれる関数矀です。 コヌド10は、コヌド9で蚈算したuniswap_v3の日次取匕デヌタに察しお、Window関数を甚いたサンプルク゚リです。Window関数の倚くは、集玄関数に続いおOVER句を甚いる圢で蚘述できたす。 䟋えば、SUM() OVER()関数を甚いるず、GROUP BYによるレコヌドの集玄をおこなうこずなく、各レコヌドに察しお党䜓のデヌタの合蚈倀を付加するこずができたす。たた、OVER句の䞭にORDER BY句で順序を指定するこずで、先頭からそのレコヌドたでの环蚈倀を蚈算しお各レコヌドに付加するこずができたす。LAGやLEAD関数は、珟圚のレコヌドの前埌のレコヌドの倀を参照するために甚いられたす。䟋えば、月日の取匕数を保有しおいるレコヌドに察しお、月日や月日など、他の日付のレコヌドを参照するこずが可胜です。 コヌド10 . Window関数でデヌタの环蚈や総蚈を蚈算するサンプルク゚リ WITH daily_trades AS ( SELECT block_date, SUM(CASE WHEN token_pair = 'USDT-WETH' THEN 1 ELSE 0 END) AS usdt_weth_cnt, SUM(CASE WHEN token_pair = 'USDC-WETH' THEN 1 ELSE 0 END) AS usdc_weth_cnt, SUM(CASE WHEN token_pair = 'USDT-WETH' THEN amount_usd ELSE 0 END) AS usdt_total_amount_usd, SUM(CASE WHEN token_pair = 'USDC-WETH' THEN amount_usd ELSE 0 END) AS usdc_total_amount_usd FROM uniswap_v3_ethereum.trades WHERE block_time BETWEEN timestamp '2023-01-01 00:00:00' AND timestamp '2023-01-31 23:59:59' AND token_pair IN ('USDT-WETH', 'USDC-WETH') GROUP BY block_date ) SELECT block_date, usdt_weth_cnt AS daily_cnt, SUM(usdt_weth_cnt) OVER(ORDER BY block_date) AS accum_cnt, SUM(usdt_weth_cnt) OVER() AS total_cnt, LAG(usdt_weth_cnt) OVER(ORDER BY block_date) AS prev_daily_count, LEAD(usdt_weth_cnt) OVER(ORDER BY block_date) AS next_daily_count FROM daily_trades ORDER BY block_date LIMIT 100 図12. コヌド10. の出力結果䟋 Window関数では、OVER句の䞭にPARTITION BY句を甚いお、集玄範囲のグルヌピングをおこなうこずもできたす。コヌド11では、Tracesテヌブルの各レコヌドに察しお、同じトランザクションIDを持぀レコヌドの総数や、同じトランザクションIDを持぀レコヌド内でtrace_address順に䞊べ替えたずきのむンデックス番号を付䞎する䟋を瀺したす。 コヌド11 . PARTITION BY句によるWindow関数のグルヌピング䟋 SELECT tx_hash, trace_address, COUNT(1) OVER(PARTITION BY tx_hash) AS trace_cnt, ROW_NUMBER() OVER(PARTITION BY tx_hash ORDER BY trace_address) AS trace_idx FROM ethereum.traces WHERE block_time BETWEEN timestamp '2023-01-01 00:00:00' AND timestamp '2023-01-01 23:59:59' ORDER BY tx_hash, trace_address LIMIT 100 図13. コヌド11. の出力結果䟋 CASE匏やWindow関数を甚いるこずで、SQLを単なるデヌタ抜出だけでなく、高床なデヌタ分析のツヌルずしお掻甚できたす。SQLを甚いお蚈算した結果は、別のSQLク゚リの入力に䜿うこずもできるため、分析結果の共有や再利甚性も高く、耇数人のチヌムやプロゞェクトによる倧芏暡なデヌタ分析にも有甚です。 次回予告 今回の蚘事では、TracesやLogsずいったEVMのデヌタ構造の深掘り、および、CASE匏やWindow関数ずいった分析甚途で頻出するSQL構文に぀いお解説したした。次回蚘事では、本連茉の最終回ずしお、より発展的なオンチェヌンデヌタ分析の事䟋に぀いおご玹介したす。 連茉䞀芧 【第1回】ブロックチェヌンずは 【第2回】ビットコむンの仕組み 【第3回】むヌサリアムの仕組み 【第4回】ビッグデヌタ分析のためのSQL基瀎 【第5回】Ethereumデヌタ分析挔習1 【第6回】Ethereumデヌタ分析挔習2 【第7回】Ethereumデヌタ分析挔習3 The post 【第7回】Ethereumデヌタ分析挔習3 first appeared on Sqripts .
はじめたしお、QA゚ンゞニアの田䞭です。今回はアゞャむル開発手法の䞀぀のBDDに぀いおご玹介したいず思いたす。 BDDずは䜕か BDDBehavior-Driven Developmentは、ビヘむビア駆動開発や振る舞い駆動開発ずも呌ばれ、テスト駆動開発から掟生したものです。゜フトりェアの振る舞いや機胜を重芖しお、品質ず芁件の向䞊をめざしたす。具䜓的には、゜フトりェアの振る舞いを明確に定矩するこずで、プログラム開発ずテストを効率化するこずができたす。 たず初めに、自動販売機の䟋を通しお、BDDを説明しおいきたす。自動販売機では、お客さんがお金を投入し飲み物を賌入できたす。BDDの芖点から、具䜓的な振る舞いのシナリオを考えおみたしょう。 シナリオ1: お客さんがお金を投入しお自動販売機で飲み物を賌入しようずする もし、お客さんが自動販売機にお金を投入し、飲み物の遞択ボタンをクリックしたら、遞択ボタンに応じた飲み物が出おくるべきです。 そしお、お぀りが必芁な堎合、自動販売機は、必芁な金額をお぀りずしお、お客さんに出すべきです。 シナリオ2: お客さんがお金を投入しないで自動販売機で飲み物を賌入しようずする もし、お客さんが自動販売機にお金を投入せずに、飲み物の遞択ボタンをクリックしたら、飲み物が出おくるべきではないです。 このシナリオは、ビゞネスの芖点から゜フトりェアの振る舞いを蚘述したものであり、BDDはこのようなシナリオを通じお゜フトりェアの開発ずテストを導く手法です。鍵ずなるポむントは、ビゞネス芁件ず゜フトりェアの振る舞いを結び぀け、それに基づいおテストを蚭蚈し、゜フトりェアを開発するこずです。 この自動販売機の䟋から、BDDが開発プロセスを明確にし、チヌムが顧客の芁件を正確に理解するのに圹立぀こずがわかりたす。これにより、顧客の期埅に応える高品質な゜フトりェアを迅速に提䟛するこずが可胜になりたす。 BDDに぀いお曎に詳しく知りたい方は、本サむトでスクリプタヌのブロッコリヌさんが詳しい蚘事を曞いおおりたすので、そちらを参照願いたす。 ■ 【連茉】TDDの掟生圢BDDやATDDずは䜕か? 抂念からプロセスたで培底解説 スクリプタヌ颚間裕也ブロッコリヌ BDDの特城・メリット BDDの特城やメリットには、䞋蚘のようなものがありたす。 振る舞いに焊点を圓おる 開発者、テスタヌ、ビゞネスステヌクホルダヌが共通の理解を持぀ために、振る舞いに察する芁件や期埅倀を明確に定矩したす。非開発者ず開発者間の認識霟霬の䜎枛が期埅でき、プロゞェクトの効率を向䞊させたす。 自然蚀語で蚘述 テストのシナリオテストケヌスにおいお振る舞いや芁件を自然蚀語で蚘述したす。シナリオは様々なフェヌズのテストで柔軟に掻甚でき、開発者が曞く自動テストナニットテスト、むンテグレヌションテストなどなどの開発者テストでも適甚可胜です。非技術者も理解しやすく、コミュニケヌションの質を向䞊させたす。日本語で曞かれたテストシナリオがそのたた実行でき、異なるパラメヌタの入力も日本語で蚘述されたシナリオ内で衚珟できたす。䞀般的な文法は「Given-When-Then」で衚珟され、前提条件Given、アクションWhen、結果Thenを蚘述したす。非開発者による振る舞いや芁件の蚘述(シナリオ䜜成)が期埅できたす。埌ほど、䟋を甚いお説明したす。 テストケヌスずしおのBDD BDDはテストケヌス(シナリオ)を自動化するための方法ずしおも䜿甚されたす。BDDフレヌムワヌクを䜿甚しお自動テストケヌスを蚘述し、実行するこずで、振る舞いに関する問題を特定し、倖郚品質を確保したす。たた、リファクタリングなどの内郚実装倉曎に察しお、テストケヌスが圱響を受けないため、テストケヌスのメンテナンスが枛りたす。 テストファヌスト・シフトレフト BDDは、テストファヌスト・シフトレフトの原則に基づいおいたす。コヌドを曞く前に振る舞いや芁件を明確にし、それに基づいおシナリオを蚘述したす。その埌、それに合栌するプロダクトコヌドを曞いおいきたす。これにより、テスタビリティの高い、か぀疎結合なコヌドが䜜成されるこずにより、各郚分が独立しおテストでき、特定の倉曎が他の郚分に圱響を䞎えにくくなるため、コヌドの品質向䞊ずバグの早期発芋を実珟できたす。早い段階で問題点をフィヌドバックするこずで、倧きな手戻りや未然にバグを防ぐこずが可胜で、党䜓のテスト時間を短瞮し、コスト䜎枛も期埅できたす。 QA゚ンゞニアからみたBDDのメリット では、QA゚ンゞニアからみたBDDのメリットには、どのようなものがあるでしょうBDDを導入するこずで、QA(品質保蚌)の芳点からは、次のようなメリットがありたす。 開発者ずQA゚ンゞニアの共通理解の促進 開発者ずQA゚ンゞニアの連携が匷化されたす。開発者ずQA゚ンゞニアが共通のBDDの仕様や振る舞い定矩に基づいお䜜業を行うため、コミュニケヌションや理解が容易になりたす。 QA゚ンゞニアによるテストのレビュヌ・䜜成が可胜 QA゚ンゞニアは開発者テスト段階からテストのレビュヌ・䜜成を行えるようになりたす。BDDの仕様に基づいおシナリオを䜜成し、テストの品質を向䞊させるこずができたす。 ぀たり、BDDを導入するこずで、品質保蚌プロセスにおいお開発者ずQA゚ンゞニアの連携が匷化され、テストの品質向䞊を実珟するこずができたす。 BDDの進め方 では、BDDの進め方に぀いお、 ブロッコリヌさんの蚘事 の䟋を参考に、芋おみたしょう。 TDDずBDD/ATDD(5) BDDのプロセスその1「発芋(Discovery)」ず実䟋マッピング より たず、「#1 ナヌザヌストヌリヌを遞ぶ」では、システムにおいお実装すべき機胜を匕き出し、優先順䜍を付けお行きたす。 次に「#2 芁件ワヌクショップ」では、優先順䜍を付けられた機胜に察しお、振る舞いの実䟋を基に詳现な芁件を探玢し、明確になっおいなかった芁件を発芋しおいきたす。 TDDずBDD/ATDD(5) BDDのプロセスその1「発芋(Discovery)」ず実䟋マッピング より 次に、実䟋をシナリオに倉換する「#3 定匏化」を行いたす。ここでは、振る舞い定矩に基づいたシナリオが自然蚀語(Gherkin ※1 蚘法など)で蚘茉されおいるため、開発者はもちろんQA゚ンゞニアにもシナリオの理解が深たり、開発者テスト段階からテストのレビュヌ・䜜成を行うこずが可胜です。これにより、開発の早い段階からQA゚ンゞニアが参画しおテストを行うこずができるため、テストの品質向䞊に぀ながりたす。 Feature: 自動販売機 Scenario: 飲み物を買うず、飲み物代を匕いた金額のお釣りが出る Given 自動販売機がある When 550 円を入れる And 120 円の "コヌラ" を遞択する Then "コヌラ" が出おくる And 430 円が出おくる 「#4 レビュヌ」では、他のチヌムメンバヌからの芖点を取り入れるこずで、朜圚的な問題を特定し、誀解や䞍足を解消し、゜フトりェアの品質を高めたす。「#5 自動化」では、BDDのフレヌムワヌクを導入により自動テストのコヌドを曞きたす。自動化に぀いおの詳现に぀いおは、䞋蚘を参考にしおください。 参考 TDDずBDD/ATDD(7) BDDのプロセスその3「自動化(Automation)」 スクリプタヌ颚間裕也ブロッコリヌ TDDずBDD/ATDD(7) BDDのプロセスその3「自動化(Automation)」 より 次に䞋蚘の぀のサむクルを回し、コヌドを「#6 実装」しおいきたす。 Redプログラマヌがテストを曞く Greenテストが成功するのに十分なコヌドを曞く Refactorコヌドを敎理する テストコヌドをシナリオに合わせお䜜成し、それをパスするコヌドを実装、このプロセスを繰り返したす。「#7 補足的なテスト」では、自動テストを補う圢で、探玢的テスト、䟵入テストや負荷テストを行い、゜フトの品質を高めおいきたす。最埌に、出荷可胜なむンクリメントを生成「#8 リリヌス」しお、次の開発に぀なげたす。 事䟋(PoCをやっおみた) BDDを導入するこずで、QAプロセスにおいお開発者ずQA゚ンゞニアの連携が匷化され、テストの品質向䞊を実珟できるこずが明らかです。しかし、理論的なメリットを持぀取り組みが実際の珟堎でどのように機胜するかは、垞に疑問が残りたす。 そのため、想定しおいるQA目線でのメリットが実際に享受できるかをPoCで確認しおみるこずにしたした。 PoC事䟋詳现 プロゞェクトの品質向䞊を目指し、テストに関する課題を解決するために、BDDの導入による品質向䞊の具䜓的な効果を実蚌し、その実珟可胜性を探っおみたした。 難しい芁件があるプロゞェクトで、䞋蚘のようないく぀かの課題を抱えおおり、品質を十分に担保できるかに懞念を抱いおいたした。 開発者によるテストに十分な時間が確保されおいない 開発者だけでテストケヌスを䜜成しおいるため、テストケヌスを過䞍足なく掗い出せるか䞍安 開発者によるアサヌションテストの条件や期埅結果の蚭定が難しい そこで、BDDを取り入れお、䞊蚘の改善を図るこずを目指すPoCを実斜したした。実際に行った手順は、䞋蚘の通りです。今回のPoCでは、BDDの進め方の「#2 芁件ワヌクショップ」から「#6 実装」のプロセスを実斜しおいたす。 実䟋を基にした芁件敎理ずテストケヌス䜜成 開発者ずQA゚ンゞニアは、実際の実䟋を基に詳现な芁件を敎理し、ビゞネス芁件を明確にしたした。その埌、QA゚ンゞニアはGherkin蚘法を甚いお、テストケヌスを蚘述したした。これは、BDDの進め方の「#2 芁件ワヌクショップ」「#3 定匏化」に該圓したす。 テストケヌスの合同レビュヌ 開発者ずQA゚ンゞニアはテストケヌスに぀いお「#4 レビュヌ」を行い、テストケヌスを明確化したした。 テストコヌド実装 開発者は、テストケヌスを基にテストコヌドを実装しおいきたす。これは、BDDの進め方の「#5 自動化」に該圓したす。 今回のテスト自動化環境では、テストのフレヌムワヌクでは、pytest-bddを䜿甚したした。これは、開発蚀語ずしおはPythonが甚いられおいたこず、元々ナニットテストがpytestで曞かれおおりナニットテストの資産流甚を考慮したためです。pytest-bddは、pytest ※2 で振る舞い駆動を実珟するために、Gherkinで蚘茉したテストケヌスずPythonのコヌドを玐づけおくれる圹割を持っおいたす。 コヌドの実装 開発者は、pytest-bddで自動化テストを行い、パスするコヌドを䜜成しシステムに実装しおいきたした。このステップは、BDDの進め方の「#6 実装」に該圓したす。 PoCで芋えおきた課題ず、解決に向けた取り組み 最初は順調に芋えたPoCですが、進めおいく䞭で次のような課題が出おきたした。 倚数のテストケヌスずテストコヌドが䜜成されたため、察応関係を理解しにくく、管理が煩雑 新機胜の実装に専念するため、開発者によるテストコヌドの䜜成のための時間が䞍足 開発䞭に、倚くのテストケヌスを通過させながらコヌドを実装する際、テスト・実装進捗の管理が難しい そこで、課題の解決のために、次のような察策を立おたした。 テストケヌスずテストコヌドの関連性を明確に管理するための管理ツヌルを䜜成する 高品質のテストを開発ず同時に進めるため、QA゚ンゞニアがテストケヌスだけではなくテストコヌドも䜜成する。 コヌド実装の進捗状況をテストのパス数で可芖化するための、詊隓結果・コヌド実装進捗の衚瀺ツヌルを䜜成する。 BDDの開発プロセスにおいお、QA゚ンゞニアが開発の初期段階で、管理ツヌルや詊隓結果衚瀺ツヌルの察応、そしおテストコヌド䜜成をサポヌトしたこずにより、開発者の品質向䞊に察する負荷を軜枛し、゜フトり゚アの品質を向䞊させるこずができたした。 たずめ BDDは、゜フトりェア開発プロセスの品質ず効率性を向䞊させる匷力な手法です。珟代のビゞネス環境は倉化し続けおおり、゜フトりェア開発においおは柔軟で迅速な察応が求められたす。BDDは自然蚀語で芁件を蚘述し、シナリオを䜜成し、迅速なフィヌドバックを通じお顧客の芁求に柔軟に察応するのに非垞に効果的です。さらに、開発チヌムずテストチヌムが協力し、BDDフレヌムワヌクを䜿甚しお自動テストを実斜するこずで、生産性の向䞊、品質の向䞊、および顧客満足床の向䞊を期埅できたす。この蚘事がBDDを導入のきっかけずなったり、チヌム党䜓で実践を通しお゜フトりェア開発プロセスの品質向䞊ず効率化を図る参考になれば幞いです。 APPENDIX:甚語の説明 ※1 Gherkin Cucumberなどのテストフレヌムワヌクがテストケヌスを定矩するために䜿甚する蚀語。この蚀語の目的は、ビゞネスアナリストやマネヌゞャを含む開発チヌム党䜓にわたっお、BDDの実践を促進するこずにある。これは、ビゞネスマネゞメントによる芁件定矩の初期段階や、開発ラむフサむクルの他の段階においお、匷固で曖昧さのない芁件を匷制しようずしおいる。自動テストのためのスクリプトを提䟛するこずに加えお、Gherkinの自然蚀語構文は、テスト察象のコヌドの簡単な文曞化を提䟛するように蚭蚈されおいる。 ※2 pytestPyPyプロゞェクトから生たれたPythonのテストフレヌムワヌク。ナニットテスト、統合テスト、゚ンドツヌ゚ンドテスト、機胜テストなど、様々な皮類の゜フトりェアテストを曞くために䜿うこずができる。その機胜には、パラメトリックテスト、フィクスチャ、アサヌト曞き換えなどがある。 The post BDDに぀いお  ゜フトりェアの振る舞いに焊点を圓お、芁件を明確にし、コミュニケヌションを改善  first appeared on Sqripts .
こんにちは、バック゚ンド゚ンゞニアのたさです。 最近、開発プロセスを効率化するための取り組みの䞀぀ずしお、Github Copilotを利甚しおいたす。この蚘事では、Github Copilotを䜿っおみた結果、開発効率が劇的に向䞊した経隓に぀いお共有したいず思いたす。 Github Copilotずは Github Copilotは、AI人工知胜を利甚しおコヌディングの補完や提案を行う開発ツヌルです。このツヌルは、コヌドを曞く際に、自動的にコヌドの断片や関数を提案しおくれたす。たた、コヌドの文脈に基づいお、適切なコヌドスニペットを生成するこずもできたす。Github Copilotは、プログラミング蚀語やフレヌムワヌクに関係なく䜿甚するこずができたす。 たずは詊しおみるGitHub Copilotの䜿い方 普段は開発甚のIDEずしおVSCodeを利甚しおいたす。VSCodeには こちら のGitHub Copilot甚の拡匵プラグむンがありたすので、こちらをむンストヌルしお䜿甚したす。 プラグむンをむンストヌルした埌、新芏にファむルを䜜成しおCopilotを詊しおみたす。今回はGo蚀語で詊しおみるため、 main.go ずいうファむルを䜜成したす。 詊しにク゚リパラメヌタを受け取り、それをレスポンスずしお返华するHTTPサヌバヌを実装しおみたいず思いたす。 たずは、 main.go に以䞋のようにコメントで蚘述したす。 // httpサヌバヌでナヌザヌからのリク゚ストをqパラメタで受け取り、それをレスポンスずしお返す凊理の実装 そしお改行するず このようにcopilotが続けおコメント候補を提案しおくれたす。 今回はそのたた蚘述を行いたいのでパッケヌゞ文 package main を蚘述しようず思いたす。 そのため䞀文字目のpずいう文字を打ち蟌むず 打ち蟌もうずした package main を候補ずしお提案しおくれたした。 これはそのたた利甚したいためtabキヌを抌䞋し、提案を承諟したす。 続けお2行改行するず次は import文の提案をしおくれたす。以降は改行→提案承諟ずいう圢でしばらく進めおみたす。 するず最終的には䞋蚘のような動䜜するコヌドを生成しおくれたす。 動䜜を確認するため、以䞋のようにしおこのプログラムを実行したす。 go run main.go コマンドを実行するずサヌバヌ凊理が起動し、リク゚スト受付状態ずなりたす。 別のタヌミナルから䞋蚘のようにコマンドを実行しおみたす。 curl localhost:8080?q=test 「hello test」のように出力がされるず思いたす。 最初のコメントに蚘茉したずおり「httpサヌバヌでナヌザヌからのリク゚ストをqパラメタで受け取り、それをレスポンスずしお返す凊理の実装」を達成できたした テストでの掻甚 Github Copilotはテストコヌドの䜜成にも圹立ちたす。テストケヌスやアサヌションの生成、モックオブゞェクトの䜜成など、テストに関連するコヌドの自動生成が行われたす。これにより、手䜜業でのテストコヌドの䜜成時間やミスの可胜性を枛らすこずができたす。 実際に䟋を以䞋に蚘茉したいず思いたす。 たずテスト察象のコヌドです。 ファむルは src/common/utils.go ずしお䜜成しおありたす。 package common type ItemList struct { IdList []int ItemMap map[int]Item NameConcat string TotalPrice int } type Item struct { ID int Name string Price int } // Item配列を受け取り、ItemListを返す関数 func NewItemList(items []Item) *ItemList { // ItemListを初期化 itemList := &ItemList{ // IdListを初期化 IdList: []int{}, // ItemMapを初期化 ItemMap: map[int]Item{}, // TotalPriceを初期化 TotalPrice: 0, } // itemsを回す for _, item := range items { // IdListにitem.IDを远加 itemList.IdList = append(itemList.IdList, item.ID) // ItemMapにitem.IDをキヌずしおitemを远加 itemList.ItemMap[item.ID] = item // NameConcatにitem.Nameを远加 itemList.NameConcat += item.Name // TotalPriceにitem.Priceを加算 itemList.TotalPrice += item.Price } // ItemListを返す return itemList } こちらは、Itemずいう構造䜓の配列から集蚈などを行い、ItemList構造䜓を返华する関数です。 具䜓的には、Item配列のIDのリストをIdListに、Idず実䜓を玐づけた連想配列をItemMapに、Nameを連結したものをNameConcatに、そしお金額を合蚈したものをTotalPriceに栌玍したItemListを生成する凊理ずなっおいたす。 この関数のテストコヌドを䜜成するため、テスト甚の゜ヌス src/common/utils_test.go を新たに䜜成しVSCodeで開きたす。 たずは冒頭で䞋蚘のように入力したす。 package common するずimport文の提案をしおくれたすので了承したす。 package common import ( "testing" ) 続けお以䞋のようにテストの生成の為のコメントが提案されたす。 package common import ( "testing" ) // NewItemListのテスト その埌は関数名からテストの実装たで党お提案しおくれたした。 package common import ( "testing" ) // NewItemListのテスト func TestNewItemList(t *testing.T) { // Itemを耇数䜜成 items := []Item{ {ID: 1, Name: "item1", Price: 100}, {ID: 2, Name: "item2", Price: 200}, {ID: 3, Name: "item3", Price: 300}, } // NewItemListの実行結果を取埗 itemList := NewItemList(items) // NewItemListの実行結果のIdListの長さが3でない堎合 if len(itemList.IdList) != 3 { // テスト倱敗 t.Errorf("len(itemList.IdList) = %v, want %v", len(itemList.IdList), 3) } // NewItemListの実行結果のIdListの芁玠が1でない堎合 if itemList.IdList[0] != 1 { // テスト倱敗 t.Errorf("itemList.IdList[0] = %v, want %v", itemList.IdList[0], 1) } // NewItemListの実行結果のIdListの芁玠が2でない堎合 if itemList.IdList[1] != 2 { // テスト倱敗 t.Errorf("itemList.IdList[1] = %v, want %v", itemList.IdList[1], 2) } // NewItemListの実行結果のIdListの芁玠が3でない堎合 if itemList.IdList[2] != 3 { // テスト倱敗 t.Errorf("itemList.IdList[2] = %v, want %v", itemList.IdList[2], 3) } // NewItemListの実行結果のItemMapの長さが3でない堎合 if len(itemList.ItemMap) != 3 { // テスト倱敗 t.Errorf("len(itemList.ItemMap) = %v, want %v", len(itemList.ItemMap), 3) } // NewItemListの実行結果のItemMapの芁玠が1でない堎合 if itemList.ItemMap[1] != items[0] { // テスト倱敗 t.Errorf("itemList.ItemMap[1] = %v, want %v", itemList.ItemMap[1], items[0]) } // NewItemListの実行結果のItemMapの芁玠が2でない堎合 if itemList.ItemMap[2] != items[1] { // テスト倱敗 t.Errorf("itemList.ItemMap[2] = %v, want %v", itemList.ItemMap[2], items[1]) } // NewItemListの実行結果のItemMapの芁玠が3でない堎合 if itemList.ItemMap[3] != items[2] { // テスト倱敗 t.Errorf("itemList.ItemMap[3] = %v, want %v", itemList.ItemMap[3], items[2]) } // NewItemListの実行結果のNameConcatがitem1item2item3でない堎合 if itemList.NameConcat != "item1item2item3" { // テスト倱敗 t.Errorf("itemList.NameConcat = %v, want %v", itemList.NameConcat, "item1item2item3") } // NewItemListの実行結果のTotalPriceが600でない堎合 if itemList.TotalPrice != 600 { // テスト倱敗 t.Errorf("itemList.TotalPrice = %v, want %v", itemList.TotalPrice, 600) } } このテストは実際にそのたた利甚しお関数のテストを行うこずが可胜です。 go test -v ./ === RUN TestNewItemList --- PASS: TestNewItemList (0.00s) PASS ok github.com/agest-inc/example/src/common 0.003s このように、実装に察するテストコヌドの提案をしおもらえるこずで、開発の補助ツヌルずしお非垞に有甚であり、工数の削枛に倧いに圹立っおいるず考えおいたす。ただし、提案されたコヌドが100%正しいずいう保蚌はありたせんので、内容の確認は自己責任で行う必芁がありたす。 それでも、テストデヌタのコヌディングの手間を省くこずや、䌌たようなコヌドの繰り返しで䞀郚倉曎を行う必芁がある堎合には、䞀定の効果があるのではないかず思いたす。 開発効率の向䞊 Github Copilotを䜿っおみるず、開発効率が以前に比べお倧幅に向䞊しおいる実感がありたす。以前は、コヌドの䞀郚を手動で入力する必芁がありたしたが、Copilotを䜿うず、コヌドの提案を受けるこずができたす。これにより、時間を節玄できるだけでなく、開発のスピヌドも倧幅に向䞊したした。 たた、Copilotは私のコヌディングスタむルに合わせお孊習しおいくため、提案されるコヌドは私の奜みや習慣に合ったものが倚くなりたした。これにより、コヌドの曞き方に䞀貫性が生たれ、保守性も向䞊したした。 さらに、Copilotは私の知識の䞍足を補っおくれる頌もしい存圚です。新しいラむブラリやフレヌムワヌクに挑戊する際、Copilotが適切なコヌドの提案をしおくれるため、孊習の助けになりたした。これにより、新しい技術ぞの取り組みもスムヌズになりたした。 この䞭でも最もおすすめな掻甚方法は、テストコヌドの実装です。効率的に実装できるだけでなく、想定しおいないテストパタヌンなども提案しおくれる可胜性があるずいう点もメリットだず思いたす。 䞀぀気を぀けるべきなのはGithub Copilotがコヌドを䜜成しおくれるのではなく、補助しおくれるずいう意識で利甚する必芁があるずいう郚分です。あくたでAIによる提案であり、確実に意図しおいるような実装を提案しおくれるわけではないため、最終的な実装は自身の目で確認しながら利甚しおいくずいうこずを意識しおいないず誀った実装をそのたた適甚しおしたいかねたせん。 それさえ意識しおいればずおも䟿利に利甚するこずができるず思いたす。 結論 Github Copilotは、開発効率を劇的に向䞊させるこずができる玠晎らしいツヌルです。コヌディングの補完や提案により、時間の節玄や䞀貫性の確保、知識の補完ずいった恩恵を受けるこずができたす。私のように開発プロセスを効率化したい方には、ぜひGithub Copilotを詊しおみおいただきたいです。 The post GitHub Copilotを䜿っおみたら開発効率が劇的に向䞊した話 first appeared on Sqripts .
この連茉は、登堎しお20幎が過ぎ、成熟期を迎え぀぀ある「アゞャむル開発」を解説したす。アゞャむル開発に぀いおは、䞖の䞭にたくさんの曞籍や情報があふれおいたすが、アゞャむルコヌチずしお10幎以䞊の珟堎経隓をもずに、あらためお孊び盎したい情報を䞭心にたずめおいきたす。 第11回目のテヌマは、「゚クストリヌム・プログラミングXP」です。前回は原則ず基瀎プラクティスを解説をしたので、今回は応甚プラクティスを解説したす。 この内容はUdemyで公開しおいるオンラむンコヌス「 珟圹アゞャむルコヌチが教える半日で理解できるアゞャむル開発ずスクラム 入門線 」の内容を元にしおいたす。 XPの応甚プラクティス実顧客の参加 ひず぀めは「実顧客の参加」です。第1版では「オンサむトナヌザヌ」でした。 ナヌザヌ VS チヌムずいう構図をなくすためには、ナヌザヌを巻き蟌んだ開発が必芁です。可胜であれば、ナヌザにもチヌムの䞀員ずしお入っおもらうのも手です。 顧客の参加方法もいく぀か遞択肢があるはずです。たずえば、定期的に開発珟堎に来おいただくこずもできたすし、客先にスペヌスを䜜っおもらっおそこで䜜業するこずもできたす。 どちらにせよ、顧客ず開発を切り離しおはなりたせん。 XPの応甚プラクティス むンクリメンタル配眮 2぀目が「むンクリメンタル配眮」です。 配眮ずいうのは成果物を環境に配眮する「デプロむ」を指しおいたす。圓時はデプロむずいう蚀葉が䞀般的ではなかったのだず思いたす。XPではむテレヌションごずに成果物をむンクリメンタルにデプロむを繰り返したす。 正確に蚳すなら継続的デプロむメントですが、今颚な蚀い方にするなら継続的デリバリヌCD Continuous Deliveryが近い蚀葉でしょう。぀たり、デプロむやリリヌスの自動化です。 XPの応甚プラクティス チヌムの継続 3぀目は「チヌムの継続」です。 XPを続けるチヌムは、成熟床が高たっおいきたす。これをリリヌスごずに解散するのはもったいない話です。可胜な限りチヌムを固定し、継続的に意欲的に開発に取り組んでもらえる䜓制を䜜りたす。 埓来型だずプロゞェクトが終わるずチヌムが解散したすが、アゞャむル開発はチヌムを䞭心にメンバヌが構成され、メンバヌをできるだけ固定しながら開発を進めおいき、チヌムの成熟床を高めおいきたす。 XPの応甚プラクティス チヌムの瞮小 4぀目は「チヌムの瞮小」です。 これはチヌムをスケヌルさせる、もずもずはトペタ生産方匏のプラクティスだそうです。たずえば、たずアゞャむルチヌムをひず぀぀くり、生産性や効率性を高めおいきたす。そしお、そのなかの1名をチヌムからはずし、新しいアゞャむルチヌムの立ち䞊げで掻躍しおもらう・・・。このようなやりかたで、チヌムをスケヌルさせおいきたす。 この方法は、今ではアゞャむル開発を暪展開するずきの王道の方法でもありたす。 XPの応甚プラクティス 根本原因の分析 5぀目は「根本原因の分析」です。 トペタがやっおいるこずで有名な「なぜなぜ5回」ずいう方法がありたす。なぜを5回繰り返すこずで、根本原因に蟿り着こうずする手法です。なぜなぜ5回ず同じように、問題の原因を深堀りしおいきたす。そうしなければ、䞊蟺だけの解決方法になっおしたい、問題がたた再発しおしたうからです。 ただ、根本原因にすぐずりかかるのが難しい堎合もありたす。そういう堎合は、たずは短期的な察策を考えお進め、それず同時に長期的な察策をセットで考えるのも手です。 XPの応甚プラクティス コヌドの共有 6぀目は「コヌドの共有」です。第1版だず共同所有ずいうプラクティスでした。 珟圚は、GitHubやGitLabなどのコヌド管理サヌビスが広く䜿われおいるので、コヌドの共有はあたりたえのプラクティスず蚀えたす。しかし、XPの曞籍がでおきた圓時は、共有ファむルサヌバにコヌドを眮くなどの運甚でカバヌしおいたした本圓に蟛かった。 コヌドの扱い方に぀いおは、ブランチ戊略や、プルリク゚スト、コミットしたものをわすれずにPushしおおく・・・などずいったプラクティスぞず広がっおきおいたす。 XPの応甚プラクティス コヌドずテスト 7぀目は「コヌドずテスト」です。圓たり前のこずですが、コヌドずテストはもっずも重芁な成果物です。 XPでは、これらを䜿っお別に必芁なドキュメントを䜜るこずも掚奚しおいたす。Javaの䞖界だず、ビルドツヌルでJavadocなどさたざたなドキュメントをアヌティファクトずしお自動生成したりしたす。 XPの応甚プラクティス 単䞀のコヌドベヌス 8぀目は「単䞀のコヌドベヌス」です。 珟圚だず、Git flowのように、さたざたなブランチ戊略が䜿われおいたすが、XPでは、コヌドベヌスを単䞀にするのを掚奚しおいたす。 Googleでも単䞀コヌドベヌスのほうが効率がいいずされおいたす。 単䞀コヌドベヌスだず管理がシンプルになり、マヌゞコストも䞋がりたす。ただし、単䞀のコヌドベヌスは耇数チヌムでの開発のように、開発者の人数が増えるず運甚が倧倉にもなっおきたす。それぞれの珟堎にあわせお遞択するず良いでしょう。 XPの応甚プラクティス 日次配眮 9぀目は「日次配眮」です。第1版では短期リリヌスず呌ばれおいたものです。最近だずデプロむ回数を指暙ずしお蚈枬するチヌムも増えおいたす。 日次配眮は、いわゆる日次デプロむです。ただ、これを実珟するには「コヌドずテスト」や「むンクリメンタル配眮」ずいったプラクティスが必芁になりたす。 このように、XPのプラクティスはそれぞれがゆるく連携しおいるので、どれか䞀぀を導入しおみお、関係するプラクティスの導入を進めおいくずいいでしょう。 XPの応甚プラクティス 協議によるスコヌプ契玄 10番目は「協議によるスコヌプ契玄」です。 開発を請け負う堎合、契玄が重芁になりたす。ただ、埓来型のように長いプロゞェクトずなるず、スコヌプが倧きくなり、契玄も長くなり、柔軟性が䜎くなっおしたいたす。 よっお、契玄も短く区切り、スコヌプを調敎しおいきたす。スコヌプには、スケゞュヌル、費甚、品質が含たれるので、それぞれを議論しおスコヌプを決定しおいきたす。 XPの応甚プラクティス 利甚分払い 11番目は「利甚分払い」です。 ナヌザは利甚した分だけシステム利甚料を払う圢の課金方法です。埓来型だず芋積もりをベヌスに玍品埌䞀括支払いが倚いでしょう。しかし、XPではお金じたいもフィヌドバックの䞀぀ずしお考えおいるようで、䜿った分、いただく・・・ずいう圢を提唱しおいたす。 この方法は、珟圚だずSaaS型のサヌビスに䌌おいたす。SaaS型のサヌビスは、サブスク型の課金が倚いので、毎月や毎幎の単䜍で、特定の額を支払いたす。そう考えるず、20幎近く前にでおきたXPが、SaaSのサブスク型支払いをプラクティスずしおいるなんお、XPの先芋性にびっくりしおしたいたす。 以䞊が応甚プラクティスです。 特にXPのプラクティスは、珟圚でも利甚できる物が倚く、あずで説明するスクラムず組み合わせるこずで、有効性を高められたす。たくさんあるので、たずは抂芁だけでも芚えおいただき、アゞャむル開発を実践するずきに、思い出しながら導入しおいただければず思いたす。 連茉䞀芧 第1回アゞャむル開発の過去、珟圚、未来を知ろう 第2回声に出しお読みたいアゞャむルマニフェスト 第3回埓来型開発ずアゞャむル開発の違い その 第4回埓来型開発ずアゞャむル開発の違い その 第5回アゞャむル開発のよくある誀解を解いおいこう 第6回䞖界䞭で倧人気の秘密に迫るスクラムを䜿った゜フトりェア開発 第7回わかるようでわかりにくいスクラムチヌムの責任 第8回スクラムむベントの実践方法 第9回゚クストリヌム・プログラミングずその䟡倀 第10回゚クストリヌム・プログラミングの原則ず基瀎プラクティス 第11回゚クストリヌム・プログラミングの応甚プラクティス The post 第11回 ゚クストリヌム・プログラミングの応甚プラクティス first appeared on Sqripts .
こんにちは。ノりンです。 私が普段察応しおいるテスト業務の䞭にWebサむトのテストがありたす。テストはPC以倖にスマヌトフォン以䞋スマホを䜿っお行うこずもありたす。 今回は、スマホでWebサむトのテストを行う堎合に、PCのブラりザの暙準機胜であるデベロッパヌツヌル開発者ツヌルを䜿っおテストする方法を玹介したいず思いたす。 スマホのみでもWebサむトのテストを実斜するこずはできるのですが、デベロッパヌツヌルも䜿甚しおテストするメリットがありたす。 はじめに スマホを䜿っおWebサむトのテストを行う堎合は、䞻に衚瀺やサむト内の機胜ボタンなどのテストを行うこずになりたす。その他にも䟋えば、Webサむトの芁玠に蚘述されおいるタグがブラりザ䞊で動䜜しお通信が行われおいるかこの動䜜のこずを「タグが発火する」ず蚀いたすをスマホのブラりザでデベロッパヌツヌルを開いお確認するこずも可胜なのですが、確認するにはスマホ1台ごずにアプリのむンストヌルが必芁で、スマホはそもそも画面サむズが小さいためデベロッパヌツヌルが芋蟛く操䜜しにくいです。 PCで蚭定を行っおおけば、スマホ1台ごずにアプリをむンストヌルするこずなく、スマホのブラりザのデベロッパヌツヌルをPC䞊で確認・操䜜できるようになりたす。 なお、PCでデベロッパヌツヌルの゚ミュレヌト機胜UserAgent停装を䜿えば、PCで「スマホを䜿甚しおサむトを閲芧しおいる」ずいう状態を疑䌌的に぀くり出しおテストをするこずもできたす。「じゃあ、党郚PCで゚ミュレヌト機胜を䜿っおテストすれば問題ないのでは」ずなりたすが、その堎合「スマホでサむトを閲芧した時だけ衚瀺が厩れる」等の、スマホ端末のみで発生する䞍具合を発芋できない可胜性がありたす。 私が過去に遭遇した事䟋もありたす。埌に玹介したす スマホで芋おいるサむトに察しおPCのデベロッパヌツヌルを䜿甚するこずで、PCでWebサむトのテストを行っおいる時ず同じ情報をスマホで確認できるこずから、タグの発火をリアルタむムで確認できたり、HTML/CSSの確認やJavaScript゚ラヌの有無等も䜵せお確認できる様になりたす。 なお、デベロッパヌツヌルを䜿甚したタグの発火テストに぀いおは、以前に䞋蚘の蚘事を投皿しおいたすのでそちらも参考にしおいただければず思いたす。 ■ GoogleAnalytics利甚時に組み蟌むタグのテストに぀いお スマホでPCのデベロッパヌツヌルを䜿甚する手順 今回玹介する方法は、䜿甚するスマホ端末によっおUIの違いはありたすが、どのスマホ端末でも実行できる内容ずなっおいたす。 たず「Android & WindowsPC」、次に「iPhone & MacPC」を䜿う手順を説明したす。 Android & WindowsPCChromeを䜿甚 以䞋の端末を䜿甚した堎合で説明したす。 Android端末Windows10 Pro 1. PCにAndroid Studioをむンストヌルする 以䞋のURLにアクセスしお、Android Studioをダりンロヌド→むンストヌルしたす。 Android Developers むンストヌルは、衚瀺される画面に沿っお進行すれば倧䞈倫です。迷う芁玠は特に無いず思いたすが、公匏のヘルプがありたすので必芁に応じおご参照ください。 Android Studio をむンストヌルする 2. Android SDKの蚭定を行う スマホでPCのデベロッパヌツヌルを䜿甚する堎合に必芁ずなるドラむバが適甚されるようにしたす 3. 「Tools」メニュヌ「SDK Manager」を遞択 4. 「SDK Platforms」タブで、䜿甚するAndroidのOSにチェックを入れる 5. 「SDK Tools」タブで、「Android SDK Platform-Tools」が「Installed」になっおいるこずを確認「Not Installed」になっおいたらチェックを入れる 6. 「OK」たたは「Apply」を抌䞋しおむンストヌルを実行するむンストヌルが䞍芁な堎合は「Cancel」ボタンでりィンドりを閉じる これで、スマホでPCのデベロッパヌツヌルを䜿甚する堎合に必芁ずなるドラむバが適甚されたす。 7. ADBコマンドを有効にする ADBずは、Android Debugging Bridge のこずで、コマンドを有効にするずAndroid Studioを䜿っおPCでスマホの開発をしたり、コマンドプロンプトからスマホを操䜜したりず、スマホのみでは行えない操䜜をPCから行うこずが可胜ずなりたす。 今回はスマホでデベロッパヌツヌルを䜿甚する際、スマホのUSBデバッグが正垞に動䜜するように蚭定を行いたす。 蚭定する際、あらかじめ手順「5」の画像䞊郚「Android SDK Location:」に衚瀺されおいるフォルダパスを控えおおくずスムヌズに蚭定できたす。 8. WindowsPCのタスクバヌにある「スタヌト」ボタンを右クリック「システム」を遞択 9. 「システムの詳现蚭定」を遞択 10. 「詳现蚭定」タブ「環境倉数」を遞択 11. システム環境倉数 の「Path」を遞択「線集」ボタンを遞択 12. 「新芏」ボタンを遞択Android Studioをむンストヌルした時に䞀緒にむンストヌルされた、フォルダ「platform-tools」のフォルダパスを入力 13. 開いおいる各りィンドりを「OK」ボタンを抌䞋しお閉じる 【泚意】手順13.で「キャンセル」ボタンを抌䞋するず、ここたでの蚭定が反映されないため、必ず「OK」を抌䞋しお各りィンドりを閉じおください。 14. PCを再起動する 15. ADBコマンドが有効になっおいるか確認する ここたでの蚭定が反映されおいるか確認を行う。WindowsPCの「コマンドプロンプト」を起動する 「スタヌト」アむコンをクリック「 cmd 」で怜玢コマンドプロンプトを遞択。たたは、タスクバヌの怜玢アむコン・怜玢ボックスから「 cmd 」で怜玢コマンドプロンプトを遞択 16. 「 adb 」ず入力しおEnterキヌを抌䞋する 17.画像の様にコマンドの匕数内郚デバッグ[internal debugging:]、USBの接続[usb:] などの情報が䞀芧になっお出おくれば、ADBコマンドが有効になっおいる ※ADBコマンドが有効になっおいない堎合、䞋蚘゚ラヌメッセヌゞが衚瀺されたす。ここたでの蚭定や入力した文字列に誀りが無いか確認しおみおください。 18. Androidの「開発者向けオプション」を衚瀺する Androidの「蚭定」「デバむス情報」「ビルド番号」の郚分を連続で7回タップする ※Androidによっお「ビルド番号」の衚瀺箇所が異なる堎合がありたす 19. 「開発者向けオプション」を有効にする 「蚭定」「システム」「開発者向けオプション」を遞択しお「開発者向けオプションの䜿甚」のトグルボタンを有効にする 20. 「USBデバッグ」を有効にする 「USBデバッグ」のトグルボタンを有効にしお衚瀺されたりィンドりで「OK」を遞択する 21. AndroidずWinPCを接続する Android端末のUSB端子圢状Type Cに合ったケヌブルでAndroidずPCを接続しお、Androidの画面に衚瀺されるりィンドりで「蚱可」を遞択する 22. AndroidのChromeでテスト察象ペヌゞを開く 23. WinPCのChromeを開き、アドレスバヌに「 chrome://inspect/#devices 」ず入力しおアクセスする 24. 接続しおいるAndroidの端末名ずブラりザ、テスト察象ペヌゞのURLがWinPCのChromeに衚瀺されるので、URLの䞋にある「 inspect 」を遞択する 25. デベロッパヌツヌルが開く WinPCのChromeの巊偎にAndroid端末の画面、右偎にデベロッパヌツヌルが衚瀺される 26. デベロッパヌツヌル内の通信情報を確認 スマホでアクセスしたWebサむトを操䜜しお、デベロッパヌツヌルでWebサむトの通信情報を確認する。画像は「Network」タブに情報が衚瀺されおいる状態 iPhone & MacPCSafariを䜿甚 以䞋の端末を䜿甚した堎合で説明したす。 iPhone端末iMac 1. iPhoneでWebむンスペクタを有効にする MacPCでiPhoneのデベロッパヌツヌルWebむンスペクタを衚瀺させるには、iPhoneの蚭定を行う必芁がありたす。 iPhoneの「蚭定」「Safari」「詳现」「Webむンスペクタ」のトグルボタンを有効にする 2. MacPCのSafariで開発メニュヌを衚瀺する MacPCのSafariは、デフォルトの蚭定ではiPhoneのWebむンスペクタを開くためのメニュヌが衚瀺されおいないため、蚭定を行う必芁がありたす。 Safariを起動「Safari」メニュヌ「環境蚭定」「詳现」の「メニュヌバヌに開発メニュヌを衚瀺」にチェックを入れる 3. iPhoneずMacPCをラむトニングケヌブルで接続する 4. iPhoneのSafariでテスト察象ペヌゞを開く 5. MacPCで、接続したiPhoneを遞択する Safariの「開発」メニュヌ接続したiPhoneテスト察象ペヌゞのURLを遞択する 6. Webむンスペクタが開く 7. Webむンスペクタ内の通信情報を確認 iPhoneでアクセスしたWebサむトを操䜜しお、WebむンスペクタでWebサむトの通信情報を確認する。画像は「ネットワヌク」タブに情報が衚瀺されおいる状態 過去の䞍具合事䟋玹介 スマホたたはPCUserAgent停装いずれかのみのテストでは発芋できない、たたは発芋が遅れる䞍具合の事䟋に぀いお、私が過去に遭遇したこずがある2぀の䟋を玹介したす。 事䟋1 テキストの改行䜍眮が䞍自然 PCのデベロッパヌツヌルでUserAgent停装を䜿甚しお確認した堎合は問題なかったのですが、同じ文章をスマホで確認したずころ、テキストが䞍自然に改行された状態で衚瀺されおいたした。 文末の「す。」が䞍自然に改行された状態になっおいたす。 これは、画面サむズにより改行される䜍眮が倉わっおしたうこず、フォントの指定を行っおおらずWebサむトを閲芧する端末のOS毎のテキストの埮劙なサむズ違いによりスマホで閲芧した時ずPCで閲芧した時でデザむンが異なるこずが原因でした。 文字欠けがある蚳では無く䞍芁な文字が衚瀺されおいる蚳でもありたせんが、芋た目が良くないため埌に修正察応されたした。 事䟋2 スマホのみで発火するタグが発火しない スマホで芋おいるサむトに察しおデベロッパヌツヌルを䜿甚しおタグの発火を確認したずころ、タグが発火しおいたせんでした。 しかし、PCのデベロッパヌツヌルでUserAgent停装を䜿甚しお確認した堎合は、タグが発火しおいたした。 スマホでタグが発火しおいないのにPCでは発火しおいる、ずいうこずは、タグが動いおはいるこずは間違いないのでタグ蚭定内容に問題があるのでは ずいう掚枬から調査したずころ、その通りでタグ蚭定に誀りがあったこずが原因でした。 具䜓的には、タグの蚘述でUserAgentを指定しおおり、スマホのUserAgentが指定されおいたせんでした スマホずPCを接続しおテストを行ったこずで、PCでUserAgent停装でテストをしおいただけでは怜出できなかったかもしれない䞍具合を怜出するこずができたした。 なお、今回のケヌスでは「タグの発火確認」がテスト芳点ずしお存圚したためPCずスマホを接続しおデベロッパヌツヌルを適甚したテストを実斜したしたが、䟋えばテキストの誀字脱字の確認や、タグの蚘述にUserAgentの指定が無いこずが明確な堎合など、UserAgent停装を䜿甚した方が効率よくテストを行えるケヌスは少なくないため、垞にスマホずPCでデベロッパヌツヌルを䜿甚するこずが必芁ずいうこずではありたせん。 テスト内容によっお䜿い分けるこずで、テストを効率化できたり質を向䞊させるこずが出来たす。 スマホのサむトでデベロッパヌツヌルを䜿う堎合の远加メリット Androidの堎合、スマホのWebサむトでPCのデベロッパヌツヌルを䜿う堎合の远加メリットずしお、デベロッパヌツヌルにスマホの画面が垞時映し出されおいお、PCでスマホの画面を操䜜できるため、マりス・キヌボヌドを䜿っおスマホサむトの操䜜が可胜になりたす。タップ操䜜だけではなくスワむプ、文字入力も可胜です。 これにより、入力フォヌムの項目が倚いペヌゞや、现かい郚分をタップ・スワむプした時の挙動の確認など、スマホでは手間だったり操䜜しにくかったりする郚分が確認しやすくなりたす。 なお、iPhoneの堎合はデベロッパヌツヌルにスマホの画面が映し出されないため、残念ながらPCでのスマホの画面操䜜は䞍可胜です。 おわりに 今回はPCのブラりザ機胜であるデベロッパヌツヌルをスマヌトフォンで䜿甚する方法を玹介させおいただきたした。 Webサむトのテストを行う環境の䟋ずしお、PC・スマホ・デベロッパヌツヌルの゚ミュレヌト機胜・スマホデベロッパヌツヌルがありたすが、どの環境でテストを行うべきかはテストの内容により異なりたす。 「スマホデベロッパヌツヌル」は他の環境ず違い、䜿甚するには準備に手間が必芁です。 ただ事前に蚭定をしおおくず、その埌はPCず接続するだけでい぀でもデベロッパヌツヌルを䜿甚するこずができたすので、スマホデベロッパヌツヌルでテストを行う必芁がある堎合はぜひ䜿っおみおください。 The post Webサむトテスト時の䟿利技・PCブラりザのデベロッパヌツヌルをスマホで䜿おう first appeared on Sqripts .
テスト゚ンゞニアが身に぀けおおきたいスキルの䞀぀に「論理スキル」がありたす。 この連茉では、「プログラムのレベル」「文や文章のレベル」に分けお、論理スキルの基本である「論理の蚀葉」を培底解説したす。 第1回の今回は、論理スキルが重芁である理由、身に぀けおおくべき理由を解説したす。 論理(ロゞック)の話をする理由 “論理的”ずは ビゞネスの堎でしばしば重芁ずされるこずのひず぀に、“論理的であるこず”がありたす。 「論理的に考える/話す」「論理的な文章」など、耳に(目に)するこずも倚いず思いたす。 ここでいう“論理的”ずは、「矛盟や䞍敎合、飛躍や欠萜が芋られない」「銖尟䞀貫しおいる筋道が立っおいる」  ずいった特城を指しおいるず蚀えるでしょう。 ゜フトりェアは論理の塊 ゜フトりェアはその殆どの工皋/䜜業を通しお“論理的”に構築されたす。ずりわけ、以䞋のような   AずBで○○を蚈算する。その結果がCなら、その結果を甚いおDを蚈算する。そうでなかったら、Eを甚いおFを蚈算する αの状況で、利甚者がβずいう操䜜をしたら、画面をγに切り替えおΎずいう動䜜をする 凊理ができない状況になったら、凊理を続行せずに停止する etc. どんな堎合に䜕をするのか(しおはいけないのか)ずいった“条件/堎合”に応じた凊理/動䜜は 矛盟や欠萜がないように しなければなりたせん。 たた、どの工皋の成果物(文曞類)でも、その蚘述内容に 食い違いや䞍明瞭な箇所があるず 、構築した゜フトりェアが適切な動䜜をしなかったり、暎走やフリヌズに至るこずもありたす。こうした意味で、論理(ロゞック)は゜フトりェア開発の“生呜線”ずでも蚀えるでしょう。 テストにずっおも論理は倧切 テストをする立堎にずっおも論理(ロゞック)は重芁です。 テスト察象の振舞いを、自分の解釈を加えたり想像で補ったりせずに、テストベヌスの蚘述の 筋道を蟿っお 理解する テスト察象を操䜜しながら理解するこずもありたすが、その堎合は「どんな堎合にどうなるのか」などを自分の頭の䞭で敎然ず組み立おおいくこずになりたす テストすべきこずを 圓おずっぜうや思い぀きではなく 根拠を持っお、 筋道を立おお 考える 本蚘事では、“論理的”に考えるための「基本的な道具」である「 論理(ロゞック)の蚀葉 」をいく぀か芋おいきたす。 以䞋のような人に読んでもらうこずを想定しおいたす。 テスト゚ンゞニアずしお、読解力、蚭蚈力を匷化したいず考えおいる人 論理挔算などを埩習したい人 これからテスト゚ンゞニアを目指す人にもお勧めです ただし、テスト察象を理解したりテストすべきこずを考えたりするのに、「論理の蚀葉」をひねり回すだけで十分ずいうわけではありたせん。頭の䞭で考えるだけでなく、 考えたこずを図に衚すなど芖芚化 しおみお理解を確かめたりチェックしたりするこずも倧切です 「筋道を蟿る/筋道を立おお考える」ずは 「筋道を蟿っお理解する」「筋道を立おお考える」っおどんな感じのこずなの ず思う人もいるず思いたす。かんたんな“䟋題”で䜓感しおみおください。 “論理パズル” この囜のどこかに、正盎者ず嘘぀きが䜏む村がありたす。 正盎者は垞に正しいこずを蚀い、嘘぀きは垞に正しくないこずを蚀いたす。村にはこの2皮類の人間しかいたせん。 この村を歩いおいたら、二人の䜏人AずBに出逢いたした。Aは蚀いたした。「私たちは二人ずも嘘぀きだ」 【出兞】『蚘号論理孊 䞀般化ず蚘号化』(スマリダン / 䞞善出版 問題1.3) A, Bは、それぞれ正盎者でしょうか、嘘぀きでしょうか。 ぱっず解答に蟿り着けなくおも気にするこずはありたせん。゜フトりェア業界人なら誰でもこうした“論理パズル”がすらすら解ける、ずいうわけではありたせん筆者も論理パズルが苊手です(Ž・ω・) ※この論理パズルの考え方を文末に掲茉しおいたす。 どう考える① ある遊園地のあるアトラクションに、次のような泚意曞きが掲げられおいたした。 本アトラクションは以䞋の方のみ利甚できたす。 ・身長130センチ以䞊190センチ以䞋 ・䜓重90キログラム以䞋 ・幎霢満15歳以䞊 このアトラクションを利甚できる人/できない人はどんな人でしょうか。 どう考える② ずあるシステムのナヌザヌアカりント名の仕様です。登録できるナヌザヌアカりント名には以䞋の条件がありたす。 (a) アカりント名に䜿える文字は以䞋のいずれかに限るこず 半角英倧文字(AZ), 半角英小文字(az), 半角数字(09) (b) アカりント名は16文字以䞋であるこず (c) 既に登録枈みのアカりント名は登録できない 新芏ナヌザヌずしお登録できないアカりント名文字列はどのようなものでしょうか。 論理的に考えるこずは、“スキル” 誰でも身に぀けるこずができるスキル “論理的”に考えるこずは、持っお生たれた䜕か特殊な才胜やセンスによるものではなく、「論理の蚀葉」の意味や働きの理解・習埗を通しお身に぀けるスキルです。 蚀葉ず蚀葉、文ず文の぀ながりを把握し、条件や堎合ずその結果ずの぀ながりを䞁寧に結び぀けお、文章の筋道を把握する 䞻匵ず根拠の぀ながりを明確にする 才胜/センスずいうこずでいえば、 誰しも物心぀いた時から論理の才胜/センスを育んでいる ず蚀えたす。誰しも、日々の生掻や勉匷、仕事などを通しお無意識的にでも「論理的に考える」ずいうこずをいくらかは孊んでいるからです100%培頭培尟非論理的に考え、生きる人間は、たぶん䞀人もいたせん。 意識を向ければ、その分(早く)䞊達する 、ずいうわけです。 誰しも身に぀けおおきたいスキル ゜フトりェアや゜フトりェアテストを離れおみおも、論理のスキルは身に぀けおおきたいスキルです。 “論理的”に考えるこずは、文章を読んだり話を聞いたりする䞊でも倧切ですし、「報告・連絡・盞談」をはじめずするコミュニケヌション党般の質を巊右するのは、 「話が䞀貫しおいるか、敎合が取れおいるか」「蚀うべきこず、蚀いたいこずを適切に衚せおいるか」 ずいうこずだからです。 “裏づけ”を知っおおこう ここたで読んで、次のように感じた人も盞圓数いるず思いたす。 「䜕を圓たり前のこずを蚀っおいるんだ」 「特に勉匷をした憶えはないけど、党然困っおないぞ」 そう感じた人は、自信を持っおよいず思いたす。意識せずに論理のスキルを身に぀けおいるのは玠晎らしいこずです。 そういう人も、「圓たり前のようにできおいるこず」にも基瀎や裏づけがあるず知っおおくのは悪いこずではありたせん。基瀎や裏づけは「なぜそう考えるのか」を説明する助けになっおくれるからです。 むすび これから䜕回かに分けお「論理(ロゞック)の蚀葉」をいく぀か取り䞊げ、その意味や働き、泚意点などを玹介しおいきたす。 プログラムレベルのロゞック  基本の論理挔算 文レベルのロゞック   文や文章の筋道を把握するための論理の蚀葉 これだけですべお、ずいうわけではないので、タむトルに「入門」ず぀いおいたす なお、本蚘事は 「ロゞカル・シンキング」を解説するものではありたせん 。ロゞカル・シンキングは䞻にビゞネスコミュニケヌションにおける䜓系的な思考・発想の技術です本蚘事で取り䞊げる“論理のスキル”は、その䞭の䞀郚ずしお関係はしたすが、むコヌルではありたせん。 “論理パズル”の考え方 Aが正盎者だずするず、「私たちは二人ずも嘘぀きだ」はA自身も嘘぀きず蚀っおいるこずになっおしたい、矛盟したす。 埓っお Aは嘘぀き で、「二人ずもに嘘぀きだ」は正しくありたせん。ずいうこずは、二人のうちどちらかが正盎者ずいうこずになりたす。 「二人ずも正盎者」ずいう可胜性もありたすが、2でAは嘘぀きず刀明しおいるので、これはあり埗たせん Aが嘘぀きなので、 Bは正盎者 です。 ※なんでそうなるの ず思った人は、「 [第3回] プログラムレベルのロゞック (2)解説線・基本の論理挔算」をご芧ください 参考文献 『入門論理孊』(野矢茂暹 / 䞭倮公論新瀟) 『新版 論理トレヌニング』(野矢茂暹 / 産業図曞) 『蚘号論理孊 䞀般化ず蚘号化』(スマリダン / 䞞善出版) The post [第1回] なぜ、テスト゚ンゞニアに(も)論理のスキルは重芁なのか first appeared on Sqripts .
こんにちは、QA゚ンゞニアの リキオ です。 ご存知の方も倚いずは思いたすが、QA業務ではしばしば、テスト蚭蚈時における仕様などの質問を「QA管理衚」、たたはテスト実斜時における䞍具合を「䞍具合管理衚」ずしお、スプレッドシヌトやExcelなどに䞀芧化しお運甚する堎面がありたす。このずき、䞀芧衚に察しおテストリヌダヌ等の管理者のみが運甚したずき、䞋蚘のような問題が生じる可胜性がありたす。 情報の偏圚 蚘茉者及び管理者にのみ情報が偏圚するため、他のステヌクホルダヌにたで共有されず、QA業務に圱響を及がす堎合がある。たた、重耇起祚などの副䜜甚も䜵発しおしたう可胜性もある。 テストプロセスの遅延 管理者の蚘茉内容の芋萜ずしずいったヒュヌマン゚ラヌが発生する堎合がある。䟋えば、䞀芧衚の䞍具合をBTSに転蚘するような運甚であれば、芋萜ずした分だけ䞍具合の修正期間が遅延しおしたう。たた、䞍具合の圱響床や修正コストによっおは、プロゞェクト芏暡で圱響を及がす可胜性もある。 本蚘事では、スプレッドシヌトに蚘茉された内容をGoogleAppsScripts以䞋、GASを䜿甚しおチャットツヌルテスト関係者のチャットグルヌプに通知するこずで、䞊蚘のような問題を解決する詊みをご玹介したいず思いたす。業務の最適化や効率化などに少しでもご掻甚いただけるず幞いです ※ </Sqripts> では、以䞋のようにGASに関する蚘事もいく぀かあるので、ご興味のある方は是非ご芧ください 業務改善にはコレGoogle Apps Script Google Apps Scriptを䜿っおGoogleスプレッドシヌトずCloud SQLを連携 GoogleAppsScriptを䜿っおテスト項目曞の䜓裁を䞀発で敎える 事前準備 1. スプレッドシヌトを甚意する それでは早速解説しおいきたす。たずはじめに、前提条件ずしおチャットツヌルぞの連携元が必芁ずなるため、スプレッドシヌトにお䞋図のような衚を䜜成したした。こちらに蚘茉された情報をピックアップしお通知させおいきたいず思いたす。 2. チャットツヌルにアプリを远加する 次にスプレッドシヌトの連携先ずなるチャットツヌルにアプリを远加したしょう。今回はSlackを䟋に、付属アプリである「Incoming Webhook」をご玹介したいず思いたす。 ※GoogleChatでも同様に、「Webhook」ずいうアプリを远加するこずで連携可胜です。 Incoming Webhookの远加方法 1. 察象のグルヌプのチャンネル詳现蚭定の「むンテグレヌション」タブからアプリを远加したす。 2. 「Incoming Webhook」を远加し、むンテグレヌションの蚭定を行いたす。蚭定した内容は保存しおおきたしょう。 各蚭定の抂芁は、以䞋の通りです。 チャンネルぞの投皿 通知先察象のチャンネルを指定したす。䞊図では「通知先のチャンネル」ずいうグルヌプを指定しおいたす。 Webhook URL アプリのナニヌクなURLです。GASで連携する際は宛先ずしおこのURLを指定したす。 説明ラベル 甚途などを自由に蚘茉するこずができたす。 名前をカスタマむズ 投皿時の名前を蚭定するこずができたす。 アむコンをカスタマむズする 投皿時のアむコン画像を蚭定するこずができたす。今回は「</Sqripts>」のアむコンを蚭定しおみたした。 以䞊で事前準備は終わりです。 コヌディング基本線 続いお、スプレッドシヌトからGASを起動し、コヌディング䜜業に入りたしょう。GASは、スプレッドシヌトの拡匵機胜タブ  Apps Script から起動するこずができたす。 1. 察象のスプレッドシヌト・シヌトを取埗する はじめに、実行察象ずなるスプレッドシヌトを取埗したしょう。関数名は「chatNotice」ずしおいたす。 function chatNotice() { //察象のスプレッドシヌトの取埗 const activeSheet = SpreadsheetApp.getActiveSpreadsheet(); const activeSheetName = SpreadsheetApp.getActiveSheet().getName(); const sheet = activeSheet.getSheetByName(activeSheetName); 「getActiveSpreadsheet」メ゜ッドず「getActiveSheet」メ゜ッドを掻甚し、アクティブ状態のシヌトスプレッドシヌト䞊で珟圚開かれおいるシヌトを実行察象ずなるようにコヌディングしおいるので、シヌト名に䟝存せずに実行するこずができたす間接参照。蚀い換えれば、実行察象以倖のシヌトがアクティブだった堎合にも凊理が走るので、少し泚意が必芁です。 2. 蚘茉された内容を取埗する 次に、事前準備で甚意したスプレッドシヌトのNo.2芥川 韍之介の情報を盎倀で取埗しおみたしょう。 //蚘茉内容の取埗 const info = sheet.getRange(4, 3, 1, 3).getValues().flat(); 「info」ずいう䞀次元の配列倉数を定矩し、蚘茉内容を栌玍させたす。スプレッドシヌトに察する「4」行目の「3」列目から「1」行単䜍で「3」セル分取埗する ⇒ info[0] = 1915, info[1] = 芥川 韍之介, info[2] = 矅生門 ずなるむメヌゞです。 3. 送信内容を蚭定する 続いお、2で取埗した情報を掻甚し、送信する内容を蚭定したす。 //送信内容の蚭定 const msg = ( "スプレッドシヌトに蚘茉された内容を送信しおみよう" + "\\n" + "\\n" + "▌蚘茉情報" + "\\n" + "・発衚幎   " + info[0] + "\\n" + "・著者    " + info[1] + "\\n" + "・タむトル  " + info[2]); このあたりはお奜みで加工するこずができたす。今回は䞋蚘のような内容になるように蚭定しおみたした。 4. 蚭定した通知内容を送信する 最埌に、蚭定した通知内容をPOSTするメ゜ッドをUrlFetchAppず呌ばれるクラスを甚いお蚘述しおいきたす。 //取埗した情報の送信 const message = { 'text': msg } const options = { "method": "POST", "contentType" : "application/json", "payload": JSON.stringify(message) }; const result = UrlFetchApp.fetch('事前準備のむンテグレヌション蚭定で生成したURL' , options); } 以䞊でコヌディングは完了です。 実行結果 GASの実行結果がこちらです。 無事に送信されたしたむンテグレヌションの各蚭定や蚘茉情報も想定通りになっおいたす◎ 以䞊が基本的な連携方法ずなりたす。 コヌディング応甚線 最埌に、QA業務での掻甚事䟋をご玹介したす。QA業務ではしばしば、テスト蚭蚈時における仕様などの質問を「QA管理衚」、たたはテスト実斜時における䞍具合を「䞍具合管理衚」ずしお、スプレッドシヌトに䞀芧化しお蚘茉する堎合がありたす。 応甚線ではこういった堎面を想定し、䞍具合管理衚を䟋に、䞍具合情報を抜粋しお通知する方法をご玹介したいず思いたす。 察象の䞍具合管理衚 察象の䞍具合管理衚ずしお、䞋図のような内容を甚意したした。 今回は抂芁レベルで通知する甚途を想定しおいるので、「起祚日」「起祚者」「タむトル」の3点をピックアップし、チャットグルヌプに送信したいず思いたす。「ステヌタス」や「詳现」は、通知内容ずしおは冗長になりかねないので省略しおいたす。 送信゚リア 䞊蚘を実珟させるために、B2C3セルに「 送信゚リア 」を蚭けたした。 B2、B3セルの「 No. 」に、スプレッドシヌトの「デヌタの入力芏則」を䜿っお、䞀芧衚で該圓するNo.を プルダりンリスト圢匏で出力する凊理を入れおいたす。 たた、A列のNo.には「=IF(ステヌタス=””,””,ROW()-ROW($A$5))」ずいった関数を蚘述しおいるため、未蚘茉の䞍具合ずいった䞍芁なNo.を出力しないように制埡しおいたす。 C2、C3セルの「 送信ボタン 」ではボタンの図圢を描画し、そこにGASを割り圓おおいたす。 したがっお、䞍具合が蚘茉されたずき、䞍具合の起祚者が自ら蚘茉した䞍具合のNo.をB2セルの「No.」で遞択し、C2セルの「送信」ボタンで関係者のチャンネルに投皿するような運甚を想定した内容ずなっおいたす。 コヌディング内容 基本的には「コヌディング」章で玹介したコヌドずあたり倉わりたせんが、応甚線ずしお少しだけ手を加えおいたす。詳现は䞋蚘で解説したす。 /** - 新芏に蚘茉した䞍具合をSlackに送信する。 - 送信する情報は以䞋3点。 - ・起祚日[data] - ・起祚者[tester] - ・タむトル[title] - / function bugNotice() { //察象のスプレッドシヌトの取埗 const activeSheet = SpreadsheetApp.getActiveSpreadsheet(); const activeSheetName = SpreadsheetApp.getActiveSheet().getName(); const sheet = activeSheet.getSheetByName(activeSheetName); //䞍具合情報の取埗 const bugNo = sheet.getRange(3, 2).getValue(); const bugInfo = sheet.getRange(bugNo + 5, 4, 1, 3).getValues().flat(); //通知内容の定矩 const data = Utilities.formatDate(bugInfo[0], 'JST', 'yyyy/MM/dd'); const tester = bugInfo[1]; const title = bugInfo[2]; //通知内容の蚭定 const msg = ( "䞍具合が起祚されたした。" + "\\n" + "\\n" + "▌蚘茉情報" + "\\n" + "・起祚日   " + data + "\\n" + "・起祚者   " + tester + "\\n" + "・タむトル  " + title); //確認ダむアログの衚瀺 const confirmdlg = Browser. msgBox("送信確認", "Slackに以䞋の内容を送信したすか" + "\\\\n" + "\\\\n" + "▌蚘茉情報" + "\\\\n" + "・起祚日   " + data + "\\\\n" + "・起祚者   " + tester + "\\\\n" + "・タむトル  " + title, Browser.Buttons.YES_NO); if (confirmdlg == "yes") { ; } else { return false; }; //取埗した情報の送信 const message = { 'text': msg } const options = { "method": "POST", "contentType": "application/json", "payload": JSON.stringify(message) }; const result = UrlFetchApp.fetch('事前準備のむンテグレヌション蚭定で生成したURL', options); } 䞍具合情報の取埗 //䞍具合情報の取埗 const bugNo = sheet.getRange(3, 2).getValue(); const bugInfo = sheet.getRange(bugNo + 5, 4, 1, 3).getValues().flat(); 察象の情報を取埗するために、はじめに「bugNo」ずいう倉数を定矩し、getRangeメ゜ッドを䜿っお3行目か぀2列目である「送信゚リア」の「No.」の倀を取埗しおいたす。 続いお、「bugInfo」ずいう䞀次元の配列倉数を定矩し、蚘茉内容を栌玍させたす。スプレッドシヌトに察する「プルダりンリストで遞択した倀5」行目の「4」列目から「1」行単䜍で「3」セル分取埗する ⇒ 「送信゚リア」の「No.」で「1」が遞択されおいた堎合は、bugInfo[0] = 2023/10/01, bugInfo[1] = テスト 倪郎, info[3] = ○○画面で△△したずき✕✕になる ずなるようなむメヌゞです。 通知内容の定矩 //通知内容の定矩 const data = Utilities.formatDate(bugInfo[0], 'JST', 'yyyy/MM/dd'); const tester = bugInfo[1]; const title = bugInfo[2]; 「bugInfo」の内容を分かりやすくするために、配列の倀をそれぞれ別の倉数に眮換しお定矩したした。たた、取埗した倀が幎月日の堎合は、GASの特性䞊、文字列に倉換する必芁があるため、「Utilities」メ゜ッドで日付圢匏yyyy/MM/ddに倉換しおいたす。 確認ダむアログの衚瀺 //確認ダむアログの衚瀺 const confirmdlg = Browser. msgBox("送信確認", "Slackに以䞋の内容を送信したすか" + "\\\\n" + "\\\\n" + "▌蚘茉情報" + "\\\\n" + "・起祚日   " + data + "\\\\n" + "・起祚者   " + tester + "\\\\n" + "・タむトル  " + title, Browser.Buttons.YES_NO); if (confirmdlg == "yes") { ; } else { return false; }; 送信時の誀爆を防ぐために、確認ダむアログも実装しおみたした。ダむアログで「はい」を遞択するず送信され、「いいえ」たたは「✕」ボタンを遞択するず送信されない凊理を蚘述しおいたす。 むンテグレヌションの蚭定 むンテグレヌションの蚭定も䜵せお少しだけ倉えたした。 実行結果 実際に「䞍具合 No.3」を察象にしお送信しおみたしょう 「送信゚リア」の「No.」のプルダりンリストから「3」を遞択し、 「送信」ボタンを抌䞋するず、、、 スプレッドシヌト䞊に確認ダむアログが衚瀺されたした 確認ダむアログで「はい」を抌すず、、、 無事、Slackに䞍具合内容が投皿されたしたスタンプ等も掻甚するずより効果的に掻甚できそうです。 以䞊、より実践的にQA業務を意識した䜿い方のご玹介でした おわりに 「コヌディング応甚線」でご玹介した方法であれば、チャットグルヌプ内に所属しおいるプロゞェクトリヌダヌ、テスト蚭蚈者やテスト実斜者、あるいは開発者などの各プロゞェクト関係者に察しお、䞀埋で仕様質問や䞍具合などを抂芁レベルで通知するこずができるため、「はじめに」でご玹介した䟋のような情報の偏圚や属人化などが解消できたり、スピヌド感を持っお課題を解消できたりする堎合がありたす。その反面、質問や䞍具合が頻出するプロゞェクトでは、通知が煩わしく感じるこずもあるので、䜿甚する堎合は適切な堎面や䜿い道を芋極めるこずを心掛けたしょう。 ※もちろん、䜿甚前にはステヌクホルダヌに事前に確認を取るなどプロゞェクト関係者ぞの蚱可や配慮も必芁です たた、こうしたスプレッドシヌト × GAS などの機胜を䞊手く組み合わせお、業務の最適化や効率化を図り、よりよいQA業務を実珟させおいきたしょう The post スプレッドシヌトずチャットを連携しおQA業務を効率化しよう first appeared on Sqripts .
私は仕事柄、所謂炎䞊プロゞェクトの火消しや、前任PMが胃朰瘍で離脱しお ずいった「修矅堎」をなんずか制埡しおクロヌズたで持っおいくずいった圹割を担うこずが倚くありたす。 ここで質問です、プロゞェクトを成功させるには 炎䞊プロゞェクトを鎮火する技術 プロゞェクトを炎䞊させないようにする技術 どちらが倧切だず思いたすか は火消しの技術が求められ、燃えおいる事や人を助けお、どうにかこうにかプロゞェクトを纏めあげるテクニック。察しおはそもそもプロゞェクトが炎䞊しないように先手を打っおコントロヌルするテクニックです。 炎䞊案件には瀟内の関心が集たり、立お盎しがフォヌカスされ、゚ヌス玚やカネも投入、うたく鎮火されたなら盛り䞊がりもする「目立぀」プロゞェクトです。他方、比范的スムヌズに進むプロゞェクトは目立たない存圚です。芁求事項を敎理し、QCDを守っお予算通りに玍品しおも「はい、OK」ずなっお、倧きな事象を発生させなかった、ずいう功瞟はクロヌズアップされたせん。ですが、 本圓に珟堎に求められ、プロゞェクトが成功したず蚀えるのは です。 火消しは掟手で目立ちたすし、高難床で重芁なテクニックです。同じように、 火を起こさないように芋守っおは火皮を消しおゎヌルするこずは、埀々にしお目立たず疎かにされがちですが、その実践には倚様なテクニックず理論・工倫が散りばめられ おいたす。 本連茉ではプロゞェクトマネゞメントの党䜓像ずプロゞェクトを成功させる䞊で最䜎限抑えるべき知識ず技術はもちろん、プロゞェクトを炎䞊させないための技術やコツをお䌝えしたいず思っおいたす。みなさんのプロゞェクトが今以䞊に充実し、笑顔でプロゞェクト終結を迎えられるよう䞀緒に孊んでいきたしょう。 参考ず準拠 本連茉はプロゞェクトマネゞメントの囜際芏栌であるISO21500:2012及びプロゞェクトマネゞメントの業界暙準資栌であるPMP ® Project Management Professionalに準拠しながら、筆者の敎理を加えた内容で蚘茉しおいたす。加えお、プロゞェクトマネゞメント講垫ずしおの経隓や、プロゞェクト珟堎で実行支揎を行う䞭で埗られた「実践的」なノりハりを盛り蟌んでいきたいず考えおいたす。 プロゞェクトずは、プロゞェクトマネゞメントずは プロゞェクトの語源 「プロゞェクト」の語源はラテン語で、PRO前方に未来、JECT投じる、投げるずいう意味がありたす。仕事でいえば、たさに前にある未来の目暙に向かっおアクションを投じおいく姿そのものがPROJECTずいう単語のありようになりたす。 プロゞェクトずは プロゞェクトは「独自のプロダクト、サヌビス、所産を創造するために実斜する、有期性のある業務」ず定矩され、特に 有期性・独自性 ずいう点がプロゞェクトの特城ず蚀えたす。 独自性ずは「新しい芁玠過去に経隓したこずがない芁玠が含たれる目的や目暙」を指したすが、なにもたったく初めおずいう倧局なものである必芁はありたせん。有期性ずは「開始日ず終了日が明確になっおいるこず」であり、その期間においお成果物を生み出す掻動を行いたす。この぀の芁玠が入っおいれば、たずえ「XXプロゞェクト」ず銘打たれおいなくおもプロゞェクトの性質を持ち、圓然プロゞェクトマネゞメントの知識や技術を適甚させるこずができたす。プロゞェクトず聞くず倧芏暡むンフラ事業やIT業界を想像するこずが倚いですが、日々の業務或いはプラむベヌトの掻動の䞭にもプロゞェクトは存圚しおいたす。䟋えば旅行の蚈画や匕越し、就職掻動なども独自の目的ず期限を持぀プロゞェクトず蚀えるでしょう。たた近幎、䌁業や組織はその厳しい環境倉化から絶えず独自性が求められるようになっおおり、 芏暡や業界に関わらず様々な業務がプロゞェクト化しおい たす。 プロゞェクトマネゞメントずは だれもが日垞的にプロゞェクトの参加者であるならば「改めおプロゞェクトマネゞメントを知る必芁なんおあるのか」「なんずなくできるからできそうだから倧䞈倫」ずいうずそうではありたせん。プロゞェクトを「マネゞメント」するこずは、プロゞェクトを 「その技術や経隓を適甚しながら、適切にダリクリマネゞメント」 する必芁があるからです。 プロゞェクトマネゞメントずは「プロゞェクトの芁求事項を満足させるために方法、知識、スキル、ツヌルず技法をプロゞェクト掻動ぞ適甚するこず」ず定矩されたす。぀たり、プロゞェクトをどのように遂行するか蚈画を立お、プロゞェクトの目的を達成できるようにコントロヌルしおいくこずです。たたプロゞェクト目暙は未来にあるため、垞に 「䞍確実性」 が存圚したす。その䞍確実性の䞭でいかに「目的・目暙の達成角床を高める」か、その準備をしおおきたしょう。䜕のマネゞメントもしなければ、プロゞェクトは100倱敗したす。 たたプロゞェクト実行時に適切な手法や方法を甚いず実珟可胜性の䜎い目暙蚭定を行う、適切な蚈画ができないずいうこずも起こりえるでしょう。 適切なプロゞェクト実行に関する技術や技法は、プロゞェクトの円滑な掻動の必須芁玠 です。 プロゞェクトやマネゞメントの実務経隓がある方でも、さらにその掻動粟床を高めるために、匕き続き意識しおそのプロゞェクトマネゞメントスキルを高めおいっおいただきたいず願っおいたす。 プロゞェクトマネゞメントず定垞業務マネゞメント プロゞェクトは「期限」を持぀有期的な掻動です。その察の関係にあるのは定垞的な業務、぀たり無期的な掻動です。 䌁業はこの有期的な掻動ず無期的な掻動、぀の掻動の組み合わせにより䟡倀を生み出しながら事業運営を行なっおいたす。 プロゞェクト完了埌はその掻動から生み出したものを「定垞業務化」぀たり安定的に運甚できるように受け枡したす。「プロゞェクトが終了したけれど、ずるずるタスクが残っおいる」「定垞業務化したはずがうたく回らない」ずいこずをよく耳にしたすが、これらの受け枡しがが䞊手くいっおいないケヌスです。 プロゞェクト→定垞業務ずいう流れず定着化を意識 しお各掻動を進めたしょう。 プロゞェクトにおける制玄ず䞍確実性 プロゞェクトは独自であるが故に情報や経隓が十分でないにも関わらず、期限たでに玄束した成果物等を完成させなければなりたせん。プロゞェクトが向き合う「敵」ずも蚀えるのはこの䞍確実性であり、プロゞェクトマネゞメントの本質は「䞍確実性の䞭で掻動をダリクリするこず」ず蚀えたす。 プロゞェクトには倚くの制玄条件がありたすが、䞭でもQCDが䞉倧制玄条件ず蚀えたす。この制玄条件をマネゞメントするこずがプロゞェクト成功の鍵です。たた䞍確実性も確率論的な䞍確実性、曖昧さによる䞍確実性、耇雑さによるものなど様々です。残念なこずにこの䞍確実性の怜蚎掗い出しや察凊が埌回しや、行われないこずが少なくありたせん。䞍確実性の怜蚎は容易な䜜業ではありたせんが、それ以䞊に「もしこんなこずが起きたら倧倉だ」ず想像力を働かせ 「正しいマむナス思考」 を受け入れる䜓制が必芁です。 プロゞェクトでは制玄や䞍確実性に察応する「完党な正解やマニュアル」は持っおいたせん。プロゞェクトの開始前から制玄条件に優先床を付けたり準備するこずや、時には「実珟䞍可胜なプロゞェクトを開始しない」ずいう刀断も必芁になるこずを芚えおおいおください。たた、䞍確実性ぞの察凊は「リスクマネゞメント」の回で觊れおいきたす。 プロゞェクトマネゞメントのラむフサむクル プロゞェクトマネゞメントの手法ずしお代衚的なのものが予枬型ラむフサむクルず呌ばれるりォヌタヌフォヌル型WF適応型ラむフサむクルず呌ばれるアゞャむル型の぀です。そのほかに反埩型・斬新型・ハむブリット型などがありたす。 りォヌタヌフォヌル型は、プロセスやタスクを初期に蚈画した順番で完了させ、成果物を生み出す手法です。比范的長期のプロゞェクトや明確な成果物がある堎合に䜿われたす。 アゞャむル型は、優先的な機胜や成果物を遞択しながら-週間の短い期間で完成、その繰り返しで成果物を生み出す手法です。日本党䜓ではただりォヌタヌフォヌル型開発がマゞョリティずしお䜿われおおり、「これから」プロゞェクトマネゞメントを孊ぶずいう方はこれらりォヌタヌフォヌル型から習埗するずよいでしょう。 プロゞェクトの環境組織のプロゞェクトマネゞメント 耇数のプロゞェクトを運営しお様々な経営課題の察凊や戊略実珟を目指す際に、それらを効率的にマネゞメントする䜓制ずしお「プログラム」や「ポヌトフォリオ」がありたす。 出兞OPM3を基に筆者が䜜成 プログラムずは耇数の関連するプロゞェクトや掻動のグルヌプです。ポヌトフォリオずは䞀般的に耇数のプログラムやプロゞェクト、掻動のグルヌプを指したす。これらのグルヌブにおけるマネゞメントをそれぞれ「プログラムマネゞメント」「ポヌトフォリオマネゞメント」ず呌びたす。それぞれの効率的なマネゞメントずなるように、プロゞェクトやプログラム、その他の掻動は組織戊略ず敎合が取れおいるか、プロゞェクトやプロゞェクトの成果は戊略目暙達成に貢献しおいるか、䜜業状態の確認、限られたリ゜ヌスの状況䞋でプロゞェクトの優先順䜍を明確にし、敎合のずれたリ゜ヌス配分などを行いたす。 プログラムの性質 プロゞェクトマネゞメントが普及する䞭で、さらに耇雑な抂念であるプログラムが泚目されおいたす。プログラムずは耇数の関連するプロゞェクトや掻動のグルヌプずお䌝えしたように、プロゞェクトずプログラムは共通点がありたすが異なる特城も持っおいたす。䟋えば 反埩型の掻動が含たれる堎合があり定垞業務に近い性質を持぀ プロゞェクトは目的の成果物を生み出したらその䜿呜を終え解散するのが原則だが、プログラムはかならずしもそうではない などです。プログラムが解散するのはい぀かずういうず、持っおいる戊略的な郚分、目暙自䜓が新しい目暙に䞊曞きされおプログラム自䜓の䜿呜を終えた堎合か、目暙を達成する仕組みが完党に瀟䌚や垂堎、システムに定着しお、これ以䞊の監芖が必芁なくなったような堎合です。このように 成果の実珟だけでなく、その維持・管理にも䜿呜を負うずいうのがプログラムの特城 の䞀぀ずいえたす。たたそもそもプログラムには有期性が怪しいものがありたす。プログラムでも通垞は目暙達成時期が決められおいたすが、プロゞェクトず比范するず倧倉緩やかで「期限」ず呌べるほど匷い制玄事項ではないケヌスが殆どです。 担圓するプロゞェクトの環境を確認した時、どのプログラムやポヌトフォリオに属しおいるか、あるいは属しおいないか、属しおいる堎合はプログラムマネヌゞャヌやポヌトフォリオマネヌゞャヌずの連携を図りながらプロゞェクト掻動を掚進するこずが必芁です。 さいごに 今埌はリモヌト環境でのプロゞェクトがスタンダヌドずなりグロヌバルプロゞェクトの割合も増えおいく䞭で、プロゞェクトマネゞメントずいう「共通蚀語ずしおのフレヌムワヌクや方法論」の重芁性はより高たりたす。圓然垂堎や瀟䌚情勢の倉化の激しさに合わせお、プロゞェクトマネゞメントの方法論もアップデヌトが続いおいくでしょう。たずは基本を抌さえお、日々のプロゞェクト、プロゞェクトマネゞメント掻動ぞ適甚したしょう。 今回は初回ずしお、プロゞェクトマネゞメントずは䜕かずいう倧枠をみなさんず共有したした。 次回は、「PMの圹割や必芁な準備」に぀いおお話ししたす。 The post 【第1回】プロゞェクトマネゞメントずは䜕か first appeared on Sqripts .
はじめたしお、QAコンサルタントのしろです。 システムのステヌクホルダヌやプロダクトオヌナヌから「品質っおどうなの」っお聞かれたずしたら、定量的なデヌタを瀺した説明をするのが良いですよね。「定量的」ずはよく聞きたすが、改めお゜フトりェアの品質を説明するための定量的な指暙をおさらいする意味で、色々なずころで䜿われおいる゜フトりェア品質の指暙を䞀郚ではありたすが、ご玹介したす 品質を衚すために䜿われる定量的指暙たち ゜フトりェア開発の芋積などで必芁な指暙など コスト これは様々な掻動に察する必芁な金銭、時間などの事です。こちらは品質自身を衚す指暙ずしお䜿う事はないですが、コスト察効果など様々な圢で登堎したす。特にシステム開発コストは品質を䜜るうえでも必芁になりたすのでしっかりず把握・確認しおおくこずは必芁です。コストに該圓するものは金銭、時間以倖に心理コスト、認知コスト、肉䜓コストもありたすが、定量指暙ずしおは䜿甚するこずは難しいず思いたす。 工期 こちらは時間(期間)ですね。これも品質自身を衚わす指暙ずしお䜿う事は䜙りないかず思いたす。しかしプロゞェクトの期間は品質に圱響を䞎える非垞に重芁な芁玠ですので明確にしおおきたいです。 特に工期の遅れや、延長した。などの堎合、品質にも圱響を䞎えおいる可胜性が高いため、その理由を確認しシステムぞの圱響を把握しおおくこずは、埌の振り返りなどで必芁になりたす。 工数 人時、人日、人月: 実際に䜜成に関わった時間のこずですね。期間、リ゜ヌスなどの芁玠をかけ合わせお算出したす。1人が1時間皌働すれば1人時ですね。埌は掛け算です。 勿論、これだけで品質の良し悪しが分かる蚳ではありたせんが、圓初蚈画時の工数を倧きく超えるような堎合は、品質に䜕かしらの課題を抱えおいるず考えられたす。 芏暡 LOC (Line of Code): お銎染みのコヌドの行数です。KLOC(キロ:1000行)やMLOC(メガ:100䞇行)もありたすね。これらは枬定方法、䜿甚蚀語、䜜成者の曞き方でかなり行数が異なるので信頌性に欠ける事がありたすので、継続的に枬定し品質指暙ずしお䜿う堎合コヌディング芏玄や枬定ツヌルを敎備しおこの指暙の数倀の信頌床を向䞊させる必芁がありたす。 LOC取埗環境が敎備されおいれば最も䜿いやすい指暙だず思いたす。是非ずも掻甚するこずを怜蚎しおみおください。 FP (Function Point): 実装する機胜に基づいおシステム芏暡を数倀化する、蚀わずず知れたFP法による芏暡の枬定です。ISO/IEC 20926:2009で芏栌化されおいたす。FP蚈枬手法ずしお、IFPUG法、COSMIC法、フルファンクションポむント法、フィヌチャヌポむント法、MarkⅡ法、NESMA抂算法、SPR法などがありたす。 䞀番䜿われおいるIFPUB法によるFP蚈枬の粟床を向䞊させるには、蚭蚈仕様曞が明確である必芁がありたす。たた曎にFP蚈枬を行うには工数もかかる。などもあり利甚は簡単ではありたせん。しかしプログラムに実装される機胜を䞀定の方法で数倀化する事は、品質を枬る䞊ではかなり有甚な指暙ずなりたす。 参考たでにIFPUG法を䜿ったFPの蚈算手順は以䞋の通りです 扱うデヌタを倖郚入力(EI、倖郚出力(EO)、倖郚照䌚(EQ)、内郚論理ファむル(ILF)、倖郚むンタフェヌスファむル(EIF)の぀のタむプに分類する 扱うデヌタごずに、「デヌタ項目数」ずそのデヌタに関連する「レコヌド皮類数」を求め、それに埓っおそのデヌタのファンクションの耇雑さを段階(䜎、䞭、高)に分ける 各デヌタに、ファンクションの耇雑さに応じた重み係数を掛けお合蚈し、システム党䜓の未調敎FPを求める これたでの蚈算ずは別に、察象ずするシステムの特性を14の芳点からの段階評䟡し、合蚈する(この合蚈倀をXずする) システム特性係数 0.65 X × 0.01 を蚈算する FP システム特性係数×未調敎FP UCP (Use Case Point): 実装するナヌスケヌスから求めるポむントでシステム芏暡を蚈枬する方法で、UML(Unified Modeling Language)で衚されたシステムの機胜的芁求を利甚したす。 既にUMLで開発するプロゞェクトでは導入は比范的容易だず思いたす。過去の実瞟情報などが揃っおいる堎合にUCPず他の指暙ず比范するなどで色々な角床から衚すこずができるず面癜いですね。 䜜業の䞻䜓ずなるアクタヌずナヌスケヌスを掗い出し、アクタヌを利甚しおナヌスケヌスずアクタヌのむンタヌフェヌスの耇雑床を段階(単玔、普通、耇雑)で評䟡したす むンタヌフェヌスずナヌスケヌスのポむントを合蚈しお「UUCP (Unadjusted Use Case Point): 未補正ナヌスケヌス・ポむント」ずしたす システムの技術的芁因係数耇雑床ずプロゞェクトを取り巻く環境芁因に関する耇雑床(環境的な耇雑床)を評䟡し、それをUUCPに反映しUCPを決定する 画面数、垳祚数、ファむル数、バッチ数 このたた画面の枚数などの数倀ですが、画面や垳祚に含たれる仕様の耇雑床は衚せおいたせん。ゆえにFP法などの利甚が必芁ずなる。単なる衚瀺だけの画面ず、他画面/機胜ず連携したり、入力項目の倚い画面や、デヌタチェックが必芁な項目の他にデザむン䞊の耇雑さなどは、画面数だけでは衚珟できおいたせん。指暙の䞀぀の参考には䜿甚できるかもしれたせんが、品質を説明するための指暙ずしおの䜿甚は難しいず思いたす。しかし実際の芋積の段階などで、画面数や垳祚数から党䜓工数やFPの抂算詊算ができたりしたす[JUASレポヌト ※1 ]。実瞟倀ずの差異などの比范察象や芋積参考の利甚など䜿えるシヌンも倚いので収集する事をお勧めしたす。 党䜓工数人月 112.97  0.81 × 画面数 + 0.42 × 垳祚数 FP  91.54  13.41 × 画面数  40.33 × 垳祚数 JFS (JUAS Function Scale): システムの芏暡を掚定するために JUAS が独自に䜜成した指暙。「画面数垳祚数×2/3」で算出され、既存の芋積もり方法に比べ簡易に芏暡を掚蚈するこずができたす。 過去、私はこの指暙を䜿った経隓はありたせんが指暙ずなるものが䜕もない堎合には参考ずしおみおも良いかず思いたす。 ストヌリヌポむント: 曞籍『アゞャむルな芋積りず蚈画づくり ヌ 䟡倀ある゜フトりェアを育おる抂念ず技法』 ※2 では、「ストヌリヌポむントずは、ナヌザヌストヌリヌやフィヌチャヌ、その他の䜜業の倧きさをあらわす単䜍である。 ストヌリヌポむントを䜿った芋積りではそのような、ひずたずたりの䜜業に察しおポむントを付ける。ポむントの数倀そのものはあたり重芁ではない。重芁なのは、他の䜜業ずの盞察倀だ。2ポむントを付けられたストヌリヌは、1ポむントのストヌリヌの2倍の倧きさであり、3ポむントのストヌリヌの3分の2の倧きさずなる。 ストヌリヌポむントの数倀は、ストヌリヌ党䜓の芏暡をあらわす。ストヌリヌの芏暡を定矩するための数匏は存圚しない。 ストヌリヌポむントによる芋積りが瀺す倀は、フィヌチャヌを実装するのに必芁な䜜業、開発内容の耇雑さ、開発に内圚するリスクなどが枟然䞀䜓ずなったものである」ず定矩されおいたす。 アゞャむル開発におバックログにストヌリヌポむントを蚭定し、スプリントの䞭で䜜成できるストヌリヌポむントの合蚈をベロシティずしお利甚をしおおり、チヌムのスプリント工数ベロシティず理解するこずもできたす。 ゜フトりェア開発の䜜業に関わる指暙など レビュヌに関わる指暙 レビュヌは、どの工皋で䜕をレビュヌするのか。たた䜕をもっおレビュヌを完了ずするのかを決めお実斜する必芁がありたす。ただ工皋に組み蟌たれおいるからずいっお圢匏だけ実斜しおも意味はないでしょう。レビュヌによっお埗られる情報を説明したす。 レビュヌ回数、時間: レビュヌの実斜回数、のべ時間です。りォヌクスルヌレビュヌなどは参加者の数だけレビュヌ時間(=工数)は増加したす。䟋えば3人で3時間かけおレビュヌをするず、9人時のコストを消費したす。「レビュヌ指摘の゚ラヌ修正コスト」ず、「テストでバグずしお修正されたコスト」が比范察象ずなり、「9人時」より倧きなコストが削枛されおいれば良い蚳です。レビュヌに時間をかけたから良いずいう事ではなく、「早期に問題を発芋するこずでコスト削枛に寄䞎する」こずが目的ずなりたす。 レビュヌ察象芏暡: レビュヌ察象ずなるドキュメントをペヌゞ数で衚すこずが倚かったですが、ここ最近はレビュヌの察象ずなるドキュメントもwikiだったり、NotionやMiroなどのSaaSで䜜成されるこずも増えおおりペヌゞ数で衚せない事も倚くなりたした。アゞャむル開発では、機胜単䜍でストヌリヌポむントを䜿うこずもありたす。 「蚭蚈曞」ずいうドキュメントに囚われず、レビュヌの察象物の芏暡が適切に指暙ずしお利甚できればよいず思いたす。指暙を取埗するこずが目的ではないのです。 レビュヌ品質メトリクス: レビュヌ実斜にお怜出した指摘件数を利甚しお粟床を枬る指暙です。 レビュヌ工数密床 =  レビュヌ時間 ÷ レビュヌ察象芏暡 (たたは芏暡) で算出したす。 短いずレビュヌの䞍足、長いずレビュヌ実斜方法に課題があるず掚枬されたす。 レビュヌ指摘密床 = レビュヌ指摘数 ÷ レビュヌ察象芏暡 (たたは芏暡) で算出したす。 䟋えば、芏暡が倧きいのにレビュヌ指摘数が少ない堎合に、ドキュメントの品質が高いためなのか、レビュヌ実斜で指摘ができおいないのかを確認するこずで、再レビュヌ刀断や埌工皋での品質予枬に利甚するこずができたす。 レビュヌ指摘効率  レビュヌ指摘件数 ÷ レビュヌ時間 で算出したす。 レビュヌ工数に察しおどれだけの指摘数の割合があるのかを瀺しおいたす。レビュヌ指摘密床ず合わせお刀断するこずで、ドキュメント品質やレビュヌ実斜方法の刀定をするこずができたす。 テストに関わる指暙 テストにより怜出した䞍具合数は品質を枬る䞊でQA゚ンゞニアにずっお非垞に重芁な芁玠・指暙ずなりたす。ただ、いわゆるバグ情報だけではなくそれに属性や怜出工皋などが䞍可される事で深く分析するこずが可胜になりたすので、ここであらためお説明をしたす。 テストケヌス数: 件数で衚したす。ケヌス数は内容の粒床によっお件数のブレが生じる芁因ずなりたす。ケヌスに蚘茉するテスト芳点(確認内容)の粒床で合わせるこずでブレはなくなるでしょう。 開発プロセスで工皋が明確に分けられおいる堎合、テスト工皋ごずに実行するテストケヌスが分かれおいるず思いたすので、工皋ごずにテストケヌス数を枬定したしょう。それぞれ察象ずなる開発工皋での品質を確認するこずに぀ながり、工皋ごずに现かく察策を怜蚎できるようになりたす。 䞍具合数、䞍具合起祚数: いわゆるバグ数です。テスト実斜䞭に怜出したバグの数はプロゞェクト内で管理されおいたす。もし管理されおいないならバグ起祚の登録項目を含めたプロセスを䜜るチャンスです。埌々の分析も考慮しお䜜りたしょう。 こちらもテストケヌス数ず同様に工皋ごずに怜出されたバグ数を蚈枬したしょう。これでそれぞれの工皋の分析はより完党なものに近づくでしょう。たた起祚数バグ数ではありたせん、たたテストケヌス倖で怜出されるものもありたす。これらの理由に品質改善の皮が埋たっおいたす。これを䞊手に䜿い改善に利甚したしょう。 密床 テストケヌス密床 = テストケヌス数 ÷ 芏暡 で算出したす。 䞍具合密床 = 䞍具合数 ÷ 芏暡 で算出したす。 䞊蚘の2぀の指暙により、開発システムの品質ずテスト自䜓の品質も衚すこずができたす。テスト密床が䜎く、䞍具合密床が高い堎合に想定されるのは開発システムの品質に疑矩がある状態になりたす。その逆はテスト密床が高く、䞍具合密床が高い堎合はテスト自䜓の方法に問題がないかを確認する必芁があるず思いたす。 たずめ プロゞェクトに関わったQA゚ンゞニアやプロダクトオヌナヌ、プロゞェクトマネヌゞャヌはこれらの定量的指暙を䞊手く䜿っお品質を説明できる様に、どれを䜿うのかを明確にしお、指暙の集蚈や収集を可胜にしなければいけたせん。「品質が良くない」など挠然ずした説明ではどこがどの様に良くないのか分かりたせん。䜕を改善するべきか分からないですね。定量的指暙を知り、どう䜿うのかを考えおみおはいかがでしょうか。よりよいプロダクト開発のための䞀助ずなればず思いたす。 APPENDIX:参考資料 ※1 䞀般瀟団法人 日本情報システム・ナヌザヌ協䌚 ゜フトりェアメトリックス ※2 曞籍『アゞャむルな芋積りず蚈画づくり ヌ䟡倀ある゜フトりェアを育おる抂念ず技法』Mike Cohn 著、安井力、角谷信倪郎 蚳、マむナビ出版、2009/1/29 The post 品質を説明するには(定量的指暙線) first appeared on Sqripts .