SlideShare a Scribd company logo
1 of 26
Download to read offline
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

Viewers also liked

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

Viewers also liked (20)

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

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

Deep Learning reading club at SWEST 2017 interactive session
Deep Learning reading club at SWEST 2017 interactive session Deep Learning reading club at SWEST 2017 interactive session
Deep Learning reading club at SWEST 2017 interactive session Kiyoshi Ogawa
 
Variational Template Machine for Data-to-Text Generation
Variational Template Machine for Data-to-Text GenerationVariational Template Machine for Data-to-Text Generation
Variational Template Machine for Data-to-Text Generationharmonylab
 
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...No Bu
 
A Report on process Assessment for open source projects
A Report on process Assessment for open source projectsA Report on process Assessment for open source projects
A Report on process Assessment for open source projectsKiyoshi Ogawa
 
[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する
[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する
[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保するDNA Data Bank of Japan center
 
Deep learning reading club @ nimiri for SWEST
Deep learning reading club @ nimiri for SWESTDeep learning reading club @ nimiri for SWEST
Deep learning reading club @ nimiri for SWESTKiyoshi Ogawa
 
アノテートによる単語情報を活用したプレゼンテーションにおけるリアルタイム相互支援システムの提案と実装
アノテートによる単語情報を活用したプレゼンテーションにおけるリアルタイム相互支援システムの提案と実装アノテートによる単語情報を活用したプレゼンテーションにおけるリアルタイム相互支援システムの提案と実装
アノテートによる単語情報を活用したプレゼンテーションにおけるリアルタイム相互支援システムの提案と実装Naoki Komatsu
 
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質 SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質 Hironori Washizaki
 
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理Tadashi Miyazato
 
新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて
新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて
新しいソフトウェアエンジニアリングのためのパターンランゲージに向けてHironori Washizaki
 
Session2:「グローバル化する情報処理」/伊藤敬彦
Session2:「グローバル化する情報処理」/伊藤敬彦Session2:「グローバル化する情報処理」/伊藤敬彦
Session2:「グローバル化する情報処理」/伊藤敬彦Preferred Networks
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
study on safety and security ccoding standards
study on safety and security ccoding standardsstudy on safety and security ccoding standards
study on safety and security ccoding standardsKiyoshi Ogawa
 
サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27Kensuke Mitsuzawa
 
IPv6 アプリケーション開発入門
IPv6 アプリケーション開発入門IPv6 アプリケーション開発入門
IPv6 アプリケーション開発入門v6app
 
サービス開発における工程
サービス開発における工程サービス開発における工程
サービス開発における工程Hidetoshi Mori
 
Generating Better Search Engine Text Advertisements with Deep Reinforcement L...
Generating Better Search Engine Text Advertisements with Deep Reinforcement L...Generating Better Search Engine Text Advertisements with Deep Reinforcement L...
Generating Better Search Engine Text Advertisements with Deep Reinforcement L...harmonylab
 
情報システム障害解析のための知識グラフ構築の試み / Constructing a knowledge graph for information sys...
情報システム障害解析のための知識グラフ構築の試み / Constructing a knowledge graph for information sys...情報システム障害解析のための知識グラフ構築の試み / Constructing a knowledge graph for information sys...
情報システム障害解析のための知識グラフ構築の試み / Constructing a knowledge graph for information sys...Shinji Takao
 

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

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

More from Hironori Washizaki

鷲崎弘宜, "国際規格ISO/IEC 24773とその意義", 情報処理学会 第86回全国大会
鷲崎弘宜, "国際規格ISO/IEC 24773とその意義", 情報処理学会 第86回全国大会鷲崎弘宜, "国際規格ISO/IEC 24773とその意義", 情報処理学会 第86回全国大会
鷲崎弘宜, "国際規格ISO/IEC 24773とその意義", 情報処理学会 第86回全国大会Hironori Washizaki
 
IEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
IEEE Computer Society’s Strategic Activities and Products including SWEBOK GuideIEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
IEEE Computer Society’s Strategic Activities and Products including SWEBOK GuideHironori Washizaki
 
アジャイル品質のパターンとメトリクス Agile Quality Patterns and Metrics (QA2AQ) 20240225
アジャイル品質のパターンとメトリクス Agile Quality Patterns and Metrics (QA2AQ) 20240225アジャイル品質のパターンとメトリクス Agile Quality Patterns and Metrics (QA2AQ) 20240225
アジャイル品質のパターンとメトリクス Agile Quality Patterns and Metrics (QA2AQ) 20240225Hironori Washizaki
 
Joseph Yoder : Being Agile about Architecture
Joseph Yoder : Being Agile about ArchitectureJoseph Yoder : Being Agile about Architecture
Joseph Yoder : Being Agile about ArchitectureHironori Washizaki
 
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデートHironori Washizaki
 
SWEBOK Guide Evolution and Its Emerging Areas including Machine Learning Patt...
SWEBOK Guide Evolution and Its Emerging Areas including Machine Learning Patt...SWEBOK Guide Evolution and Its Emerging Areas including Machine Learning Patt...
SWEBOK Guide Evolution and Its Emerging Areas including Machine Learning Patt...Hironori Washizaki
 
デジタルトランスフォーメーション(DX)におけるソフトウェアの側面とダイバーシティ・インクルーシブに関する研究実践動向
デジタルトランスフォーメーション(DX)におけるソフトウェアの側面とダイバーシティ・インクルーシブに関する研究実践動向デジタルトランスフォーメーション(DX)におけるソフトウェアの側面とダイバーシティ・インクルーシブに関する研究実践動向
デジタルトランスフォーメーション(DX)におけるソフトウェアの側面とダイバーシティ・インクルーシブに関する研究実践動向Hironori Washizaki
 
SQuBOKガイドV3概説 ~IoT・AI・DX時代のソフトウェア品質とシステム監査~
SQuBOKガイドV3概説 ~IoT・AI・DX時代のソフトウェア品質とシステム監査~SQuBOKガイドV3概説 ~IoT・AI・DX時代のソフトウェア品質とシステム監査~
SQuBOKガイドV3概説 ~IoT・AI・DX時代のソフトウェア品質とシステム監査~Hironori Washizaki
 
人生100年・60年カリキュラム時代のDX人材育成: スマートエスイー 2021年度成果および2022年度募集
人生100年・60年カリキュラム時代のDX人材育成: スマートエスイー 2021年度成果および2022年度募集人生100年・60年カリキュラム時代のDX人材育成: スマートエスイー 2021年度成果および2022年度募集
人生100年・60年カリキュラム時代のDX人材育成: スマートエスイー 2021年度成果および2022年度募集Hironori Washizaki
 
スマートエスイーコンソーシアムの概要と2021年度成果紹介
スマートエスイーコンソーシアムの概要と2021年度成果紹介スマートエスイーコンソーシアムの概要と2021年度成果紹介
スマートエスイーコンソーシアムの概要と2021年度成果紹介Hironori Washizaki
 
DXの推進において企業内に求められる人材やデジタル人材の育て方
DXの推進において企業内に求められる人材やデジタル人材の育て方DXの推進において企業内に求められる人材やデジタル人材の育て方
DXの推進において企業内に求められる人材やデジタル人材の育て方Hironori Washizaki
 
対応性のある運用のパターン
対応性のある運用のパターン対応性のある運用のパターン
対応性のある運用のパターンHironori Washizaki
 
モデル訓練のパターン
モデル訓練のパターンモデル訓練のパターン
モデル訓練のパターンHironori Washizaki
 
パターンのつながりとAI活用成熟度
パターンのつながりとAI活用成熟度パターンのつながりとAI活用成熟度
パターンのつながりとAI活用成熟度Hironori Washizaki
 
データ表現のパターン
データ表現のパターンデータ表現のパターン
データ表現のパターンHironori Washizaki
 
機械学習デザインパターンの必要性と機械学習ライフサイクル
機械学習デザインパターンの必要性と機械学習ライフサイクル機械学習デザインパターンの必要性と機械学習ライフサイクル
機械学習デザインパターンの必要性と機械学習ライフサイクルHironori Washizaki
 
青山幹雄先生を偲んで(開拓、理論、実践、コミュニティ&国際)
青山幹雄先生を偲んで(開拓、理論、実践、コミュニティ&国際)青山幹雄先生を偲んで(開拓、理論、実践、コミュニティ&国際)
青山幹雄先生を偲んで(開拓、理論、実践、コミュニティ&国際)Hironori Washizaki
 
Software Engineering Patterns for Machine Learning Applications
Software Engineering Patterns for Machine Learning ApplicationsSoftware Engineering Patterns for Machine Learning Applications
Software Engineering Patterns for Machine Learning ApplicationsHironori Washizaki
 
機械学習デザインパターンおよび機械学習システムの品質保証の取り組み
機械学習デザインパターンおよび機械学習システムの品質保証の取り組み機械学習デザインパターンおよび機械学習システムの品質保証の取り組み
機械学習デザインパターンおよび機械学習システムの品質保証の取り組みHironori Washizaki
 
Rubric-based Assessment of Programming Thinking Skills and Comparative Evalua...
Rubric-based Assessment of Programming Thinking Skills and Comparative Evalua...Rubric-based Assessment of Programming Thinking Skills and Comparative Evalua...
Rubric-based Assessment of Programming Thinking Skills and Comparative Evalua...Hironori Washizaki
 

More from Hironori Washizaki (20)

鷲崎弘宜, "国際規格ISO/IEC 24773とその意義", 情報処理学会 第86回全国大会
鷲崎弘宜, "国際規格ISO/IEC 24773とその意義", 情報処理学会 第86回全国大会鷲崎弘宜, "国際規格ISO/IEC 24773とその意義", 情報処理学会 第86回全国大会
鷲崎弘宜, "国際規格ISO/IEC 24773とその意義", 情報処理学会 第86回全国大会
 
IEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
IEEE Computer Society’s Strategic Activities and Products including SWEBOK GuideIEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
IEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
 
アジャイル品質のパターンとメトリクス Agile Quality Patterns and Metrics (QA2AQ) 20240225
アジャイル品質のパターンとメトリクス Agile Quality Patterns and Metrics (QA2AQ) 20240225アジャイル品質のパターンとメトリクス Agile Quality Patterns and Metrics (QA2AQ) 20240225
アジャイル品質のパターンとメトリクス Agile Quality Patterns and Metrics (QA2AQ) 20240225
 
Joseph Yoder : Being Agile about Architecture
Joseph Yoder : Being Agile about ArchitectureJoseph Yoder : Being Agile about Architecture
Joseph Yoder : Being Agile about Architecture
 
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
 
SWEBOK Guide Evolution and Its Emerging Areas including Machine Learning Patt...
SWEBOK Guide Evolution and Its Emerging Areas including Machine Learning Patt...SWEBOK Guide Evolution and Its Emerging Areas including Machine Learning Patt...
SWEBOK Guide Evolution and Its Emerging Areas including Machine Learning Patt...
 
デジタルトランスフォーメーション(DX)におけるソフトウェアの側面とダイバーシティ・インクルーシブに関する研究実践動向
デジタルトランスフォーメーション(DX)におけるソフトウェアの側面とダイバーシティ・インクルーシブに関する研究実践動向デジタルトランスフォーメーション(DX)におけるソフトウェアの側面とダイバーシティ・インクルーシブに関する研究実践動向
デジタルトランスフォーメーション(DX)におけるソフトウェアの側面とダイバーシティ・インクルーシブに関する研究実践動向
 
SQuBOKガイドV3概説 ~IoT・AI・DX時代のソフトウェア品質とシステム監査~
SQuBOKガイドV3概説 ~IoT・AI・DX時代のソフトウェア品質とシステム監査~SQuBOKガイドV3概説 ~IoT・AI・DX時代のソフトウェア品質とシステム監査~
SQuBOKガイドV3概説 ~IoT・AI・DX時代のソフトウェア品質とシステム監査~
 
人生100年・60年カリキュラム時代のDX人材育成: スマートエスイー 2021年度成果および2022年度募集
人生100年・60年カリキュラム時代のDX人材育成: スマートエスイー 2021年度成果および2022年度募集人生100年・60年カリキュラム時代のDX人材育成: スマートエスイー 2021年度成果および2022年度募集
人生100年・60年カリキュラム時代のDX人材育成: スマートエスイー 2021年度成果および2022年度募集
 
スマートエスイーコンソーシアムの概要と2021年度成果紹介
スマートエスイーコンソーシアムの概要と2021年度成果紹介スマートエスイーコンソーシアムの概要と2021年度成果紹介
スマートエスイーコンソーシアムの概要と2021年度成果紹介
 
DXの推進において企業内に求められる人材やデジタル人材の育て方
DXの推進において企業内に求められる人材やデジタル人材の育て方DXの推進において企業内に求められる人材やデジタル人材の育て方
DXの推進において企業内に求められる人材やデジタル人材の育て方
 
対応性のある運用のパターン
対応性のある運用のパターン対応性のある運用のパターン
対応性のある運用のパターン
 
モデル訓練のパターン
モデル訓練のパターンモデル訓練のパターン
モデル訓練のパターン
 
パターンのつながりとAI活用成熟度
パターンのつながりとAI活用成熟度パターンのつながりとAI活用成熟度
パターンのつながりとAI活用成熟度
 
データ表現のパターン
データ表現のパターンデータ表現のパターン
データ表現のパターン
 
機械学習デザインパターンの必要性と機械学習ライフサイクル
機械学習デザインパターンの必要性と機械学習ライフサイクル機械学習デザインパターンの必要性と機械学習ライフサイクル
機械学習デザインパターンの必要性と機械学習ライフサイクル
 
青山幹雄先生を偲んで(開拓、理論、実践、コミュニティ&国際)
青山幹雄先生を偲んで(開拓、理論、実践、コミュニティ&国際)青山幹雄先生を偲んで(開拓、理論、実践、コミュニティ&国際)
青山幹雄先生を偲んで(開拓、理論、実践、コミュニティ&国際)
 
Software Engineering Patterns for Machine Learning Applications
Software Engineering Patterns for Machine Learning ApplicationsSoftware Engineering Patterns for Machine Learning Applications
Software Engineering Patterns for Machine Learning Applications
 
機械学習デザインパターンおよび機械学習システムの品質保証の取り組み
機械学習デザインパターンおよび機械学習システムの品質保証の取り組み機械学習デザインパターンおよび機械学習システムの品質保証の取り組み
機械学習デザインパターンおよび機械学習システムの品質保証の取り組み
 
Rubric-based Assessment of Programming Thinking Skills and Comparative Evalua...
Rubric-based Assessment of Programming Thinking Skills and Comparative Evalua...Rubric-based Assessment of Programming Thinking Skills and Comparative Evalua...
Rubric-based Assessment of Programming Thinking Skills and Comparative Evalua...
 

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/