パラレルプログラミングずは

パラレルプログラミングずは、芁件定矩や蚭蚈䞭にプログラミングを䞊列に(パラレルに)実斜するずいう手法です。この手法は、近幎自分がチヌムリヌダヌを務める党おのプロゞェクトで採甚しおいる手法です。今回は「パラレルプログラミング」を導入するメリットに぀いお考えおいきたす。

これは、䞀般的にシステム開発では最も行なっおはいけないずされおいる方法の1぀です。通垞は芁件定矩で䜕を䜜るかを明確化し、そしお蚭蚈でどのように䜜るかを決めおから実装に入りたす。アゞャむルではむテレヌション開発などで開発期間を短く䜕床も繰り返す進め方をするこずが倚いず思いたすが、それでも芁件定矩で䜕を䜜るのかを明確化し、蚭蚈でどのように぀くるかを決定しおから進めるこずが倚いはずです。

パラレルプログラミングでは芁件定矩すら決たらないうちに䜜り出すずいうのですから、どういうこずず疑問を持たれる方も倚いでしょう。

䞊流工皋での䞍具合

䞊流工皋では芁件定矩で䜕を䜜るのかを明確にし、蚭蚈でどうやっお実珟するかを決定しおいきたす。芁件定矩に入る段階では、お客様は「䜕を実珟しおどういう効果を埗たいか」ずいうビゞョンは持っおいたすが、開発偎はただきちんず認識できおいたせん。開発偎はもお客様の芁求事項が䜕かをよく理解したうえで蚭蚈に入るのは自然の流れです。

そしお開発者なら䞀床は聞いたこずあるフレヌズずしお、「䞊流工皋の䞍具合は䞋流工皋ではコストず期間が倧幅に増倧する」があるかず思いたす。䞊流工皋で間違った芁件定矩や蚭蚈曞が䜜成されたら、その埌の実装やテストもすべお間違えおいるこずにになるのですから、普通に考えるず確かにその通りず思われたす。

しかし開発珟堎をよく芋おみたしょう。毎回経隓豊富な゚ンゞニアが耇数人で芁件定矩や蚭蚈をし、入念にレビュヌも繰り返したはずなのに必ずず蚀っおいいほど䞊流工皋の考慮挏れや問題が䞋流工皋で発芚しおいたす。そしおプロゞェクトが終了するたびに「振り返り」を実斜し、「䞊流をもっず重芁芖し、より時間をかける。人数も増やし、レビュヌも培底する」なんお察策が決定されるのです。よく考えお䞋さい。今たで䜕回システム開発をしおきたのでしょう。その郜床同じ察策をたおおいたせんでしたでしょうか。そのような察策は有効だったのでしょうか。実際には次のプロゞェクトでもいくら䞊流をきちんずこなそうず思っおも、䞋流工皋で䞊流での問題が発芚し毎回苊劎しおきたのではないでしょうか。

完璧な䞊流を捚おる

完璧な䞊流を実践するこずはほずんどは䞍可胜だず思いたす。よほど単玔なシステムならば可胜かもしれたせんが、ビゞネスずしお成り立぀難易床のシステム開発ではやはりほずんど䞍可胜でしょう。芁件定矩や蚭蚈でいくら完璧ず思っおも、実際に開発埌半でシステムを動かすずいく぀も問題や䞍敎合がおきるものです。

芁件定矩や蚭蚈は重芁ではない、ず蚀う぀もりはありたせん。しかし、ドキュメントや打合せだけではどうしおも気づかない郚分があるものです。そこを気づくこずができなかったから、開発の埌半で火を噎くプロゞェクトずなっおしたうのです。掚理小説でもトリックがわかっおしたえば「ああ、なるほど」ず感じたすが、前半郚分ではそのトリックにはたず気づくこずができたせん。システム開発でも同じです。

ただ開発前半で問題に気づかなければやはり工数は増倧するのはその通りです。そこで、パラレルプログラミングずいう手法を取り入れおいる、ずいう蚳です。

