[軟件培訓] 系統分析設計與實作—活用 UML 塑模 與 Java (04/14, 48 Hrs)
[軟件培訓] 系統分析設計與實作—活用 UML 塑模 與 Java (04/14, 48 Hrs)
報名資訊
  • 日期:2012/04/14 起,每週六白天。
    每次上課為六個小時(AM 9:30~PM 5:00),共八個星期。
  • 預定上課日期:04/14, 04/21, 04/28, 05/05, 05/12, 05/19, 05/26,
    06/02 
  • 預定地點:中國生產力中心,台北市承德路二段81號B1(首府經貿大樓)。
  • 特價優惠:NT$11,800, 含稅。舊生或三人同行再折扣為: NT$10,800。(同等課程原價學費為$30,000 以上)
  • 附贈完整系統分析文件範本 (Word 格式)與可執行的 Java 程式原始碼。
  • 線上預約報名者,贈送 UML 著書:「UML 協同合作與管理第二版(Java &C#.NET版)」(已有可抵優惠 NT$400)。
     o 第二版整本重寫,比原第一版新增 100 餘頁,並同時附 Java 可執行的原始程式碼。
     o 參考:UML團隊開發流程與管理第二版。
  • 同課程可保留再旁聽乙次的權利 (.NET/J2EE 系統分析課程均可。報名時註明舊生旁聽即可)。
  • 修習課程完成的學員均有結業證書 (諸多公司已認同本單位所傳授的課程與理念)。
  • 附免費茶點 (最後一日結業時附外訂精緻下午蛋糕咖啡等茶點)。
  • 諸多學員提議,中午休息時間延長為1小時半 (PM2:00上課)。用餐完後,學員可與講師們自由提問、小組討論或休息等。
課程宗旨
由於去年(2011)底 HSDc. 團隊忙碌於同時多個專案的開發與顧問輔導的工作,使得年底「系統分析設計與實作 by UML」課程延宕...
但百忙之餘,且諸多專案已圓滿告一段落,我們仍堅持每年至少開設兩次的系統分析課程。2012 年就決定於第二季四月中旬(清明過後)開設,並以相當優惠的價格回饋於有志持續學習的學員們。

HSDc. 團隊綜合多年來的實務輔導經驗並結合大量研究的理論知識與平台技術,所推出關於完整的系統分析、設計至實作的課程,期能協助軟體開發人員在現實的工作中,
能瞭解完整的開發流程與各個角色的工作執掌與產出。

在基於以架構為中心來建立團隊具共識的整體觀下,能聚焦在適切開發單位的功能點內,快速地從需求分析導出到實作,找出並克服開發過程中,包括溝通、技能與
技術等風險因子。而後基於這樣的框架目標內,得以對系統的結構作重整,卻又不至於影響已有的功能前提下,得以對程式碼施以重構的技巧,讓系統更有延展度與
彈性。

傳統系統分析與設計的課程,經常是「昧於現實」,將需求分析/結構設計與程式碼實作拉得太遠,而造成軟體設計與實作的不一致。殊不知,所謂的軟體塑模與程
式碼的實作必然是軟體系統的一體兩面,在軟體開發過程中,必然是要保持一致性,所以設計是要作精,而不是籠統的文件報告。關於文件,只是利用工具的文件產
出功能,將平時已確實所作的設計,產出美輪美奐的文件報表而已。不要為文件而文件,還去加班熬夜,傷了身體,又浪費生命在不必要的地方,實在沒有意義。

還有系統開發與實作也不是「妥於現實」,利用 IDE 工具從 Web/Windows Form 直接連接資料庫的這種開發方式,只是讓軟體人員變得更笨,只要需求變動就導致牽一髮而動全身,系統是不會有任何的延展與彈性的。最起碼的一點設計良心,又
能處在國內嚴苛的環境中,對於短線時程的專案,先將系統的命脈—企業邏輯的核心,全給統籌集中在中間層,也就是企業邏輯層—先求有! 再來才是求好!

待系統能確實上線,能滿足使用者的需求後,再則老闆與客戶對開發團隊有了信心,肯給予更多的資源—包括人跟錢,團隊的技能也有了增長與更好的溝通默契。外
在與內涵的條件均俱足下,就可以專致於對系統結構的重整,並對程式碼施以重構的技巧,而又不會影響既有的功能前提下,讓系統更具可重用性與延展性,甚而轉
成產品以服務更多同類型性質的客戶,又能快速的客製化每一個單位的特殊化需求。

基於這樣的理念,我們主張系統分析與設計是要「務實」,不是「昧於現實」,也不是「妥於現實」,而是在現實與理想中找到那一個平衡點。所以課程規劃是分為兩個階段。

第一個階段就是捕捉系統功能需求,快速設計,立即產出程式碼。重點就是要瞭解如何作好系統的需求分析與對應到程式碼的實作。本階段需要培訓的技能有物件導向的基礎知識、從使用者角度看待系統時的外部功能分析,抓出適切的功能點開發單位、從畫面、中間層物件到連結資料庫的實作能力等。還有,一定要配套的兩個設計措施,一為撰寫測試案例與功能測試程式碼,實現自動化的測試機制;另一為活用分析類別,先利用中間層的控制類別,集中與控管從畫面與資料庫而來的企業邏輯。

第二個階段就是傳統系統分析所說的 SD(System Design), 傳統是以資料庫的 E-R(Entity-Relation)分析,在物件導向則是稱為領域模型的建立—包括找出物件與適切的分派責任。這可不是一件容易的事,事實上應該說要具備的抽象能力要相當高,所以為何我們覺得那種 SA->SD->PG 開發流程是不務實的,因為 SD 很難作得好,然後還要 PG去等該階段的產出,又大部分是不正確,可以說是浪費開發資源與時間。程式碼可以直接反應功能的需求,但不一定要等結構分析,集中在控制控制類別的好處就是,我們可以很容易地對結構作重整、對程式碼作重構,卻又不會影響既有上線的功能。本階段的重點當然就是對所謂結構的分析技能培養,我們會兩種方式,一為從需求抓名詞的傳統方法、另一為揭露出以交易為核心的交易樣式,可以輕易地抓出一大串的企業元件。

總的來說:作好功能需求分析-> 影響系統能不能做出來 ;
     作好結構分析-> 影響系統有沒有彈性

** 基於已上課學員們普遍的意見與期望的內容,我們把 功能實作/結構設計 的內容比例調整為 60%/40%。不特別著墨 Java 更為深入的實作技術 (爾後會依主題開設技術性的單元課程)、而更多在結構的設計與分析,如設計樣式的解釋與範例演練、大型系統的結構萃取技巧等傳授。

觀念的傳授、設計的圖形化塑模表達、程式碼的實作三層次,是我們對於系統分析設計與實作課程的基本原則與態度。

修習本次系統分析的學員們,也必然可以拿到完整的教材、完整案例的 Model 檔與實作程式碼的對應,帶回去自行練習,並能對映於工作上,如此才會有顯著且實質的效益。

我們期能讓學員們上完課後,能以我們所提供的案例,包括設計模型與程式碼,當成範本而可以應用於工作實務上,甚而可以創造所屬自己的 "樣式(Pattern)"。

HSDc. 軟體團隊,強調的是「虛」與「實」兩者調和的『知行合一』...。

繼續閱讀 »

[讀書會] UML團隊開發流程與管理第二版 (09/17,星期六)

報名請至: http://www.hsdc.com.tw/course/reading_meeting_20110917

關於本書介紹,請參考:[軟件書推薦] Ringle 著作-UML團隊開發流程與管理第二版

本次讀書會,旨在提供已購買本書而對書中內容有問題或想法/建議的讀者們一個交流的讀書分享。由作者本人針對其著作,更能理解書中的案例與關於設計的想法。

我們希望與會學員們起碼約略有翻閱過該書,但不需要全部看完。只要針對書本內任一章節,可以作心得分享,甚或問題提問討論即可。

我們希望是以相當輕鬆的態度來參與讀書研討。重要的是分享,甚或是提出問題一同討論,這才會是舉辦讀書會的意義所在。

***
請注意,由於需要保留及計算報名學員們的座位,請確定會前來參加後才填寫報名單,若不克前來,也請於報名表單或來信取消報名。

※ HSDc. 團隊主要成員均會參與,當然包括作者本人。

 o 報名費用 :免費。自行於當場點餐、下午茶點或飲料即可。
 o 日期:2011/09/17 (星期六) AM 10:30 ~ PM 17:00
 o 地點:曼德主廚私房料理。 台北市通化街171巷30弄2號。02-2733-3855
     http://tw.myblog.yahoo.com/mindercafe/article?mid=2&l=f&fid=5
 o 對象:對軟體設計相關議題有興趣者,包括在職軟體開發人員及相關資訊科系講師及學生等。
 o 主辦單位:HSDc 軟體設計顧問中心。
 o 備註:
  o 本次讀書會預計開放 20 個名額。(額滿即停止報名)
  o 如因故未能參與,請取消報名,以免影響其他學員權益。
  o 請自行攜帶讀書會研討相關書籍。

[軟件書推薦] Ringle 著作-UML團隊開發流程與管理第二版
UML團隊開發流程與管理第二版 UML團隊開發流程與管理第二版
-----------------------------------
作者: 賴信仁
出版社:悅知文化
出版日期:2011年07月20日
ISBN:9789866072246

內容簡介
  ■從情境案例學習UML 2.3版中,14張圖形的應用時機
  ■完整分析如何透過UML正確表達軟體設計的精神
  ■可依據不同平台的需求,學習使用Java或C#為軟體開發工具
  ■內含LAB練習單元,可藉由實作確實了解軟體開發的種種面向
  ■使用工具的進階功能,了解團隊合作開發的基本精神

對於軟體設計的初學者來說,面對大量資訊時,往往不知從何處著手。本書作者依據多年教學經驗,以情境案例為教學主軸,適合以下需求的讀者作為學習指引:

  • 想要了解UML及其應用時機
    本書第一篇設計了一個完整案例,並將UML的14張圖形應用在該案例中,利用對話的方式,說明14張圖形的基本精神及應用方式,讓讀者可以透過實際案例了解UML的基礎。
  • 想要了解如何在實際專案中應用UML
    本書第二篇設計了另一個完整案例,搭配工具軟體,並配合UML、MDA及不同平台的程式語言(Java、C#),藉此可學習到如何在實際案例中應用UML,並提供LAB練習單元,讓讀者可以「從做中學」。
  • 想要學習如何充份發揮軟體開發團隊合作模式
    本書第三篇設計了團隊合作的情境案例,透過虛擬專案的進行,讓讀者可以了解團隊中的各個角色,以及如何挑選適合的工具。
  • 想要了解Enterprise Architect 8如何使用
    Enterprise Architect是一套完整的UM L支援工具,完整支援UML 2.3版的14張圖形,並支援多種程式語言及資料庫,且提供了強大的客製化空間。書中範例使用此軟體進行實作,藉此提供軟體操作及客製化之技巧。

去年底 Ringle 的著作-「UML 團隊開發流程與管理 (繁體/簡體版)」第一版就已賣光。原來他答應出版社作些錯誤修正後就準備要在今年初再版,結果他竟然又再整本書內容重寫過一次,足足花了兩個多月的時間,甚至再加上 Java 程式碼的範例 (第一版只有 VB.NET),不得已再版日期也就延宕到七月中旬,總算鋪貨到各經銷書商了。

繼續閱讀 »

大業務流程塑模的MSS三層次原則

越是大型公司的 IT 資訊單位,無論是外包或是自行維護/開發的系統,在作「需求分析」階段時,往往都會表達到所謂的「業務流程 (Business Process)」。

甚麼是業務 (或稱為企業)流程? 這裡節錄 Jacobson 《Object Advantage》一書中,將企業流程定義為:

Put simply, a business process is the set of internal activities performed to serve a customer.(《Object Advantage》, Ivar Jacobson, 1994, p. 3)
(簡單地說,企業流程就是要能夠服務客戶的一連串企業內部的活動)

或者更簡單的解釋,業務流程表達的就是:某個人在某個時間點所作的某件事 (而這些事會呈現出關聯性與先後順序)。

而甚麼是「大業務流程」?簡單的說,就是業務流程範圍更為廣泛,參與的人更多,所涵蓋的時間更長。而且往往因為現實上基於功能執掌,還是不同部門或不同地點就有不同的作業規範與範疇,但彼此這些作業之間仍需要連串在一起。

例如,物流零售業領域,為了表現出從門市的「訂貨/退貨」,到總部的「進貨/出貨」,乃至於轉入財會單位的「帳務處理」,每一個業務範疇,就有其作業流程/作業規範;而把「訂貨/退貨」→「進貨/出貨」→「帳務處理」等作業流程串聯成更大的流程,即為所謂的「大業務流程」。

我走訪過許多大型的 IT 單位,包括顧問輔導或教學等。檢視從該單位 SA (System Analyst, 表示為需求分析師)所整理的業務流程設計圖,無論是使用傳統的流程圖 (flow-chart),甚或採用 UML 語法所表達出來的活動圖 ((activity diagram),幾乎普遍是存在兩大問題:

  1. 想要利用一張圖表現出所有的細節。
  2. 把資料作為主體,呈現的就是資料傳遞的流程。

第二個問題最難解,這裡牽涉到的就是「資料導向 (data-oriented)」 vs. 「服務導向 (service-oriented)」的分析/設計態度。

若從上述對業務流程的定義,或是後續利用使用案例 (use case)的分析技術,國外軟體大家的最佳實務經驗 (best practices),均是偏向「服務導向」的開發模式。簡而言之,就是將資料封裝 (encapsulate)至服務之內,如此可避免過早揭露繁瑣的細節。

第一個問題則比較容易調整,主要就是把握住一個最基本的原則:設計圖要能維持「簡潔」

「簡潔」的目的在於要能適切突顯出「焦點」之所在,而把諸多繁瑣的細節給封裝住。待決定集中的焦點後,再來才是將其內部「剖開」,探究細節的組成與關聯性。

而要能達成簡潔,就需要考量兩個構面-「廣度」與「深度」,要讓設計有「層次感」。

簡而言之,「廣度」考量的是所涵蓋的範圍;「深度」則是考量所揭露出細節的精細度。

以「大業務流程」的設計呈現,我這裡推薦採用「三層次」的表達,我把它稱為 MSS (Multiple - Single - System) 塑模表示法

  • M (Multiple) Process-表達多個業務流程 (Business Process)之間的關聯性,利用「Erickson Penker (俗稱火箭圖) 流程擴展語法」表達。
  • S (Single) Process-表達單一業務流程內的作業活動 (activities)。利用 UML 「活動圖」表達。
  • S (System) -表達資訊系統所擔負的功能。利用 UML「使用案例 (use case)圖」表達。

繼續閱讀 »

利用 LINQ 實現期指Tick檔彙整為K棒

參考這一篇:「How to group a time series by interval (OHLC bars) with LINQ」。

我這裡使用 C#.NET 實作,並作了一些小小的修正,使之確實可以執行,並可從期交所所下載的原始 Tick 資料檔,經由前置的解壓縮、轉換為 Tick 物件型態,再透過該實作邏輯,就可以將 Tick 物件依所指定的時間週期 (time-interval),群組為所謂的「分K棒」(其實,正確的稱呼應該為 OHCK Bar)。

這裡也不禁對 LINQ 實作技術感到讚嘆! 它讓中間層 (middleware)的物件結構與資料來源 (data-sources)的存取,變得更為簡單太多了,所以也使得 Tick 轉K棒 的轉換邏輯,可以利用相當簡潔的語法 (類 SQL 語法),而達成該功能的實現。

底下的程式碼並未包含前述所提包括解壓縮、轉換為 Tick 物件等邏輯,只從一群已有 Tick 資料的 Collection 集合 (型態為 IEnumerable),依據所指定的 Interval 時間間隔,轉換為 K棒 (含開、高、收、低、量)的實作邏輯。

Tick 與 OHLC-Bar(K棒) 物件結構為:

    public class Tick
    {
        public string Symbol { get; set; }     //商品代號        
        public DateTime Timestamp { get; set; }  //成交日期時間
        public decimal Price { get; set; }     //成交價格
        public uint volume { get; set; }       //成交量
    }
 
    public class OHLCBar
    {
        public string Symbol { get; set; }  //商品代號
        public decimal OPEN { get;set; }  //開盤價
        public decimal CLOSE { get; set; }   //收盤價
        public decimal HIGH { get; set; }  //最高價
        public decimal LOW { get; set; }   //最低價
        public uint VOLUME { get; set; }   //成交量
        public DateTime BeginTime { get; set; } //開始時間
        public TimeSpan Interval { get; set; }   //時間區間
    }

繼續閱讀 »

[C# 實作筆記] 將 Zip壓縮檔內的文字檔轉至記憶體內的List集合
    目標:

  1. 在 C#.NET 程式內處理 *.zip 壓縮檔 (內含文字檔)的解壓縮 (decompress)。
  2. 將解壓縮後的文字檔讀進記憶體內 (memory),並將每行 (per-line)的字串 (string)儲存至 List 集合 (collection),以俾方便處理。
    主要做法:

  1. 因官方未提供處理解壓縮 .zip 壓縮格式機制,所以需下載 3rd party 的類別庫 (class library)。這裡以 SharpZipLib ( formerly NZipLib) 類別庫來處理解壓縮。
  2. 利用 SharpZipLib 內的 ZipInputStream 開啟 .zip 壓縮檔。
    string fname = @"C:\Download\TxtData.zip";
    ZipInputStream zipStream = new ZipInputStream(File.Open(fname, FileMode.Open));
  3. ZipInputStream 會依據所指定的緩衝區大小,依序將已解壓縮的文字檔內容讀至「位元組陣列 (Byte array)」;同時再利用已新增的 MemoryStream (記憶體串流)物件讀進 Byte array。
                    MemoryStream memStream = new MemoryStream();
                    int bufferSize = 2048;     //指定的緩衝區大小
                    int readCount = 0;           //回傳已讀取的位元組數目
                    byte[] buffer = new byte[bufferSize];
     
                    readCount = zipStream.Read(buffer, 0, bufferSize);   
                    while (readCount > 0)
                    {
                        memStream.Write(buffer, 0, readCount);
                        readCount = zipStream.Read(buffer, 0, bufferSize);
                    }
  4. 繼續閱讀 »

Page 1 of 180123456789101112...203040...Last »