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