11月 29, 2010

元件為基礎的開發方法 (CBD)

元件為基礎的開發方法 (CBD, component based development)

快速整合各種可以重複使用的物件模組,形成一個新的、獨特的應用程式。
例如整合:使用者介面與訂單模組,形成一個線上購物系統。

由於元件導向技術,使得系統發展時程縮短、成本降低、生產力提升、容易客製化與維護。促使提昇軟體再用性與可維護性。

軟體元件通常可分為白箱元件(white box components)和黑箱元件(black box components),前者以原始碼呈現,後者以二進碼呈現,僅能從文件的描述得知其功能。黑箱元件雖然不能直接修改元件,但可以透過建立新包裹元件擴 充原來元件功能,而不更動原來元件功能,使得原來元件升級後仍然可以使用,具有較佳的可維護性

然而,元件式軟體發展(CBD)過程中,需要尋找適當元件進行修改整合,如何促進擴大元件供應,以利後續發展過程中的修改和整合,就成了元件式軟體發展最基礎核心的問題

內聚力(Cohesion and) 與 耦合力(Coupling)

對結構化系統分析設計而言,良好的設計該有:模組間要做恰當分割、階層式系統架構、獨立的模組功能。提升好的模組品質其衡量準則:模組的內聚力,模組間耦合力。

內聚力:模組內完成單一任務的程度,盡可能緊密,細分為七種。
耦合力:模組間關聯的強度,盡合能獨立,細分為五種。
--
  1. 功能內聚力:模組只用來完成單一任務,例如「計算所得稅」
  2. 順序內聚力:模組內具有多個功能,每個功能的輸出,會是下個功能的輸入。模組間會共用資料。
  3. 溝通內聚力:模組內的功能元件使用共同的輸入資料,執行順序無相關性。例如「查詢個人地址、個人姓名,資料都是從 DB 提取而來。」
  4. 暫時內聚力:模組內的功能,雖然無順序之分,但要要在同一時間內執行完成,通常用在系統的初始化。
  5. 程序內聚力:模組內的功能,要照一定順序執行,但不共用資料
  6. 邏輯內聚力:將功能相同的單元,放置在同一個模組內。例如將 sin()、cos()、abs() 放到 math 模組內。
  7. 偶發內聚力:模組內的任務並無相關性,單純只是放在一塊。
--
  1. 資料耦合力:模組間的訊息傳遞是透過基本的變數型別。
  2. 資料結構耦合力:模組間的溝通是用資料結構,但在目的模組中,並不一定會使用到所有資料欄位。
  3. 控制耦合力:一個模組的運作,是透過其他模組傳來控制訊號。所以在設計上要知道該模組的運作架構與可接受資料格式。
  4. 共同耦合力:模組間使用共同的資料變數(想成 global 變數)
  5. 內容耦合力:模組使用了多個進入點方式,跳到(GOTO)另的個模組。這樣的架構會改變其他模組的資料、行為、執行過程。

各類資訊系統 (IS, Information System)

1. 交易處理系統 (TPS, Transaction Processing System)
執行企業基本交易資訊蒐集(Input)、儲存(Storage)、處理(Process)、傳播(Output) 的系統。企業電腦化的基礎,其他的 IS 像是 MIS、DSS、ESS 都是以 TPS 作為資訊來源,才能進行分析。
實際的例子:訂單處理系統
特點:處理結構化問題,由作業階層操作。問題大多是重複例行。具有高度可靠要求、資理資料大而且需要快速回應。

2. 管理資訊系統 (MIS, Management Information System)
設計用來提供日常、例行性、固定格式、簡單分析,給不同層級的管理者,跟「經營」有關議題的管理報表(像是存貨日報表、專案進度表、營收報表),主要用來提供分析資訊。
特點:報表格式通常固定,像是當週銷售統計。也是負責結構化問題,不需要複雜運算。資料來源是靠 TPS 提供。

