主頁 > 軟體工程 > 初見,結對編程!(上)

初見,結對編程!(上)

2021-04-01 21:17:58 軟體工程

專案 內容
這個作業屬于哪個課程 2021春季計算機學院軟體工程(羅杰 任健)
這個作業的要求在哪里 結對專案-第一階段
我們在這個課程的目標是 和團隊開發真正的軟體,一起提升開發與合作的能力
這個作業在哪個具體方面幫助我們實作目標 通過結對編程學習協作設計與編碼、代碼復審、CI使用等
成員介紹
專案 內容
結對專案第一階段的Gitlab倉庫地址 Pair Programming
二人的學號后四位 3110, 3142
博客地址 MadokaHomura(朱正陽), zixfy(趙子軒)

一、關于解題


1. 設計與編碼

a. 事前設計

本次作業最終需要實作一個基于記憶體的檔案系統,它允許用戶通過各類輸入指令來進行檔案的增刪查改等互動,資料結構是樹型結構,

在邏輯上某一條指令的處理流程圖如下:

graph LR input[指令輸入]-->parse[決議地址] parse.->pathE>路徑格式錯誤] parse-->instrType{指令型別} instrType--增-->instrAdd[獲取路徑倒數第二級目錄] instrType--查刪改-->instrOther[獲取路徑最后一級目錄/檔案] instrType--遞回創建-->instrMkdirp[遞回創建目錄] instrAdd.->getFileE>目錄/檔案不存在] instrOther.->getFileE>目錄/檔案不存在] instrMkdirp.->typeE>目錄/檔案型別沖突] instrAdd.->typeE>目錄/檔案型別沖突] instrOther.->typeE>目錄/檔案型別沖突] instrAdd-->addOp[增加子目錄/檔案] addOp.->existE>子目錄已存在] instrOther--查改-->modifyOp[操作檔案/目錄] modifyOp.->contentE>檔案內容格式錯誤] instrOther--刪-->delOp[父目錄洗掉此目錄/檔案] delOp.->delPerE>洗掉作業目錄或其上級目錄] style pathE fill:red,fill-opacity:0.1 style contentE fill:red,fill-opacity:0.1 style getFileE fill:red,fill-opacity:0.1 style typeE fill:red,fill-opacity:0.1 style existE fill:red,fill-opacity:0.1 style delPerE fill:red,fill-opacity:0.1

因此我們將程式所需實作的功能/模塊列出

  1. PathManager: 一個決議路徑的迭代器
    a. 通過路徑構造,并在構造時判斷路徑型別(絕對路徑、相對路徑)
    b. 將路徑分級(分段),作為迭代器回傳下一級決議出的單級地址

  2. FileLike: 檔案類/目錄類的父類,下簡稱類檔案

    a. 保存類檔案的基本資訊, 名字,絕對路徑,創建/修改時間,父目錄,大小
    b. 自底向上更新檔案/目錄大小

  3. Directory: 目錄類,管理子檔案/目錄
    a. 對子檔案/目錄進行增、刪、查
    b. 向檔案系統提供根據路徑索引檔案/目錄的靜態方法
    c. 向檔案系統提供根據路徑索引對應檔案/目錄的父目錄的靜態方法
    d. 向檔案系統提供根據路徑遞回創建目錄的靜態方法

  4. File: 檔案類,管理檔案存盤內容
    a. 追加/覆寫檔案內容
    b. 對檔案內容進行轉義以輸出

  5. MyFileSystem: 檔案系統類,通過呼叫底層類按指令語意進行操作或拋出例外

我們隨手畫的草稿如下:

最終經過縫縫補補改改刪刪后完成時的UML類圖

而且一條指令的執行程序中可能在流程圖中任一執行階段觸發例外,因此我們使用Java的例外處理機制來處理錯誤輸入,我們所定義的各種例外類如下