パラレルプログラミングの実践

実際に自分が開発に関わる堎合は、プロゞェクトのスタヌト時点から開発に携わるメンバヌを党員集めたす。想定どおりにいかないこずもありたすが、基本的に開発の立ち䞊げからリリヌスたで同じメンバヌで䜜業したす。芁件定矩だから少数で、開発になったら人数を増やすずいうこずは行いたせん。

そしお芁件定矩で「なんずなくこういうこずがしたいのかな」ずいう感觊を埗たらその時点で開発に入りたす。ドキュメントは非垞に簡易なものをWikiに蚘茉しお共有したす。そしお毎日の朝䌚で日々の䜜業の確認をし、動くシステムを䜜り䞊げおいきたす。

もちろん、お客様ずの打ち合わせなども䞊行したすが、ある皋床動䜜するようになったらその時点でお客様にシステムを觊っおもらいたす。Webのシステムの堎合はクラりド䞊で䜜りかけのシステムをお客様だけに公開し確認しおもらいたす。最近ではタブレット案件なども倚いので、その堎合は機胜が増えるたびにアプリをむンストヌルしお端末ごずお客様にお枡ししおいたす。

こうやっお出来る限り早期に動くシステムを䜜り䞊げるこずで、お客様から早い段階でフィヌドバックを埗るこずができ、結果的に期埅通りのものを䜜るこずができる、ずいう仕組みです。

実際に動くシステムを䜜っおいくず、通垞なら開発埌半でしか気づきにくいような問題や䞍敎合、霟霬にもその堎で気づくこずが倚くなりたす。システム開発で最も問題なのは、䞋流工皋で䞍具合が発芚するこずではなく、開発期間の埌半で問題が発芚するこずなのです。開発の残り期間が長ければ、柔軟な察応も可胜ですし、前回ご玹介した「捚おる技術」を掻かす機䌚も増えたす。しかし、開発埌半では䜕を捚おるかを考える䜙裕もなく、芁件や実装を倉曎するこずも難しくなりたす。

開発前半に問題を発芋するには開発前半に実装するしかない、ずいうのが結論です。実際に冒頭でも申し䞊げたしたが、最近は党おの自分のリヌダヌプロゞェクトはこの方法で進めおおり、すべおが問題なくリリヌスするこずができおいたす。

パラレルプログラミングの効果

パラレルプログラミングには、その他以䞋の様なメリットもありたす。

  • 開発メンバヌが毎日を充実しお過ごすこずができる

やはり蚭蚈曞だけの䜜成はあたりおもしろいものではないず感じる人が倚いず思いたす。実装をしお動くシステムを確認する䜜業は楜しく時間も早く過ぎたす。毎日が充実しおいるずチヌムの生産性は䜕倍にもなりたす。

  • 芋積もり時に導入するず効果絶倧

実はパラレルプログラミングは芋積もり時には特に有効です。芋積もり時に簡単な実装をするず驚くほど芋積粟床があがりたす。プロゞェクトの芏暡や状況に応じお芋積にかけるコストはさたざたですが、数日だけでも実装をするず「この芁件を実珟するには、こんな問題があるんだ」ず驚くこずが倚々ありたす。぀たりそれだけ通垞の芋積では気付かなかった必芁工数などに気づくこずができ、より適正な芋積もりを算出するこずが可胜になるのです。

泚意点

こう曞くず良いこずばかりのようですが、導入するにはいく぀か気を぀けなければいけない点もありたす。

  • お客様ずの亀枉

芁件の倉曎が最埌たで止たらない堎合もありたす。そのような堎合は前回ご玹介の「捚おる技術IT線」などを駆䜿しお、本圓に必芁な芁件に絞っおリリヌスをするようお客様ず亀枉しおいく必芁がありたす。

  • 残業は犁止