3. 決策支援系統 (DSS, Decision Support System)
結合電腦快速、大量的資料查詢與運算,輔助決策者在面臨突發狀況時進行良好決策。主要是處理半結構化問題,需球並無固定格式。
(Note) Simon 決策制定的四階段
(a) 情報:個人蒐集資訊,確認與瞭解組織的問題 (訊息可由 MIS 而來)
(b) 設計:針對上述問題提出解決方案 (DSS 有分析模型可進行分析)
(c) 選擇:在解決方案中挑出較為合適者 (DSS 給方案,人類挑合適者)
(d) 執行:將決策付諸實行,報告執行進度 (用 MIS 來追蹤執行狀況)
決策支援系統的分類:
(a) 模式導向
使用許多公式去推論「如果…就…what if」主要使用模式庫與 UI 去進行分析。
(b) 資料導向
分析公司中的大量資料,通常 TPS 所產生的資料會存在資料倉儲中,作為決策分析 Data Mining 與 OLAP 使用的資料來源。
4. 專家系統 (Expert System)
組成元件:使用者介面、知識庫、推理引擎
用來模仿人類專家解決特定問題。主要利用知識擷取工具,將人類專家所擁有的知識,轉存在知識庫中。使用者可以透過 UI 來進行查詢,而推理引擎會依照使用者輸入,利用現有知識法則進行推論,給予解釋。
- 推理引擎:專家系統會根據輸入的條件,進行法則推理,導出最終結果。分為 向前推理(給資訊,問結果)與逆向推理(給結果,詢問有無支持該結果的論述)
- 知識庫:儲存法則與事實的地方。
- 使用者介面:提供 User 的互動介面
- 工作暫存區:推理過程中暫存資料的地方。
- 解釋機制:專家系統在解決問題過程中,推理的路徑顯示出來。
5. 商業智慧 (Business Intelligence)
商業智慧(BI)經由分析學習、客觀的外顯知識而來。企業使用快速、即時的資訊科技,蒐集分析企業外在環境的競爭資訊,內部經營的關鍵指標,提供決策者進行判斷,以提昇企業競爭力的一種資訊系統。BI 的資訊來源有三種:
(a) 外部整體環境
企業的生存受到外部環境影響極大,使用 BI 可以對環境(政治、經濟、社會)快速掃描、分析。
(b) 外部競爭環境
瞭解企業外部的競爭危機,即分析波特(Porter)五力面向。使用智慧代理人蒐集對手產品價格、比較。
(c) 內部的企業管理智慧
使用 BI 快速掌握內部營運績效,決策者可以定義關鍵成功因素(CSF)與關鍵績效指標(KPI)。
6. 企業資源規劃(ERP, Enterprise Resource Planning)
整合與規劃企業分散於各據點的資源,協調內部各部門垂直功能(生產、行銷、人力、研發、財務會計),並且水平跨部門(作業、管理、策略階級)。對內可以提高效率、效果,增加反應速度;對外可以增加競爭優勢,抵抗五力威脅。

11月 28, 2010

Feasibility Study

可行性研究

1. 技術可行性
包括硬體技術、軟體技術,與使用這些技術的能力。在硬體方面,像是硬體設備採購
通訊設備;在軟體方面,則考慮該應用何種軟體,並且評估可靠性。

2. 作業可行性
人員有作業流程上的可行性,人員是否會產生抗拒使用新系統。新系統的引進如何與工作流程配合。

3. 時效可行性
系統在發展的時間上,是否可以符合期限。

4. 經濟可行性(可行性分析的重點)
評估成本與效益,常用的工具有:
(a) 總持有成本(TCO)
在整個資訊系統生命週期中,從規劃、分析直至維護,所花費直接與間接的成本,軟體採購、硬體建置、
資產管理維護、技術支援,設備升級所耗用成本。
(b) 回收期
(c) 投資報酬率
(d) 淨現值

主從式架構(Client/Server) 與 Web based

1. 主從式架構 (Client/Server)

組成三要件為:伺服器、用戶以及網路。

用戶端(Client)與伺服端(Server)透過網路相連結。隨著硬體技術的演進,現行的客戶端通常具備不錯的運算能力,透過適當的分工,可以減輕伺服端的負擔。

用戶端不再是終端機,而是具有處理能力的個人電腦,透過網路與伺服端相連。人機介面處理完全交由客戶端的個人電腦處理,而主機或伺服器只負責資料庫方面的資料處理工作。

優點:價格相對低廉、系統的擴充性較佳。以往資料及作業系統皆放在同一套主機,不能分散處理,而主從架構就是可以達到軟體專業分工的目標。

缺點:軟體更新較不易,當程式異動時要分別進行修改,花費的時間成本。另外資料的安全性也有所影響,因為可能有部份資料是儲存在客戶端。

2. web based
透過 Browser 來進行資料的存取,使用者無需安裝與設定。在任何平台、作業系統均可使用。其中的三層架構(3-tier):
使用者介面層(presentation tier)
負責接收使用者的資料輸入,和將結果顯示出來。
商業邏輯層(business logic tier)
於伺服器電腦上執行,負責運算邏輯的,其功能是接受來自用戶端的請求,並且決定何種資訊可以被傳送至用戶端。
資料服務層(data services tier)
包含了儲存大量資料的資料庫,負責資料庫或訊息的處理。

11月 26, 2010

程式語言文法

<id> → A | B | C

<assign> → <id> = <exp>

<exp> → <id> * <exp>
| <id> + <exp>
| ( <exp> )
| <id>

**************************

<S> → <A><B><C>
<A> → a<A> | a
<B> → b<B> | b
<C> → c<C> | c

可展開得到 a^ib^jc^k , i,j,k >=1

**************************
文法:
<exp> → <exp> + <exp> | <id>
<id> → a

口訣:只要看到 <x> → <x> + <x> 這個 pattern 就是模糊文法!!

模糊文法定義:若一語言可接受的一個句子,依照語言文法產生的剖析樹
可產生兩個或以上的剖析樹,則稱此文法為模糊文法。

原因:當計算 A+A+A 時,
可以有兩種 parse tree 分別是:(A+A)+A 與 A+(A+A)
因為 <exp> → <exp> + <exp> 表示展開前面/後面 都允許

**************************


思考 <exp> → <exp> + <term> 與
<exp> → <term> + <exp> 差異點
假設 <term> → A | B | C

