SlideShare a Scribd company logo
Pythonを含む多くのプログラミング言語を
2016年9月21日 PyCon JP 2016 招待講演
Pythonを含む多くのプログラミング言語を
扱う処理フレームワークとパターン扱う処理フレームワークとパターン
鷲崎 弘宜
わしざき ひろのり
鷲崎 弘宜
早稲田大学グローバルソフトウェアエンジニアリング研究所長・教授
国立情報学研究所 客員教授、株式会社 システム情報 社外取締役
ISO/IEC/JTC1/SC7/WG20 Convenor, SEMAT Japan Chapter ChairISO/IEC/JTC1/SC7/WG20 Convenor, SEMAT Japan Chapter Chair
IEEE CS Japan Chapter Secretary http://www.washi.cs.waseda.ac.jp/
研究遂行・資料協力: 坂本一憲、李 菊花ほか研究遂行・資料協力: 坂本一憲、李 菊花ほか
目次目次
• エンジニアリングと再利用
• 多言語時代のコード処理フレームワーク• 多言語時代のコード処理フレームワーク
• フレームワークからデザインパターンへ• フレームワークからデザインパターンへ
• まとめ• まとめ
2
正統なエンジニアリングとは
職業人が果たす判断,職業人が果たす判断,
行為,助言が,社会で
実質的な価値を形成実質的な価値を形成
コミュニティで妥当と確コミュニティで妥当と確
認される知識が科学的
基盤に基づく
知識・適格性の妥当
性をコミュニティで性をコミュニティで
判定できる環境
3
松本吉弘, “エンジニアリング基礎知識体系とISO標準”, ITSCJ Newsletter, No.88, 2010.
Paul Star, “The Social Transformation of American Medicine,” Basic Books, 1982.
知識の島々知識の島々
知識 プロフェッショナリズム知識 プロフェッショナリズム
ベストプラクティ
体系上のパ
ベストプラクティ
スに裏打ちさ
れた能力
ターンや手法
れた能力
知識の体系
経験、ガイド
知識の島々
カバレッジ UML 経験、ガイドカバレッジ UML
Java, C#, Python
アジャイル
参考 I. Jacobson, et al.: Tutorial: Essence - Kernel and Language for Software Engineering Practices, ICSE'13
4
Guide to the Software Engineering Body of Knowledge
(SWEBOK) http://www.swebok.org/ http://swebokwiki.org/
要求 構築設計 テスティング 保守
設計原則
(SWEBOK) http://www.swebok.org/ http://swebokwiki.org/
要求 構築設計 テスティング 保守
要求の基礎
要求プロセス
設計の基礎
設計の主要問題
構築の基礎
構築の管理
テストの基礎
テストレベル
保守の基礎
保守の主要問題要求プロセス
要求抽出
要求分析
要求仕様
要求妥当性確認
設計の主要問題
構造とアーキテクチャ
ユーザインタフェース設計
設計品質の分析評価
設計の表記
構築の管理
実践上の考慮事項
構築技法
構築ツール
テストレベル
テスト技法
テスト関連計量尺度
テストプロセス
テストツール
保守の主要問題
保守プロセス
保守技法
保守ツール
要求妥当性確認
実践上の考慮事項
設計の表記
設計戦略・手法
設計ツール
テストツール
デザインパターン
フレームワークフレームワーク 再利用
マネジメント プロセス構成管理 モデル・手法 品質
SCMプロセスのマネ 開始と範囲定義 プロセス定義 モデリング 品質の基礎SCMプロセスのマネ
ジメント
構成の識別
構成制御
構成状態記録・報告
開始と範囲定義
プロジェクト計画
プロジェクト実施
レビュー・評価
終結
プロセス定義
ライフサイクル
プロセス
査定・改善
計量
モデリング
モデル種別
モデルの分析
開発手法
品質の基礎
品質マネジメントプ
ロセス
実践上の考慮事項
品質ツール構成状態記録・報告
構成監査
リリース管理・配布
構成管理ツール
終結
計量
マネジメントツール
計量
プロセスツール
品質ツール
5経済
プロフェッショナル
実践
計算基礎 数学基礎
エンジニアリング
基礎
再利用の技術と期待
• 60%再利用すれば生産性2-10倍、信頼性2-3倍 [Marciniak94]
– 潜在的に再利用可能な部分は15-85% [McClure92]
サブシステムサブシステム クラス メソッド* * * *
– 15-85% [McClure92]
– 国内企業の再利用への取り組み 40% [@IT02]
サブシステムサブシステム
/パッケージ
クラス
(ファイル) 属性
メソッド
(関数)/属性
システムシステムドメイン * * * *
全体 部分全体 部分
抽象的
(汎用)
設計原則(根本指針)
たいてい
アーキテクチャアーキテクチャ
(汎用)
設計原則(根本指針)
たいてい
使える
パターン
アーキテクチャ
パターン
デザインパターン
使えるかも使えるかも
フレームワーク(半完成の実装)
あてはまれ
使えるかも
特定の場合に
使えるかも
プロダクトラインプロダクトライン 6クラス・関数ライブラリ
具体的
(特化)
あてはまれ
ば使える
特定の場合に
限り使える
目次目次
• エンジニアリングと再利用
• 多言語時代のコード処理フレームワーク• 多言語時代のコード処理フレームワーク
• フレームワークからデザインパターンへ• フレームワークからデザインパターンへ
• まとめ• まとめ
7
多プログラミング言語時代多プログラミング言語時代
• 環境や要求の多様化に伴い言語数増大• 環境や要求の多様化に伴い言語数増大
– TIOBE Index上位15言語シェア: 86%(‘12) 70%(‘15)
– 開発者によっては1プロジェクト4言語以上– 開発者によっては1プロジェクト4言語以上 [Karus11]
• 多言語時代のツールフレームワーク
1. テストカバレッジ測定フレームワーク Open Code1. テストカバレッジ測定フレームワーク Open Code
Coverage Framework (OCCF) [Sakamoto11]
2. 汎用コード処理フレームワーク UNIfied Source COde2. 汎用コード処理フレームワーク UNIfied Source COde
ENgineering framework (UNICOEN) [坂本13]
TIOBE Index http://www.tiobe.com/
[Karus11] S. Karus, et al., A study of language usage evolution in open source software, MSR,2011
[Sakamoto11] Kazunori Sakamoto, Fuyuki Ishikawa, Hironori Washizaki, and Yoshiaki Fukazawa, “Open Code Coverage
Framework: A Framework for Consistent, Flexible and Complete Measurement of Test Coverage Supporting Multiple
8
Framework: A Framework for Consistent, Flexible and Complete Measurement of Test Coverage Supporting Multiple
Programming Languages,” IEICE Transactions on Information and Systems, Vol.E94-D, No.12, pp.2418-2430, 2011.
[坂本13] 坂本 一憲, 大橋 昭, 太田 大地, 鷲崎 弘宜, 深澤 良彰, “UNICOEN: 複数プログラミング言語対応のソースコー
ド処理フレームワーク”, 情報処理学会論文誌, Vol.54(No.2), pp.945-960, 2013
1. 問題と解決:コストと統一性
フレームワークによる支援
1.
• 開発と保守コストが大きい
– 新言語への対応が困難
フレームワークによる支援
共通処理の再利用
– 新言語への対応が困難
• カバレッジの種類がばらばら
カバレッジ種類数の統一
柔軟な機能拡張• カバレッジの種類がばらばら
– 複数言語での開発が困難
柔軟な機能拡張
コード埋め込みによる測定
実装の簡略化対応するカバレッジ
種類の差異
カバレッジ種類
数の統一
実装の簡略化
(Cobertura)
(Statement
共通処理
Java
Python
機能追加
Java
(Cobertura)
(COVTOOL)
Python
(Statement
Coverage)
共通処理
Java
C
Python
9
(Cobertura)
C
(COVTOOL)
Python
(Statement
Coverage)
OCCF
(COVTOOL)
[Sakamoto11] Kazunori Sakamoto, Fuyuki Ishikawa, Hironori Washizaki, and Yoshiaki Fukazawa, “Open Code Coverage
Framework: A Framework for Consistent, Flexible and Complete Measurement of Test Coverage Supporting Multiple
Programming Languages,” IEICE Transactions on Information and Systems, Vol.E94-D, No.12, pp.2418-2430, 2011.
1. OCCFの構成
テストカバレッジ
:外部プログラム(ライブラリなど)
:言語固有処理(.NETかスクリプト言語)
カバレッジ
テストカバレッジ
測定用コード
:外部プログラム(ライブラリなど)
:フレームワーク(.NET言語で実装)
カバレッジ
データソースコード ソースコード
コ
ー
ド
埋
実
行
部
カ
バ
レ
ッ
ジ~~~~
~~~~
~~~~
0101
0001
埋
め
込
み
実
行
部
(
処
理
系
カ
バ
レ
ッ
ジ
表
示
部
~~~~
~~~~
~~~~
~~~~
~~~~
~~~~
測定結果
0001
1110
1010
み
部
処
理
系
)
表
示
部
測定結果
AST AST AST
ソースコードソースコード コ
ー
ド
ソースコード
~~~~
~~~~
~~~~
~~~~
ソースコード
~~~~
~~~~
~~~~
AST
生
成
部
AST
整
形
部
AST
操
作
部
コ
ー
ド
生
成
部
10
~~~~
~~~~
生
成
部
整
形
部
操
作
部
生
成
部
10
[Sakamoto11] Kazunori Sakamoto, Fuyuki Ishikawa, Hironori Washizaki, and Yoshiaki Fukazawa, “Open Code Coverage
Framework: A Framework for Consistent, Flexible and Complete Measurement of Test Coverage Supporting Multiple
Programming Languages,” IEICE Transactions on Information and Systems, Vol.E94-D, No.12, pp.2418-2430, 2011.
1. カバレッジ測定用コードの埋め込み1. カバレッジ測定用コードの埋め込み
int func(int a) { int func(int a) {int func(int a) {
if (a == 0) {
printf("a == 0");
}
int func(int a) {
if (a == 0) {
stmt_cov(0);
printf("a == 0");}
else {
printf("a != 0");
printf("a == 0");
}
else {printf("a != 0");
}
}
else {
stmt_cov(1);
printf("a != 0");
}}
}Function
int func(int a) • 自動的に挿入
Statement Statement
• 副作用なし
• カバレッジ情報
をファイルに出力
printf("a == 0") printf("a != 0")
Statement
stmt_cov(0) stmt_cov(1)
Statement
Statement
Statement をファイルに出力
11
stmt_cov(0) stmt_cov(1)
[Sakamoto11] Kazunori Sakamoto, Fuyuki Ishikawa, Hironori Washizaki, and Yoshiaki Fukazawa, “Open Code Coverage
Framework: A Framework for Consistent, Flexible and Complete Measurement of Test Coverage Supporting Multiple
Programming Languages,” IEICE Transactions on Information and Systems, Vol.E94-D, No.12, pp.2418-2430, 2011.
2. UNICOEN: 汎用の多言語対応処理FW
(Java, JavaScript, C#, C, Python, Ruby, VB)(Java, JavaScript, C#, C, Python, Ruby, VB)
言語変換 コード補完
特化API
バグ検出 品質測定
ツール開発者向け汎用API
バグ検出 品質測定
対応言語拡張者向けAPI
ツール開発者向け汎用API
対応言語拡張者向けAPI
C Java RubyC Java Ruby
コンパイラコ
ンパイラ利用 オ
ブ
ジ
ェ
ク
ト
2000~3000行
12ソースコード
C
If文
統合コード
モデル
構
文
解
析
部
オ
ブ
ジ
ェ
ク
ト
生
成
部
C 条件式 True処理 False処理
モデル
構
文
解
析
部
オ
ブ
ジ
ェ
ク
ト
生
成
部
2. 統合コードモデル(メタモデル)2. 統合コードモデル(メタモデル)
if (a == 0) Java 統合コードモデルif (a == 0)
puts(“a == 0“);
Java
If文
統合コードモデル
puts(“a == 0“);
else
puts(“a != 0“); 条件式 True Falseputs(“a != 0“);
Ruby
条件式 True False
class IfStatement {
Expression Condition;
if a == 0
puts “a == 0“
Ruby
Expression Condition;
Block TrueProcess;
Block FalseProcess;
puts “a == 0“
else
}
Block FalseProcess;
}puts “a != 0“
end
13
end
[坂本13] 坂本 一憲, 大橋 昭, 太田 大地, 鷲崎 弘宜, 深澤 良彰, “UNICOEN: 複数プログラミング言語対応のソースコー
ド処理フレームワーク”, 情報処理学会論文誌, Vol.54(No.2), pp.945-960, 2013
2. 例: 1分で複雑度測定ツール
14[坂本13] 坂本 一憲, 大橋 昭, 太田 大地, 鷲崎 弘宜, 深澤 良彰, “UNICOEN: 複数プログラミング言語対応のソースコー
ド処理フレームワーク”, 情報処理学会論文誌, Vol.54(No.2), pp.945-960, 2013
2. 例: 翻訳による言語学習2. 例: 翻訳による言語学習
(Translation-based Lang. Learning)
15
Juhua Li, Kazunori Sakamoto, Hironori Washizaki, Yoshiaki Fukazawa, “Promotion of Educational Effectiveness by Translation-based
Programming Language Learning Using Java and Swift,” 50th Annual Hawaii International Conference on System Sciences (HICSS-
50), Waikoloa, Hawaii, Jan 4-7, 2017.
目次目次
• エンジニアリングと再利用
• 多言語時代のコード処理フレームワーク• 多言語時代のコード処理フレームワーク
• フレームワークからデザインパターンへ• フレームワークからデザインパターンへ
• まとめ• まとめ
16
フレームワークとデザインパターン
17
フレームワークとデザインパターン
• 再利用、拡張実現の定石がデザインパターン
– ホットスポット&コールドスポット– ホットスポット&コールドスポット
– 制御の逆転、ハリウッドの原則 (Don’t Call us)
– パターンを理解することでフレームワークの理解促進– パターンを理解することでフレームワークの理解促進
• デザインパターン: 設計の特定状況下で頻出の問題&解決
– 変更や再利用のための設計– 変更や再利用のための設計
– 共通言語、共通指針
– Gang of Four(GoF) デザインパターン [GoF00]– Gang of Four(GoF) デザインパターン [GoF00]
ユーザソフトウェア フレームワーク
ライブラリ ユーザソフトウェア
[GOF00] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides(著), 本位田真一, 吉田和樹 (監訳), “オブジェクト
指向における再利用のためのデザインパターン改訂版", ソフトバンクパブリッシング, 2000.
OCCFにおける命令網羅のPython用実装OCCFにおける命令網羅のPython用実装
public class フレームワーク
AtomicStatementSelectorForPython
: AtomicStatementSelector
{{
protected override bool
IsStatementElement(XElement e)
{{
return e.Name.LocalName
== "simple_stmt";
}}
protected override bool
IsStatementSepartor(XElement e)
{
return e.Name.LocalName
== "SEMI";== "SEMI";
}
}
Pythonの実装例
18
言語固有の処理Pythonの実装例
Kazunori Sakamoto, Hironori Washizaki, Yoshiaki Fukazawa, “Reporting the Implementation of a Framework for Measuring Test
Coverage based on Design Patterns”, Proc. 3rd International Workshop on Software Patterns and Quality (SPAQu’09)
Template Methodパターン [GoF00]より
19
Template Methodパターン [GoF00]
• 問題: アルゴリズムの構造を変えずに、場合によっ
て処理内容を変更したい
• :• 解決:以下の構成・協調動作として設計
テンプレートメソッド
TemplateMethod(){ ホットスポットTemplateMethod(){
・・・
PrimitiveOperation1()
・・・
ホットスポット
フックメソッドを定義・・・
PrimitiveOperation2()
}
フックメソッドを定義
フックメソッドの実装は、
サブクラスで実施
Command + Composite = Macroパターン
if( a == b ) { ... }if( a == b ) { ... }
20Kazunori Sakamoto, Hironori Washizaki, Yoshiaki Fukazawa, “Reporting the Implementation of a Framework for Measuring Test
Coverage based on Design Patterns”, Proc. 3rd International Workshop on Software Patterns and Quality (SPAQu’09)
21何を実現しているでしょう?[Joshua05]改変
interface MessageStrategy { public class Main {interface MessageStrategy { public class Main {
public void sendMessage(); public static void main(String[] args) {
} MessageBody mb =
new MessageBody();
abstract class AbstractStrategyFactory { mb.configure(“Hello World!”);
public abstract MessageStrategy AbstractStrategyFactory asf =public abstract MessageStrategy AbstractStrategyFactory asf =
createStrategy(MessageBody mb); DefaultFactory.getInstance();
} MessageStrategy strategy
class MessageBody { = asf.createStrategy(mb);
object payload; mb.send(strategy);
public Object getPayload() { }
object payload; mb.send(strategy);
public Object getPayload() { }
return payload; }
}
public void configure(Object obj) {
payload obj;
}
payload obj;
}
public void send(MessageStrategy ms) {
ms.sendMessage();
}
}
class DefaultFactory extends AbstractStrategyFactory {
}
class DefaultFactory extends AbstractStrategyFactory {
private DefaultFactory() {}
static DefaultFactory instance;
public static AbstractStrategyFactory getInstance() {
if(instance == null) instance = new DefaultFactory();if(instance == null) instance = new DefaultFactory();
return instance;
}
public MessageStrategy createStrategy(final MessageBody mb) {
return new MessageStrategy() {
MessageBody body = mb;MessageBody body = mb;
public void sendMessage() {
Object obj = body.getPayload();
System.out.println(obj);
} }; } }
[Joshua05] Joshua Kerievsky著,小黒直樹 他訳: パターン指向リファクタリ
ング入門~ソフトウエア設計を改善する27の作法, 日経BP社, 2005.
22デザインパターンの落とし穴
• 「解決を知っておけばよい」• 「解決を知っておけばよい」
– 解決はパターンの一部にすぎない。
「問題」の本質
を捉えよう–
• 「とにかく使えばOK」
を捉えよう
品質との関係を• 「とにかく使えばOK」
– 複雑なパターンは欠陥率 増大 [Vokac]
– 知識不足で作業時間 増大 [Prechelt]
品質との関係を
抑えよう
– 知識不足で作業時間 増大 [Prechelt]
• 「そのまま使わなければならない」
設計原則を抑え
る(例: 開放閉鎖、置換)• 「そのまま使わなければならない」
– 書かれた構造は一例に過ぎない。
リファクタリング
る(例: 開放閉鎖、置換)
[鷲崎07]
• 「最初から使わなければならない」
–
リファクタリング
していこう [Kerievsky]
– 未来は誰にもわからない
していこう [Kerievsky]
Marek Vokac, Defect Frequency and Design Patterns: An Empirical Study of Industrial Code, TSE 30(12), 2004
Lutz Prechelt, et al. Two Controlled Experiments Assessing the Usefulness of Design Pattern Documentation inLutz Prechelt, et al. Two Controlled Experiments Assessing the Usefulness of Design Pattern Documentation in
Program Maintenancem, TSE 28(6), 2002
鷲崎、丸山、山本、久保: ソフトウェアパターン- パターン指向の実践ソフトウェア開発. 近代科学社, 2007.
Joshua Kerievsky著: パターン指向リファクタリング入門~ソフトウエア設計を改善する27の作法, 日経BP社, 2005.
PythonとデザインパターンPythonとデザインパターン
• GoF デザインパターンのPython実装+α• GoF デザインパターンのPython実装+α
– doloopwhile, “Pythonによるデザインパターン
http://doloopwhile.hatenablog.com/entry/20110207/12http://doloopwhile.hatenablog.com/entry/20110207/12
97068455
– Bruce Eckel, “Python 3 Patterns, Recipes and Idioms”
http://www.mindviewinc.com/Books/Python3Patterns/http://www.mindviewinc.com/Books/Python3Patterns/
– Gennadiy Zlobin, “Learning Python Design Patterns”
• 言語特性に留意• 言語特性に留意
– ダックタイピング、メタプログラミング・・・– ダックタイピング、メタプログラミング・・・
– よりシンプルな記述、不要な可能性、新パターン(例:
Borg)Borg)
23
目次目次
• エンジニアリングと再利用
• 多言語時代のコード処理フレームワーク• 多言語時代のコード処理フレームワーク
• フレームワークからデザインパターンへ• フレームワークからデザインパターンへ
• まとめ• まとめ
24
再掲: SWEBOK V3 (2014): 15の知識領域
設計原則
要求 構築設計 テスティング 保守
設計原則
要求 構築設計 テスティング 保守
要求の基礎
要求プロセス
要求抽出
設計の基礎
設計の主要問題
構造とアーキテクチャ
構築の基礎
構築の管理
実践上の考慮事項
テストの基礎
テストレベル
テスト技法
保守の基礎
保守の主要問題
保守プロセス要求抽出
要求分析
要求仕様
要求妥当性確認
実践上の考慮事項
構造とアーキテクチャ
ユーザインタフェース設計
設計品質の分析評価
設計の表記
設計戦略・手法
実践上の考慮事項
構築技法
構築ツール
テスト技法
テスト関連計量尺度
テストプロセス
テストツール
保守プロセス
保守技法
保守ツール
デザインパターン実践上の考慮事項 設計戦略・手法
設計ツール
デザインパターン
フレームワークフレームワーク 再利用
マネジメント プロセス構成管理 モデル・手法 品質
SCMプロセスのマネ 開始と範囲定義 プロセス定義 モデリング 品質の基礎SCMプロセスのマネ
ジメント
構成の識別
構成制御
構成状態記録・報告
開始と範囲定義
プロジェクト計画
プロジェクト実施
レビュー・評価
終結
プロセス定義
ライフサイクル
プロセス
査定・改善
計量
モデリング
モデル種別
モデルの分析
開発手法
品質の基礎
品質マネジメントプ
ロセス
実践上の考慮事項
品質ツール構成状態記録・報告
構成監査
リリース管理・配布
構成管理ツール
終結
計量
マネジメントツール
計量
プロセスツール
品質ツール
25経済
プロフェッショナル
実践
計算基礎 数学基礎
エンジニアリング
基礎
まとめ&告知
• 正当なエンジニアリングであるために
– SWEBOK&プロフェッショナリズム– SWEBOK&プロフェッショナリズム
• 多言語時代のフレームワーク
– テストカバレッジ測定、汎用のコード処理– テストカバレッジ測定、汎用のコード処理
– 抽象構文木の操作、統一メタモデル
• デザインパターン: フレームワークの設計を起源• デザインパターン: フレームワークの設計を起源
– 共通性と可変性、「落とし穴」に注意!–
10th IEEE International Conference on
Software Testing, Verification and Validation
IPSJ International AI Programming Contest
Mar 13-18 (due Sep 2016)
26
samuraicoding.infoMar 13-18 (due Sep 2016)
aster.or.jp/conference/icst2017/

More Related Content

PDF
ソフトウェアエンジニアリングの全体とIoT時代のモデリングおよび関連する品質
PDF
CMSI計算科学技術特論C (2015) 可読性と性能の両立を目指して
PDF
機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA
PDF
Development and Experiment of Deep Learning with Caffe and maf
PDF
2010 icse-an analysis of the variability in forty preprocessor-based software...
PDF
ECCV2020 オーラル論文完全読破 (2/2)
PDF
ECCV2020 Oral論文 完全読破(1/2)
PDF
組み合わせテストの設計(PictMaster勉強会) 2008年7月17日
ソフトウェアエンジニアリングの全体とIoT時代のモデリングおよび関連する品質
CMSI計算科学技術特論C (2015) 可読性と性能の両立を目指して
機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA
Development and Experiment of Deep Learning with Caffe and maf
2010 icse-an analysis of the variability in forty preprocessor-based software...
ECCV2020 オーラル論文完全読破 (2/2)
ECCV2020 Oral論文 完全読破(1/2)
組み合わせテストの設計(PictMaster勉強会) 2008年7月17日

Viewers also liked (20)

ODP
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
PPTX
Javaによる理想のデザインパターン
PDF
Pyconjp2016 pyftplib
PDF
PyConJP2016: 週末サイエンティストのススメ
PDF
McEdu2016 ゲームとプログラミング学習のカタチ 鷲崎
PDF
G7 PROGRAMMING LEARNING SUMMITの狙い
PDF
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
PDF
Proposals for the SWEBOK evolution process from the viewpoint of ISO/IEC/JTC1...
PDF
Recovery of Traceability Links and Behavior Models for Software Maintenance,...
PDF
A Taxonomy for Program Metamodels in Program Reverse Engineering
PDF
20170131 python3 6 PEP526
PDF
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
PDF
Pythonで実現する4コマ漫画の分析・評論
PDF
Software Maintenance Support by Extracting Links and Models (revised)
PPT
Sematj 1st-study meeting
PDF
Python3 移行への軌跡
PDF
S qu bok特別講演2015年2月-開発領域
PDF
ICST2015勉強会 ICST2017に向けて
PDF
IPA RISE委託研究 ソフトウェアのベンチマークとなる品質実態調査における品質評価枠組み
PDF
Software Maintenance Support by Extracting Links and Models
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
Javaによる理想のデザインパターン
Pyconjp2016 pyftplib
PyConJP2016: 週末サイエンティストのススメ
McEdu2016 ゲームとプログラミング学習のカタチ 鷲崎
G7 PROGRAMMING LEARNING SUMMITの狙い
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
Proposals for the SWEBOK evolution process from the viewpoint of ISO/IEC/JTC1...
Recovery of Traceability Links and Behavior Models for Software Maintenance,...
A Taxonomy for Program Metamodels in Program Reverse Engineering
20170131 python3 6 PEP526
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
Pythonで実現する4コマ漫画の分析・評論
Software Maintenance Support by Extracting Links and Models (revised)
Sematj 1st-study meeting
Python3 移行への軌跡
S qu bok特別講演2015年2月-開発領域
ICST2015勉強会 ICST2017に向けて
IPA RISE委託研究 ソフトウェアのベンチマークとなる品質実態調査における品質評価枠組み
Software Maintenance Support by Extracting Links and Models
Ad

Similar to Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演 (20)

PDF
Deep Learning reading club at SWEST 2017 interactive session
PPTX
Variational Template Machine for Data-to-Text Generation
PDF
Ldd13 present
PDF
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
PDF
A Report on process Assessment for open source projects
PDF
[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する
PDF
Deep learning reading club @ nimiri for SWEST
PDF
アノテートによる単語情報を活用したプレゼンテーションにおけるリアルタイム相互支援システムの提案と実装
PDF
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
PDF
OSSを利用したプロジェクト管理
PDF
新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて
PDF
Session2:「グローバル化する情報処理」/伊藤敬彦
PDF
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
PDF
study on safety and security ccoding standards
PDF
サポーターズ勉強会スライド 2018/2/27
PDF
鷲崎弘宜, "AI/LLM時代のソフトウェエンジニアリング", 情報学科・専攻協議会 総会・研究会, 早稲田大学, 2025年7月26日
PDF
IPv6 アプリケーション開発入門
PPTX
Osc tokyo20141019
PPTX
サービス開発における工程
PPTX
Generating Better Search Engine Text Advertisements with Deep Reinforcement L...
Deep Learning reading club at SWEST 2017 interactive session
Variational Template Machine for Data-to-Text Generation
Ldd13 present
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
A Report on process Assessment for open source projects
[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する
Deep learning reading club @ nimiri for SWEST
アノテートによる単語情報を活用したプレゼンテーションにおけるリアルタイム相互支援システムの提案と実装
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
OSSを利用したプロジェクト管理
新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて
Session2:「グローバル化する情報処理」/伊藤敬彦
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
study on safety and security ccoding standards
サポーターズ勉強会スライド 2018/2/27
鷲崎弘宜, "AI/LLM時代のソフトウェエンジニアリング", 情報学科・専攻協議会 総会・研究会, 早稲田大学, 2025年7月26日
IPv6 アプリケーション開発入門
Osc tokyo20141019
サービス開発における工程
Generating Better Search Engine Text Advertisements with Deep Reinforcement L...
Ad

More from Hironori Washizaki (20)

PDF
IEEE-CS Tech Predictions, SWEBOK and Quantum Software: Towards Q-SWEBOK
PDF
AI Software Engineering based on Multi-view Modeling and Engineering Patterns
PDF
SWEBOK Guide and Software Services Engineering Education
PDF
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
PDF
Landscape of Requirements Engineering for/by AI through Literature Review
PDF
鷲崎弘宜, "高品質なAIシステムの開発・運用のための"フレームワーク", eAIシンポジウム 2025年1月16日
PDF
AI/IoTをベースにしたDX人材育成の産学連携育成, 愛媛県デジタル人材育成シンポジウム, 2024年12月20日
PDF
コンピューティングおよびソフトウェア工学の潮流: IEEE-CS技術予測&SWEBOK Guideに基づくAI・アジャイル・サステナビリティの展望
PDF
Impact of IEEE Computer Society in Advancing Software Engineering and Emergin...
PDF
鷲崎弘宜, "機械学習システムの多面的モデリング・パイプライン統合フレームワーク", 第6回 AI/IoTシステム安全性シンポジウム, 2024
PDF
IEEE Software Testing Technology Development Trend
PDF
Opening, 1st International Workshop on Patterns and Practices of Reliable AI ...
PDF
The Global Impact of IEEE Computer Society in Advancing Software Engineering ...
PDF
Overview of ISO/IEC/JTC1 SC7/WG20: Certification of software and systems engi...
PDF
IEEE Computer Society 2025 Vision and Future
PDF
次世代AI時代のトレンドと高信頼AIソフトウェアシステム開発に向けたフレームワーク&パターン
PDF
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
PDF
COMPSAC 2024 D&I Panel: Charting a Course for Equity: Strategies for Overcomi...
PDF
SWEBOK and Education at FUSE Okinawa 2024
PDF
Machine Learning Software Engineering Patterns and Their Engineering
IEEE-CS Tech Predictions, SWEBOK and Quantum Software: Towards Q-SWEBOK
AI Software Engineering based on Multi-view Modeling and Engineering Patterns
SWEBOK Guide and Software Services Engineering Education
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Landscape of Requirements Engineering for/by AI through Literature Review
鷲崎弘宜, "高品質なAIシステムの開発・運用のための"フレームワーク", eAIシンポジウム 2025年1月16日
AI/IoTをベースにしたDX人材育成の産学連携育成, 愛媛県デジタル人材育成シンポジウム, 2024年12月20日
コンピューティングおよびソフトウェア工学の潮流: IEEE-CS技術予測&SWEBOK Guideに基づくAI・アジャイル・サステナビリティの展望
Impact of IEEE Computer Society in Advancing Software Engineering and Emergin...
鷲崎弘宜, "機械学習システムの多面的モデリング・パイプライン統合フレームワーク", 第6回 AI/IoTシステム安全性シンポジウム, 2024
IEEE Software Testing Technology Development Trend
Opening, 1st International Workshop on Patterns and Practices of Reliable AI ...
The Global Impact of IEEE Computer Society in Advancing Software Engineering ...
Overview of ISO/IEC/JTC1 SC7/WG20: Certification of software and systems engi...
IEEE Computer Society 2025 Vision and Future
次世代AI時代のトレンドと高信頼AIソフトウェアシステム開発に向けたフレームワーク&パターン
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
COMPSAC 2024 D&I Panel: Charting a Course for Equity: Strategies for Overcomi...
SWEBOK and Education at FUSE Okinawa 2024
Machine Learning Software Engineering Patterns and Their Engineering

Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演

  • 1. Pythonを含む多くのプログラミング言語を 2016年9月21日 PyCon JP 2016 招待講演 Pythonを含む多くのプログラミング言語を 扱う処理フレームワークとパターン扱う処理フレームワークとパターン 鷲崎 弘宜 わしざき ひろのり 鷲崎 弘宜 早稲田大学グローバルソフトウェアエンジニアリング研究所長・教授 国立情報学研究所 客員教授、株式会社 システム情報 社外取締役 ISO/IEC/JTC1/SC7/WG20 Convenor, SEMAT Japan Chapter ChairISO/IEC/JTC1/SC7/WG20 Convenor, SEMAT Japan Chapter Chair IEEE CS Japan Chapter Secretary http://www.washi.cs.waseda.ac.jp/ 研究遂行・資料協力: 坂本一憲、李 菊花ほか研究遂行・資料協力: 坂本一憲、李 菊花ほか
  • 2. 目次目次 • エンジニアリングと再利用 • 多言語時代のコード処理フレームワーク• 多言語時代のコード処理フレームワーク • フレームワークからデザインパターンへ• フレームワークからデザインパターンへ • まとめ• まとめ 2
  • 5. Guide to the Software Engineering Body of Knowledge (SWEBOK) http://www.swebok.org/ http://swebokwiki.org/ 要求 構築設計 テスティング 保守 設計原則 (SWEBOK) http://www.swebok.org/ http://swebokwiki.org/ 要求 構築設計 テスティング 保守 要求の基礎 要求プロセス 設計の基礎 設計の主要問題 構築の基礎 構築の管理 テストの基礎 テストレベル 保守の基礎 保守の主要問題要求プロセス 要求抽出 要求分析 要求仕様 要求妥当性確認 設計の主要問題 構造とアーキテクチャ ユーザインタフェース設計 設計品質の分析評価 設計の表記 構築の管理 実践上の考慮事項 構築技法 構築ツール テストレベル テスト技法 テスト関連計量尺度 テストプロセス テストツール 保守の主要問題 保守プロセス 保守技法 保守ツール 要求妥当性確認 実践上の考慮事項 設計の表記 設計戦略・手法 設計ツール テストツール デザインパターン フレームワークフレームワーク 再利用 マネジメント プロセス構成管理 モデル・手法 品質 SCMプロセスのマネ 開始と範囲定義 プロセス定義 モデリング 品質の基礎SCMプロセスのマネ ジメント 構成の識別 構成制御 構成状態記録・報告 開始と範囲定義 プロジェクト計画 プロジェクト実施 レビュー・評価 終結 プロセス定義 ライフサイクル プロセス 査定・改善 計量 モデリング モデル種別 モデルの分析 開発手法 品質の基礎 品質マネジメントプ ロセス 実践上の考慮事項 品質ツール構成状態記録・報告 構成監査 リリース管理・配布 構成管理ツール 終結 計量 マネジメントツール 計量 プロセスツール 品質ツール 5経済 プロフェッショナル 実践 計算基礎 数学基礎 エンジニアリング 基礎
  • 6. 再利用の技術と期待 • 60%再利用すれば生産性2-10倍、信頼性2-3倍 [Marciniak94] – 潜在的に再利用可能な部分は15-85% [McClure92] サブシステムサブシステム クラス メソッド* * * * – 15-85% [McClure92] – 国内企業の再利用への取り組み 40% [@IT02] サブシステムサブシステム /パッケージ クラス (ファイル) 属性 メソッド (関数)/属性 システムシステムドメイン * * * * 全体 部分全体 部分 抽象的 (汎用) 設計原則(根本指針) たいてい アーキテクチャアーキテクチャ (汎用) 設計原則(根本指針) たいてい 使える パターン アーキテクチャ パターン デザインパターン 使えるかも使えるかも フレームワーク(半完成の実装) あてはまれ 使えるかも 特定の場合に 使えるかも プロダクトラインプロダクトライン 6クラス・関数ライブラリ 具体的 (特化) あてはまれ ば使える 特定の場合に 限り使える
  • 7. 目次目次 • エンジニアリングと再利用 • 多言語時代のコード処理フレームワーク• 多言語時代のコード処理フレームワーク • フレームワークからデザインパターンへ• フレームワークからデザインパターンへ • まとめ• まとめ 7
  • 8. 多プログラミング言語時代多プログラミング言語時代 • 環境や要求の多様化に伴い言語数増大• 環境や要求の多様化に伴い言語数増大 – TIOBE Index上位15言語シェア: 86%(‘12) 70%(‘15) – 開発者によっては1プロジェクト4言語以上– 開発者によっては1プロジェクト4言語以上 [Karus11] • 多言語時代のツールフレームワーク 1. テストカバレッジ測定フレームワーク Open Code1. テストカバレッジ測定フレームワーク Open Code Coverage Framework (OCCF) [Sakamoto11] 2. 汎用コード処理フレームワーク UNIfied Source COde2. 汎用コード処理フレームワーク UNIfied Source COde ENgineering framework (UNICOEN) [坂本13] TIOBE Index http://www.tiobe.com/ [Karus11] S. Karus, et al., A study of language usage evolution in open source software, MSR,2011 [Sakamoto11] Kazunori Sakamoto, Fuyuki Ishikawa, Hironori Washizaki, and Yoshiaki Fukazawa, “Open Code Coverage Framework: A Framework for Consistent, Flexible and Complete Measurement of Test Coverage Supporting Multiple 8 Framework: A Framework for Consistent, Flexible and Complete Measurement of Test Coverage Supporting Multiple Programming Languages,” IEICE Transactions on Information and Systems, Vol.E94-D, No.12, pp.2418-2430, 2011. [坂本13] 坂本 一憲, 大橋 昭, 太田 大地, 鷲崎 弘宜, 深澤 良彰, “UNICOEN: 複数プログラミング言語対応のソースコー ド処理フレームワーク”, 情報処理学会論文誌, Vol.54(No.2), pp.945-960, 2013
  • 9. 1. 問題と解決:コストと統一性 フレームワークによる支援 1. • 開発と保守コストが大きい – 新言語への対応が困難 フレームワークによる支援 共通処理の再利用 – 新言語への対応が困難 • カバレッジの種類がばらばら カバレッジ種類数の統一 柔軟な機能拡張• カバレッジの種類がばらばら – 複数言語での開発が困難 柔軟な機能拡張 コード埋め込みによる測定 実装の簡略化対応するカバレッジ 種類の差異 カバレッジ種類 数の統一 実装の簡略化 (Cobertura) (Statement 共通処理 Java Python 機能追加 Java (Cobertura) (COVTOOL) Python (Statement Coverage) 共通処理 Java C Python 9 (Cobertura) C (COVTOOL) Python (Statement Coverage) OCCF (COVTOOL) [Sakamoto11] Kazunori Sakamoto, Fuyuki Ishikawa, Hironori Washizaki, and Yoshiaki Fukazawa, “Open Code Coverage Framework: A Framework for Consistent, Flexible and Complete Measurement of Test Coverage Supporting Multiple Programming Languages,” IEICE Transactions on Information and Systems, Vol.E94-D, No.12, pp.2418-2430, 2011.
  • 10. 1. OCCFの構成 テストカバレッジ :外部プログラム(ライブラリなど) :言語固有処理(.NETかスクリプト言語) カバレッジ テストカバレッジ 測定用コード :外部プログラム(ライブラリなど) :フレームワーク(.NET言語で実装) カバレッジ データソースコード ソースコード コ ー ド 埋 実 行 部 カ バ レ ッ ジ~~~~ ~~~~ ~~~~ 0101 0001 埋 め 込 み 実 行 部 ( 処 理 系 カ バ レ ッ ジ 表 示 部 ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ 測定結果 0001 1110 1010 み 部 処 理 系 ) 表 示 部 測定結果 AST AST AST ソースコードソースコード コ ー ド ソースコード ~~~~ ~~~~ ~~~~ ~~~~ ソースコード ~~~~ ~~~~ ~~~~ AST 生 成 部 AST 整 形 部 AST 操 作 部 コ ー ド 生 成 部 10 ~~~~ ~~~~ 生 成 部 整 形 部 操 作 部 生 成 部 10 [Sakamoto11] Kazunori Sakamoto, Fuyuki Ishikawa, Hironori Washizaki, and Yoshiaki Fukazawa, “Open Code Coverage Framework: A Framework for Consistent, Flexible and Complete Measurement of Test Coverage Supporting Multiple Programming Languages,” IEICE Transactions on Information and Systems, Vol.E94-D, No.12, pp.2418-2430, 2011.
  • 11. 1. カバレッジ測定用コードの埋め込み1. カバレッジ測定用コードの埋め込み int func(int a) { int func(int a) {int func(int a) { if (a == 0) { printf("a == 0"); } int func(int a) { if (a == 0) { stmt_cov(0); printf("a == 0");} else { printf("a != 0"); printf("a == 0"); } else {printf("a != 0"); } } else { stmt_cov(1); printf("a != 0"); }} }Function int func(int a) • 自動的に挿入 Statement Statement • 副作用なし • カバレッジ情報 をファイルに出力 printf("a == 0") printf("a != 0") Statement stmt_cov(0) stmt_cov(1) Statement Statement Statement をファイルに出力 11 stmt_cov(0) stmt_cov(1) [Sakamoto11] Kazunori Sakamoto, Fuyuki Ishikawa, Hironori Washizaki, and Yoshiaki Fukazawa, “Open Code Coverage Framework: A Framework for Consistent, Flexible and Complete Measurement of Test Coverage Supporting Multiple Programming Languages,” IEICE Transactions on Information and Systems, Vol.E94-D, No.12, pp.2418-2430, 2011.
  • 12. 2. UNICOEN: 汎用の多言語対応処理FW (Java, JavaScript, C#, C, Python, Ruby, VB)(Java, JavaScript, C#, C, Python, Ruby, VB) 言語変換 コード補完 特化API バグ検出 品質測定 ツール開発者向け汎用API バグ検出 品質測定 対応言語拡張者向けAPI ツール開発者向け汎用API 対応言語拡張者向けAPI C Java RubyC Java Ruby コンパイラコ ンパイラ利用 オ ブ ジ ェ ク ト 2000~3000行 12ソースコード C If文 統合コード モデル 構 文 解 析 部 オ ブ ジ ェ ク ト 生 成 部 C 条件式 True処理 False処理 モデル 構 文 解 析 部 オ ブ ジ ェ ク ト 生 成 部
  • 13. 2. 統合コードモデル(メタモデル)2. 統合コードモデル(メタモデル) if (a == 0) Java 統合コードモデルif (a == 0) puts(“a == 0“); Java If文 統合コードモデル puts(“a == 0“); else puts(“a != 0“); 条件式 True Falseputs(“a != 0“); Ruby 条件式 True False class IfStatement { Expression Condition; if a == 0 puts “a == 0“ Ruby Expression Condition; Block TrueProcess; Block FalseProcess; puts “a == 0“ else } Block FalseProcess; }puts “a != 0“ end 13 end [坂本13] 坂本 一憲, 大橋 昭, 太田 大地, 鷲崎 弘宜, 深澤 良彰, “UNICOEN: 複数プログラミング言語対応のソースコー ド処理フレームワーク”, 情報処理学会論文誌, Vol.54(No.2), pp.945-960, 2013
  • 14. 2. 例: 1分で複雑度測定ツール 14[坂本13] 坂本 一憲, 大橋 昭, 太田 大地, 鷲崎 弘宜, 深澤 良彰, “UNICOEN: 複数プログラミング言語対応のソースコー ド処理フレームワーク”, 情報処理学会論文誌, Vol.54(No.2), pp.945-960, 2013
  • 15. 2. 例: 翻訳による言語学習2. 例: 翻訳による言語学習 (Translation-based Lang. Learning) 15 Juhua Li, Kazunori Sakamoto, Hironori Washizaki, Yoshiaki Fukazawa, “Promotion of Educational Effectiveness by Translation-based Programming Language Learning Using Java and Swift,” 50th Annual Hawaii International Conference on System Sciences (HICSS- 50), Waikoloa, Hawaii, Jan 4-7, 2017.
  • 16. 目次目次 • エンジニアリングと再利用 • 多言語時代のコード処理フレームワーク• 多言語時代のコード処理フレームワーク • フレームワークからデザインパターンへ• フレームワークからデザインパターンへ • まとめ• まとめ 16
  • 17. フレームワークとデザインパターン 17 フレームワークとデザインパターン • 再利用、拡張実現の定石がデザインパターン – ホットスポット&コールドスポット– ホットスポット&コールドスポット – 制御の逆転、ハリウッドの原則 (Don’t Call us) – パターンを理解することでフレームワークの理解促進– パターンを理解することでフレームワークの理解促進 • デザインパターン: 設計の特定状況下で頻出の問題&解決 – 変更や再利用のための設計– 変更や再利用のための設計 – 共通言語、共通指針 – Gang of Four(GoF) デザインパターン [GoF00]– Gang of Four(GoF) デザインパターン [GoF00] ユーザソフトウェア フレームワーク ライブラリ ユーザソフトウェア [GOF00] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides(著), 本位田真一, 吉田和樹 (監訳), “オブジェクト 指向における再利用のためのデザインパターン改訂版", ソフトバンクパブリッシング, 2000.
  • 18. OCCFにおける命令網羅のPython用実装OCCFにおける命令網羅のPython用実装 public class フレームワーク AtomicStatementSelectorForPython : AtomicStatementSelector {{ protected override bool IsStatementElement(XElement e) {{ return e.Name.LocalName == "simple_stmt"; }} protected override bool IsStatementSepartor(XElement e) { return e.Name.LocalName == "SEMI";== "SEMI"; } } Pythonの実装例 18 言語固有の処理Pythonの実装例 Kazunori Sakamoto, Hironori Washizaki, Yoshiaki Fukazawa, “Reporting the Implementation of a Framework for Measuring Test Coverage based on Design Patterns”, Proc. 3rd International Workshop on Software Patterns and Quality (SPAQu’09)
  • 19. Template Methodパターン [GoF00]より 19 Template Methodパターン [GoF00] • 問題: アルゴリズムの構造を変えずに、場合によっ て処理内容を変更したい • :• 解決:以下の構成・協調動作として設計 テンプレートメソッド TemplateMethod(){ ホットスポットTemplateMethod(){ ・・・ PrimitiveOperation1() ・・・ ホットスポット フックメソッドを定義・・・ PrimitiveOperation2() } フックメソッドを定義 フックメソッドの実装は、 サブクラスで実施
  • 20. Command + Composite = Macroパターン if( a == b ) { ... }if( a == b ) { ... } 20Kazunori Sakamoto, Hironori Washizaki, Yoshiaki Fukazawa, “Reporting the Implementation of a Framework for Measuring Test Coverage based on Design Patterns”, Proc. 3rd International Workshop on Software Patterns and Quality (SPAQu’09)
  • 21. 21何を実現しているでしょう?[Joshua05]改変 interface MessageStrategy { public class Main {interface MessageStrategy { public class Main { public void sendMessage(); public static void main(String[] args) { } MessageBody mb = new MessageBody(); abstract class AbstractStrategyFactory { mb.configure(“Hello World!”); public abstract MessageStrategy AbstractStrategyFactory asf =public abstract MessageStrategy AbstractStrategyFactory asf = createStrategy(MessageBody mb); DefaultFactory.getInstance(); } MessageStrategy strategy class MessageBody { = asf.createStrategy(mb); object payload; mb.send(strategy); public Object getPayload() { } object payload; mb.send(strategy); public Object getPayload() { } return payload; } } public void configure(Object obj) { payload obj; } payload obj; } public void send(MessageStrategy ms) { ms.sendMessage(); } } class DefaultFactory extends AbstractStrategyFactory { } class DefaultFactory extends AbstractStrategyFactory { private DefaultFactory() {} static DefaultFactory instance; public static AbstractStrategyFactory getInstance() { if(instance == null) instance = new DefaultFactory();if(instance == null) instance = new DefaultFactory(); return instance; } public MessageStrategy createStrategy(final MessageBody mb) { return new MessageStrategy() { MessageBody body = mb;MessageBody body = mb; public void sendMessage() { Object obj = body.getPayload(); System.out.println(obj); } }; } } [Joshua05] Joshua Kerievsky著,小黒直樹 他訳: パターン指向リファクタリ ング入門~ソフトウエア設計を改善する27の作法, 日経BP社, 2005.
  • 22. 22デザインパターンの落とし穴 • 「解決を知っておけばよい」• 「解決を知っておけばよい」 – 解決はパターンの一部にすぎない。 「問題」の本質 を捉えよう– • 「とにかく使えばOK」 を捉えよう 品質との関係を• 「とにかく使えばOK」 – 複雑なパターンは欠陥率 増大 [Vokac] – 知識不足で作業時間 増大 [Prechelt] 品質との関係を 抑えよう – 知識不足で作業時間 増大 [Prechelt] • 「そのまま使わなければならない」 設計原則を抑え る(例: 開放閉鎖、置換)• 「そのまま使わなければならない」 – 書かれた構造は一例に過ぎない。 リファクタリング る(例: 開放閉鎖、置換) [鷲崎07] • 「最初から使わなければならない」 – リファクタリング していこう [Kerievsky] – 未来は誰にもわからない していこう [Kerievsky] Marek Vokac, Defect Frequency and Design Patterns: An Empirical Study of Industrial Code, TSE 30(12), 2004 Lutz Prechelt, et al. Two Controlled Experiments Assessing the Usefulness of Design Pattern Documentation inLutz Prechelt, et al. Two Controlled Experiments Assessing the Usefulness of Design Pattern Documentation in Program Maintenancem, TSE 28(6), 2002 鷲崎、丸山、山本、久保: ソフトウェアパターン- パターン指向の実践ソフトウェア開発. 近代科学社, 2007. Joshua Kerievsky著: パターン指向リファクタリング入門~ソフトウエア設計を改善する27の作法, 日経BP社, 2005.
  • 23. PythonとデザインパターンPythonとデザインパターン • GoF デザインパターンのPython実装+α• GoF デザインパターンのPython実装+α – doloopwhile, “Pythonによるデザインパターン http://doloopwhile.hatenablog.com/entry/20110207/12http://doloopwhile.hatenablog.com/entry/20110207/12 97068455 – Bruce Eckel, “Python 3 Patterns, Recipes and Idioms” http://www.mindviewinc.com/Books/Python3Patterns/http://www.mindviewinc.com/Books/Python3Patterns/ – Gennadiy Zlobin, “Learning Python Design Patterns” • 言語特性に留意• 言語特性に留意 – ダックタイピング、メタプログラミング・・・– ダックタイピング、メタプログラミング・・・ – よりシンプルな記述、不要な可能性、新パターン(例: Borg)Borg) 23
  • 24. 目次目次 • エンジニアリングと再利用 • 多言語時代のコード処理フレームワーク• 多言語時代のコード処理フレームワーク • フレームワークからデザインパターンへ• フレームワークからデザインパターンへ • まとめ• まとめ 24
  • 25. 再掲: SWEBOK V3 (2014): 15の知識領域 設計原則 要求 構築設計 テスティング 保守 設計原則 要求 構築設計 テスティング 保守 要求の基礎 要求プロセス 要求抽出 設計の基礎 設計の主要問題 構造とアーキテクチャ 構築の基礎 構築の管理 実践上の考慮事項 テストの基礎 テストレベル テスト技法 保守の基礎 保守の主要問題 保守プロセス要求抽出 要求分析 要求仕様 要求妥当性確認 実践上の考慮事項 構造とアーキテクチャ ユーザインタフェース設計 設計品質の分析評価 設計の表記 設計戦略・手法 実践上の考慮事項 構築技法 構築ツール テスト技法 テスト関連計量尺度 テストプロセス テストツール 保守プロセス 保守技法 保守ツール デザインパターン実践上の考慮事項 設計戦略・手法 設計ツール デザインパターン フレームワークフレームワーク 再利用 マネジメント プロセス構成管理 モデル・手法 品質 SCMプロセスのマネ 開始と範囲定義 プロセス定義 モデリング 品質の基礎SCMプロセスのマネ ジメント 構成の識別 構成制御 構成状態記録・報告 開始と範囲定義 プロジェクト計画 プロジェクト実施 レビュー・評価 終結 プロセス定義 ライフサイクル プロセス 査定・改善 計量 モデリング モデル種別 モデルの分析 開発手法 品質の基礎 品質マネジメントプ ロセス 実践上の考慮事項 品質ツール構成状態記録・報告 構成監査 リリース管理・配布 構成管理ツール 終結 計量 マネジメントツール 計量 プロセスツール 品質ツール 25経済 プロフェッショナル 実践 計算基礎 数学基礎 エンジニアリング 基礎
  • 26. まとめ&告知 • 正当なエンジニアリングであるために – SWEBOK&プロフェッショナリズム– SWEBOK&プロフェッショナリズム • 多言語時代のフレームワーク – テストカバレッジ測定、汎用のコード処理– テストカバレッジ測定、汎用のコード処理 – 抽象構文木の操作、統一メタモデル • デザインパターン: フレームワークの設計を起源• デザインパターン: フレームワークの設計を起源 – 共通性と可変性、「落とし穴」に注意!– 10th IEEE International Conference on Software Testing, Verification and Validation IPSJ International AI Programming Contest Mar 13-18 (due Sep 2016) 26 samuraicoding.infoMar 13-18 (due Sep 2016) aster.or.jp/conference/icst2017/