Smile Engineering Blog

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

そのプロジェクト、上流工程ちゃんとできてますか?

お話のきっかけ

とある朝のお話。 今日の作業を始めようとPCに電源を入れ、メールをチェックしていると、
プロジェクトマネージャーからふと相談メールが届いていていることに気づきました。

その相談内容とはこんな具合。

『発注先から基本設計書が届いたけど、 本当に作りたいものはこれで合ってるのだろうか。』

はて。私は別作業に追われてその発注先が書いたという基本設計書が
全然チェックできていなかったわけですが、それっていったいどんな内容なのでしょう!??
……と、(恐る恐る)(今更ながら)基本設計書を開いてみたわけです。

すると、すぐにその問題点が……

「これ、機能要件がちゃんと定義されてなくて、何作りたいか明確になっていないのでは!?」

……え〜っと、皆さん。『Vカーブ』って言葉を、今更ながら(?)ご存知でしょうか?

f:id:jspnet:20190715223929p:plain

『V字モデル』ってなんだっけ??

ウォーターフォール・モデルで開発を行う場合、まず行わなきゃは『作業工数見積もり』。
そこには、『基本設計』、『詳細設計』、『実装』、『単体テスト』、『結合テスト』という用語が
出てきます。これができないと、エンジニアとして一人前とは言い難いですよね。

とはいうものの、そもそもこれらのフェーズの目的とは?
皆さんは下記にちゃんと明確に答えることはできますか?

それらを考えるとき、まず頭に思い浮かべるのは、
上に描いた『Vカーブ』だと思います。

え、なんとなく図のイメージは知ってたけど、そんな呼び名だったことは初耳!
という方は、これを機会に覚えましょう。(覚えたところでメリットはないかもですが)

『Vカーブ』はそれぞれ『対』になっている!!

『上流工程のスキルを身につけたい』と考えてるエンジニアは多いと思いますが
それではその上流工程とは、どんな目的で、何をするフェーズなのでしょうか?

様々な意見もあると思いますが、私は下記のように考えます。

  1. システムのユースケースを洗い出し、『システムの要件』を定義する(要件定義)
  2. そこからどのような機能が必要か洗い出し、『機能の要件』を定義する(基本設計)

『システムの要件』とは、
そのシステムのユーザーが何を求めていて、何を必要としているのか
言わば、システムの目的を定義するフェーズが『要件定義』。

それに対し、『機能の要件』とは、
要件定義のフェーズで定義したものを、いかにシステムの機能として落とし込むか
どういう機能が必要で、何を実装する必要があるのか
それを定義するフェーズが『基本設計』。

そんなわけで、『基本設計』と『詳細設計』は別物ですし、
間違っても『基本設計書』にI/Fの関数名とか変数名とか書かないようにしたいですね。
※だってそこにそれ書いちゃったら後で直せなくなりますよね……!!?

ちなみに、実装を行った人が単体テストを行うように(稀にそうでないケースもありますが)
べき論としては『基本設計』を行った人が『システムテスト』を行うべきかもしれません。

システムテスト』とは、要件通りにシステムの機能が実装されているか、
それを評価するフェーズのはずですから。

だけど今時はアジャイル開発!?

ただし、そうは問屋が卸さないのがシステム開発だったりするわけで。。。 上記のとおりにシステム開発が進むなんて、稀だったりします。
(いや稀では困るんだけど、実際もはやどうしようもないわけで。)

基本設計をしようにも、そもそも要件定義がまだ固まってなかったり
だけど作業工数的にこれ以上遅らせるわけにもいかなくて、
要件定義もまともにできていないまま、実装を進めなくてはいけなかったり

……そして案の定、『あ、やっぱりこんな機能が欲しかった!』とか
実装している最中にそんなのが出てきて、結局後戻りをしてしまったり……
※なお、実話として私は納品日の定時後に仕様変更の依頼を受けたことがあります(汗)

もうそんなことやってるくらいなら、最初からアジャイル開発にしませんか!?
……といつも思うわけですが、それだと今度は『発注先ががが〜』と言われてしまい
そんなこんなで、むりくり(?)ウォーターフォールを続けているような気もしなくもないです。

最後に本の紹介

今回のお話について、私が新人の頃に読んだ本が、今でも非常に参考になっています。

『図解でわかる ソフトウェア開発のすべて』 日本実業出版社

www.njg.co.jp

出版年が2000年なので、内容がかなり古いですが、
ウォーターフォール開発やオブジェクト指向開発など、
初心者エンジニアの方にはおすすめの本ではないかと思います。
その代わり、あまりに古いので『アジャイル開発』などの記載はありませんがね。
(そこは時代の流れということで……)