這兩個不同的式子,決定了左結合或右結合,
以 A+B+C 例子來看,上式呈現 (A+B)+C 而下式呈現 A+(B+C)
先被展開的,會較晚計算,位於 parse tree 上端
較晚展開的,會較先計算,位於 parse tree 底端

在 <exp> + <term> 式子中,位於右手邊的 term 表示先被展開,所以較晚計算
也就是說 A+B+C 中,右手邊的 C 會在 parse tree 上端,最晚計算。
此一結果形成「左結合」的優先權。

同理在 <term> + <exp> 中,位於左邊的 term 先被展開,右邊的 exp 較晚展開
所以在 A+B+C 例子中,會呈現 A+(B+C) 的現象,左邊的 A 先展開,較晚算。

底下這個文法,可以滿足優先權 ( 括號 > 乘法 > 加法 )

<exp> → <exp> + <term> | <term> (想一想 A+B+C 要怎麼算: (A+B)+C )
<term> → <term> * <factor> | <factor> (想一下 A*B*C 要怎麼算: (A*B)*C )
<factor> → ( <exp> ) | <id>
<id> → a | b | c


有一點要小心,如果將乘號與括號放在同個式中,
表示優先權 [括號] 等於 [乘號] 這是不對的。
像下面這個例子來說,乘號與括號的優先權會是一樣的。

<term> → <term> * <factor> | ( <factor> )

所以要分層步進,加號 → 乘號 → 括號
別忘了老原則,愈先展開者位在 parse tree 的上層,會愈晚算。

***************

下列的 E 是左遞迴,這個東西不好,因為不曉得他要展開幾次

E → E + T | T

展開的結果可以是:
(E)+T
(E+T)+T
(E+T+T)+T
(E+T+T+T)+T


實際的式子中不會有括號,這邊是為了標記出 "E" 可延伸的變化。

可以想像,光是 E 去做遞迴展開,這個式子就會很長。問題是他會有多長?

換個角度想:整個式子最後展開,得到的結果是 T+T+T+T+T (很多 T 加相加)

如果問 E 要展到何時才會停? 答案是 " E + T " 中的 E 如果展成 T 了

那麼式子就宣告結束。所以很簡單:這個 E 最終會變成 T 的。

所以我們可以這樣看事情 E → T (+T) (+T) (+T) (+T) 括號是為了分組而寫出來的

試著用下面的邏輯表達這個結果:

E → TE' | T /* 第一個 T 打頭陣,後面 (+T) 則用 E' 帶出來 */
E' → +T /* 這邊的 E' 只能展出一個 +T */

這樣就可以創造出 "T+T" 的結果了,更重要的是排除了左因子。

現在把威力加強一點,讓這個文法可以展出 T+T+T+T 這麼長的東西

E → TE' | T
E' → +TE' /* 遞迴用 E' 去產生很多組 (+T) (+T)... 的效果 */


***************************

左因子 - 文法產生規則不可以有「左因子」 下面的例子中 α 就是左因子

A → αB | αC

因為在判斷要選用何條規則時,因為都是α開頭,會不知道該選何者。

舉個例子:

<stmt> → if <exp> then <stmt> else <stmt> |
if <exp> then <stmt>

(想法:數學提公因式,應該會吧 A= PQ + PR = P(Q+R) )

<stmt> → if <exp> then <stmt> <term>
<term> → else <stmt> | ε

11月 25, 2010

使用 BNF 表示二進位3的倍數

設計文法產生二進位數字,其值為3的倍數

hint:

(1) 在 3 的世界中只會有三種數字 3n, 3n+1, 3n+2
(2) 切割子問題時,只要考慮 1位數 與 多位數

令所求 <3n> 表示三的倍數,則有下面幾個可能

0 ( 單純只有一個數字,又要是三的倍數,所以只能選0 )
<A>0 ( 真正值為 2*A+0 為三的倍數,所以取 A 的值為 <3n> )
<B>1 ( 真正值為 2*B+1 為三的倍數,所以取 B 的值為 <3n+1> )

所以整理一下可以得到:
<3n> → 0 | <3n>0 | <3n+1>1

在這邊要討論 <3n+1> 的部份(三的倍數+1),仿照上面的論述法:
1 ( 如果單純只有一位數,又要是三的倍數+1,那麼只能選1 )
<C>0 ( 如果 2*C+0 要為三的倍數+1,那麼 C 的值要取 <3n+2> )
<D>1 ( 如果 2*D+1 要為三的倍數+1,那麼 D 的值要取 <3n> )

所以這個階段整理一下:
<3n+1> → 1 | <3n+2>0 | <3n>1

剩最後是 <3n+2> 的部份(即三的倍數+2),依照上面論述法:
從缺 ( 如果只有一位數字,但又要是三的倍數+2,基本上不可能 )
<P>0 ( 如果 2*P+0 要為三的倍數+2,那麼 P 的值要取 <3n+1> )
<Q>1 ( 如果 2*Q+1 要為三的倍數+2,這種 Q 要選<3n+2> )

整理一下可得:
<3n+2> → <3n+1>0 | <3n+2>1

**

