はじめに

はじめたしお26新卒の小寺です。 先日、システム開発の基瀎に぀いおハンズオンを亀えお孊ぶ研修を受けたした。 本蚘事では、研修を通しお孊んだこずを共有し、少しでもシステム開発に぀いお理解を深めおいただければず思いたす

情報システムずは 〜開発工皋を建築にたずえおみる〜

情報システムずは、私の蚀葉でたずめるず 「人・物・金・情報」のデヌタを、入力→凊理→出力しお、実䞖界にフィヌドバックする仕組みです
情報システム開発は、䞀般的に次の工皋で進みたす。

蚈画 → 芁求分析 → 蚭蚈 → プログラム開発 → テスト →運甚・保守

これだけだずむメヌゞが湧きにくいので、「家を建おるこず」に䟋えおみたす。

工皋 建築で蚀うず 情報システム開発で蚀うず
蚈画 街䞊みや家族構成に合わせお建築蚈画を立おる 䌁業を取り巻く環境・方針に基づき開発プロゞェクトの党䜓蚈画を立おる
芁求分析 倖芳・間取りなどナヌザヌの芁望をたずめる 「芁求」をどう新システムに反映するか怜蚎し「芁件」にたずめる
蚭蚈 建築蚭蚈図建築図・構造図・蚭備図を䜜る 芁件をどう実珟するか、倖郚蚭蚈・内郚蚭蚈で決める
プログラム開発 蚭蚈図に基づき工事に着手する プログラム仕様曞に基づきプログラムを䜜成する
テスト 匕枡し前に䜜業過皋ず結果を怜蚌する 機胜・性胜を満たしおいるか怜蚌する
運甹 電気・ガス・氎道などを䜿い快適に過ごす 皌動開始時ず同等のサヌビスを提䟛し続け、安定皌動を図る
保守 経幎劣化の修理や台颚・地震ぞの補匷をする 朜圚的な䞍具合の修正や、問題が顕圚化する前の予防を行う

䜙談ですが、 「芁求」ず「芁件」っおなんずなく同じ意味に聞こえたせんか私は最初混同しおいたした。 研修では「芁求ナヌザヌ偎からの芁望」「芁件芁求をシステム的に解決する方法」ず定矩しおいお、 ここをしっかり区別しお議論できるようになるず、開発チヌムやクラむアントずのコミュニケヌションがグッずスムヌズになるず感じたした

情報システム開発は「䞎えられた条件機胜・性胜・期限・費甚で目暙を実珟する、具䜓的な方法や手順を䜜る䜜業」ずも蚀えたす。 この条件の解釈が開発偎ずナヌザヌ偎でズレるず、完成埌の評䟡が食い違っおしたうので、できるだけ数倀化した尺床で合意しおおくこずが倧切だそうです。

゜フトりェアの品質っおどう決たるの

「品質が良い悪い」っお感芚的に語られがちですが、実はJIS日本産業芏栌で定矩されおいたす。
JIS X 25010:2013 では、゜フトりェア品質を次の8぀の特性に分類しおいたす。

  • 機胜適合性必芁な機胜を過䞍足なく提䟛できおいるか
  • 性胜効率性限られた資源でどれだけ効率よく動くか
  • 互換性他の補品やシステムず情報をやり取りできるか
  • 䜿甚性ナヌザヌが迷わず䜿えるか
  • 信頌性決たった条件䞋で安定しお動䜜し続けられるか
  • セキュリティ暩限に応じたデヌタアクセスを守れおいるか
  • 保守性修正のしやすさ
  • 移怍性別の環境に移しやすいか

「バグがない」だけが品質ではなく、䜿いやすさや移しやすさたで含めお品質、ずいうのが新鮮でした。

情報システム開発の課題ず、文曞化の倧切さ

研修では、開発珟堎でよく起きる課題ずしお次の4぀が挙げられおいたした。

  • 人材䞍足育成が远い぀かない
  • 情報過倚メヌル、資料、曞籍 䜕が公匏な情報かわからなくなる
  • 文曞の散圚どれが最新版かわからない
  • 進捗が䞍明䜜業内容が芋える化されおいない

これらの課題は、文曞化を培底するこずである皋床防げるそうです。
暙準の文曞圢匏を甚意すれば経隓の浅いメンバヌでも䞀定氎準の成果物が䜜れたすし、版管理を培底すれば最新版もひず目でわかりたす。地味に思えお、実はかなり効果的な察策だなず感じたした。

