2024秋軟件工程結對作業(第二次之程序實現)
| 這個作業屬于哪個課程 | https://edu.cnblogs.com/campus/fzu/SE2024 |
|---|---|
| 這個作業要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2024/homework/13281 |
| 這個作業的目標 | 編寫程序實現上次作業的原型模型,要求小程序或網站能實現一些符合客戶需求的基本功能 |
| 學號 | 102202108(我)和102202115 |
小程序碼(未發布可能用不了抱歉......)

1.相關鏈接
??結對同學的博客鏈接:http://www.rzrgm.cn/--xxxx-----/p/18457207
??本作業的博客鏈接:https://edu.cnblogs.com/campus/fzu/SE2024/homework/13281
??咱隊創建的倉庫的Github項目地址:https://github.com/nymph4x/102202108-102202115
2.具體分工
102202108王露潔:社區模塊,流程圖
102202115孫佳會:項目模塊,消息模塊,個人中心模塊
3.PSP表格
| PSP | 預計耗時(分鐘) | 實際耗時(分鐘) |
|---|---|---|
| 計劃 | 180 | 200 |
| 估計這個任務需要多少時間 | 60 | 80 |
| 開發 | 240 | 480 |
| 需求分析(包括學習新技術) | 120 | 120 |
| 生成設計文檔 | 140 | 150 |
| 設計復審 | 420 | 421 |
| 代碼規范(為目前的開發制定合適的規范) | 120 | 130 |
| 具體設計 | 320 | 360 |
| 具體編碼 | 1440 | 1600 |
| 代碼復審 | 120 | 180 |
| 測試(自我測試,修改代碼,提交修改) | 180 | 200 |
| 報告 | 120 | 180 |
| 測試報告 | 90 | 100 |
| 計算工作量 | 60 | 80 |
| 事后總結,并提出過程改進計劃 | 60 | 120 |
4.解題思路和設計說明
1. 問題分析
我們需要為大學生跨專業合作項目設計一套信息化系統,幫助學生發起或參與項目,解決跨專業合作時人脈和資源不足的問題。該系統應實現以下幾個核心功能:
- 項目的發起和參與:用戶能夠發起或參與項目,項目可以包括不同學科的合作,發起者可以發布項目需求和技能要求。
- 社區互動:用戶可以發布帖子,招募合作伙伴,尋找感興趣項目,分享項目經驗。
- 消息溝通:為每個項目創建群聊,方便項目成員之間的實時交流。
- 個人信息管理:用戶可以查看和修改個人信息,管理查看自己發起或參與的項目、查看帖子。
2. 設計實現說明
為了解決該問題,設計了四個功能模塊:
2.1 項目模塊
- 功能:展示推薦項目、發起項目、查看項目詳情。
- 數據存儲:項目數據保存在數據庫
projects中,用戶可以通過搜索、篩選找到感興趣的項目。
2.2 社區模塊
- 功能:展示帖子和討論,用戶可以發布和查看帖子,進行項目合作的討論和招募。
- 數據存儲:帖子存儲在
posts數據庫中。
2.3 消息模塊
- 功能:項目成員之間的群聊和通知信息,幫助成員實時溝通。每個項目自動生成群聊,消息記錄存儲在
chat-record中。 - 數據存儲:群聊信息存儲在
chat-groups中,消息存儲在chat-record中。
2.4 個人中心模塊
- 功能:用戶的個人信息和項目管理,允許用戶查看和修改自己的資料,查看自己發起或參與的項目。
- 數據存儲:個人信息存儲在
users數據庫中。
??代碼實現思路
3.1 注冊和登錄
- 注冊:用戶在注冊頁面填寫姓名、學號、專業等基本信息,信息存儲在數據庫
users中。 - 身份驗證:系統使用微信云開發的
getUserOpenid云函數獲取用戶的唯一標識openid,并與用戶信息綁定,確保系統的封閉性和安全性。 - 登錄:用戶可以使用賬號密碼登錄。
3.2 項目發起與參與
- 項目管理:項目頁面展示推薦項目,可以發起項目,查看項目詳情。
- 數據存儲:項目數據存儲在數據庫
projects、my-launched-projects和my-participated-projects中。 - 發起項目:用戶發起項目時填寫項目信息(名稱、描述、技能要求等),項目保存到數據庫中,并自動生成一個聊天群聊。
3.3 群聊和消息管理
- 群聊生成:每個項目創建時自動生成一個群聊,群聊存儲在
chat-groups數據庫中。 - 消息記錄:項目成員可以在群聊中進行實時溝通,消息記錄存儲在
chat-record中。 - 消息展示:消息模塊展示所有群聊的最新消息和系統通知。
3.4 社區互動與帖子管理
- 社區功能:社區模塊展示用戶發布的帖子,用戶可以發布新的帖子,或瀏覽其他用戶的帖子。
- 數據存儲:帖子數據存儲在
posts數據庫中。
3.5 個人信息管理
- 個人信息:用戶可以查看并修改個人信息,個人信息存儲在
users數據庫中,并與微信 OpenID 綁定。 - 項目管理:用戶在“我的”頁面可以管理自己發起和參與的項目,查看項目詳情。
??關鍵實現的流程圖

