黎明期(1950年代~1960年代)
「生産性向上」とは何であったか??
生産性 = プログラミング言語の発展によるコーディングの効率化
なぜコーディングの効率化が必要だったか?
機械語でのプログラミングは非常に時間がかかり、人的リソースを大量に消費していたため
より高度なソフトウェアを開発するには、プログラミングの効率化が不可欠だったため
「生産性を高める」ための活動
高級言語の開発
コンパイラの発展
初期のソフトウェア工学の概念の登場
「その結果」
機械語からの脱却、プログラミングの効率化
ソフトウェア工学の基礎の確立
構造化プログラミング期(1970年代)
「生産性向上」とは何であったか??
生産性 = 構造化プログラミングによるプログラムの可読性・保守性の向上
なぜ可読性・保守性の向上が必要だったか?
ソフトウェアの規模と複雑性が増大し、開発者の負担が増えていたため
保守コストの増大が、ソフトウェア開発の大きな課題となっていたため
「生産性を高める」ための活動
構造化プログラミング手法の導入
コーディング規約の整備
初期のソフトウェア開発ライフサイクル(SDLC)モデルの導入
結果:
プログラムの品質向上、開発の効率化
ソフトウェア開発プロセスの体系化
オブジェクト指向期(1980年代~1990年代)
「生産性向上」とは何であったか??
生産性 = 構造化プログラミングによるプログラムの可読性・保守性の向上
生産性 = オブジェクト指向設計による再利用性の向上と開発効率の改善
なぜ再利用性の向上が必要だったか?
ソフトウェアの規模がさらに大きくなり、一からすべてを開発するのは非効率的だったため
部品化・モジュール化による再利用可能なソフトウェア資産の蓄積が求められたため
なぜ開発効率の改善が必要だったか?
ソフトウェア需要の増大に伴い、開発スピードの向上が競争力の源泉となったため
市場へのタイムリーな製品投入が、ビジネス成功の鍵を握るようになったため
「生産性を高める」ための活動
構造化プログラミング手法の導入
コーディング規約の整備
初期のソフトウェア開発ライフサイクル(SDLC)モデルの導入オブジェクト指向言語の普及
デザインパターンの活用
UML(統一モデリング言語)の導入
RAD(Rapid Application Development)の登場
結果:
モジュール化の進展、開発の効率化
UMLによる設計の標準化と可視化
開発期間の短縮化
アジャイル開発期(2000年代~2010年代)
「生産性向上」とは何であったか??
生産性 = アジャイル開発による顧客価値の早期提供と継続的改善
なぜ顧客価値の早期提供が必要だったか?
ソフトウェアに対する顧客ニーズの多様化・変化のスピードが加速したため
事前の綿密な計画よりも、早期のフィードバック取得が重要になったため
なぜ継続的改善が必要だったか?
大規模・長期のプロジェクトでは、計画通りに進まないことが多くなったため
変化に適応し、継続的に改善していくことが、成功への近道だと認識されたため
「生産性を高める」ための活動
アジャイル開発手法の導入
自動化の推進(自動テスト、継続的インテグレーション)
UMLのアジャイル開発への適用
リーンソフトウェア開発の概念の導入
結果:
リリースサイクルの短縮化
品質の向上
UMLのアジャイル開発におけるコミュニケーションツールとしての活用
無駄の削減とお客様価値の重視
クラウド・DevOps期(2010年代~現在)
「生産性向上」とは何であったか??
生産性 = クラウド・DevOpsによるインフラの自動化とデリバリープロセスの効率化
なぜインフラの自動化が必要だったか?
クラウドの普及により、インフラのプロビジョニングと管理が複雑化したため
インフラ構築・運用の自動化により、開発者がアプリケーション開発に集中できるようにするため
なぜデリバリープロセスの効率化が必要だったか?
継続的デリバリーへの要求が高まり、リリースサイクルの短縮化が求められたため
開発と運用の連携を深め、フィードバックループを高速化することが重要になったため
「生産性を高める」ための活動
クラウドの活用
CI/CD(継続的インテグレーション・継続的デリバリー)の導入
コンテナ技術の活用
マイクロサービスアーキテクチャの採用
結果:
開発・運用の自動化、リリースサイクルのさらなる短縮
スケーラビリティと柔軟性の向上
インフラ管理の簡素化
AI・低コード開発期(現在~未来)
「生産性向上」とは何であったか??
生産性 = AI・低コード開発による開発の自動化と非エンジニアの活用
なぜ開発の自動化が必要だったか?
ソフトウェア開発の需要が爆発的に増大し、従来の手法では対応が難しくなったため
AIを活用することで、コーディングや品質管理の一部を自動化し、生産性を飛躍的に向上させる必要があったため
なぜ非エンジニアの活用が必要だったか?
デジタルトランスフォーメーションの加速に伴い、ソフトウェア開発の需要が非IT部門にも拡大したため
専門家だけでなく、一般ユーザーもソフトウェア開発に参加できる環境の整備が求められたため
「生産性を高める」ための活動
AI支援開発ツールの導入
低コード・ノーコードプラットフォームの活用
AIによるコード生成・最適化の研究
期待される結果:
開発の自動化・効率化
開発リソースの拡大
ソフトウェア品質の向上と保守性の向上