總結上面論述
<3n> → 0 | <3n>0 | <3n+1>1
<3n+1> → 1 | <3n+2>0 | <3n>1
<3n+2> → <3n+1>0 | <3n+2>1

11月 19, 2010

不一致分析



證明 2PL 保證可序列化性質

pf:
(若 p 則 q ≡ 若 ~q 則 ~p )
使用反證法,假設排程可序列化。
表示存在一組 cycle (T1 -> T2 ->...-> Tn -> T1)
在上式中表示,當 T1 完成工作後,會進行 Unlock 動作放出資源;
而 T2 要開始交易前,會進行 Lock 動作鎖住資源。因此可以條列成

---
T1 Unlock 之後,T2 進行 Lock (即 Unlock 1 -> Lock 2)
T2 Unlock 之後,T3 進行 Lock (即 Unlock 2 -> Lock 3)
...
Tn Unlock 之後,T1 進行 Lock (即 Unlock n -> Lock 1)
---

為了達成 2PL,所有交易的 Lock 都要在 Unlock 之前,即 Lock(x) -> Unlock(x)。
但是在上式中,可以發現 Unlock 1 發生在最開頭,而 Lock 1 發生在最後面。
此點無法滿足 2PL。

11月 18, 2010

Mobile IP 介紹

Home Agent(HA): 原 IP 登記地,之後會幫忙轉傳。
Foreign Agent(FA): 新的 CoA 所在地。
Mobile Node(MN): 行動節點
Correspondent Node(CN): 欲送訊息給 MN 者
Care-of-Address(CoA): 在Foreign Network 上的IP address
---

當Mobile Host接上網路時,必須先判斷其位置是在Home Network或是Foreign Network。如果Mobile Host收到由Home Agent的廣播,表示它是在Home Network,那麼只要經由原本的IP 選擇路徑的方法。

但是如果是在Foreign Network,那麼就要拿著一個 Care-of Address 向Home Agent 註冊。之後網際網路上的主機,要傳送封包給Mobile Host時,會由它的Home Agent所收到。(這個就是 tunnel 法)Home Agent 將此封包加上 Foreign Agent 的位址傳送出去。而 Foreign Agent 收到後再轉傳給 Mobile Node。

[取得 Care-of Address 方式]
Agent Advertisement
Foreign Agent 每隔一段時間就會廣播送出 Agent Advertisement。這是將原有ICMP Router Advertisement 擴充再加上 Care-of Address。

另個方法是用 Agent Solicitation
原本 ICMP 中的 Router Solicitation 加上額外資訊,這個是由 Mobile Node 自己發出的。因為靠 Agent Advertisement 這個動作,有時候Mobile Host會等不及一個週期,Mobile Host 也可以主動地 broadcast 或者是 multicast 一個封包,來偵測現在是否有Home Agent 或Foreign Agent的存在。當Agent收到這個封包時,就必須馬上送出 Agent Advertisement 的訊息出去

[向原有的 Home Agent 註冊]
行動式IP節點接收到COA,它必須向 Home Agent註冊該位址。Mobile Node 會向 Foreign Agent 提出註冊,並委由 Foreign Agent 通知 Home Agent要等到Home Agent同意後才可使用該 CoA。Home Agent會告訴Foreign Agent它同意或是不同意(因為這邊會涉及授權和正確性的問題),然後Foreign Agent再把這個結果廣播給Mobile Host。

[如何收送資料]
Home Agent在收到封包後,在封包前加上一個新的標頭(Header),但是原本的標頭維持不變。這樣子,就可以使用原本IP層傳送封包的方法,而不須更動路徑上其他電腦的設定。Foreign Agent在收到封包之後,再把新加上去的標頭刪除,傳送給Mobile Host。這樣子就完成了Mobile IP的所有動作。

當Mobile Node要回傳給Correspondent Node時,利用Tunnel將所有封包透過Home Agent來轉送。當Mobile Node要回傳給Correspondent Node時,利用Tunnel將所有封包透過Home Agent來轉送。

11月 14, 2010

DFS and BFS

DFS(x)   /* O(n+e) , O(n^2) */
{
node *ptr;
visit[x] = true;
ptr = A[x]->next;

while (ptr != NULL)
{
if (visit[ptr->data] == false)
{ DFS(ptr->data); }

ptr=ptr->next;
}
}

BFS(x) /* O(n+e) , O(n^2) */
{
visit[ ]=false; /* init */

visit[x]= true;
ENQUEUE(x);

while (Q != empty)
{
v = DEQUEUE(Q);

for (w, each neighbor of v)
{ if (visit[w] != true)
{ ENQUEUE(w); visit[w]=true; }
}
}
}

11月 13, 2010

UML class diagram

UML 類別表示法


+-----------------------------------+
| P_data |
+-----------------------------------+
| + name :String |
| ~ age :Integer=30 | /* age 預設是 30歲 */
| ~ blood :String |
| ~ dept :String ="IT" {read-only} | /* const string dept */
+-----------------------------------+
| + P_data(A:int, B:String) | /* 建構子 */
| + setAge(x:int) :Bool | /* 我吃 int 回傳 bool */
| + getAge() :Integer |
+-----------------------------------+
權限值表示法
public : +
private : -
protected: # (口訣:我用井字把你圍起來,保護你)
package : ~ (package 是 Java 才有的)

