110 中華郵政招考專業職(一) 郵儲業務-丁 中華郵政專業職(一) 郵儲業務丁(資訊系統開發概要) 考古題詳解
第 第一題 題25 分
常見的軟體取得方式有套裝軟體、委外開發軟體及自行開發軟體三種方式,請分別列述說明三種不同取得方式之優劣處。
登入後即可作答並保存紀錄。
核心觀念
本題考查資訊系統的三種軟體取得方式,以及各方式在成本、時程、彈性、維護、風險與組織能力上的差異。作答時應先界定三種方式,再分別說明其優點與缺點,最後指出適用情境。
三種方式如下:
- 套裝軟體:直接購買市場上已完成開發、可供多數使用者使用的軟體。
- 委外開發軟體:由外部軟體公司或專業資訊服務廠商,依組織需求進行客製化開發。
- 自行開發軟體:由組織內部資訊人員自行進行需求分析、系統設計、程式撰寫、測試與維護。
解題方法
可採「成本—時間—彈性—控制—維護」五個面向分析:
- 成本:建置及後續維護所需費用。
- 時間:系統導入或完成所需時間。
- 彈性:能否配合組織特殊需求修改。
- 控制:對系統開發、資料與技術的掌握程度。
- 維護:日後修正、升級及故障處理的便利性。
一、套裝軟體
定義
套裝軟體是由軟體廠商事先開發完成,具有標準化功能,再以授權、買斷或訂閱方式提供給多個組織使用。例如財務會計、人力資源、進銷存及客戶關係管理系統。
優點
- 導入時間較短
軟體已經完成開發與測試,組織通常只需進行參數設定、資料轉換及教育訓練,即可上線使用。
- 初期開發成本較低
軟體由多個客戶共同分攤開發成本,單一組織不必負擔完整的分析、設計與程式開發費用。
- 功能成熟、風險較低
成熟套裝軟體通常已在許多組織實際使用,功能及錯誤處理經過一定程度的驗證,開發失敗風險低於全新開發系統。
- 具備廠商支援
軟體廠商通常提供操作手冊、技術支援、版本更新、錯誤修正及教育訓練,有助於降低組織自行維護的負擔。
- 可取得產業標準功能
套裝軟體通常整合該領域的常見作業流程,能協助組織導入較標準化的管理制度。
缺點
- 客製化彈性有限
套裝軟體是以一般市場需求為設計基礎,難以完全配合組織特殊流程、特殊法規要求或既有作業習慣。
- 組織可能必須調整流程
為配合軟體既有功能,組織常需修改原有作業方式,甚至重新設計業務流程。
- 可能產生功能不足或功能過剩
軟體功能不一定完全符合實際需求,可能缺少必要功能,也可能購買許多組織用不到的功能。
- 受制於廠商
系統更新、錯誤修正、技術支援及價格調整多掌握在廠商手中。若廠商停止營運、停止支援或停止產品更新,組織將面臨維運風險。
- 整合與資料移轉可能困難
套裝軟體的資料格式、作業平台及介面規格可能與既有系統不同,導入時可能產生系統整合、資料轉換及資料品質問題。
- 授權費與長期成本不可忽略
雖然初期建置成本較低,但授權費、訂閱費、模組費、升級費及顧問費,可能使長期總持有成本增加。
二、委外開發軟體
定義
委外開發是由組織提出業務需求,再委託外部廠商負責系統分析、設計、程式開發、測試、導入及部分維護工作。
優點
- 可配合組織需求客製化
委外開發可依組織的業務流程、管理制度、資料格式及特殊功能進行設計,彈性高於套裝軟體。
- 可運用外部專業技術
專業廠商通常具備系統開發方法、特定產業經驗、資安技術、資料庫技術及專案管理能力,可補足組織內部人力不足。
- 可縮短自行培養技術人力的時間
組織不必從零開始建立完整開發團隊,能利用廠商現有的人員與技術資源完成系統建置。
- 可由契約明確規範服務內容
透過採購文件及契約,可約定系統功能、開發期限、驗收標準、服務水準、保固期限、維護責任及違約處理方式。
- 適合大型或專業性高的系統
當系統規模大、技術複雜,或涉及高階平台、跨系統整合及特殊資安要求時,委外開發能集中運用專業資源。
缺點
- 成本通常高於直接購買套裝軟體
客製化開發必須負擔需求分析、專案管理、程式開發、測試、導入及後續維護等費用,總成本可能相當可觀。
- 需求溝通不良容易造成成果落差
業務人員與廠商對需求的理解可能不同。若需求文件不完整、驗收標準不明確,完成的系統可能與實際期待不符。
- 容易發生進度延遲與預算超支
系統開發常因需求變更、技術困難、介面整合及測試問題而延後,並增加變更及追加費用。
- 組織對系統的控制程度降低
系統主要由外部廠商掌握,組織內部若缺乏專業人員,可能難以判斷開發品質、技術合理性及維護成效。
- 可能形成廠商依賴
若程式原始碼、系統文件及技術知識未完整移轉,日後維護與修改可能只能繼續委託原廠商,形成供應商鎖定。
- 須重視資訊安全與機密資料風險
廠商可能接觸組織內部資料、系統帳號及網路環境,因此契約應明訂保密義務、資料使用範圍、權限控管、資安責任及服務終止後的資料返還方式。
三、自行開發軟體
定義
自行開發是由組織內部資訊部門或自行聘用的開發人員,負責系統生命週期中的需求分析、設計、開發、測試、導入、教育訓練及維護工作。
優點
- 最能符合組織特殊需求
內部人員熟悉組織的業務流程、管理制度及使用者需求,系統可依實際作業方式設計,客製化程度最高。
- 對系統具有較高控制權
組織可自行決定系統架構、開發優先順序、功能調整、資料處理方式及版本更新時程。
- 有利於累積內部技術與業務知識
第 第二題 題25 分
請以 VB.NET 程式設計一程式符合下列需求(要寫完整程式,否則不予計分):
(一)欲計算出 的總和(total),下列程式碼內容為何?【12 分】
Dim total, num As Integer
total = 0 : num = 2
Label1.Text = total
程式碼內容:____
(二)欲計算費氏數列(1、1、2、3、5、8、13、⋯)第 15 項數值,下列程式碼內容為何?【13 分】
Dim num1, num2, i, j As Integer
String s = " 1 1" : num1 = 1 : num2 = 1
Label1.Text = s
登入後即可作答並保存紀錄。
核心觀念
本題考查 VB.NET 的:
- 變數宣告與指定值
Do While或For...Next迴圈- 累加器的使用
- 字串串接
- 費氏數列的遞迴計算
- 將結果顯示於
Label1.Text
(一)計算
解題方法
以 total 作為累加器,初值設為 ;以 num 表示目前的偶數,初值為 。
每次迴圈執行兩件事:
- 將目前的
num加到total - 將
num增加 ,取得下一個偶數
當 num 大於 時停止。
累加結果為:
完整 VB.NET 程式
Dim total, num As Integer
total = 0
num = 2
Do While num <= 100
total = total + num
num = num + 2
Loop
Label1.Text = total.ToString
Label1.Text 屬於字串型態,因此將整數結果使用 ToString 轉成文字後顯示。
解題技巧與常見陷阱
- 條件應寫成
num <= 100,才能包含最後一項 。 - 每次應將
num增加 ,若增加 ,就會把奇數也加入。 Label1.Text必須放在迴圈結束後,才能顯示完整總和。- 快速驗算:共有 個偶數,平均值為 ,因此總和為 。
(二)計算費氏數列第 15 項
核心觀念
費氏數列定義為:
從第 3 項開始,每一項等於前兩項之和:
因此:
第 15 項為:
解題方法
題目已先設定:
第 第三題 題25 分
使用物件導向分析設計時,常使用圖形化物件導向分析工具 UML(Unified Modeling Language),請說明 UML 所使用的各圖形及其意義。
登入後即可作答並保存紀錄。
核心觀念
UML(Unified Modeling Language,統一塑模語言)是一套以圖形化方式描述、分析及設計物件導向系統的標準語言。它不是程式語言,也不是單一流程圖,而是利用多種圖形,從不同角度表達系統的:
- 靜態結構:系統由哪些類別、物件、元件及節點組成。
- 動態行為:系統如何依事件、流程及狀態變化運作。
- 互動關係:物件之間如何傳遞訊息及合作完成工作。
UML 2.x 通常包含 14 種圖,分為結構圖、行為圖及互動圖三大類。
解題方法
回答本題時,應採「分類說明」方式:
- 先說明 UML 的用途及分類。
- 依結構圖、行為圖、互動圖逐一列出各圖。
- 說明每一種圖的主要圖形及所代表的意義。
- 最後補充常見 UML 符號及其判斷技巧。
如此可同時涵蓋 UML 的整體架構與各圖形的實際用途。
一、結構圖(Structural Diagrams)
結構圖用來描述系統的靜態組成與彼此關係,常見圖形如下。
1. 類別圖(Class Diagram)
類別圖是物件導向分析設計最重要的圖之一,用來表示類別、屬性、操作及類別間的關係。
類別通常畫成長方形,分為三個區格:
- 類別名稱
- 屬性(Attributes)
- 操作或方法(Operations)
例如:
┌────────────────┐
│ Customer │
├────────────────┤
│ - customerId │
│ - name │
├────────────────┤
│ + login │
│ + query │
└────────────────┘
常見關係包括:
- 關聯(Association):表示類別間具有結構上的連結,以實線表示。
- 聚合(Aggregation):表示整體與部分的弱包含關係,以空心菱形表示。
- 組合(Composition):表示整體與部分的強包含關係,以實心菱形表示;整體消失時,部分通常也隨之消失。
- 泛化(Generalization):表示繼承關係,以指向父類別的空心三角形箭頭表示。
- 相依(Dependency):表示一個類別使用另一個類別,以虛線箭頭表示。
- 實作(Realization):表示類別實作介面,以虛線加空心三角形箭頭表示。
2. 物件圖(Object Diagram)
物件圖是類別圖在某一特定時間點的實例,表示實際存在的物件及其連結。
物件名稱通常加底線,例如:
customer01 : Customer
類別圖描述「有哪些類別」,物件圖描述「某一時刻有哪些具體物件」。
3. 元件圖(Component Diagram)
元件圖表示系統由哪些可替換、可部署的軟體元件組成,以及元件之間的依賴關係。
元件可代表:
- 程式模組
- 函式庫
- 執行檔
- Web Service
- 資料庫存取元件
元件通常以帶有小標籤或元件符號的矩形表示,適合描述系統的實作架構。
4. 部署圖(Deployment Diagram)
部署圖表示軟體元件如何配置在硬體或執行環境上。
主要圖形包括:
- 節點(Node):表示伺服器、個人電腦、行動裝置或執行環境,通常以立方體表示。
- 元件(Component):表示部署在節點上的軟體。
- 通訊連線:表示節點間的網路或通訊關係。
例如,可表示 Web Server、Application Server 與 Database Server 的配置方式。
5. 套件圖(Package Diagram)
套件圖用來表示模型元素如何分組,以及套件間的相依關係。
套件可將相關的類別、介面或其他模型元素集中管理,常用於大型系統的分層與模組化設計。
6. 複合結構圖(Composite Structure Diagram)
複合結構圖描述類別或元件內部的結構,包括內部零件、連接器及其合作方式。
它特別適合表示:
- 類別內部由哪些部分組成
- 元件內部如何互相連接
- 物件如何透過埠(Port)對外提供服務
7. 剖面圖(Profile Diagram)
剖面圖用來擴充 UML,使 UML 能配合特定領域使用。
它可透過:
- 標籤值(Tagged Value)
- 限制條件(Constraint)
- 構造型(Stereotype)
建立符合特定產業或技術領域的模型,例如即時系統、企業架構及網路服務模型。
二、行為圖(Behavioral Diagrams)
行為圖用來描述系統在執行期間的活動、事件與狀態變化。
1. 使用案例圖(Use Case Diagram)
使用案例圖描述系統提供哪些功能,以及哪些外部角色會使用這些功能。
主要圖形包括:
- 演員(Actor):以火柴人表示,代表使用者、外部系統或其他外部角色。
- 使用案例(Use Case):以橢圓形表示,代表系統所提供的功能。
- 系統邊界:以矩形框住使用案例,表示系統範圍。
- 關聯:以實線連接演員與使用案例。
常見關係包括:
<<include>>:某使用案例必定包含另一個共同功能。<<extend>>:在特定條件下,額外延伸另一個使用案例。- 泛化:表示演員或使用案例具有一般化與特殊化關係。
例如,「辦理提款」可能必須包含「身分驗證」;「查詢帳戶」可在特定條件下延伸「列印明細」。
2. 活動圖(Activity Diagram)
活動圖描述作業流程、商業流程及系統中的控制流程,概念上類似流程圖,但能表達平行活動及物件流。
主要圖形包括:
第 第四題 題25 分
請寫出下列 Java 程式碼執行後之輸出結果。
public class Break1 { public static void main(String[] args) { flag: for (int j = 3; j < 20; j += 5) { System.out.println("before break: " + j); for (int i = 0; i < 10; i++) { System.out.println("The result of i is: " + i); if (i == 5) break flag; } System.out.println("after break: " + j); } } }
登入後即可作答並保存紀錄。
核心觀念
本題考 Java 的:
for迴圈執行順序break敘述- 標籤(labelled statement)
break 標籤名稱;對巢狀迴圈的跳脫效果
程式中的:
flag:
for (...) {
...
if (i == 5) break flag;
}
表示 flag 標籤標示外層 for 迴圈。執行 break flag; 時,會直接跳出被 flag 標示的外層迴圈,內層與外層迴圈都立即結束。
解題方法
外層迴圈初始值為:
j = 3
條件為:
j < 20
每次遞增:
j += 5
進入外層迴圈後,先執行:
System.out.println("before break: " + j);
因此第一次輸出:
before break: 3
接著執行內層迴圈:
for (int i = 0; i < 10; i++)
內層迴圈逐次執行如下:
- ,輸出
The result of i is: 0 - ,輸出
The result of i is: 1 - ,輸出
The result of i is: 2 - ,輸出
The result of i is: 3 - ,輸出
The result of i is: 4 - ,輸出
The result of i is: 5