小型應用程式專題

進階

專題四步曲:需求分析 → 設計 → 編寫 → 測試。設計時先定資料結構(字典)同函式分工(加分、統計、存檔);測試要涵蓋正常輸入和極端輸入(文字當分數、空字典、重複姓名)。

適合:中三資訊及通訊科技 · 單元:程式設計進階 · 建議學習路徑第 4/13 課

學完呢課,你會識:
  • 專題四步曲:需求分析 → 設計 → 編寫 → 測試,次序不可亂。
  • 設計先定兩件事:資料結構(字典:姓名→分數)和函式分工(每個函式只做一件事)。
  • 選單配 while 迴圈;記住 input 回傳字串,比較時要寫 == "1"。
文體:專案指南課有聲朗讀

文體小知識:專案指南課由企劃到評估逐步帶你完成整個製作,適合接著做小組功課和比賽作品。

資訊及通訊科技Information & Communication Technology

§課文原文 Passage

1寫一個真正的程式,不是一坐下就打代碼。專業流程有四步:需求分析(搞清楚要做什麼、給誰用)→ 設計(計劃資料結構、函式分工、介面樣式)→ 編寫(分段寫、一邊寫一邊試)→ 測試(正常情況、極端情況都要試)。跳過前兩步,之後幾乎一定會推倒重來。

2以示範專案「成績記錄器」為例。需求分析:同學想用一個程式記錄各科測驗分數,可以隨時加入新分數、查看平均與最高分,關掉程式後資料仍然保留。這三句就是需求 — 每一項之後都要在測試時逐一驗證。

3設計階段:資料結構選字典 grades = {"小明": 85, "Mary": 90},鍵是姓名、值是分數;函式分工為 add_score() 加分、show_stats() 顯示統計、save() 存檔、load() 讀檔;主程式用 while 迴圈顯示選單,讓用戶輸入 1 至 4 選功能。設計畫在紙上,寫代碼時就不會迷失方向。

4編寫與測試:每次只寫一個函式,寫完立即試用,確保無誤才寫下一個。測試時要問三個問題:正常輸入對不對(85 和 90 的平均是 87.5)?極端輸入會怎樣(輸入 "abc" 當分數、姓名重複、字典空時計平均)?資料存檔後重新載入是否一模一樣?全部通過,專案才算完成。

1重點摘要 Summary

專題四步曲:需求分析 → 設計 → 編寫 → 測試。設計時先定資料結構(字典)同函式分工(加分、統計、存檔);測試要涵蓋正常輸入和極端輸入(文字當分數、空字典、重複姓名)。

2生字卡 Vocabulary

R
Requirements analysis需求分析

確定程式要做什麼、給誰用的階段,產出清晰的功能清單。

D
Design設計

計劃資料結構、函式分工和介面樣式,作為編寫前的藍圖。

I
Implementation編寫實作

按設計逐個函式把代碼寫出來,一邊寫一邊試的階段。

T
Testing測試

用正常和極端輸入驗證程式是否合乎需求的階段。

M
Menu選單

列出功能編號讓用戶選擇的介面,配合 while 迴圈反覆顯示。

I
Input validation輸入驗證

檢查用戶輸入是否合理(例如分數必須是數字),不合理就提示重輸。

M
Modular design模組化設計

把程式拆成各司其職的小函式,容易編寫、測試和修改。

B
Boundary case邊界情況

最容易被忽略的極端情況,例如空清單、零分、重複姓名。

D
Documentation文件說明

記錄程式的功能、用法和設計決定,方便他人和未來的自己理解。

3逐步講解 Steps

  1. 專題開發的第一步:需求清單寫真正的程式不是一開機便打代碼。專業流程的第一步是寫需求清單:把程式要做的事逐條寫下,每條一句。以「成績記錄器」為例:一,可以加入學生姓名和分數;二,可以顯示平均分和最高分;三,關閉程式後資料仍在。三條需求之後會逐條驗收,未完成的便未算完工。需求寫得清楚,後面的設計與測試才有依據;跳過這一步,寫到一半往往發現功能遺漏,要推倒重來。
  2. 選定資料結構第二步按需求選定資料結構。成績記錄器需要「以姓名查分數」,字典正合適:grades = {"小明": 85, "Mary": 90},姓名做鍵、分數做值。加入記錄即 grades["阿強"] = 78;查詢即 grades["小明"];統計之前用 grades.values() 取出全部分數。若需求是「依先後次序記錄事件」,便該選清單;「以姓名查電話」選字典。資料結構選對,之後每個功能都順手;選錯則處處受阻。
  3. 函式分工第三步把工作分配給函式,每個函式只做一件事:add_score(grades, name, score) 負責加入記錄;show_stats(grades) 負責計算並顯示平均與最高分;save(grades) 與 load() 負責存檔讀檔。單一職責的好處有二:出錯時能迅速定位是哪個函式的問題;想修改計算平均的方法,只需改動 show_stats 一處。函式之間以參數傳遞資料、以 return 交回結果,主程式只負責調度指揮。
  4. 主選單迴圈與輸入主程式用 while True: 建立選單迴圈:先 print("1 加分 2 統計 3 離開"),再 choice = input("請選擇:"),其後 if choice == "1": 加入分數,elif choice == "3": break 跳出。關鍵細節:input() 傳回的是字串,"1" 不是數字 1,比較時必須寫 choice == "1";若要當數字使用,須以 int(choice) 轉換。忘記這一點是新手最常見的錯誤,程式會對輸入 1 毫無反應,令人一頭霧水。
  5. 輸入驗證:防呆設計用戶不一定照規矩輸入。若用戶在分數欄輸入 "abc",int(text) 會報錯令程式崩潰。解法用 try/except:text = input("分數:") 之後,try: score = int(text) except ValueError: print("請輸入數字") 並 continue 回到選單。這樣程式遇到非法輸入只提示、不崩潰。專業軟件與遊戲的防呆設計,全部源自這個思想:假設用戶會出錯,預先擋住,體驗才會順暢。
  6. 測試正常與極端情況測試分兩類。正常情況:加入 85 與 90 之後選統計,期望平均 87.5、最高 90;把期望值預先寫在紙上,跑完逐項核對。極端情況:不輸入任何分數便看統計,空字典會除以零出錯,必須先判斷 len(grades) == 0;輸入重複姓名,程式應更新而非重複記錄;存檔之後關閉程式再重開,資料必須一模一樣。極端情況最能揭發隱藏錯誤,正式交付之前必須逐項通過。
  7. 專題的完成標準專題完成的標準不是「程式能跑」,而是三問全部通過:正常輸入結果正確嗎?極端輸入會否崩潰?資料存檔重載是否一致?此外宜回看需求清單逐條打勾。過程中「每次只寫一個函式,寫完立即試用」的紀律,能把除錯範圍縮到最小;一口氣寫完全部才測試,錯誤會互相糾纏。這套「需求、設計、分段編寫、雙向測試」的流程,適用於往後任何編程專題。