以下解說類別間的關係

class GraphCreater
{
Triangle* createTriangle()
{ return new Triangle(); }
}

class AirPlane
{
Passenger *pList;
Wing myWing;

~AirPlane()
{ delete myWing; }
}
物件之間的關系:相依、關聯、Aggregation、Composition
(口訣:虛線、實線、空心◇、實心◆)

(1) 相依 Dependent ( ---> )
只有在「執行到某函式」時才會用到其他類別,
例如上例 createTriangle() 才會用到 Triangle 類別

(2) 關聯 Association ( ── )
用來表示兩個類別間有關聯,但是並沒有從屬、包含的關係;兩者獨立存在。
在程式裡的表現會用「指標」。這個關係並沒有很強,因為指標可以指向空值。

思考: [飛機]──[乘客] 與 [飛機]◇─[乘客]
後者不合理!! 乘客並不是飛機的一部份,所以使用關聯等級較恰當

(補充)
[類別 A] ── [類別 B]
A,B 相互知道彼此 (即由A可查出B,反之亦是。如:訂單──客戶)

class A { B *ptr } /* 在 A 中有個指向 B 的指標 ,反之 B 也是 */
class B { A *ptr } /* 當然指標可以是 NULL 所以關係很弱 */

[類別 A] ──>[類別 B]
A 中有個指標指向 B,但 B 不知道 A 的存在。
  class A { B *ptr }
(3) 聚集 Aggregation ( ◇─ )
思考: [飛機]◇─[機翼] 與 [飛機]◆─[機翼]

前者表示,當飛機消失了,機翼可以單獨存在。不合理!!
後者表示,當飛機消失了,機翼也要一併消損。較合理!!

另個例子:[飛機]◇─[餐車]
飛機上空姐會推著餐車,即使今天該架飛機拆了,
餐車仍可移到別台飛機使用。所以在這邊可以用 Aggregation 就好。

(4) 組合 Composition ( ◆─ )
這個關係很強,當主體被銷毀後,附屬者也不會存在了。
比如說上例的飛機,當飛機消失了,機翼也不存在。
在程式裡的表現,就是用一個 解構子(Destructor)。

UML 各類圖型介紹

互動圖
循序圖、溝通圖、互動概觀圖(沒考過)、時序圖(沒考過)

使用案例圖 (需求擷取完,就是用這個建立使用者需求)
使用者需求表達的塑模工具,從使用者的觀點,描述行為者(actor)與系統間,互動行為與關係。描述系統可提供功能行為者如何與系統互動。從內部觀點來看,使用案例可描述系統做什麼;從外部觀點來看,可描述行為者與系統如何互動。
NOTE: 使用案例說明
以條列式的方法,表達事件的行為者、動作與參予的物件。
活動圖
用來表達工作流程,有點類似流程圖(只能表現循序)。可以表示作業間循序或者並行的活動,另外也支援條件式的行為。包括兩個元件:活動轉換。活動就是現實世界的程序、處理動作;轉換則有一般轉換、分支、合併。

元件圖 (UML 兩種實體圖之一,實作觀點)
描述系統設計過程,類別與物件的配置,軟體間的架構與相依性,另外還包括元件間該採用何種介面(interface)相連。元件是系統的實體模組,也是系統中可以被替換的部份。

部署圖 (UML 兩種實體圖之二)
以系統的環境觀點,描述資源組態。說明系統運作時,軟硬體元件的配置與關聯,像是硬體架構與網路拓樸。例如可用來說明系統處理器、處理元件的配置、關聯,以及同一處理器內執行處理的時程安排。

循序圖
用來描述系統運作時,物件間的互動行為,依照時間先後順序為主,表達物件間訊息傳遞與處理。一個循序圖會有一個對應的溝通圖。

溝通圖 (也譯通訊圖,舊名是合作圖;顧名思義,就是描述物件怎麼合作的嘛!!)
表達物件間的連結結構,展現物件間的資料流程、控制邏輯、訊息傳遞。可以表達資料的產生與轉變。
Hint:
循序圖、合作圖是兄弟嘛。用來描述使用案例圖的細節。
循序圖 - 著重在「時間」先後順序表達物件間的訊息傳遞、處理程序。
合作圖 - 著重在物件的「連結關係」
狀態圖
表達物件在其生命週期,狀態的改變,以及物件在面對事件時所進行的狀態變化,以微觀角度細分物件所發生的各項事件。表達物件、系統狀態之轉換
Hint:
靜態表示用類別圖與物件圖;動態表示用的是互動圖(循序圖、溝通圖)
類別圖
表示系統中存在的「物件型別」,及各種物件型態間的靜態資料結構、邏輯。同時也表達類別的屬、操作方法、類別間的連結。

物件圖
用來表示系統在某一時間,靜態資料結構,由一群物件所組成,是系統的 instance 而非系統的定義。

11月 12, 2010

PERT vs CPM