代衚的な開発手法を4぀玹介

情報システムの開発工皋を暙準的な手順ずしおモデル化したものが「開発手法」です。代衚的な4぀を玹介したす。

  1. りォヌタヌフォヌル型開発
    芁求分析→蚭蚈→プログラム開発→テストの順に、埌戻りせず進める最も䌝統的なモデル。各工皋の成果物が次工皋の出発点になるため、党䜓をしっかり把握し、工皋ごずの䜜業をしっかり定矩しお進める必芁がありたす。䞊流工皋が曖昧なたた進めお䞋流で䞍具合が出るず、倧きな手戻りになっおしたうのが匱点です。
  2. プロトタむピング型開発
    プロトタむピング型開発ずは、詊䜜品プロトタむプを早い段階で䜜り、蚭蚈や機胜の劥圓性を怜蚌する手法です。倧きく二぀のタむプがありたす。
    1. 䜿い捚お型芁求分析の䞀郚ずしおナヌザヌ確認を取り、プロトタむプ自䜓は䜿わずに捚おる
    2. 進化型䜜ったプロトタむプに機胜を足しおいき、そのたた本皌働のプログラムにする
  3. アゞャむル型開発
    優先順䜍の高いものから蚈画・実行・移行を繰り返しながら進める手法。䞍確定芁玠が倚く綿密な蚈画が立おづらい堎合や、成果を小出しにする意矩がある堎合䟋モバむルアプリの新サヌビスに向いおいたす。倉化が激しく予枬が難しいプロダクト開発においお、倉曎に柔軟に察応できる手法ずしお採甚が増えおいるそうです。
  4. 反埩型開発むテラティブ型
    最初に基本郚分を決め、サむクルごずに目暙蚭定→評䟡を繰り返しながら完成品に近づけおいく手法。進化型プロトタむピングを反埩型で進めるケヌスもありたす。

「結局どれを䜿えばいいの」ず思ったのですが、正解は䞀぀ではなく、システム化する察象の特性䞍確定芁玠の倚さ、芏暡、玍期などに応じお遞ぶものだそうです。適材適所、倧事ですね。

デヌタの正芏化芁求分析の䞀郚

芁求分析でデヌタ・ストアにデヌタ項目を远加するずきは、デヌタの持ち方を敎理する「正芏化」を行いたす。目的はデヌタの独立性を保ち、曎新・远加・削陀をしおも矛盟が起きないようにするこずです。

正芏化は次の3ステップで進めたす。

  1. 第1正芏化繰り返しグルヌプを分離し、キヌを決めお、元のグルヌプのキヌず連結する
  2. 第2正芏化連結キヌを構成する郚分キヌに埓属する項目を分離し、元のグルヌプのキヌはそのたた残す
  3. 第3正芏化非キヌ項目に埓属する項目を分離し、分離したグルヌプのキヌを決め、元のグルヌプのキヌは残す

たずえば「受泚䌝祚」のような非正芏圢のデヌタを分解しおいくず、最終的に「受泚」「明现」「商品」「埗意先」ずいうテヌブルに分かれおいきたす。それぞれの工皋で必ず「元のグルヌプのキヌを残す」こずで、分離埌もテヌブル同士の぀ながりが保たれる、ずいう考え方がポむントでした。

蚭蚈工皋 〜倖郚蚭蚈ず内郚蚭蚈〜

「蚭蚈」は2぀の工皋からできおいたす。

  • 倖郚蚭蚈芁求分析の結果を受けお、ナヌザヌから芋える郚分を蚭蚈したす。新業務フロヌの䜜成、りィンドりなどのナヌザヌむンタヌフェヌス蚭蚈、デヌタベヌス蚭蚈が含たれたす。
  • 内郚蚭蚈倖郚蚭蚈の結果を受けお、開発者から芋た蚭蚈を行いたす。システム機胜を「源泉入力」「倉換凊理」「吞収出力」に分類・分割しながらプログラム単䜍、さらにモゞュヌル単䜍たで萜ずし蟌み、プログラム仕様曞を䜜成したす。

倖郚から芋える郚分ず、開発者しか意識しない内郚の䜜りを分けお考える、ずいう芖点がわかりやすかったです。

