5. ソフトウェアエンジニアリングとは
The application of a systematic, disciplined, quantifiable
approach to the development, operation, and maintenance of
software; that is, the application of engineering to software.
ソフトウェアの開発、運用、保守に対する体系的、規律的、定
量的なアプローチの適用。つまりソフトウェアへのエンジニア
リング(工学・技術活動)の適用。
SWEBOK Guide v4
5
12. メイン
フレーム
70’s –
Early 80’s
Late 80’s -
Early 90’s
Late 90’s -
Early 00’s
Late 00’s -
Early 10’s
PC,
クライアント
サーバ
インターネット
ユビキタス
Late 10’s -
Early 20’s
IoT,
ビッグデータ,
AI
Structured
programming
Waterfall
Formalization
Design
Program
generation
Maturity
Management
Object-oriented
Req. eng.
Modeling
Verification
Reuse
Model-driven
Product-line
Global & open
Value-based
Systems eng.
Agile
Iterative &
incremental
DevOps
Empirical
Data-driven
Continuous
SE and IoT
SE and AI
SWEBOK V1
SWEBOK V2
SWEBOK V3
SWEBOK V4
20. 他の拡充側面: アジャイル開発とDevOps
• アジャイル開発
– 複数の知識領域(要求事項、マネジメント、
プロセス、モデル・手法など)に直接影響、
全知識領域に間接影響
– 現代に適合:変化の激しい時代、不確実性
– 単なる新プラクティスセットではなく、パラダ
イムシフト
– クリティカルシンキングと意思決定を実現す
る他のアプローチと併用
• DevOps
– DevOpsの価値観/原則/実践とスキームに
基づくクリティカルシンキングと判断力
– DevOpsは、プロセスやあらゆる意思決定に
影響
– アジャイルは、エンジニアリングレベルとマ
ネジメントレベルの両方に影響
20
To Do Doing Done
Securing …
Product
Technical Debt …
Development Deploy & operation
Test & verification Monitoring
Dev Ops
21. 計算基礎領域の拡充: AIとソフトウェアエンジニアリング
• 課題
– 不確実で確率的な挙動
– 十分にラベル付けされ、構造化されたデータセットの
必要性
• AI for SE
– 人間の開発者の行動を再現することで、高品質なソフ
トウェアシステムを構築
– ほぼすべての開発段階に対応
• SE for AI
– AIシステムのルールやシステム動作はデータから推
測されるため、従来のソフトウェアとは異なるAIのため
のSEを特に支援する必要がある
– パターンとしてのプラクティスの文書化
21
ソフトウェア
エンジニアリ
ング
AI
AI for SE
SE for AI
31. メインフレーム
70’s –
Early 80’s
Late 80’s -
Early 90’s
Late 90’s -
Early 00’s
Late 00’s -
Early 10’s
PC,
クライアント
サーバ
インターネット
ユビキタス
Late 10’s -
Early 20’s
IoT,
ビッグデータ,
AI
Structured
programming
Waterfall
Formalization
Design
Program
generation
Maturity
Management
Object-oriented
Req. eng.
Modeling
Verification
Reuse
Model-driven
Product-line
Global & open
Value-based
Systems eng.
Agile
Iterative &
incremental
DevOps
Empirical
Data-driven
Continuous
SE and IoT
SE and AI
SWEBOK V1
SWEBOK V2
SWEBOK V3
SWEBOK V4
?
?
34. メインフレーム
70’s –
Early 80’s
Late 80’s -
Early 90’s
Late 90’s -
Early 00’s
Late 00’s -
Early 10’s
PC,
クライアント
サーバ
インターネット
ユビキタス
Late 10’s -
Early 20’s
IoT,
ビッグデータ,
AI
生成AI,
基盤モデル,
量子,
コンティニュアム
Late 20’s
Structured
programming
Waterfall
Formalization
Design
Program
generation
Maturity
Management
Object-oriented
Req. eng.
Modeling
Verification
Reuse
Model-driven
Product-line
Global & open
Value-based
Systems eng.
Agile
Iterative &
incremental
DevOps
Empirical
Data-driven
Continuous
SE and IoT
SE and AI
SEと:
生成AI
量子コンピューティング
サステナビリティ
コンティニュアム
AI支援の
DevOps
SWEBOK V1
SWEBOK V2
SWEBOK V3
SWEBOK V4
35. 大規模言語モデルLarge Language Model
(LLM)のソフトウェア開発応用
• Large Language Models for Software Engineering: A
Systematic Literature Review (Aug 21,
https://arxiv.org/abs/2308.10620 )
– 2017年から2023年までの合計229の研究論文を収集・
分析
• LLM種別: デコーダのみのアーキテクチャ最多(GPT,
Codex, LLaMAなど)
• データセット: オープンソースデータセット利用が最
多、共通前処理としてデータ抽出・重複削除・データ
分割など
• LLMの最適化: ファインチューニング&Adam、ハード
プロンプト(すべて人手で準備した自然言語指示)と
ソフトプロンプト(部分的にチューニング可能な指示)
• 利用タスク: 構築および保守が主、生成・分類・推薦
が主
35
35
36. LLMのコード関連応用
• Towards an Understanding of Large Language Models in Software Engineering
Tasks (Aug 22, https://arxiv.org/abs/2308.11396 ): 123の論文分析
36
タスク 定義 LLMの役割
コード生成 ユーザー要求と指定された制約に基づい
てソースコードを自動生成
(補助)コードを生成、開発者にアイデアやプログラ
ミングの「出発点」を提供
コード要約 開発者がコードを理解し、維持するのを助
けるために、明確で、正確で、役に立つ
コードコメントを自動的に生成
異なる粒度(例えば関数)を支援したり、コードの意
図を説明したりするコード要約
コード翻訳(変換) 異なるプログラミング言語間で、機能やロ
ジックを変えることなくコードを変換するこ
と
補助コード変換、リバースエンジニアリング
欠陥検出 プログラムのクラッシュ、パフォーマンス低
下、セキュリティ問題の原因となるコード
エラーを特定し、修正
コードに潜在的な欠陥がないかチェック
コード評価・テスト コードの静的解析を行い、潜在的な問題
や改善点を特定
テストケースを作成したり、コードのパフォーマンス、
ユーザビリティ、その他の品質特性をテスト
コードマネジメント コードの版や開発者情報のマネジメント チーム協調開発、版管理
問い合わせ・相談Q&A ソフトウェア開発者とLLMのやり取り アシスタント、プロンプトエンジニアリング
37. グリーン&サステナブル・ソフトウェアエンジニアリング
• サステナビリティ: 資源を枯渇させることなく、将来の
世代のことを考えながら発展していくこと [国連]
– 環境: 水、土地、空気、鉱物、生態系などの天然資源保
護と社会保全
– 社会: 社会的組織の連帯、サービス、連帯におけるコミュ
ニティ(例えば社会や人々のサステナビリティへの振る舞
いや態度への影響)
– 経済: 資産や付加価値の維持(例えばグリーンソフトウェ
アの費用対効果)
• サステナブルSE/ITにおける追加側面 [a]
– 個人: 個人の資本の維持(健康、スキル、サービスへの
アクセスなど)
– 技術: ソフトウェアシステムの寿命や変化する状況やニ
ーズに応じた進化(例えば低消費電力化)
37
[a] Towards a common understanding of sustainable software development, SBE, 2022
[b] Delft University of Technology, Sustainable Software Engineering,
https://luiscruz.github.io/course_sustainableSE/2022/
環境
経済
技術
個人 社会