CPM (critical path method)
杜邦公司為了營建工程所發展的控制技術
時間模型是用「單時估計法」也就是不使用機率變數
花費最長時間的路徑,稱為 critical path。
要縮短專案的總工期,只要縮短關鍵活動的時間。
針對作業時間較確定,風險較低的一般案子
著重在成本控制
PERT (program evaluation and review technique)
美國海軍所發展出
時間模型使用:三時估計法 = (樂觀值 + 4*最可能值 + 悲觀值) / 6
針對不確定性高的案子
估算專案全工作期程(durations)以有效控制資源。
著重在時間分析




SDLC

SDLC
1. 系統規劃:
定義企業需求,及需求範圍,可行性分析,風險評估。[初步調查報告]
2. 系統分析:
定義系統需求,需求塑模(訪談,觀察),評估實作方案(自製委外) [系統需求文件]
3. 系統設計:
依照需求規格書,設計系統藍圖、包括UI、網路、DB [系統設計規格]
4. 系統實施:
進行程式設計,測試,產生一個可運行系統 [可運行系統]
5. 系統維護
糾正型維護(debug),調適型維護,完善型維護,預防型維護

[初步調查報告] ...共六項
1. 瞭解問題
2. 定義專案需求
3. 進行實情調查(談訪、文件審查、觀察、問卷、抽樣)
4. 評估可行性
5. 估算開發時間成本
6. 向管理者報告

[系統分析] 系統支援與維護類型

[系統支援]
1. 使用者培訓
當新系統導入時,要進行使用者的初步訓練。當系統改變很大時,IT 部門要負責發展培訓計畫,可能透過電子郵件、線上手冊來教導使用者。
2. 服務台(Help Desk)
教導員工如何使用新系統、提供操作方面的技術支援、訓練員工如何自我滿足資訊需求。
[系統維護]
1. 糾正型維護 (corrective maintenance) - debug
2. 調適型維護 (adaptive maintenance) - 由 user 提出加新功能
3. 完善型維護 (perfective maintenance) - 由 IT 部門發起
4. 預防型維護 (preventive maintenance)
糾正型維護
診斷並糾正運行系統中的錯誤,你可以用不同方式對錯誤做出反應。對於更為嚴重的情況,使用者發出一個附有佐證的系統申請。

調適型維護
給運行中的系統做一些加強而使系統更容易使用,此類需求通常來自於企業內部環境的變化,例如像產品變更,或者新服務的提供。小幅調適型維護的程序類似於例行的糾正型維護。調適型維護可能比新系統開發更加困難,因為加強必須在現有系統的限制之內作業。

完善型維護
完善型維護涉及改變一個運行中的系統,使之更加有效率、更加可靠,或更易於維護完善型維護也能夠提高系統的可靠性在系統的運行生命中期通常是有成本效益的用於完善型維護的兩項重要技術是逆向工程 (reverse engineering) 和改造工程 (reengineering)。
逆向工程是由程式的原始碼,往回推出其製作設計規格,例如將原始碼轉成結構圖。希望在得到這些設計資訊後,分析師更容易維護系統。
再造工程又稱回復工程,在得到設計規格後,重新進行分析設計,與程式撰寫、測試。用以改良現在有系統。

預防型維護
通常是由 IT 部門自己發起,使系統故障率降低,與 TCO 降低,並提高使用者滿意度。預防型維護會和其他專案競爭使用 IT 資源,而有時並未得到其應有的優先順序。
基準線的型態有三種
功能基準線 Functional baseline
分配基準線 Allocated baseline
產品基準線 Product baseline

系統過時
當[調適型維護]與[糾正型維護]變多了,運行成本、維護成本開始提高。使用者開始要求更多的特性和功能。例行維護已經不能改善此種趨勢。

11月 11, 2010

線上分析處理 (OLAP)

OLAP的資料可取自關係性或多維度的資料庫

前者稱為ROLAP(關係性線上分析處理- Relational Online Analytical Processing),後者稱為MOLAP(多維度線上分析處理- Multidimensional Online Analytical Processing)。

ROLAP從關係性資料庫管理系統中取得資料,MOLAP則從多維度資料庫系統中取得資料。

關係性線上分析處理(ROLAP)
資料庫以關係性表格組成

ROLAP適用於資料庫很大,而分析為中等
MOLAP適用於資料庫較小,而分析較複雜

關連式 OLAP 系統(Rational OLAP, ROLAP):
ROLAP 他的運作是基於將來源資料(通常是數個關連式資料庫)透過 ETL 處理儲存於 Meta Data Repository,再動態的去產生查詢語言(SQL Script)去查詢這個 Meta Data Repository,以達到管理者所需的資訊。優點是不需要再去建置一個資料倉儲系統,不過缺點是效能差、以及受限於 SQL 查詢語言本身的限制。

1.ROLAP(Relational OLAP)
資料並不放在ROLAP伺服器上,而是另外存放在關聯式資料庫或其他檔案系統,當使用者分析查詢時, ROLAP伺服器會參考之前已定義好的資料模型,
將其需求轉換為經過最佳化SQL(Structured Query Language)的指令去讀取資料回來。其優點是不需要額外的儲存空間,較具有延展性,但速度反應較慢。