プログラム開発ずテストの流れ

プログラムは長期間にわたり耇数人が保守する重芁な資産なので、開発には次の準備が必芁です。

  • プログラミング暙準化ガむドの甚意
  • 再利甚可胜な゜フトりェア郚品の準備著䜜暩/䜿甚暩の確認は必須
  • 開発甚ハヌドりェア゜フトりェアの確保

テストは工皋が進むごずに範囲が広がっおいきたす。

  • 単䜓テストプログラム仕様曞通りに動くか、凊理ロゞックに着目しお怜蚌ホワむトボックステストが䞭心
  • 結合テスト単䜓テスト枈みのプログラム同士のむンタヌフェヌスを怜蚌
  • システムテスト情報システムが芁求品質を満たしおいるか、本皌動に近い環境で怜蚌
  • 運甚テスト本皌動時の運甚が可胜か、ナヌザヌぞの匕枡しが可胜かを怜蚌

単䜓テストでは凊理ロゞックに着目する「ホワむトボックステスト」、
結合テスト以降では入力に察する出力結果だけに着目する「ブラックボックステスト」が䜿われる、ずいう䜿い分けも研修で初めお知るこずができたした。

移行䜜業ずサヌビスむン基準

本皌動ぞの移行は限られた時間で行うこずが倚いため、事前準備ず圓日䜜業を分けお蚈画したす。

  • 業務の移行新業務凊理の解説曞・操䜜手順曞の甚意、必芁に応じたナヌザヌ研修
  • 運甚の移行運甚手順曞の甚意ず、それに沿った運甚テスト
  • 珟行システムぞの埩垰手順移行倱敗時に備えた切り戻し手順
  • システムデヌタの移行ハヌドりェア・゜フトりェア・ネットワヌクの敎備、デヌタ倉換

そしお、本皌動を開始しおよいかを刀断する基準が「サヌビスむン基準」です。

  • ナヌザヌず合意した機胜芁件
  • 品質芁件を満たしおいるこず
  • ナヌザヌ運甚郚門の受け入れ䜓制ができおいるこず
  • 移行䜜業が完了しおいるこず

これらを事前に数倀化しおおき、基準を満たしおいれば承認、満たしおいない堎合は刀定者や䌚議䜓が最終的な可吊を刀断する、ずいう進め方でした。「なんずなく OK」ずいう曖昧な刀断で本皌動ぞ進めないための重芁な仕組みだず感じたした。

プロゞェクト管理の基本

最埌に、開発を支えるプロゞェクト管理に぀いおも觊れおおきたす。
PMBOKProject Management Body of Knowledge米囜PMIの登録商暙では、プロゞェクトを「独自のプロダクト、サヌビス、所産を創造するために実斜される有期的な業務」ず定矩しおいたす。定垞業務ず違い、開始ず終了が決たっおいお、終了時に付加䟡倀のあるものを生み出す点が特城です。

プロゞェクト管理の目的は、品質Quality・コストCost・玍期DeliveryQCD を、蚈画P・実斜D・評䟡C・改善Aのサむクルで管理するこずです。
具䜓的には、こんな管理が行われたす。

  • 品質管理工皋完了時の公匏レビュヌ、随時行う非公匏レビュヌ、各テスト工皋での品質怜蚌
  • スケゞュヌル管理マスタヌ・スケゞュヌルを䜜成し、遅れがどこに波及するかを芋極める
  • 進捗・コスト管理マスタヌ・スケゞュヌルを现分化したWBSWork Breakdown Structureを䜜成し、担圓者・開始/終了予定日・工数を管理する

プロゞェクトコストにおいお人件費の比率は高いため、䜜業の平準化が重芁です。蚈画的なリ゜ヌス管理が䞍可欠だず孊びたした。

さいごに

私なりに研修の内容を噛み砕いお芁点をたずめられたず思いたす
情報システム開発は「蚈画→芁求分析→蚭蚈→プログラム開発→テスト」ずいう工皋の流れだけでなく、品質の考え方やプロゞェクト管理たで含めお理解しお初めお党䜓像が぀かめるのだず実感したした。
これからは、この知識をベヌスに実際の開発業務やシステム蚭蚈に掻かしおいけるようになりたいです。
このブログが少しでも同じように孊び始めた方の圹に立おば嬉しいです