由于本次作業不區分不同例外輸入對應的輸出資訊格式,因此只要在MyFileSystem中的方法呼叫程序中catch到相應例外就直接輸出Path x is invaild的錯誤資訊,如果后續需要分辨不同的例外情況,我們只需修改嵌套的try-catch-throw的邏輯即可

b. 具體細節

對于PathManager迭代器的實作,選擇了使用自動機,因為路徑的格式定義比較簡單,所以用自動機撰寫不難,而且可以清楚地考慮到各種特殊情況,并且迭代器分級決議地址時同時進行了格式檢查,所以相比于check + split不需要額外存盤空間

對于"根據路徑索引對應檔案/目錄的父目錄”, 考慮到我們規定PathManager決議完時next()回傳特殊值null,因此只要將目錄分成根目錄、單級目錄、兩級以上的目錄(/, /a, /a/b or a/b/c/......)三種情況分別處理就行了,同時在獲取父目錄結束時決議出最后一級地址(檔案名),Java不能回傳多值,因此封裝了一個資料結構保證只掃一遍地址就okay

對于檔案內容的轉義,我們的實作是在檔案類File中只維護轉義后的檔案內容,在fappend指令中對連接處可能新產生的"@n"作特判

c. 測驗與提交

mytql, 根據他的方法我們在CI / CD運行環境中配置好了maven,并使用jacoco-maven-plugin生成測驗結果報告(一個網頁和一個表格),最后一次提交得到的測驗報告如下圖