MOLAP 是藉由一個陣列基礎(Array-base)的多維度儲存引擎(稱之為Cube),透過這個 Cube 來對資料作分析,它背後需要一個資料倉儲作為分析的基礎。他的優點是:速度快、可應付複雜的查詢及從多角度去觀察相關資料的呈現,不過缺點是分析 Cube 的規則路徑是無法動態調整的,對於分析資料與企業所關心的主題不清楚的人,往往有規劃不及的情況。

2.MOLAP(Multidimentional OLAP)
資料是以多維度的資料立方體(Data Cube)的型式存放在MOLAP伺服器,事先都已彙總運算好並把結果寫入Cube,當使用者分析查詢時, MOLAP伺服器就直接回傳其所需要的資料。其優點是查詢速度快,但需要比較多的儲存空,若資料立方體是呈現稀疏狀態,也會浪費儲存空間。

Hash function

1. Hash Function
一種資料儲存與擷取技術,用來將 actual key 轉成 hashing address,再依此位置到 hash table 中進行資料的存取。

2. Loading Denisty
α = n / b ;其中 n 為資料數,b 為 bucket 數。

3. 良好的 Hash Function 該具備條件
計算宜簡單,碰撞要少,不要有偏重的問題

4. 常見的 Hash Function 有
Middle Square:將鍵值平方後,取中間某些位元(bits)。
Modulation:除法之後取餘數。
Folding Addition:把數字折疊後相加。
5. Collision
不同的鍵值經由 Hash Function 計算後,對應到相同的 Hashing Address。即:兩個不同鍵值 X、Y,H(X)=H(Y)

6. Overflow
當 Collision 發生時,且無多餘的空間可以存放資料。

7. Overflow 處理方式
(a) linear probing:當 H(x) 發生碰撞時,則延著 H(x)+1、H(x)+2 向下找。
(b) Quadratic Probing:碰撞時改用 [ H(x) ± i^2 ] % n
(c) Double Hashing:碰撞時用 H(x) + i*G(X);其中 G(X) = R-(X%R) , R為質數
(d) Chaining
8. 使用 Chaining 方法下,平均成功(Sn)、失敗(Un)次數。其中 α = n/b
Sn = 1 + α/2
Un = α
9. Binary Search 與 Hash Function
比較資料要經過排列 || 資料不用經過排列
O(logN) || O(1) 未碰撞時
Actual key search || Transformation key search
不用處理 overflow || 要處理

11月 09, 2010

Global Information System

全球資訊系統架構
1. 全球性環境:建立 GIS 要先了解企業運作所處的全球環境
2. 公司的全球性策略:企業評估全球性環境後,要進一步思考在該環境下所需執行的策略 (企業應因國際環境變動)。
3. 組織結構:決定企業策略後,企業要思考自身組織結構是否能因應,以及部門人力的安排。
4. 管理及企業流程:實現上述策略與組織架構,所要考量的企業流程。
5. 技術平台:考量應用系統、網路等平台問題。

全球性策略的四種型態:
1. 本國出口型:將所有企業相關的活動,都集中在母公司進行。
2. 多國型:財務管理與控制集中在母公司,生產與行銷丟到子公司,產品銷售與售後服務因地制宜
3. 授權型:新舊混合的策略,初始的產品創造、設計、財務皆在母公司,但因為產品特性,需要大量依賴國外人力進行生產、行銷。如麥當勞。
4. 跨國型:所有增加企業價值的活動,都是以全球性觀點來操作,以供需最佳化的模式,挑選最恰當的國家設立營運單位,沒有單一總部,與國界無關。

11月 07, 2010

軟體能力成熟度模式 (CMMI)

軟體能力成熟度模式(CMMI, Capability Maturity Model Integration)
用來評估企業軟體開發能力成熟度認證。企業也可用此為依據評估承包商的技術,分為五個層次。

優點:(嘴炮)
提高軟體生產力與品質,軟體開發程序化、制度化,避免工作重複執行。強調評估、回饋、分析成敗原因,以防再次犯錯。

1.初級
軟體開發程序未定義,沒有正式標準,以隨性偶發式來進行。整個開發過程充滿不確定性,專案是否能如期完成,與順利完成,無法預測。主要靠少數核心(有經驗老鳥)人物單打獨鬥。

2.可重複
具備基本的管理能力,對於專案的成本,時程及功能都有追蹤管理,組織可重複先前相同經驗,但仍缺乏正式的流程模型,專案的成功仰賴過去經驗。

3. 定義層級 (用文件來定標準)
組織已經有一套流程,規定軟體開發週期內該完成的活動,都已文件化標準化,並有正式程序來管理與驗證品質。

4. 管理層級 (量化!!)
使用客觀明確的量化指標,來衡量開發的品質。透過蒐集分析該數據,可以用來改善癥結點。

5. 最佳化層級
延續上個層級,進行持續改善,藉著量化回饋的資料,分析成敗原因,持續改善。除此之外,也嘗試使用新技術來進行開發。

11月 04, 2010

[系統分析] 資訊系統轉換

在新系統開發完後,由舊有系統移轉到新系統之策略。