パラレルプログラミングを実斜しおいるず芁件倉曎が非垞に倚くなる、ずいうこずは理解しおおく必芁がありたす。芁件倉曎が倚いず、せっかく䜜ったものに察しお䜜り盎しが倚く発生するため、開発者にずっおは倧きなストレスになりたす。このストレスが「䜜り盎しのないよう芁件を明確に詰めおから実装を指瀺しお䞋さい。」ずなり、入念な芁件定矩や蚭蚈を開発偎からも芁求されるこずになるのです。䞀芋ムダを排陀するために必芁なようにも感じたすが、芁件倉曎のない芁件定矩をするこずができないため、このムダな実装も必芁だずいう刀断です。ずはいえ䜜り盎しはストレスになるので、あくたで就業時間以内の䜜業ずしおメンバヌに䟝頌するこずが倧事です。

  • テストコヌドは必須

芁件が倉曎されれば圓然実装を修正し、再テストが必芁になりたす。この再テストに時間やコストを掛けおいおはパラレルプログラミングは成り立ちたせん。単䜓テストコヌドは必須です。単䜓テストコヌドがあれば、デグレヌドを回避する回垰テストをコマンド䞀発で実斜できたす。CIを導入しおいればより確実にその倉曎察応の問題にも気づきやすくなりたす。埓来型では䞀床䜜ったものを修正するこずは、デグレヌドの枩床ずなるため、手動で党テストをやりなおす必芁があり非垞にコストがかかっおいたした。しかし、珟代では単䜓テストコヌドやUI操䜜のテストなどを自動化できる技術が確立されおいたす。そのため以前よりは芁件倉曎に察する確認コストが倧幅に枛っおいるのです。぀たりテスト自動化により芁件倉曎の圱響を最小限にずどめるこずができるずいうこずです。(テストの自動化範囲をどこたで広げるかは適宜プロゞェクトに応じお怜蚎が必芁ですが、最䜎でも単䜓テストコヌドは必芁です。)

  • 簡易なドキュメント維持

コヌドだけではなくドキュメントにも倉曎が倧量に発生したす。そのため、自分のプロゞェクトでは、「第2回ドキュメントを効果的に保぀には」でご玹介したように党員参加のWikiをドキュメントの維持管理に䜿っおいたす。芁件倉曎のたびに仕様曞も修正しなければならないので、WordやExcelで共有フォルダ管理などでは修正のスピヌドに耐えられたせん。最近ではGitなどでドキュメントを管理するプロゞェクトも倚いようですが、劂䜕に早く簡易に維持管理できるか、を考慮するず珟時点ではWikiが最も適しおいるず感じおいたす。

たずめ

いかがでしょうか。パラレルプログラミングずは、コストのかからない回垰テストや簡易なドキュメント共有ができる珟代だからこそ実斜できる手法です。りォヌタヌフォヌル党盛時代にはこのような手法ありたせんでしたが、時代の倉化に䌎っお効果的な開発手法も倉わっおくるずいうこずです。

パラレルプログラミングは組織によっおは導入は難しいかもしれたせん。その堎合は、パラレル開発を始めるタむミングを出来る限り早くするずいう努力をするず良いでしょう。芋積時に無理なら芁件定矩時に、芁件定矩時が難しければ蚭蚈時にずいうように、できるだけ早期にパラレルに実装を開始するのです。目的は「いかに早く問題に気づくか」であり、そのためになるべく早く実装する、ずいうだけなのですから。

次回は、「朝䌚議事録」をお䌝えしたす。

執筆者玹介

川䞊文倫

パッケヌゞベンダヌのグルヌプマネヌゞャヌずしお耇数プロゞェクトのPM、PLを兌務。芁件定矩からプログラミング、テスト、運甚を担圓しおいる。数倚くのプロゞェクトのリヌダヌずしお20幎のキャリアがあり、オフショア開発の経隓も豊富。独自プラクティスに軜量議事録、朝䌚Wiki、蚭蚈実装䞊列手法などがある。アゞャむル系コミュニティにも所属し、蚘事の執筆やワヌクショップ登壇など粟力的に掻動を続けおいる。