SlideShare uma empresa Scribd logo
1 de 31
如何以自訂語言加速程式開發與增
加重用性
-Domain-specific language技術實際應用
凌網科技 鄭穎駿
jiun.9023510@gmail.com
大綱
從一個標準的功能開發需求開始
程式開發面對的挑戰
自訂語言(Domain-specific language)的概
念
實際設計一套Web application DSL
結語
Q&A
1
課程目標
希望與課者能
了解程式開發面對的各種挑戰
思考改善程式開發問題的可能方法
了解DSL的概念與應用方式
累積共用之模組、產品、工具、 DSL,
減少重工(rework),以更少的時間開發
出更好的軟體
2
從一個標準的功能開發需求開始
假使您負責以下功能需求的開發
使用者管理功能
◦ 可以列出所有使用者清單,並對使用者進行新增、
修改、刪除、查詢
權限群組管理功能
◦ 可以列出所有權限群組清單,並對權限群組進行
新增、修改、刪除、查詢 、設定群組所屬使用者、
設定群組可以使用之功能項
功能項管理功能
◦ 可以樹狀呈現功能項清單,並對功能項進行新增、
修改、刪除、查詢
3
從一個標準的功能開發需求開始
除了可見的功能需求外,可能還有以下非功能需
求(Non-functional requirements)
效能
◦ 條列頁要有分頁,避免一次撈出大量資料
◦ 無未關閉Database連線問題
資安
◦ 無SQL Injection、XSS等資安漏洞
◦ 要有必填、非必填與輸入格式檢查
彈性與其他
◦ 系統能支援多種Database(付費或開源DB可選擇)
◦ 要能快速換版(換版後供其他專案使用)
◦ 頁面編排與風格要統一(多人開發時易出現差異)
4
從一個標準的功能開發需求開始
工時預估(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
從一個標準的功能開發需求開始
程式共用議題
◦ 一般網站程式開發會不斷出現對資料庫table條列、
新增刪修的模式
程式品質議題
◦ 對於效能、資安、彈性的意識與設計需要訓練養成
或稽核機制
程式統一議題
◦ 如果沒有控管或約定,不同人開發的程式風格不會
一致
技術框架議題
◦ 不同團隊可能使用不同技術框架,形成開發人力進
入門檻
6
程式開發面對的挑戰
範圍 - 有些功能整體相似,細部有所
差異,但仍只能選擇分別開發
人力 - 不同人(junior、senior)開發的程
式可能不一致、品質有差異
◦ 教育訓練與Code Review
時程 - 被要求短時間內完成功能
◦ 時程與品質的Trade-Off
7
程式開發面對的挑戰
目標
◦ 程式品質好
◦ 花費工時少
◦ 投入人力少
8
花費工時
程式品質
開發與維護成本
投入人力
9
(How)如何提升開發速度並兼顧品質
◦ 經驗與技術的累積
◦ 透過模組、產品、工具,減少重覆開發的
部分,增加重用率(reusability)
程式開發面對的挑戰
花費工時
程式品質
開發與維護成本
投入人力
共用之
模組,產品,
工具
經驗
程式開發面對的挑戰
增加重用率(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
程式開發面對的挑戰
是否可讓開發過程中Routine的部分減少
或自動化?
是否可在過往開發過的功能模組上重用
或衍伸而不從零開始?
是否可讓程式規格與品質一致?
11
使用DSL & Code Generator or MDA技術
可以讓你更接近以上目標
程式開發面對的挑戰
今日程式開發可能大多是..
12
What we do nowadays mostly
程式開發面對的挑戰
期望的未來
13
What we want tomorrow ideally
自訂語言(Domain-specific language)的概念
Lv3.5. DSL & Code Generator or MDA(允許更多
變異),Utility Level
14
程式規格(DSL)
定義方式 : TXT,XML,UML…
目標領域 : 畫面、表單、動作、程序…
程式規格解析(Parser):
Code Generator or DSL Interpreter
自訂語言的概念
目標領域範例1
◦ WPF(Windows Presentation Foundation) -XAML
一種XML的使用者介面(視窗畫面)描述語言
15
自訂語言的概念
目標領域範例2
◦ Apache Ant
一個XML設定語言,將軟件編譯、測試、部署等
步驟聯繫在一起加以自動化的工具
16
自訂語言的概念
DSL vs. GPL(General-purpose language)
DSL更貼近使用端需求,只符特定目的
DSL由Code Generator處理大部分動作
17
自訂語言的概念
DSL & Code Generator, MDA
◦ 軟體生產線
18
自訂語言的概念
DSL & Code Generator, MDA
優點
◦ 快速開發
◦ 減少重工,減少重覆測試
◦ 程式品質一致
◦ 可閱讀的程式規格
挑戰
◦ Code Generator開發較一般程式複雜
◦ 需取捨程式規格定義的廣度與使用者的學
習曲線
◦ 要準備相關說明文件供使用者學習
19
自訂語言的概念
程式規格定義的廣度 vs. 使用者的學習曲線
20
可達到之功能
使用者學習時間
語言複雜度
自訂語言的概念
擴充點
◦ 設計一些擴充點(plug-in)可以增加DSL支援功能的
廣度
混合使用
◦ DSL只能支援特定領域,應允許DSL開發的功能與
手動開發的功能互相結合
使用取捨
◦ 當超出該DSL原先設定的領域範圍時便不適合使用
,不然會有反而繞遠路的情況,比直接手動開發
費時或複雜
21
自訂語言的概念
DSL技術與MS Visual Studio比較
◦ Spec Base vs. Control Base
◦ Control Base可以控制更多細節但操作步驟稍
多(拖拉&設定)
22
實際設計一套Web application DSL
HyPattern - a WebApp DSL Interpreter
程式規格的定義方式 : XML
目標領域 : 網頁程式常見的模式,條列頁,
編輯頁,修改頁,查詢頁,樹狀顯示
將差異的地方以自訂語言(XML)描述,開發自
訂語言解譯程式根據描述將差異與共同的地
方一起處理後輸出最後結果
23
實際設計一套Web application DSL
DSL只描述差異
DSL Interpreter將差異與共通部分一起處理
24
實際設計一套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
實際設計一套Web application DSL
超出DSL定義範圍的功能需求如何處理
◦ 1. 允許預設之執行流程中安插客製程式碼片段
產生動態行為
◦ 2. 允許與手寫之客製程式交互運作並存,無法
使用DSL的部分維持手寫開發
◦ 3. 考慮修改通用核心程式擴充支援超出的部分
◦ 4. 若特定需求持續出現,且與目前DSL差異大
,可考慮為該特定需求開發新的通用核心
目標:減少重工、加速開發、更好的品質
26
實際設計一套Web application DSL
HyPattern高可應用的情況
◦ 單一Table的List, Query, Add, Edit, Delete,
Treeview
HyPattern低可應用的情況
◦ 同一畫面牽涉多Table維護,欄位需組
合與統計運算,畫面排版複雜
實際導入經驗約可減少40%~50%的routine
開發部分,套用DSL的部分一致性高、品
質穩定
27
結語
軟體開發技術不斷進步
◦ 機器語言 組合語言 高階語言
更進一步的抽象化-DSL,MDA
◦ 將焦點關注在真正的功能需求上
28
結語
減少重工才能增進效率
將DSL概念應用於適合的領域上
透過設計減少重工的方式,累積共用之
模組、產品、工具,以期能以更少的時
間開發出更好的軟體
29
Q&A
30

Mais conteúdo relacionado

Semelhante a 如何以自訂語言加速程式開發與增加重用性-Domain-specific language技術實際應用

Velocity2011分享
Velocity2011分享Velocity2011分享
Velocity2011分享Zoom Quiet
 
Docker技术介绍
Docker技术介绍Docker技术介绍
Docker技术介绍LI jeanphorn
 
微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew Wu微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew WuAndrew Wu
 
20170108 微軟大數據整合解決方案- cortana intelligence suite
20170108 微軟大數據整合解決方案- cortana intelligence suite20170108 微軟大數據整合解決方案- cortana intelligence suite
20170108 微軟大數據整合解決方案- cortana intelligence suiteMeng-Ru (Raymond) Tsai
 
Linux deepin 2012计划
Linux deepin 2012计划Linux deepin 2012计划
Linux deepin 2012计划tuhaihe
 
Zh120226techparty velocity2011-review
Zh120226techparty velocity2011-reviewZh120226techparty velocity2011-review
Zh120226techparty velocity2011-reviewZoom Quiet
 
产品管理与设计分享
产品管理与设计分享产品管理与设计分享
产品管理与设计分享aakaike
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生appuniverz
 
敏捷实践和安装开发
敏捷实践和安装开发 敏捷实践和安装开发
敏捷实践和安装开发 Flexera
 
[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDD[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDDClark
 
软件构造第一章
软件构造第一章软件构造第一章
软件构造第一章guest58ec466
 
Ruby on rails部署
Ruby on rails部署Ruby on rails部署
Ruby on rails部署Deng Peng
 
Android gradle 从入门到gg 0
Android gradle 从入门到gg 0Android gradle 从入门到gg 0
Android gradle 从入门到gg 0Jun Liu
 
初探程式語言設計以C#為例
初探程式語言設計以C#為例初探程式語言設計以C#為例
初探程式語言設計以C#為例Johnson Gau
 
Ddd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architectureDdd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architecture國昭 張
 
I os与android多平台开发心得
I os与android多平台开发心得I os与android多平台开发心得
I os与android多平台开发心得drewz lin
 
[圣思园][Java SE]000 讲师张龙简介
[圣思园][Java SE]000 讲师张龙简介[圣思园][Java SE]000 讲师张龙简介
[圣思园][Java SE]000 讲师张龙简介ArBing Xie
 
TrainingProgramAtMobileDevTW
TrainingProgramAtMobileDevTWTrainingProgramAtMobileDevTW
TrainingProgramAtMobileDevTWRyan Chung
 

Semelhante a 如何以自訂語言加速程式開發與增加重用性-Domain-specific language技術實際應用 (20)

Velocity2011分享
Velocity2011分享Velocity2011分享
Velocity2011分享
 
Docker技术介绍
Docker技术介绍Docker技术介绍
Docker技术介绍
 
微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew Wu微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew Wu
 
20170108 微軟大數據整合解決方案- cortana intelligence suite
20170108 微軟大數據整合解決方案- cortana intelligence suite20170108 微軟大數據整合解決方案- cortana intelligence suite
20170108 微軟大數據整合解決方案- cortana intelligence suite
 
Linux deepin 2012计划
Linux deepin 2012计划Linux deepin 2012计划
Linux deepin 2012计划
 
Zh120226techparty velocity2011-review
Zh120226techparty velocity2011-reviewZh120226techparty velocity2011-review
Zh120226techparty velocity2011-review
 
Ch08
Ch08Ch08
Ch08
 
软件工程2010
软件工程2010软件工程2010
软件工程2010
 
产品管理与设计分享
产品管理与设计分享产品管理与设计分享
产品管理与设计分享
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
 
敏捷实践和安装开发
敏捷实践和安装开发 敏捷实践和安装开发
敏捷实践和安装开发
 
[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDD[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDD
 
软件构造第一章
软件构造第一章软件构造第一章
软件构造第一章
 
Ruby on rails部署
Ruby on rails部署Ruby on rails部署
Ruby on rails部署
 
Android gradle 从入门到gg 0
Android gradle 从入门到gg 0Android gradle 从入门到gg 0
Android gradle 从入门到gg 0
 
初探程式語言設計以C#為例
初探程式語言設計以C#為例初探程式語言設計以C#為例
初探程式語言設計以C#為例
 
Ddd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architectureDdd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architecture
 
I os与android多平台开发心得
I os与android多平台开发心得I os与android多平台开发心得
I os与android多平台开发心得
 
[圣思园][Java SE]000 讲师张龙简介
[圣思园][Java SE]000 讲师张龙简介[圣思园][Java SE]000 讲师张龙简介
[圣思园][Java SE]000 讲师张龙简介
 
TrainingProgramAtMobileDevTW
TrainingProgramAtMobileDevTWTrainingProgramAtMobileDevTW
TrainingProgramAtMobileDevTW
 

如何以自訂語言加速程式開發與增加重用性-Domain-specific language技術實際應用