(1) 直接轉換 (Direct conversion)
又稱為立即轉換,將原有系統整個廢除,啟用新系統。
[適用] 規模小、風險低,重要性不高的系統。
[優點] 最省錢,不用同時維護兩個系統,而且文件輸出格式一致。
[缺點] 風險過高,當新系統有問題時,企業流程可能因此停擺。
(2) 平行轉換(Parallel conversion)
[定義] 將資料同時交由新、系統進行處理,並相互對照輸出結果,發現有錯就可以立即修正。
[適用] 重要性高、較為複雜的系統
[優點] 較為可靠、風險最低,留有舊系統可以參照
[缺點] 維護成本高,人力與金錢開銷,同時支付兩套系統費用。
(3) 分段轉換(Phase conversion)
就是將系統分成多個子系統,轉換時針對 module 逐一抽換。在大系統下,可避免掉分批轉換的問題(輸出不一致),因為將統分成多個子系統,按照需求優先性,分批使用新系統,如果狀況理想再逐一改良其他模組。
[適用] 當系統規模大,而且新系統與舊系統架構相同時
[優點] 系統建置、轉換成本較低(一次只改一些),可將需求性較高的模組先行轉換。若新模組有問題,也比較容易除錯。錯誤僅限於實作的模組。
[缺點] 系統不一定容易分割成邏輯模組、新系統效能可能會受限於舊有系統。
(4) 前導轉換 (Pilot conversion)
新系統先由一部門試用(白老鼠),若使用狀況良好再全面推廣到各部門。
[適用] 風險高,規模大的系統
[優點] 轉換風險,較直接轉換低。新系統若有問題,回復成本較低。此法可讓新系統在真實環境下執行。
[缺點] 系統試用時程難以掌控。維護成本高,同時維護二個系統,系統輸出格式不一致,

[系統分析] 軟體測試 (Software Testing)

軟體測試方法:

(a) 白箱測試
根據程式的控制邏輯與架構,設計測試個案(Test case)來進行測試。保證模組內的所有敘述與控制邏輯都執行過了。此法在程式架構較大時,無法輕易實施。
優點:可以完全 100% 測試所有可能性
缺點:成本高,而且當程式邏輯複雜、系統架構大時,難以實現。
(b) 黑箱測試
對程式架構與設計無所知,測試重點在於:對於每種輸入資料,是否能得到預期的輸出結果。
優點:不用知道程式內部的架構,不會受條件限制
缺點:此種測試方法,不一定可以測試到所有狀況。

軟體測試步驟:

(a) 單元測試
針對個別程式或模組所做的測試。根據細部設計規格的描述,用「白箱測試」來檢驗程式「控制路徑」,通常由程式設計師自己進行,目的在於執行程式中,每個敘述、邏輯關係。主要測試項目有:模組內部資料結構、邊界條件(最小最大值)、控制結構中的執行路徑。
(b) 整合測試
由上而下(靠虛擬模組)或者由下而上(靠驅動模組)進行整合,目的在測試模組經過整合後,是否能正常運作與合乎規格需求。測試資料在模組間的傳遞是正常的。
(c) 驗收測試 (口訣:客人要驗收了)
檢驗系統是否滿足客人需求(依需求分析)。可以為成α、β測試:
α:在原本的系統開發環境下測試,即軟體開發商自行內部測試。
β:在用戶的使用環境下測試,將軟體交由其他公司、個人進行測試。
(d) 系統測試
※系統測試有時被稱為:驗收測試。通過此測試才能得到用戶與管理階層的認可。

基於整個資訊系統的測試,檢驗各元件間整合,系統功能和執行績效是否滿足需求。使用者會輸入資料、執行查詢、產生報表,以模擬實際的作業環境,包括下列型態:
(1) 功能測試:檢驗所有功能是否能正常運作(跟單元測試不一樣)
(2) 績效測試:測試整體的效能(benchmark)可否達到要求。
(3) 回復測試:系統失效後是否能回復到正常操作狀態。
(4) 安全測試:系統是否有符合安全需求。
(5) 壓力測試:評估系統滿載時的運作情形

11月 03, 2010

SQL 快攻手冊

# (DDL) 針對 Table 架構運作的指令 - CREATE / DROP / ALTER
# (DML) 針對 值組 運作的指令 - INSERT / DELETE / UPDATE

# 建立一張表內含兩個欄位
create table myTab
(sn char(10),
name char(10)
)

# 在 myTab 加入一筆資料
INSERT INTO myTab
VALUES ('1', 'jack');

# 在 myTab 中異動加入一個新的欄位 tel
alter table myTab
add tel char(20);

11月 02, 2010

關聯式計算 (Relational Calculus)

[關聯式計算] 分為二類:值組導向與定義域導向

員工(編號, 姓名, 電話, 薪水, 年紀)

ex: 找出年紀大於 30 的員工列出編號名字
ans: { e.編號 , e.名字 | 員工(e) and e.age>30 }

中譯: 在員工表中的每個 值組(tuple) 命名為 變數e 來操作

要找年紀大於30者,就直接給條件 e.age>30 就可以了

11月 01, 2010

Countdown: 30 Days

十一月了,進入考前倒數30天,