??重要代碼片段及解釋
4.1 關于項目的發起(完整js):
1. 云數據庫實例創建:
const db = wx.cloud.database();
作用:通過wx.cloud.database()創建一個云數據庫的實例,用于后續進行數據的增刪改查操作。db對象用于連接微信小程序的云數據庫(projects 和 my-launched-projects集合)。
2. 頁面數據與輸入框綁定:
data: { projectName: '', leader: '', date: '', skills: '', field: '', teacher: '', targetPeople: '', intro: '' },
作用:data對象定義了頁面的數據狀態,存儲用戶填寫的項目名稱、負責人、日期、技能需求、項目領域、導師、目標群體和簡介。這些字段通過與輸入框的綁定,實現動態更新。
3. 輸入框處理函數
onInputProjectName(e) { this.setData({ projectName: e.detail.value }); },
作用:每個輸入框都綁定了對應的處理函數,使用e.detail.value獲取輸入框的值并將其保存到data對象中。這些函數更新頁面的數據狀態,確保用戶輸入的值被實時存儲。
4. 發起項目按鈕功能
launchProject() { const projectData = { ... }; if (!this.data.projectName || !this.data.leader || !this.data.date) { wx.showToast({ title: '請填寫所有必填項', icon: 'none' }); return; } db.collection('projects').add({ data: projectData, ... }); }
功能說明:
數據準備:projectData收集頁面中的數據,包括項目名稱、負責人、日期等,并加入當前時間(createTime)字段。
表單驗證:判斷必填項是否填寫完整,若沒有填寫,則通過wx.showToast提示用戶填寫完整信息。
數據存儲:通過db.collection('projects').add()將projectData上傳到云數據庫projects集合。保存成功后,繼續將項目數據上傳到my-launched-projects集合。
5. 成功與失敗處理
success: (res) => { wx.showToast({ title: '項目發起成功', icon: 'success' }); wx.redirectTo({ url: '/pages/myProjects/myProjects' }); }, fail: (err) => { console.error('項目添加到projects數據庫失敗:', err); }
成功處理:如果項目成功添加到數據庫,會彈出成功提示,并使用wx.redirectTo()跳轉到myProjects頁面,顯示用戶發起的項目列表。
失敗處理:如果數據庫添加失敗,則會在控制臺打印錯誤信息并提示用戶。
6. 雙重數據存儲
db.collection('projects').add({ ... }); db.collection('my-launched-projects').add({ ... });
設計亮點:該代碼不僅將項目數據保存到projects集合,還同步保存到my-launched-projects集合。這可能是為了區分所有項目和用戶自己發起的項目,便于用戶管理自己的發起項目。
7. 用戶體驗
即時反饋:使用wx.showToast為用戶提供了即時的操作反饋,提示用戶操作成功或失敗。
頁面跳轉:在項目發起成功后自動跳轉到用戶的項目頁面,簡化了用戶的操作流程。
4.2 關于主頁信息的編輯,存儲與展示(部分js):
加載用戶信息:loadUserInfo:
loadUserInfo() { const that = this; wx.cloud.callFunction({ name: 'getUserOpenid', success(res) { const openid = res.result.openid; db.collection('users').where({ _openid: openid }).get({ success(dbRes) { if (dbRes.data.length > 0) { that.setData({ userInfo: dbRes.data[0] }); } }, fail(err) { console.error('Failed to load user info:', err); } }); } }); }
目的:通過調用云函數獲取當前用戶的openid,然后使用該openid在users集合中查詢用戶數據,并將查詢到的用戶信息更新到頁面的數據userInfo中。
代碼說明:
1.使用了wx.cloud.callFunction調用云函數getUserOpenid,獲取用戶的唯一標識openid。
2.在獲取openid后,使用db.collection('users')查詢數據庫中_openid為該值的用戶信息。
3.如果查詢成功,用戶信息將會存儲到userInfo中,并通過setData()更新頁面顯示。
4.3 關于社區帖子展示(部分js):
實現了一個帶有搜索功能和帖子加載功能的小程序頁面,用戶可以輸入關鍵詞進行搜索,還可以查看和加載更多帖子,并跳轉到發帖頁面。
1.搜索按鈕點擊事件處理函數:onSearchTap:
onSearchTap: function() { const searchInput = this.data.searchInput; if (searchInput) { wx.showToast({ title: '搜索中...', icon: 'loading', duration: 2000 }); setTimeout(() => { wx.hideToast(); wx.showToast({ title: '搜索完成!', icon: 'success' }); wx.navigateTo({ url: '/pages/search-results/search-results?query=${searchInput}' }); }, 2000); } else { wx.showToast({ title: '請輸入搜索關鍵詞', icon: 'none' }); } },
功能:
當用戶點擊搜索按鈕時,onSearchTap會先檢查searchInput是否為空。
如果不為空,則顯示“搜索中...”的加載提示,并模擬搜索操作,2秒后提示“搜索完成”,并跳轉到搜索結果頁面,將輸入的搜索關鍵詞searchInput通過URL參數傳遞到目標頁面。
如果搜索輸入為空,則提示“請輸入搜索關鍵詞”。
亮點:
利用了wx.showToast為用戶提供搜索進度的反饋,提升用戶體驗。
使用setTimeout模擬搜索操作,后續可以替換為實際的API調用。
搜索完成后通過wx.navigateTo跳轉到結果頁面,并攜帶用戶的搜索關鍵詞。
2.加載帖子函數:loadPosts:
loadPosts() { const db = wx.cloud.database(); db.collection('posts').skip(this.data.skip).limit(this.data.limit).get().then(res => { this.setData({ posts: this.data.posts.concat(res.data), skip: this.data.skip + this.data.limit }); }).catch(err => { console.error(err); wx.showToast({ title: '加載失敗', icon: 'none' }); }); }
功能:1.從云數據庫中的posts集合中獲取帖子數據。
2.使用分頁查詢:skip表示已跳過的記錄數量,limit限制每次獲取的記錄數。
3.獲取成功后,將新獲取的數據追加到已有的posts數組中,并更新skip的值,以便下次加載時跳過已加載的帖子。
4.如果請求失敗,會通過wx.showToast提示用戶加載失敗的信息。
5.附加特點設計與展示
??設計及意義
創意與獨到之處:
- 跨專業合作的便捷化:該系統創新性地為學生提供了一個跨專業的合作平臺,不再依賴傳統的人脈積累或教師推薦來尋找合作伙伴。通過項目發布和參與功能,學生可以根據項目需求和技能要求迅速找到合適的隊友,打破了校園內專業隔閡,促進學科間的深度合作。
- 項目群聊實時溝通:每個項目自動生成群聊,成員可以實時進行討論和協作,確保項目成員之間的及時溝通,避免傳統方式中使用多個平臺進行項目溝通的不便。
- 社區互動與經驗分享:不僅局限于項目合作,系統還提供了社區互動平臺,用戶可以發布經驗分享帖子,激發其他用戶的靈感和想法,進一步擴展用戶之間的合作機會。
設計意義:
- 提高合作效率:通過信息化的方式,學生可以在短時間內快速找到所需的合作伙伴,提升了跨專業項目合作的效率,避免了資源浪費。
- 擴大人脈與資源:在傳統校園環境下,學生的合作多依賴于現有社交圈,而這個系統打破了這種限制,讓不同專業的學生通過興趣和技能進行連接,擴大了人脈和資源積累的機會。
- 支持多樣化項目:該系統支持從學術研究到創業項目的廣泛項目合作,適用于多學科、跨學科的需求,幫助學生提升綜合能力。
??實現思路
核心思路:
- 模塊化設計:系統分為四大模塊(項目、社區、消息、個人中心),每個模塊功能獨立又彼此相關,確保整個系統的邏輯清晰、易于維護和擴展。
- 數據庫的合理使用:使用云開發數據庫存儲項目、用戶信息、群聊信息和帖子數據,每個用戶的項目數據、個人信息與 OpenID 綁定,確保用戶數據的隱私性和安全性。
- 自動化群聊生成:用戶發起項目時,系統自動創建對應的群聊,實現項目成員的實時溝通功能,簡化了用戶的操作流程。
- 身份驗證和隱私保護:通過微信
getUserOpenid獲取用戶唯一標識,保障用戶數據的封閉性和隱私性,只有認證過的用戶才能參與項目和發起討論。
??重要代碼片段及解釋(分享與交流)
1.關于聊天界面實現(部分js):
實時監聽聊天記錄:listenToMessages
listenToMessages() { db.collection('chat-record').where({ groupId: this.data.groupId }).orderBy('timestamp', 'asc').watch({ onChange: function(snapshot) { console.log('收到新的聊天消息', snapshot); that.setData({ messages: snapshot.docs }); that.scrollToBottom(); }, onError: function(err) { console.error('監聽聊天記錄失敗', err); } }); }
功能:
通過微信云開發的watch()接口,實時監聽chat-record集合中屬于當前群組的聊天記錄。
當有新消息時,onChange事件觸發,頁面的數據messages更新,并調用scrollToBottom()將頁面自動滾動到底部顯示最新消息。
亮點:使用云數據庫的實時監聽功能,使得群聊信息能夠實時更新,保證了群聊的互動性和及時性。
發送消息:sendMessage
sendMessage() { if (!this.data.inputMessage.trim()) { return; } const message = { groupId: this.data.groupId, senderOpenId: this.data.currentUserOpenId, message: this.data.inputMessage, timestamp: new Date(), avatarUrl: this.data.currentUserAvatar, name: this.data.currentUserName }; db.collection('chat-record').add({ data: message, success: res => { console.log('消息發送成功', res); this.setData({ inputMessage: '' }); }, fail: err => { console.error('消息發送失敗', err); } }); }
功能:
當用戶點擊發送按鈕時,如果inputMessage不為空,構造消息對象(包含群組ID、發送者的openid、消息內容、時間戳、頭像和名字等),并將該消息存儲到chat-record集合中。
發送成功后,清空輸入框內容。
亮點:
消息結構設計合理,包含了發送者的詳細信息,便于后續展示和管理。
利用了云數據庫存儲聊天記錄,確保消息的持久化。
2.關于歷史帖子的存儲(部分js):
獲取用戶帖子信息:getUserProfile
getUserProfile(username) { const db = wx.cloud.database(); db.collection('posts').where({ username: username }).get().then(res => { const posts = res.data.map(post => { post.createTime = this.formatTime(post.createTime); return post; }); this.setData({ posts: posts }); }).catch(err => { console.error(err); wx.showToast({ title: '加載失敗', icon: 'none' }); }); }
功能:
使用微信云開發的database接口,通過posts集合查找該用戶名下的所有帖子。
查詢成功后,將每個帖子的createTime格式化為可讀時間,并更新到posts數組中。
如果請求失敗,則通過wx.showToast顯示加載失敗的提示。
亮點:
通過云數據庫實現數據存儲和查詢,提供了便捷的數據管理。
結合formatTime方法,將原始的時間戳格式化為用戶友好的日期時間。
格式化時間:formatTime
formatTime(time) { const date = new Date(time); return date.toLocaleString(); }
功能:將數據庫中的時間戳轉換為本地時間格式,以便用戶更直觀地查看帖子發布時間。
亮點:使用toLocaleString()方法,自動根據用戶的地區格式化時間,提升了用戶體驗。
??實現成果展示
注冊頁面效果:

登錄界面效果:

項目模塊發起項目并更新:

查看項目詳情、申請加入項目:

個人中心查看我的項目:

個人中心查看、編輯資料:

項目負責人調整項目進度和狀態:

消息模塊效果:

項目聊天效果:

6.目錄說明和使用說明
??目錄如何組織
1.1目錄說明
pages/:包含了各個頁面的代碼,包括頁面的業務邏輯(.js)、結構(.wxml)和樣式(.wxss)。cloudfunctions/:包含了所有的云函數代碼,例如getUserOpenid/云函數用于獲取用戶的 OpenID。images/:存儲項目中的圖片和圖標資源。app.js、app.json和app.wxss:全局的應用邏輯、配置和樣式文件。
1.2目錄結構
|-- cloud/ # 云函數目錄
| |-- getUserOpenid/ # 云函數,用于獲取用戶的OpenID
| |-- index.js # 云函數的入口文件
| |-- index.json # 云函數的配置文件
|
|-- images/ # 圖片資源文件夾
| |-- ... # 項目使用的圖片資源
|
|-- pages/ # 小程序頁面目錄
| |-- applyProject/ # 申請加入項目頁面
| |-- applyProject.js # 申請加入項目的業務邏輯
| |-- applyProject.wxml # 申請加入項目的頁面結構
| |-- applyProject.wxss # 申請加入項目的頁面樣式
|
| |-- chatting/ # 群聊頁面
| |-- chatting.js # 群聊頁面的業務邏輯
| |-- chatting.wxml # 群聊頁面的結構
| |-- chatting.wxss # 群聊頁面的樣式
|
| |-- community/ # 社區頁面
| |-- community.js # 社區頁面的業務邏輯
| |-- community.wxml # 社區頁面的結構
| |-- community.wxss # 社區頁面的樣式
|
| |-- editProfile/ # 編輯個人資料頁面
| |-- editProfile.js # 編輯個人資料的業務邏輯
| |-- editProfile.wxml # 編輯個人資料的頁面結構
| |-- editProfile.wxss # 編輯個人資料的頁面樣式
|
| |-- index/ # 首頁
| |-- index.js # 首頁的業務邏輯
| |-- index.wxml # 首頁的頁面結構
| |-- index.wxss # 首頁的頁面樣式
|
| |-- initProjectDetails/ # 初始化項目詳情頁面
| |-- initProjectDetails.js # 項目詳情的業務邏輯
| |-- initProjectDetails.wxml# 項目詳情的頁面結構
| |-- initProjectDetails.wxss# 項目詳情的頁面樣式
|
| |-- invoProjectDetails/ # 參與的項目詳情頁面
| |-- invoProjectDetails.js # 參與項目詳情的業務邏輯
| |-- invoProjectDetails.wxml# 參與項目詳情的頁面結構
| |-- invoProjectDetails.wxss# 參與項目詳情的頁面樣式
|
| |-- launchProject/ # 發起項目頁面
| |-- launchProject.js # 發起項目的業務邏輯
| |-- launchProject.wxml # 發起項目的頁面結構
| |-- launchProject.wxss # 發起項目的頁面樣式
|
| |-- login/ # 登錄頁面
| |-- login.js # 登錄頁面的業務邏輯
| |-- login.wxml # 登錄頁面的頁面結構
| |-- login.wxss # 登錄頁面的頁面樣式
|
| |-- logs/ # 日志頁面
| |-- logs.js # 日志的業務邏輯
| |-- logs.wxml # 日志的頁面結構
| |-- logs.wxss # 日志的頁面樣式
|
| |-- message/ # 消息頁面
| |-- message.js # 消息頁面的業務邏輯
| |-- message.wxml # 消息頁面的結構
| |-- message.wxss # 消息頁面的樣式
|
| |-- myProjects/ # 我的項目頁面
| |-- myProjects.js # 我的項目的業務邏輯
| |-- myProjects.wxml # 我的項目的頁面結構
| |-- myProjects.wxss # 我的項目的頁面樣式
|
| |-- utils/ # 工具函數目錄
| |-- util.js # 工具函數文件
|
|-- app.js # 小程序的全局業務邏輯文件
|-- app.json # 全局配置文件
|-- app.wxss # 全局樣式表
|-- project.config.json # 微信開發者工具的項目配置文件
|-- sitemap.json # 小程序的站點地圖
??測試人員如何運行
為了幫助測試人員順利運行該微信小程序,以下是詳細的操作步驟:
2.1 環境準備
-
下載并安裝微信開發者工具:
- 從微信開發者工具官網下載并安裝:微信開發者工具。
-
配置微信云開發環境:
- 在微信開發者工具中創建一個新的小程序項目,選擇“使用云開發”選項。
- 在小程序控制臺中啟用云開發功能,并創建云數據庫和云函數環境。
2.2 項目導入步驟
-
獲取項目代碼:
- 將項目的代碼克隆或下載到本地,并保存到合適的文件夾中。
-
導入微信開發者工具:
- 打開微信開發者工具,選擇“導入項目”,然后選擇本地的項目文件夾(例如:
miniprogram-1/文件夾)。
- 打開微信開發者工具,選擇“導入項目”,然后選擇本地的項目文件夾(例如:
-
配置項目:
- 在項目導入完成后,進入項目的
cloudfunctions目錄下,點擊右鍵選擇“上傳并部署”云函數。 - 在數據庫控制臺中,創建
users、projects、chat-record、chat-groups等數據庫集合。
- 在項目導入完成后,進入項目的
2.3 運行測試
-
運行項目:
- 在微信開發者工具中點擊“編譯”按鈕,系統將自動運行項目。
- 可以通過模擬器測試小程序的各個頁面和功能(如登錄、發起項目、加入項目、社區發帖、消息溝通等)。
-
注冊與登錄:
- 使用注冊功能創建新賬戶,填寫姓名、學號、專業等信息,成功注冊后,登錄進入系統。
-
測試項目發起與參與:
- 在項目頁面發起一個新項目,并填寫相關信息,確保項目能夠成功保存,并更新到相關頁面。
- 進入項目群聊頁面,測試消息發送和接收的功能。
-
社區功能:
- 測試在社區頁面發帖、查看帖子的功能。
-
查看和修改個人信息:
- 進入個人中心,查看我發起的項目和我參與的項目及項目詳情,還可以點擊進行項目成員內部聊天,查看并修改個人信息,確保數據可以成功更新。
2.4 注意事項
- 請確保微信開發者工具版本是最新版本,以支持云開發功能。
- 項目運行過程中,請確保網絡連接正常,云數據庫和云函數能夠正常訪問。
7.單元測試
??所選測試工具及簡易教程
1.1 測試工具選用
我們選用了 Jest 作為主要的單元測試工具,雖然微信小程序并沒有直接集成單元測試框架,但我們可以通過模擬 API 調用、云函數調用和數據庫交互來進行測試。Jest 是一個功能強大、易于使用的 JavaScript 測試框架,支持異步測試,適合我們測試小程序的業務邏輯和數據庫交互。
1.2 學習單元測試的過程
單元測試是開發過程中重要的一環,我們通過以下幾個步驟逐步掌握:
- 學習基礎概念:
- 了解什么是單元測試,以及為什么需要編寫單元測試。單元測試是為了驗證代碼的正確性和穩定性,確保每個功能單元在不同情況下都能正常運行。
- 選擇合適的測試框架:
- 在研究了 Mocha、Jest 等流行的測試框架后,我們最終選擇了 Jest 作為主要測試框架。它提供了豐富的 API 來模擬函數調用和異步操作,適合小程序的測試需求。
- 學習 Jest 的基本用法:
- 使用
describe和it方法來定義測試單元,使用expect進行斷言。 - 了解如何使用
mock功能來模擬 API 請求、數據庫調用等外部依賴。
- 使用
- 模擬微信小程序 API:
- 通過使用
jest.mock模擬微信小程序的 API 調用(如wx.request、wx.cloud.database等),模擬不同的數據庫響應,測試業務邏輯是否按預期工作。
- 通過使用
1.3 簡易教程
簡易教程:如何使用 Jest 編寫單元測試
-
安裝 Jest:
在項目根目錄下運行以下命令安裝 Jest:npm install --save-dev jest -
編寫測試文件:
在 tests/ 目錄下創建一個測試文件user.test.js:
const user = require('../path/to/user');
describe('User Registration', () => {
it('should successfully register a new user', () => {
const result = user.register('John', 'Doe', 'CS', '123456');
expect(result).toBeTruthy();
});
});
- 運行測試: 運行以下命令來執行測試:
npm run test
- 查看測試結果: Jest 將輸出測試結果,顯示成功或失敗的測試,并給出失敗的詳細信息。
???部分單元測試代碼及函數說明
2.1 測試代碼示例:注冊功能的測試
const register = require('../path/to/register');
describe('User Registration', () => {
// 測試注冊功能是否正常
it('should register a new user successfully', () => {
const mockUser = {
name: 'John Doe',
studentId: '123456',
major: 'Computer Science',
email: 'john@example.com'
};
// 模擬注冊函數
const result = register(mockUser);
expect(result).toBeTruthy(); // 期望注冊成功
});
// 測試重復注冊的處理
it('should not allow duplicate registration', () => {
const duplicateUser = {
name: 'Jane Doe',
studentId: '123456', // 重復的學號
major: 'Design',
email: 'jane@example.com'
};
const result = register(duplicateUser);
expect(result).toBeFalsy(); // 期望注冊失敗,因為學號重復
});
});
2.2 測試的函數說明
register() 函數:這是一個處理用戶注冊的函數,負責驗證用戶信息并存儲在數據庫中。
測試場景:
成功注冊:用戶提供的學號、姓名等信息是唯一的,注冊成功。
重復注冊:同一個學號不能重復注冊,測試是否能正確處理重復注冊的情況。
??構造測試數據的思路
3.1 測試數據構造思路
在構造測試數據時,我們需要考慮不同的輸入情況,以確保代碼在各種場景下都能正確工作。測試數據的構造要包括正向測試和負向測試。
正向測試:
成功的注冊場景:輸入合法的、正確格式的數據,如正確的姓名、學號、專業等。
正常的登錄場景:使用已經注冊的賬號登錄,測試是否能成功。
負向測試:
非法輸入:測試邊界條件,比如學號為空、郵箱格式錯誤、姓名字段缺失等,確保系統能處理非法輸入。
重復注冊:確保同一個學號不能重復注冊。
錯誤的登錄信息:測試用戶使用錯誤的賬號或密碼登錄,系統是否能正確返回登錄失敗的提示。
3.2 如何考慮測試人員的刁難
為了防止測試人員提出的各種刁難,我們需要對代碼的異常處理和邊界情況進行全面考慮。構造的測試數據不僅要涵蓋常規情況,還要考慮以下場景:
極端數據:測試使用非常大的或非常小的數據,如空字符串、超長字符串等。
并發情況:測試多個用戶同時注冊或登錄的場景,確保系統不會因為并發導致數據沖突或錯誤。
隨機數據:使用隨機生成的數據進行測試,確保系統的穩定性。
8.Github代碼簽入記錄


9.工作中的困難及解決辦法
??問題描述:
在我們的在線社區平臺上,當前存在一個顯著的缺陷,即無法妥善地將注冊用戶的信息、用戶發布的帖子以及相關的項目數據進行持久化存儲和實時展示。每當新用戶注冊、新帖子發布或新項目提交時,這些關鍵信息都無法被有效地記錄和展示,導致用戶無法回溯自己的歷史操作,也無法瀏覽其他用戶的內容,這極大地削弱了平臺的互動性和實用性。
??做過的嘗試:
為了彌補這一缺陷,我最初嘗試通過手動編寫大量界面代碼來應對每一次的發帖行為。具體來說,每當有新帖子發布時,我都會創建一個新的界面,詳細記錄并展示該帖子的所有信息,包括作者、標題、內容、發布時間、回復數量等。然而,這種方法不僅效率低下,需要頻繁地編寫和維護大量重復的代碼,而且隨著帖子數量的增加,系統的內存占用也會急劇上升,導致系統運行緩慢,甚至可能出現崩潰的情況。此外,由于數據未能實現集中存儲,用戶在不同界面之間的切換也變得極為不便,用戶體驗大打折扣。
??是否解決:
經過深入研究和多次嘗試,我終于找到了一個切實可行的解決方案——利用云開發技術。通過引入云開發的數據庫功能,我成功地實現了數據的持久化存儲和高效查詢,從而解決了之前遇到的存儲和展示問題。現在,無論是用戶注冊、發帖還是項目提交,所有關鍵信息都能夠被實時記錄并存儲在云端數據庫中,用戶可以隨時隨地通過平臺查看自己的歷史操作和瀏覽其他用戶的內容。
??有何收獲:
這次經歷讓我深刻體會到了云開發技術在解決數據存儲和展示問題方面的巨大優勢。通過學習和實踐云開發技術,我不僅成功解決了平臺上的技術難題,還提升了自身的技術能力和解決問題的能力。同時,我也更加清晰地認識到了技術在推動平臺發展和提升用戶體驗方面的重要性。未來,我將繼續深入學習和探索云開發以及其他前沿技術,以不斷提升自己的能力和平臺的競爭力,為用戶提供更加優質、便捷的服務。
10.評價隊友
102202108王露潔:
首先如果沒有我的隊友,我會不知道這個作業如何下手。在跟她的交流下我慢慢學會使用這些從未使用過的工具,對解決問題的思路也有更新的角度。我的隊友很認真嚴謹,值得信賴,相比之下,我的能力和態度都還需要提升。我們相互配合,合理分配任務,才能在如此之短的時間內完成這一項難度很大的作業。但也許是時間比較短,我們并沒有很深度地交流,大部分時間都在分別動手完成任務,希望下次合作的時間能長一點!
102202115孫佳會:
在這次作業中,和隊友的合作很愉快。
首先,因為這次的作業我們開始的時間不太早,而且小程序開發之前完全不熟悉,前兩天基本上毫無進展,在摸索階段,但是隊友的反饋都很積極,執行力比較強,沒有消極擺爛現象;我們通過微信、GitHub 進行協作,隊友在代碼提交、測試和問題討論時也非常配合,雖然整個過程中遇到很多問題,但是交流很愉快。
最后,因為項目開發的很倉促,很多功能沒有實現,頁面也沒有進行優化設計,希望之后能夠做一個完成度更高的小程序。

浙公網安備 33010602011771號