Enviar pesquisa
Carregar
如何以自訂語言加速程式開發與增加重用性-Domain-specific language技術實際應用
•
1 gostou
•
616 visualizações
Ying-Chun Cheng
Seguir
如何以自訂語言加速程式開發與增加重用性-Domain-specific language技術實際應用
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 31
Recomendados
My visual basic入門指引 1
My visual basic入門指引 1
Xavier Chou
Pair Programming (结对编程)
Pair Programming (结对编程)
Josh Chen
如何開發Thread Safe的Java Web程式
如何開發Thread Safe的Java Web程式
Ying-Chun Cheng
網站程式資安白箱與黑箱檢測處理經驗分享
網站程式資安白箱與黑箱檢測處理經驗分享
Ying-Chun Cheng
利用HTML5+CSS3打造行動裝置友善網站-響應式網頁技術介紹
利用HTML5+CSS3打造行動裝置友善網站-響應式網頁技術介紹
Ying-Chun Cheng
Android工作坊
Android工作坊
國立政治大學 數位內容碩士學位學程
實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)
Gelis Wu
microservice-and-12factor.pdf
microservice-and-12factor.pdf
Rock Sun
Recomendados
My visual basic入門指引 1
My visual basic入門指引 1
Xavier Chou
Pair Programming (结对编程)
Pair Programming (结对编程)
Josh Chen
如何開發Thread Safe的Java Web程式
如何開發Thread Safe的Java Web程式
Ying-Chun Cheng
網站程式資安白箱與黑箱檢測處理經驗分享
網站程式資安白箱與黑箱檢測處理經驗分享
Ying-Chun Cheng
利用HTML5+CSS3打造行動裝置友善網站-響應式網頁技術介紹
利用HTML5+CSS3打造行動裝置友善網站-響應式網頁技術介紹
Ying-Chun Cheng
Android工作坊
Android工作坊
國立政治大學 數位內容碩士學位學程
實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)
Gelis Wu
microservice-and-12factor.pdf
microservice-and-12factor.pdf
Rock Sun
Velocity2011分享
Velocity2011分享
Zoom Quiet
Docker技术介绍
Docker技术介绍
LI jeanphorn
微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew Wu
Andrew Wu
20170108 微軟大數據整合解決方案- cortana intelligence suite
20170108 微軟大數據整合解決方案- cortana intelligence suite
Meng-Ru (Raymond) Tsai
Linux deepin 2012计划
Linux deepin 2012计划
tuhaihe
Zh120226techparty velocity2011-review
Zh120226techparty velocity2011-review
Zoom Quiet
Ch08
Ch08
huanglab
软件工程2010
软件工程2010
fantasy zheng
产品管理与设计分享
产品管理与设计分享
aakaike
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
appuniverz
敏捷实践和安装开发
敏捷实践和安装开发
Flexera
[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDD
Clark
软件构造第一章
软件构造第一章
guest58ec466
Ruby on rails部署
Ruby on rails部署
Deng Peng
Android gradle 从入门到gg 0
Android gradle 从入门到gg 0
Jun Liu
初探程式語言設計以C#為例
初探程式語言設計以C#為例
Johnson Gau
Ddd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architecture
國昭 張
I os与android多平台开发心得
I os与android多平台开发心得
drewz lin
[圣思园][Java SE]000 讲师张龙简介
[圣思园][Java SE]000 讲师张龙简介
ArBing Xie
TrainingProgramAtMobileDevTW
TrainingProgramAtMobileDevTW
Ryan Chung
Mais conteúdo relacionado
Semelhante a 如何以自訂語言加速程式開發與增加重用性-Domain-specific language技術實際應用
Velocity2011分享
Velocity2011分享
Zoom Quiet
Docker技术介绍
Docker技术介绍
LI jeanphorn
微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew Wu
Andrew Wu
20170108 微軟大數據整合解決方案- cortana intelligence suite
20170108 微軟大數據整合解決方案- cortana intelligence suite
Meng-Ru (Raymond) Tsai
Linux deepin 2012计划
Linux deepin 2012计划
tuhaihe
Zh120226techparty velocity2011-review
Zh120226techparty velocity2011-review
Zoom Quiet
Ch08
Ch08
huanglab
软件工程2010
软件工程2010
fantasy zheng
产品管理与设计分享
产品管理与设计分享
aakaike
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
appuniverz
敏捷实践和安装开发
敏捷实践和安装开发
Flexera
[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDD
Clark
软件构造第一章
软件构造第一章
guest58ec466
Ruby on rails部署
Ruby on rails部署
Deng Peng
Android gradle 从入门到gg 0
Android gradle 从入门到gg 0
Jun Liu
初探程式語言設計以C#為例
初探程式語言設計以C#為例
Johnson Gau
Ddd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architecture
國昭 張
I os与android多平台开发心得
I os与android多平台开发心得
drewz lin
[圣思园][Java SE]000 讲师张龙简介
[圣思园][Java SE]000 讲师张龙简介
ArBing Xie
TrainingProgramAtMobileDevTW
TrainingProgramAtMobileDevTW
Ryan Chung
Semelhante a 如何以自訂語言加速程式開發與增加重用性-Domain-specific language技術實際應用
(20)
Velocity2011分享
Velocity2011分享
Docker技术介绍
Docker技术介绍
微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew Wu
20170108 微軟大數據整合解決方案- cortana intelligence suite
20170108 微軟大數據整合解決方案- cortana intelligence suite
Linux deepin 2012计划
Linux deepin 2012计划
Zh120226techparty velocity2011-review
Zh120226techparty velocity2011-review
Ch08
Ch08
软件工程2010
软件工程2010
产品管理与设计分享
产品管理与设计分享
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
敏捷实践和安装开发
敏捷实践和安装开发
[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDD
软件构造第一章
软件构造第一章
Ruby on rails部署
Ruby on rails部署
Android gradle 从入门到gg 0
Android gradle 从入门到gg 0
初探程式語言設計以C#為例
初探程式語言設計以C#為例
Ddd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architecture
I os与android多平台开发心得
I os与android多平台开发心得
[圣思园][Java SE]000 讲师张龙简介
[圣思园][Java SE]000 讲师张龙简介
TrainingProgramAtMobileDevTW
TrainingProgramAtMobileDevTW
如何以自訂語言加速程式開發與增加重用性-Domain-specific language技術實際應用
1.
如何以自訂語言加速程式開發與增 加重用性 -Domain-specific language技術實際應用 凌網科技 鄭穎駿 jiun.9023510@gmail.com
2.
大綱 從一個標準的功能開發需求開始 程式開發面對的挑戰 自訂語言(Domain-specific language)的概 念 實際設計一套Web application
DSL 結語 Q&A 1
3.
課程目標 希望與課者能 了解程式開發面對的各種挑戰 思考改善程式開發問題的可能方法 了解DSL的概念與應用方式 累積共用之模組、產品、工具、 DSL, 減少重工(rework),以更少的時間開發 出更好的軟體 2
4.
從一個標準的功能開發需求開始 假使您負責以下功能需求的開發 使用者管理功能 ◦ 可以列出所有使用者清單,並對使用者進行新增、 修改、刪除、查詢 權限群組管理功能 ◦ 可以列出所有權限群組清單,並對權限群組進行 新增、修改、刪除、查詢
、設定群組所屬使用者、 設定群組可以使用之功能項 功能項管理功能 ◦ 可以樹狀呈現功能項清單,並對功能項進行新增、 修改、刪除、查詢 3
5.
從一個標準的功能開發需求開始 除了可見的功能需求外,可能還有以下非功能需 求(Non-functional requirements) 效能 ◦ 條列頁要有分頁,避免一次撈出大量資料 ◦
無未關閉Database連線問題 資安 ◦ 無SQL Injection、XSS等資安漏洞 ◦ 要有必填、非必填與輸入格式檢查 彈性與其他 ◦ 系統能支援多種Database(付費或開源DB可選擇) ◦ 要能快速換版(換版後供其他專案使用) ◦ 頁面編排與風格要統一(多人開發時易出現差異) 4
6.
從一個標準的功能開發需求開始 工時預估(Junior與Senior有所差異) 功能項目 Junior 工時預估(hr) Senior 工時預估(hr) 使用者清單 2 1 使用者新增
3 2 使用者修改,刪除 3 2 使用者查詢 2 1 權限群組清單 2 1 權限群組新增 2 1 權限群組修改,刪除 2 1 權限群組查詢 2 1 AP樹 6 3 AP新增 2 1 AP修改,刪除 2 1 AP查詢 2 1 測試與bug修正 16 5 46 21 5
7.
從一個標準的功能開發需求開始 程式共用議題 ◦ 一般網站程式開發會不斷出現對資料庫table條列、 新增刪修的模式 程式品質議題 ◦ 對於效能、資安、彈性的意識與設計需要訓練養成 或稽核機制 程式統一議題 ◦
如果沒有控管或約定,不同人開發的程式風格不會 一致 技術框架議題 ◦ 不同團隊可能使用不同技術框架,形成開發人力進 入門檻 6
8.
程式開發面對的挑戰 範圍 - 有些功能整體相似,細部有所 差異,但仍只能選擇分別開發 人力
- 不同人(junior、senior)開發的程 式可能不一致、品質有差異 ◦ 教育訓練與Code Review 時程 - 被要求短時間內完成功能 ◦ 時程與品質的Trade-Off 7
9.
程式開發面對的挑戰 目標 ◦ 程式品質好 ◦ 花費工時少 ◦
投入人力少 8 花費工時 程式品質 開發與維護成本 投入人力
10.
9 (How)如何提升開發速度並兼顧品質 ◦ 經驗與技術的累積 ◦ 透過模組、產品、工具,減少重覆開發的 部分,增加重用率(reusability) 程式開發面對的挑戰 花費工時 程式品質 開發與維護成本 投入人力 共用之 模組,產品, 工具 經驗
11.
程式開發面對的挑戰 增加重用率(reusability)的方式 ◦ Lv0. 複製貼上(繁瑣,不利修改),Code
Level ◦ Lv1. 使用公用或第三方函式庫,Library Level ◦ Lv2. 使用第三方框架,Framework Level ◦ Lv3. 使用之前開發的功能模組(微調修改) , Module Level ◦ Lv4. 使用產品(微調修改), Product Level ◦ Lv3.5. DSL & Code Generator or MDA(允許更多 變異),Utility Level 10
12.
程式開發面對的挑戰 是否可讓開發過程中Routine的部分減少 或自動化? 是否可在過往開發過的功能模組上重用 或衍伸而不從零開始? 是否可讓程式規格與品質一致? 11 使用DSL & Code
Generator or MDA技術 可以讓你更接近以上目標
13.
程式開發面對的挑戰 今日程式開發可能大多是.. 12 What we do
nowadays mostly
14.
程式開發面對的挑戰 期望的未來 13 What we want
tomorrow ideally
15.
自訂語言(Domain-specific language)的概念 Lv3.5. DSL
& Code Generator or MDA(允許更多 變異),Utility Level 14 程式規格(DSL) 定義方式 : TXT,XML,UML… 目標領域 : 畫面、表單、動作、程序… 程式規格解析(Parser): Code Generator or DSL Interpreter
16.
自訂語言的概念 目標領域範例1 ◦ WPF(Windows Presentation
Foundation) -XAML 一種XML的使用者介面(視窗畫面)描述語言 15
17.
自訂語言的概念 目標領域範例2 ◦ Apache Ant 一個XML設定語言,將軟件編譯、測試、部署等 步驟聯繫在一起加以自動化的工具 16
18.
自訂語言的概念 DSL vs. GPL(General-purpose
language) DSL更貼近使用端需求,只符特定目的 DSL由Code Generator處理大部分動作 17
19.
自訂語言的概念 DSL & Code
Generator, MDA ◦ 軟體生產線 18
20.
自訂語言的概念 DSL & Code
Generator, MDA 優點 ◦ 快速開發 ◦ 減少重工,減少重覆測試 ◦ 程式品質一致 ◦ 可閱讀的程式規格 挑戰 ◦ Code Generator開發較一般程式複雜 ◦ 需取捨程式規格定義的廣度與使用者的學 習曲線 ◦ 要準備相關說明文件供使用者學習 19
21.
自訂語言的概念 程式規格定義的廣度 vs. 使用者的學習曲線 20 可達到之功能 使用者學習時間 語言複雜度
22.
自訂語言的概念 擴充點 ◦ 設計一些擴充點(plug-in)可以增加DSL支援功能的 廣度 混合使用 ◦ DSL只能支援特定領域,應允許DSL開發的功能與 手動開發的功能互相結合 使用取捨 ◦
當超出該DSL原先設定的領域範圍時便不適合使用 ,不然會有反而繞遠路的情況,比直接手動開發 費時或複雜 21
23.
自訂語言的概念 DSL技術與MS Visual Studio比較 ◦
Spec Base vs. Control Base ◦ Control Base可以控制更多細節但操作步驟稍 多(拖拉&設定) 22
24.
實際設計一套Web application DSL HyPattern
- a WebApp DSL Interpreter 程式規格的定義方式 : XML 目標領域 : 網頁程式常見的模式,條列頁, 編輯頁,修改頁,查詢頁,樹狀顯示 將差異的地方以自訂語言(XML)描述,開發自 訂語言解譯程式根據描述將差異與共同的地 方一起處理後輸出最後結果 23
25.
實際設計一套Web application DSL DSL只描述差異 DSL
Interpreter將差異與共通部分一起處理 24
26.
實際設計一套Web application DSL 通用核心 (DSL
Interpreter) 使用方式 條列頁 modules/List.do?listSpec=[條列描述檔名稱] 查詢頁 modules/Query.do?querySpec=[查詢描述檔名稱]&listSpec=[條列描 述檔名稱] 新增頁 modules/AddShowForm.do?addSpec=[新增描述檔名稱] 編輯頁 modules/UpdateShowForm.do?editSpec =[編輯描述檔名稱]&pk=[pk name]&pkvalue=[pk value] 樹狀顯示 modules/TreeList.do?treeSpec=[樹狀描述檔名稱] 25
27.
實際設計一套Web application DSL 超出DSL定義範圍的功能需求如何處理 ◦
1. 允許預設之執行流程中安插客製程式碼片段 產生動態行為 ◦ 2. 允許與手寫之客製程式交互運作並存,無法 使用DSL的部分維持手寫開發 ◦ 3. 考慮修改通用核心程式擴充支援超出的部分 ◦ 4. 若特定需求持續出現,且與目前DSL差異大 ,可考慮為該特定需求開發新的通用核心 目標:減少重工、加速開發、更好的品質 26
28.
實際設計一套Web application DSL HyPattern高可應用的情況 ◦
單一Table的List, Query, Add, Edit, Delete, Treeview HyPattern低可應用的情況 ◦ 同一畫面牽涉多Table維護,欄位需組 合與統計運算,畫面排版複雜 實際導入經驗約可減少40%~50%的routine 開發部分,套用DSL的部分一致性高、品 質穩定 27
29.
結語 軟體開發技術不斷進步 ◦ 機器語言 組合語言
高階語言 更進一步的抽象化-DSL,MDA ◦ 將焦點關注在真正的功能需求上 28
30.
結語 減少重工才能增進效率 將DSL概念應用於適合的領域上 透過設計減少重工的方式,累積共用之 模組、產品、工具,以期能以更少的時 間開發出更好的軟體 29
31.
Q&A 30