4圖解 Diagrams

多媒體專題:五步由零到成品 Project steps1定主題目標觀眾係邊個2寫腳本故事版 storyboard3收集素材相・聲・片(版權!)4製作整合剪輯5測試發布人哋睇得明嗎最常見死因:冇腳本就開工——做到一半先知缺素材、次序亂分工貼士(小組):一人腳本一人素材一人剪輯——同步溝通最緊要完成後自查:訊息清楚?音量適中?有冇錯字?播放流暢?
圖 1:多媒體專題五步

5例題示範 Example

例題:為成績記錄器編寫 show_stats(grades) 函式,輸出平均分與最高分,並以 grades = {"小明": 85, "Mary": 90, "阿強": 78} 演示。

  1. 先擋空字典:if len(grades) == 0: print("暫無記錄") 後 return,避免除以零。
  2. 取出分數:scores = list(grades.values()),得 [85, 90, 78]。
  3. 計算統計:average = sum(scores) / len(scores) = 253 ÷ 3 ≈ 84.33;highest = max(scores) = 90。
  4. 輸出:print("平均分", round(average, 1), "最高分", highest),畫面顯示平均分 84.3 最高分 90。
  5. 補充測試:以空字典 {} 呼叫一次,確認顯示「暫無記錄」而非報錯。
  6. 答案:show_stats 先擋住空字典,再由 [85, 90, 78] 算出平均 84.3 分與最高 90 分並印出。要點是防禦式開頭(檢查空字典)與以 round 控制小數位。

6常見錯誤 Mistakes

✗ 「一開始就打代碼,一邊寫一邊想做什麼。」
✓ 沒有需求分析和設計,寫到一半才發現功能錯漏,往往要推倒重來;先花十分鐘計劃,之後省幾小時。
✗ 「全部代碼塞在一大段裡最方便。」
✓ 拆成小函式(加分、統計、存檔各自獨立),出錯時容易定位,修改時不會牽一髮動全身。
✗ 「用戶一定會輸入數字,不用檢查。」
✓ 真實用戶什麼都會打:"abc"、負數、空白。加入 try-except 和範圍檢查,程式才耐用。
✗ 「資料存在變數裡就好,關掉再重新輸入。」
✓ 變數隨程式結束消失;用 open("grades.txt", "w") 存檔、開程式時 load() 讀回,資料才長期保留。
✗ 「正常情況對了就完成,不用測極端情況。」
✓ 空字典計平均、重複姓名、分數 0 分這些邊界情況最容易出錯;專業測試兩類都要覆蓋。

75 題快測 Quick check

Q1小型應用程式開發的正確次序是?A. 編寫→測試→設計→需求分析 B. 需求分析→設計→編寫→測試 C. 設計→編寫→需求分析→測試

Q2成績記錄器中,grades = {"小明": 85, "Mary": 90},grades["阿強"] = 78 之後,len(grades) 是多少?

Q3用戶輸入分數時打了 "abc",哪種寫法可以令程式不崩潰?

Q4grades 是空字典時呼叫 show_stats() 計平均會出什麼問題?應該怎樣處理?

Q5寫出測試成績記錄器的任何三項檢查。

8重點回顧 Recap

  • 專題四步曲:需求分析 → 設計 → 編寫 → 測試,次序不可亂。
  • 設計先定兩件事:資料結構(字典:姓名→分數)和函式分工(每個函式只做一件事)。
  • 選單配 while 迴圈;記住 input 回傳字串,比較時要寫 == "1"。
  • 輸入驗證用 try-except 接住 ValueError,程式遇到錯誤輸入不崩潰。
  • 測試要涵蓋正常和極端情況:空字典、重複姓名、存檔重載都要逐一驗證。

同級其他科

同一科其他級別