现代软件工程 作业汇总
現(xiàn)代軟件工程課程
各個學校的編程/軟工作業(yè)列表
-------
軟件工程的作業(yè)
-------
很多老師反映軟件工程的作業(yè)題不好出,學生做的“大作業(yè)”也是了無新意。怎么辦?師生們身處轟轟烈烈的軟件產(chǎn)業(yè)的大環(huán)境,但是在軟件工程課上做的題目卻是非常簡陋,沒有起到應(yīng)有的作用,這的確是一個很有諷刺意義的事情。有很多因素導致這一結(jié)果,這些因素都是可以克服的,在這里不再啰嗦吐槽了。怎么出一些有份量,能幫助學生進步的題目? 我們看到,程序?=?算法?+?數(shù)據(jù)結(jié)構(gòu);軟件?=?程序?+?軟件工程,軟件工程的編程作業(yè),是不同于?“熟悉某個數(shù)據(jù)結(jié)構(gòu)/實現(xiàn)某個算法”??這樣的算法課作業(yè)的。
怎么打分,很大程度上決定了學生的學習行為,請看:
軟件工程課的分數(shù)系統(tǒng),和打分方法 - SoftwareTeacher - 博客園 (cnblogs.com)
作業(yè)的格式
一個作業(yè)并不是一上來就貼代碼,UML 圖, 它應(yīng)該是學生在 “健身學員/健身教練”這一個關(guān)系下, 刻意練習,向自己目標前進的具體努力的體現(xiàn)。在作業(yè)的一開始,應(yīng)該寫:
| 這個作業(yè)屬于哪個課程 | <課程的鏈接> |
| 這個作業(yè)要求在哪里 | <作業(yè)要求的鏈接> |
| 我在這個課程的目標是 | <寫上目標> |
| 這個作業(yè)在哪個具體方面幫助我實現(xiàn)目標 | <寫上具體方面> |
| 作業(yè)正文 .... | 注意代碼要按格式上傳 |
| 其他參考文獻 ... | ? |
增加作業(yè)的豐富性
一個簡單的程序通常是做這種簡單的事情:
? 對輸入數(shù)據(jù)進行處理,并輸出。
此類 “程序”可以從幾個維度擴展,成為很有鍛煉價值的軟件工程作業(yè)。下面舉例說明。
從數(shù)據(jù)方面擴展:
- 從數(shù)據(jù)本身的屬性擴展,例如處理“最大子數(shù)組的和”的程序,可以擴展到大數(shù)(超過64位的數(shù)字),這樣引入大數(shù)的處理。
- 從數(shù)據(jù)的數(shù)量擴展,很多老師出題就假設(shè)數(shù)組只有六七個元素,直接寫死在程序中。如果這個數(shù)組有一萬個,十萬個元素呢?
- 從數(shù)據(jù)的維度擴展,如果數(shù)據(jù)是在多維數(shù)組中呢?
- 從數(shù)據(jù)的其它屬性擴展,例如,如果你的程序能處理北京的地鐵數(shù)據(jù),如何改進你的程序,讓它能動態(tài)處理上海或其他城市的數(shù)據(jù)呢?這樣就引入了工程的需求。
從需求方面擴展,很多程序的需求都是非常抽象,可以用數(shù)學公式描述和驗證的,例如:“找出數(shù)組中的最大值”。下面有幾種擴展的方式:
- 不是僅僅要求結(jié)果,而是要讓程序把計算的過程顯示出來。請搜索各種“動畫顯示排序過程”的程序,我們的同學也做了一個類似的題目。
- 從需求的維度方面擴展,例如學生寫了一個“統(tǒng)計程序有多少行” 的程序,我們可以進一步要求,能把注釋行,空行,只有一個字符的行去掉么?能處理目錄里面的多個文件么?
- 重復一個成熟的、學生比較熟悉的需求,這是也是可行的,關(guān)鍵是要體現(xiàn) “工程”的特點。 例如做一個文檔編輯軟件,要求能處理10M 大小的文本文件;做一個圖書信息系統(tǒng),要求有10萬本書,100萬條借書,還書記錄。很多同學做的圖書館信息系統(tǒng)只有不到10本書的記錄,這是圖書館么?
- 在已有的需求上增量改進,例如,讓文檔編輯軟件支持markdown?語法,支持無限的“后悔”操作;讓圖書館信息系統(tǒng)支持手機客戶端。
- 探索創(chuàng)新的方式來滿足已有的需求,或即將出現(xiàn)的需求。
從用戶的方面擴展,絕大部分大作業(yè)都是單機運行,給一個用戶(老師)看一次,看完就萬事大吉。我們可以考慮下面的擴展方式:?
- 單用戶第二次使用這個軟件的時候,能有什么功能,讓單用戶更喜歡這個軟件?(例如:記住上次的狀態(tài),自動展現(xiàn)上次文檔最后編輯的地方,等)
- 如果多用戶使用這個系統(tǒng),會出現(xiàn)什么問題,例如,學生的圖書館信息系統(tǒng)考慮到有100人同時查詢的情況么?如何模擬這樣的測試?
- 用戶從世界各地來,怎么辦?你的“程序”能提供多種語言的界面么?
- 用戶有善意的和惡意的,如何讓你的程序更安全?如何測試安全性?
從軟件構(gòu)建方面擴展:
- 如果是改進一個已有的軟件,怎么辦?
- 大多數(shù)的“程序”都是用單一的語言寫的,如果軟件有多個語言寫成的不同模塊,如何定義彼此的接口(API)?
- 如果軟件已經(jīng)在服務(wù)中(例如圖書館信息系統(tǒng),如何升級部分模塊,同時盡量減少系統(tǒng)下線的時間?)
- 有些老師想給學生出一些數(shù)據(jù)庫方面的團隊項目,但是又怕同學全盤抄襲現(xiàn)成的實現(xiàn)。可以考慮這樣的方法:我們知道數(shù)據(jù)庫應(yīng)用一般分三層(數(shù)據(jù) | 業(yè)務(wù)邏輯 | UI 層),老師設(shè)計數(shù)據(jù)庫,學生們設(shè)計并實現(xiàn)其他兩層。 這樣可以很容易地檢查學生是否能根據(jù)別人設(shè)計的數(shù)據(jù)庫來做上層的設(shè)計。 并且老師可以準備大量數(shù)據(jù)做大規(guī)模的測試。?
下面是一些和閱讀,提問,分析, 設(shè)計,總結(jié)相關(guān)的作業(yè):
第 0 周,課程的底線;?第一周博客作業(yè)
結(jié)對調(diào)查和分析作業(yè)?
閱讀和調(diào)查作業(yè)? ? (中科大的作業(yè)實例)
用戶體驗深入調(diào)查和數(shù)量化的報告
原型設(shè)計,提出項目建議
最后一周總結(jié)
和代碼相關(guān)的作業(yè):
個人項目:
MIT 軟件工具基礎(chǔ)教程
C++ 基本練習和效能分析 (四則運算)
Java 基本練習和效能分析 (四則運算)
Java 逐步提高練習(用命令行工具逐步練習 Java 技能)
現(xiàn)代軟件工程 作業(yè) 1: 個人項目?? ??
從一維數(shù)組求最大子數(shù)組和展開訓練
個人項目和結(jié)對項目練習 地鐵? ????
期末作業(yè)附加題? (同學的讀書筆記)
最大子數(shù)組的和 - 及其擴展
結(jié)對項目:
兩人合作作業(yè)的模式
Word Count (wc.exe) 全套練習
四則運算擴展: 模塊化,單元測試,回歸測試,TDD
動態(tài)展現(xiàn)程序的工作過程
英語文件中找到單詞詞頻
結(jié)對和團隊項目建議 - 黃金點游戲
現(xiàn)代軟件工程 作業(yè) 2: 結(jié)對項目? (電梯調(diào)度設(shè)計)? (如何自動測試電梯調(diào)度程序)
有意思的游戲:漢字構(gòu)成 + 俄羅斯方塊 + 2048
團隊項目:
? ? 團隊項目計劃
????現(xiàn)代軟件工程 作業(yè) 3: 團隊作業(yè)??
? ??2012 團隊作業(yè)
? ??團隊項目建議 - 英語學習 App
? ??源代碼管理的10個問題
? ? 團隊項目的總結(jié),請看:現(xiàn)代軟件工程講義 11 項目管理 - 事后諸葛亮會議 - SoftwareTeacher - 博客園 (cnblogs.com)
? ? 團隊項目的評審,請看:?軟件工程課的分數(shù)系統(tǒng),和打分方法 - SoftwareTeacher - 博客園 (cnblogs.com)
百花齊放:各個學校的編程/軟工作業(yè)列表
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的现代软件工程 作业汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI应用开发基础傻瓜书系列3-损失函数
- 下一篇: software engineering