cobeturajacoco都能得到這種頁面,但在查看分支覆寫率時貌似都只能查看某一分支的遺漏分支數量,并不能了解在條件運算式在何種布爾運算式下是沒有被測驗過的,希望能有dalao指點(

為了代碼覆寫率達標,當然要對各模塊中的例外的拋出也進行測驗啦,我們使用Junit中的函式標注@Test(expected = myException.class)進行拋出例外的斷言,以及在測驗函式中自己手動進行try-catch測驗例外是否如預期拋出

二、關于結對


1.結對形式

現場結對編程的照片:

專注中...
(攝于2021年3月23日)

2.結對流水賬

  • 3/22: 摸石過河
    • 15:05 - 15:30: 設計與思路交流
    • 15:30 - 17:30: 編碼
    • 18:21 - 20:20: 編碼
    • 20:40 - 22:30: 編碼
  • 3/23: 撥云見日
    • 15:55 - 18:25: 編碼
    • 18:30 - 20:30: 編碼
    • 20:51 - 21:20: 總代碼復審
  • 3/24: 再復審
    • 14:31 - 16:20: 代碼復審 評測 報告

在本階段二人決定角色定位將更有傾向性,但是二人進行了充分的交流,并在一些時間段交換作業,所以都對代碼知根知底,兩人不同角色的作業比例大概都是七三開,本次朱正陽擔任Driver,主要職責是具體源代碼實作,趙子軒擔任Navigator,主要職責是測驗與把握整體設計

3.結對感受

(a) 朱正陽

在第一次結對編程中,我主要擔當的是駕駛員(Driver)的角色,通過這次結對編程,我主要從以下兩方面發表自己的感想

  • 關于結對編程

    最開始結對的時候效率并不高,我認為原因主要有以下三點

    • 兩個人在某些細節上想法有所不同
    • 交流上存在一定障礙,有時雙方都無法及時get到對方的點
    • 我沒有提前做好準備,許多東西我還需要進一步消化理解

    隨著結對不斷進行,雙方交流效率也提高了,任務效率也逐漸高了起來,

    結對編程也是一個很好的向他人請教的機會,能夠近距離看到隊友是如何編程的,對于這個問題他又是怎么想的,確實能夠識訓很多,

    結對編程還是一個強迫與他人進行思想上的交流以及傳遞自己想法與觀點的程序,

  • 關于開發流程

    在此前的編程中,我很少將大部分精力放在設計以及測驗上,通過這次結對,我學習到了很多關于單元測驗的知識,也真正認識到了設計以及測驗的重要性,

  • 關于隊友

    有一個非常靠譜的隊友確實可以大幅提高編程的效率以及質量,隊友的編程習慣比較好,對于程式的架構也把握的很好;在我編程的程序中不斷的指導我,耐心糾正我的很多不良的編程習慣以及冗余;做事比較認真負責,通過這三天的結對編程,我也從他那里學習到了很多東西,這是我一個人編程所做不到的,我很感激能有一個這樣的隊友,因此后續也會一起努力,一起進步

接下來應該還會有第二次第三次結對編程的任務,希望能在之后的任務中繼續向隊友學習,更加放開交流,努力完成任務,提升自己,

(b) zzx

在第一次結對編程中,我主要擔當的是Navigator,我的體會與反思:

紙上得來終覺淺,在親歷Pair之后,我認為Pair最大的好處是提升代碼的質量,畢竟在二人協作時讀懂代碼是交流的先決,總是會不自覺地想去保證代碼的可維護性,我認為好的結對編程需要以下長期的要素: 信任、執行力以及可見的詳盡計劃,

  1. 關于信任,我想這就是教材里說的道德水平吧,但這更應該是每一個程式員的基本素養,單槍匹馬在以后作業中更是不可能,所以無論是采取何種的合作形式都應該對搭檔給予信任,這是“平等地位”的先決,本次我與zzy全程都在相互支持,并及時進行溝通
  2. 關于執行力,這是Pair效率的保證,好在zzy與我都是做事比較投入的那種人,結對現場基本沒有摸魚機會(,但實際上也因此沒有保證每小時都有休息時間,以后一定會協調好時間的
  3. 關于計劃,這是我們本次有所忽略的,我作為Navigator沒有給出細致到小時級別、功能級別的編碼計劃,這一方面使得編碼變成了步步為營,另一方面也導致有時二人并沒有是為了同一個小目標而作業,從而降低了作業效率,我決定后續一定要在動手前先制定好作業計劃,磨刀不誤砍柴工

我在本次Pair中發現自己的不足如下:

  1. 上文3.
  2. 我向來是不擅長與他人深入交流的baka,因此Pair實際上是對我的一次考驗,而且我在經常性的交流中更難專注想事情
  3. 我太菜了,作為編程苦手,想到要6天內完成OO的“第五單元”就頓感亞歷山大,在擔任Navigator時不能保證總是給zzy正確有效的指引,對于整體架構,在實作時自己卻還在改來改去,在自己寫的一些方法里還Bug頻出
  4. 本次Pair之前我對Junit一知半解,但為了能跟上整體代碼的進度,所寫的單元測驗代碼便相當的臭長

總之第一階段的Pair讓我明白了團隊計劃與編碼能力的重要性,希望后續能努力做得更好

三、作業量

1.PSP表格

PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃
· Estimate · 估計這個任務需要多少時間 5 5
Development 開發 515 1025
· Analysis · 需求分析 (包括學習新技術) 30 25
· Design Spec · 生成設計檔案 30 30
· Design Review · 設計復審 (和同事審核設計檔案) 15 10
· Coding Standard · 代碼規范 (為目前的開發制定合適的規范) 20 30
· Design · 具體設計 30 30
· Coding · 具體編碼 180 480
· Code Review · 代碼復審 30 60
· Test · 測驗(自我測驗,修改代碼,提交修改) 180 360
Reporting 報告 70 140
· Test Report · 測驗報告 30 60
· Size Measurement · 計算作業量 10 20
· Postmortem & Process Improvement Plan · 事后總結, 并提出程序改進計劃 30 60
合計 585 1170

2.碼量

Java 總行數 代碼行數 注釋行數 空行數
Src 918 629 180 109
Test 745 622 0 123
Total 1663 1251 180 232

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/270906.html

標籤:其他

上一篇:專訪 CNCF 大使王煒:讓云原生開發回歸原始而又簡單

下一篇:源代碼之整潔代碼

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more