這個作業屬于哪個課程 | 2021春軟體工程實踐S班 |
---|---|
這個作業要求在哪裡 | 團隊作業四——系統設計和資料庫設計 |
這個作業的目标 | 1.完善設計類圖; 2.設計好系統和資料庫; 3.制定好團隊計劃和分工; 4.為下一次的團隊Alpha沖刺作業提前做好準備。 |
其他參考文獻 | 《建構之法(第三版)》、UML之類圖、UML類圖詳解、 詳解設計模式六大原則、資料庫表結構設計的幾條準則、 資料庫表設計(一對多、多對多)、 常見web攻擊方法及防禦手段總結、使用者密碼加密、 JavaWeb項目前後端分離、RBAC使用者、角色、權限、組設計方案 ... |
目錄
- 一、預期開發計劃時間安排
- 二、預期開發計劃分工安排
- 2.1 後端分工安排
- 2.2 前端分工安排
- 三、體系結構設計
- 四、功能子產品層次圖
- 4.1 功能子產品層次設計思路
- 4.2 功能子產品層次圖展示
- 五、ER分析
- 5.1 ER設計思路
- 5.2 ER圖展示
- 六、表結構設計
- 七、設計類圖
- 7.1 設計類圖展示
- 7.2 類圖設計思路
- 八、系統安全
- 九、權限設計
- 十、問題回答&改進
- 十一、績效
- 十二、連結合集
- 12.1 github團隊倉庫連結
- 12.2 團隊名稱_系統設計說明書.pdf
- 12.3 團隊名稱_資料庫設計說明書.pdf
- 12.4 團隊名稱_系統設計和資料庫設計答辯PPT.pdf
項目開發計劃 | 最晚完成日期 | 完成情況 |
---|---|---|
完成系統設計和資料庫設計,确定前後端要使用的架構 | 2021-4-23 | 完成 |
學習架構,前端編寫實作靜态頁面,後端實作對所有接口的資料處理邏輯 | 2021-4-30 | 未完成 |
前端完善頁面的設計和調整改進,後端完成資料的測試以及安全性測試,前後端實作對接 | 2021-5-7 | |
對每個功能完成測試,修複目前每個功能出現的bug | 2021-5-14 | |
釋出正式版本1.0,将項目部署到伺服器上,撰寫項目使用手冊 | 2021-5-21 | |
對整個開發過程進行總結,完善各個部分細節的工作 | 2021-5-28 |
姓名 | 任務分工 |
---|---|
鄭麟軒 | 搭建後端架構、釋出架構學習任務、實作系統安全的保護,參與測試 |
吳涵 | 編碼model子產品、編寫使用者管理相關子產品、實作角色權限管理 |
鄭嘉晖 | 參與編碼API、編碼成績管理子產品、實作評分子產品 |
張孝勇 | 編碼model子產品、測試系統功能、編寫使用者管理相關子產品 |
洪世燦 | 參與編碼API、測試系統功能、實作評分子產品 |
丁宇凡 | 完成學生界面,使用者登入界面的靜态界面。完成登入、學生界面的資料互動 |
毛依婷 | 完成教師界面的靜态界面以及資料互動 |
陳修慶 | 完成隊長,評分等界面的靜态界面和資料互動 |
廖其昌 | 完成管理者界面的靜态界面和資料互動 |
本系統使用MVC模式設計架構,進行前後端分離。視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,業務流程或者規則的改變隻需要對前端代碼進行改動即可。也可以很容易地改變應用程式的資料層和業務規則。
根據MVC模式,本系統主要可分為Model(模型),View(視圖),Controller(控制器)三個層次。
(1)Model層
本層主要負責資料庫的結構映射,資料庫增删改查等直接對資料庫進行操作的行為。向提供接口的方式允許其他層間接地通路資料庫。
(2)View層
本層的分為前端與後端兩個部分。前端負責Web界面的顯示與邏輯。後端負責接收前端請求并根據前端請求傳回前端所需的資料。
(3)Controller層
本層負責絕大多數的業務邏輯。在接收到前端請求的時候,對請求進行處理。處理業務邏輯過程中,通過Model層間接對資料庫進行通路,并且通過View層将處理結果傳回給前端,并在前端展示給使用者。
1. 超級管理者
超級管理者子產品由登入、教師管理、密碼重置組成。超級管理者子產品主要負責危險資料的通路,如增加教師與密碼重置。
2. 教師/助教
教師/助教子產品由學生管理,班級管理,助教管理,作業管理,評分管理,成績管理等組成。學生管理允許對學生進行導入,以及資訊的修改。班級管理、助教管理負責對班級進行建立、增加助教等。作業管理、評分管理、成績管理可以建立釋出作業,對評審表進行評分,對個人成績、團隊成績進行管理。
3. 學生/組員
普通組員子產品主要功能是檢視成績,如個人成績,團隊成績。
組長子產品由團隊管理,組員管理,績效管理,評審表建立、評審表打分組成。
- 1.确定實體集合及包含的屬性
實體集 | 實體集屬性 | 實體集意義 |
---|---|---|
User | ID,UID,password,role,nickname | 使用者 |
Student_Class | ID,student_id,class_id | 學生-班級 |
Teacher_Class | ID,class_id,teacher_id | 教師-班級 |
Student_Team | ID,teacher_id,team_id | 學生-團隊 |
Class | ID,name | 班級 |
Homework | ID,class_id,type,content,end_time,start_time,title | 作業 |
Scoring_Item | ID,homework_id,description,optional,assistant_id,sequence,parent_item_id,note,score | 評分項 |
Personal_Blog_Grade | ID,scorekeeper_id,ID,grade,scoring_item_id | 個人部落格成績 |
Team_Blog_Grade | ID,grade,scorekeeper_id,scoring_item_id | 團隊部落格成績 |
Evaluation_Table | ID,homework_id,team_id | 評審表 |
Evaluation_item | ID,evaluation_table_id,content,score,sequence,parent_item_id,suggest | 評審表項 |
Evaluation_Item_Grade | ID,UID,team_id,grade,scoring_item_id | 評審表項成績 |
Team | ID,group_leader_id,class_id,name,number | 團隊 |
Partner | ID,student1_id,student2_id | 結對 |
Performance | ID,student_id,percentage,homework_id | 績效 |
Job_Submission | ID,submitter_id,homework_id,submit_status,filepath | 作業送出 |
Role | ID,type | 角色 |
Permission | 權限 | |
Role_Permission | ID,role_id,permission_id | 角色-權限 |
- 2.确定實體集之間的聯系
實體集1 | 實體集2 | 聯系 | 聯系類型(實體集1-實體集2) |
---|---|---|---|
擁有 | m-n | ||
n-1 | |||
獲得 | 1-n | ||
屬于 | n-m | ||
管理 | |||
m-1 | |||
得分 | |||
Evaluation_Item | |||
Evalustion_Item_Grade |
- 1.使用者User表
字段名 | 類型 | 長度 | 是否主鍵 | 是否非空 | 是否唯一 | 描述 |
---|---|---|---|---|---|---|
ID | INT | 是 | 主鍵,自增長字段 | |||
UID | VARCHAR | 9 | 使用者名:學生學号或教師工号 | |||
password | 16 | 加密密碼 | ||||
nickname | 20 | 昵稱 | ||||
role | 使用者身份,外鍵,對應權限表的主鍵 |
- 2.學生-班級Student_Class表
student_id | 學生ID,外鍵,對應使用者表的主鍵 | |||||
class_id | 班級号,外鍵,對應班級表的主鍵 |
- 3.教師-班級Teacher_Class表
teacher_id | 教師或助教ID,外鍵,對應使用者表的主鍵 | |||||
- 4.學生-團隊Student_Team表
team_id | 團隊ID,外鍵,對應團隊表的主鍵 |
- 5.班級Class表
name | 255 | 班級名 |
- 6.作業Homework表
班級ID,外鍵,對應班級表的主鍵 | ||||||
type | 1 | 作業類型:個人作業0,結對作業1,團隊作業2 | ||||
title | 作業标題 | |||||
content | TEXT | 作業内容 | ||||
start_time | DATE | 開始時間 | ||||
end_time | 截止時間 |
- 7.評分項Scoring_Item表
homework_id | 作業ID,外鍵,對應作業表的主鍵 | |||||
description | 評分項的描述 | |||||
score | 評分項的分值 | |||||
optional | 是否選做:是1,否0 | |||||
note | 備注 | |||||
assistant_id | 助教ID,外鍵,對應使用者表的主鍵 | |||||
parent_item_id | 父項ID,外鍵,對應評分項表的主鍵 | |||||
sequence | 同級排序,表示同一級表格項的順序 |
- 8.個人部落格成績成績Personal_Blog_Grade表
scoring_item_id | 評分項ID,外鍵,對應評分項表的主鍵 | |||||
scorekeeper_id | 得分者ID,外鍵,對應使用者表的主鍵 | |||||
grade | 評分項得分 |
- 9.團隊部落格成績Team_Blog_Grade表
- 10.評審表Evaluation_Table表
- 11.評審表項Evaluation_Item表
evaluation_table_id | 評審表ID,外鍵,對應評審表的主鍵 | |||||
評審表項内容 | ||||||
評審表項的成績 | ||||||
suggest | 評審人所給建議 | |||||
- 12.評審表項成績Evaluation_Item_Grade表
評審表項ID,外鍵,對應評審表項表的主鍵 | ||||||
被評團隊ID,外鍵,對應團隊表的主鍵 | ||||||
評分者ID,外鍵,對應使用者表主鍵 | ||||||
評審表項得分 |
- 13.團隊Team表
number | 團隊序列号 | |||||
團隊名 | ||||||
group_leader_id | 組長ID,外鍵,對應使用者表主鍵 | |||||
- 14.結對Partner表
student1_id | 結對學生ID,外鍵,對應使用者表主鍵 | |||||
student2_id |
- 15.績效Performance表
學生ID,外鍵,對應使用者表主鍵 | ||||||
percentage | 績效百分比 |
- 16.作業送出Job_Submission表
submitter_id | 送出者ID,學生或是團隊ID | |||||
submit_status | 送出狀态:補交2,按時送出1,未送出0 | |||||
filepath | 否 | 送出作業的路徑 |
- 17.角色Role表
角色類型,需要Unique |
- 18.權限Permission表
- 19.角色-權限Role_Permission表
role_id | 角色ID,外鍵,對應角色表的主鍵 | |||||
permission_id | 權限ID,外鍵,對應權限表的主鍵 |
1.使用者需求
老師:
(1)添加助教;
(2)導入學生資訊;
(3)建立班級;
(4)部落格評分;
(5)評審團隊;
(6)開始/結束結對組隊;
(7)開始/結束團隊建立;
(8)登入;
助教:
(1)批改作業;
(2)部落格評分;
(3)建立作業;
(4)自定義評分細則;
組員:
(1)檢視成績;
(2)檢視作業;
(3)結對組隊;
(4)登入;
組長:
(4)組員管理;
(5)建立評審表;
(6)評審其他團隊;
(7)填寫績效;
超級管理者:
(1)使用者管理;
(2)重置密碼;
(3)PDF導入名稱正則規則修改;
2.類
使用者類
教師
學生
班級類
團隊類
結對類
績效類
作業類
作業送出類
部落格成績類
評審表類
評審表項類
評分項類
評審表成績類
我們針對幾種常見的Web攻擊方式,制定了幾種應對政策。
1. SRF(Cross-site request forgery)跨站請求僞造
我們通過設定SameSite Cookie屬性為strict屬性,使Cookie在任何情況下都不可能作為第三方Cookie,來避免CSRF攻擊。
2.SQL注入
我們通過使用ORM架構,避免SQL語句直接進行字元串拼接,以避免SQL注入。
3. XSS(Cross Site Scripting)跨站腳本攻擊
我們通過對特殊字元進行轉義來避免XSS攻擊。
本系統使用基于角色的權限通路控制RBAC(Role-Based Access Control)方式進行權限控制。每個使用者都對應以下的某個角色,每種角色擁有自己特定的權限。
評審表評分 | 團隊管理 | 學生管理 | 助教管理 | 老師管理 | 班級管理 | 建立評審表 | 重置密碼 | 作業管理 | 成績管理 | |
---|---|---|---|---|---|---|---|---|---|---|
組員 | ||||||||||
組長 | √ | |||||||||
老師 | ||||||||||
助教 | ||||||||||
超級管理者 |
Q1:個人單次作業成績在總分中的占比是否能夠展現?
A1:在第一版原型中确實無法展現,原型展示結束(4.13)後就開始了對原型的改進,在新版原型中的組員-成績清單中不光可以顯示每次作業的成績,還可以顯示該次作業在總分中的占比。包括在之後的實作中也會在相應頁面顯示分數和占比。
Q2:團隊作業中成員的績效如何展現?
A2:原來的想法是助教在進行批改團隊作業的同時錄入團隊成員的績效,後來經過商讨,在組長界面中增加了添加績效表的功能按鈕,可以讓組長設定各次團隊作業組員的績效占比(總值100,每人1-100,如組長設定甲某績效80,則甲某本次績效占比80%),在團隊作業評分結束後,系統會自動擷取績效占比,并計算每位同學的作業得分。
Q3:團隊作業的答辯部分分為老師、助教和學生,這三部分得分按一定公式計算得到團隊答辯分數,是否可以實作?
A3:可以,我們的系統劃分了老師、助教和學生,其中組長、助教、老師都可以評審團隊并送出評審表,系統擷取角色身份和評審分計算出團隊作業的答辯分數。
Q4:團隊作業得分為部落格得分和答辯得分按照一定計算公式計算得到,系統能否實作?
A4:可以,在原型中分别有個人作業和團隊作業的成績展示頁面,在團隊作業的展示頁面中,顯示了該次作業不同子產品的得分情況,這些得分由系統獲得後按公式計算得到最終得分。
學号 | 工作内容 | 貢獻度 |
---|---|---|
系統結構說明書,權限設計 | 14 | |
稽核原型,報告、部落格 | 12 | |
資料庫說明書、開發計劃 | ||
資料庫結構表、ER圖、功能子產品層次圖、泳道圖 | 13 | |
原型設計 | 10 | |
評審表,權限文檔,接口文檔,ER圖 | ||
接口設計,ppt,資料流圖 | ||
github團隊倉庫連結
系統設計說明書連結
資料庫設計說明書連結
系統設計和資料庫設計答辯PPT連結