リーンソフトウェア開発について

リーンソフトウェア開発(LSD: Lean Software Development)の概要

リーンソフトウェア開発とは

リーンソフトウェア開発(以下LSD)とは、製造業で用いられる「リーン生産方式」をソフトウェア開発に取り入れた手法です。
LSDは、「無駄を省き、必要なものだけを残す」という考え方を重視しており、無駄なく効率的に短期間で高品質なソフトウェア開発を実践します。
(なお、LSDは元々アジャイルとは別の流れで発展した開発手法であり、アジャイルがリーンに影響を受けているといえます。)

LSDは、メアリー・ポッペンディーク氏とトム・ポッペンディーク氏によって2003年に刊行された著書「リーンソフトウエア開発 ~アジャイル開発を実践する22の方法~」によって、その手法が広く知れ渡りました。
著書で提唱されるLSDでは、ムダを排除することを中心にした「7つの原則」とそれを実現するための「22のツール」が定義されています。


リーン生産方式(LPS: Lean Production System)とは

リーン生産方式とは、トヨタ自動車の生産方式である「TPS(Toyota Production System)」を研究して、体系的にまとめた生産方式です。
「リーン」という言葉には、「無駄のない」「ぜい肉がない」「痩せた」という意味があります。
つまり、LPSとは、生産工程に潜むムダを徹底的に排除することで、品質の高さを維持しつつも、トータルコストを系統的に減らそうとする生産方式です。

LPSは、MIT(マサチューセッツ工科大学)のジェームズ・P・ウォマック氏とダニエル・T・ジョーンズ氏らが1990年に刊行した著書「リーン生産方式が世界の自動車産業をこう変える」によって一般化・体系化されました。


トヨタ生産方式(TPS: Toyota Production System)とは

トヨタ自動車生産方式(TPS)とは、生産ラインのムダを徹底的に排除して、良質な製品を低コストで製造するために確立された生産方式です。
TPSは、「7つのムダ削減」「ジャストインタイム」「自働化(ニンベンの付いた自働化)」を基本の考えとします。

  • 「7つのムダ削減」とは、ムダを「付加価値を高めない各種現象や結果」と定義して、ムダを無くすことを重視する考え方です。
  • 「ジャストインタイム」とは、必要なものを必要な時に必要な量だけ生産する(在庫のムダを減らす)考え方です。
  • 「自働化」とは、製造段階で不良品検知する仕組みを作り、生産の無駄を省く考え方です。

リーンソフトウェア開発における「7つの原則」

原則1 : ムダをなくす(Eliminate Waste)

リーンソフトウェア開発では、製品の価値にならない(顧客にとって価値を生まない)活動や事象を徹底的に排除します。
開発のムダには、余分な機能や欠陥、作業の引き継ぎや切り替え、必要性の薄い会議や開発の遅れなどが含まれます。


原則2 : 品質を作り込む(Build Quality In)

不具合を少なくすることで高い品質を維持でき、修正にかかるコストも抑えることが可能です。
なので、ソフトウェアの不具合を可能な限り早期に発見して、見つけたら早急に対処していきます。
具体的には、テスト駆動開発(実装前にテストコードを書く)やCI(継続的インテグレーション)、リファクタリングなどを実施します。
また、顧客の開発参加や頻繁な反復デモ、フィードバックの受け取りを実施して、品質を高めることも大事です。


原則3 : 知識を作り出す(Create Knowledge)

知識を作り出すとは、プロジェクトそのものから開発の知識やノウハウを生み出して、チームが知識を身に付けていくことです。
例えば、製品や顧客などからフィードバックを得て、分析や学習を行うことで、プロジェクト固有の知識と経験を蓄えていきます。
これにより、プロジェクトの不確実性を最小限に抑え、想定外の事態に正しく対処できるチームを実現します。


原則4 : 決定を遅らせる(Defer Commitment)

可能な限り決定を遅らせるということは、状況変化を踏まえた最善の決断を下せるということです。
逆に、十分な情報が得られていない時点での決定は、その後に発生する想定外の問題に対して十分な対処ができなくなります。
これは、「必要なものを必要な時に必要な量だけ作る」というジャストインタイムの考えを反映する原則です。


原則5 : 速く提供する(Deliver Fast)

できるだけ早期に、動く製品を顧客に見せることで、顧客の期待した価値が反映されているか正しく確認することができます。
そのためにも、定期的に顧客にソフトウェアを提供できるように、開発フローを構築します。
具体的には、CI(継続的インテグレーション)とCD(継続的デリバリー)を実施して、小さなソフトウェアを素早くリリースできるようにします。


原則6 : 人を尊重する(Respect People)

チームによる開発を成功させるためには、人を尊重することが大切です。
そのためにも、チームメンバーに権限(開発プロセス改善の権限や発言権なども含む)を委譲して、自律的に動けるようにサポートします。
そうすることで、メンバーが互いに尊重しあい、創造性を発揮し、よりよい開発ができるチームになることが期待できます。


原則7 : 全体を最適化する(Optimize the Whole)

全体の最適化とは、ソフトウェア開発プロセス全体における最初から最後までの価値の流れを考慮することを意味します。
個々のコンポーネントや段階に焦点を当てるのではなく、チームがワークフロー全体にわたってボトルネック、制約、改善の領域を特定します。
システム全体を最適化することで、チームは作業効率を向上させ、顧客により多くの価値を提供できます。


リーンソフトウェア開発における22の思考ツール(thinking tools)

22の思考ツールは、7つの原則を具体化するための考え方・アイデアです。


バリューストリームマッピング(VSM: Value Stream Mapping)

VSMとは、製品を顧客に提供するために必要な材料と情報の流れを分析、設計、管理するためのリーン生産方式の手法です。


セットベース開発(Set-Based Development)

セットベース開発とは、製品開発でわからないことについて一つずつ学習しながら、知識を積み上げてから詳細設計をする手法です。


オプション思考(Options Thinking)

オプション思考とは、あらゆる可能性を考慮して、常に選択肢をもって問題解決に臨もうとする考え方のことです。


プルシステム(Pull Systems)

プルシステムとは、後工程引取方式とも呼ばれ、後工程から引き取られた量を補充するためにだけ生産活動を行う管理方式です。


待ち行列理論(Queuing Theory)

待ち行列理論とは、顧客が列を作った場合の待ち時間や混雑状況を数学的に分析する理論です。
LSDでは、プロセスに影響を与えるボトルネックと変数を測定し、これらを最適化します。


その他の思考ツール

  • ムダを認識する(Seeing Waste)
  • フィードバック(Feedback)
  • イテレーション(Iterations)
  • 同期(Synchronization)
  • 最終責任時点(The Last Responsible Moment)
  • 意思決定(Making the Decision)
  • 遅延コスト(Cost of Delay)
  • 自己決定(Self-Determination)
  • モチベーション(Motivation)
  • リーダーシップ(Leadership)
  • 専門知識(Expertise)
  • 認知の統一性(Perceived Integrity)
  • コンセプト統一性(Conceptual Integrity)
  • リファクタリング(Refactoring)
  • テスティング(Testing)
  • 計測(Measurements)
  • 契約(Contracts)

関連ページ