主頁 > 軟體工程 > 2021軟工-個人閱讀作業#2

2021軟工-個人閱讀作業#2

2021-04-01 21:45:52 軟體工程

專案 內容
這個作業屬于哪個課程 2021春季計算機學院軟體工程(羅杰 任健)
這個作業的要求在哪里 個人閱讀作業#2
我在這個課程的目標是 和我的團隊開發一個真正的軟體,一起提升開發與合作的能力
這個作業在哪個具體方面幫助我實作目標 閱讀教材提煉所思所惑;初探Git / CI / CD相關工具

一、閱讀提問


問A:結對編程總能做到1 + 1 > 2 嗎?

教材中第四章出現了結對編程(Pair programming),這是一種變態的代碼復審,有別于傳統的Code Review,書中強調"復審的目的在于糾錯改進與教育更多的開發人員",隨后在4.5.3節說到Pair中兩人對程式深入了解,復審效果好,但代碼復審包括具體代碼、效能、設計規范等多方面,Pair中有時間像Code Review一樣周全的考慮嗎?在傳授經驗這個方面,Pair中比較多的也是口頭交流吧,那么有些經驗不就只停留在兩人之間了嗎?當開發想到一個新idea,為什么不形成書面形式在Code Review中“讓更多的成員熟悉專案各部分的代碼”?為什么想著不間斷地復審而不去花時間提高團隊Code Review的效率

在團隊中,開發者是人而不是工具,合體之后就一定能1 + 1 > 2嗎?書中提到:

極限編程對工程師提出了更高的要求,這種要求不關乎技術水平,也不關乎學歷水平或作業經驗,這張要求是對一個人的心智、道德修養的更高要求,結對編程中,編碼不再是私人的作業,而是一種公開的“表演”, (4.5.3節-不間斷地復審)

Pair對技術力也有要求,不熟悉技術的兩人進行Pair只能是一齊學習,文中將Pair的漸進的成長程序比作雙人舞的各個階段,但實際中Pair是否會因為對人的要求太高而停滯在某一階段,Pair的普適性何如?

4.6節也談到了合作之道,說到底結對編程還是交流的藝術,能否高效快速解決問題還是得靠實踐出真知吧,

問B:代碼測驗中覆寫率要達到100%嗎?

教材在2.1.2節-好的單元測驗的標準中有提到:

單元測驗應覆寫所測單元的所有代碼路徑,包括錯誤處理路徑,為了保證代碼覆寫率,單元測驗必須測驗公開的私有的函式/方法

...

要注意:100%的代碼覆寫率并不等同于100%的正確性

那我想反過來問:實際中代碼覆寫率一定要達到100%嗎?從投入產出比的角度考慮,覆寫率達到100%勢必要更多地考慮瑣碎的問題,覆寫率不錯的情況下邊際收益豈不是下降了?或者說,實際測驗中是不是應該搞雙標,僅對更核心的模塊代碼作更全面的測驗覆寫來保證作業效率?更重要的是,100%的代碼覆寫率并不說明代碼正確,我認為覆寫率是一個基本指標,而不是目標,全覆寫的測驗不一定考慮全了外部的問題,比如特殊的輸入值,I\O中的File Not Found,這些都是難以發現的隱患,所以測驗用例是不是應該從場景出發,更多地考慮程式功能與邏輯上的完備性呢?

問C:敏捷開發?

沖刺到一半的時候,產品負責人突然要馬上做重要的改動!或者某個大佬要看某個不在計劃中的功能的演示,怎么辦?種種情況非常考驗Scurm Master

...

也要等到沖刺完了再說啊! (6.2節-敏捷流程的問題和解法)

根據敏捷的價值觀,對于執行原定計劃更傾向于回應變化,并與客戶合作,所以在沖刺中產生新的需求不應是常態嘛,真有重要變化時,為什么不在Scrum Meeting中一齊討論此改動的重要性和急迫性再考慮進不進行作業上的調整?既然每次新的需求產生時都可能波及到系統中多個模塊,或者是現在完全沒有考慮的優化方向,那么有時重構不可避免,拖到Sprint結束會不會導致問題積壓,錯過重構的黃金時間,Sprint中的安排不可改變嗎?

敏捷中的產品Backlog到底是什么樣的呢?它的主要表現形式為用戶故事,

用戶故事是描述對用戶有價值的功能,一個好的用戶故事應該包括角色、功能和商業價值三個要素,

  1. 角色:到底是誰要使用這個功能,這個功能是為誰而設計的?
  2. 功能:這個功能是怎樣的,要達到什么程度?
  3. 商業價值:為什么要這個功能,這個功能最后能帶來什么有益的商業價值,對用戶來說有什么意義?

敏捷還強調個人和交流,這在小團隊很奏效,團隊規模大了以后難以保證高效的交流,而且相比傳統的軟體開發模式不重視正式的檔案,這在團隊作業交接的時候會不會有困難,敏捷開發中怎么將一個專案做大做長遠?

問D:寫不出好代碼的PM是好PM嗎?

書中9.4節關于一個PM(Program Manager)的自我修養:

專業能力:PM通常也能寫代碼,能玩轉Excel, PPT, Visio, 甘特圖,有文字功力...

既然PM要做其他的那么多事情,那么對TA的代碼能力有要求嗎,要求多好呢?我認為PM應該做到的是對開發使用的技術路線與架構有個基本的認識,才能更合理地評估某一功能開發的難度,這樣可以避免異想天開的設計,也更方便與開發者交流,在這個回答中微軟的答主也說到:"雖然理論上程式經理并不必然是程式大拿,但我見過的很多微軟的程式經理都是開發轉過來的,技術實力并不比同組的開發弱,...很少能看到諸如藝術類專業出身的人做程式經理的情況,"

問E:創新不必是領域內專家,關鍵不必是技術?

迷思之六:技術的創新是關鍵

我們在這里看到,除了技術的創新,還有很多方面的創新:商業模式的創新,用戶體驗的創新,生態系統的創新,

這些迷思基本是以商業價值在衡量創新,如果很多企業都只安于跟上主流技術,一味追求這些模式創新,怎么解決相關市場的同質化問題,有熱度一窩蜂來,沒熱度一窩蜂去?如果都想做后來者,那誰還愿意承擔風險當實干者,這對社會的長遠發展是好是壞?埃隆·馬斯克為什么能成功?

二、調研源代碼版本管理軟體


1.基于Git的專案管理工具

a) GitHub

Github是現今世界上最大的同性交友網站,兼最火的開放源代碼與代碼托管社區,被微軟收購后,Github已經在去年免費開放了私有庫所有功能來對標Gitlab,好耶,Github作為開山者先入為主,用戶基數大,社區建設也是最久的,所以要做開源專案的話,它一定是首選啦,后面的代碼托管平臺基本都有具有Github的基本功能:Fork \ Pull Request \ Follow \ issue之類的,

b) Gitlab

GitLab 是一個基于Git的倉庫管理系統的開源專案,并在此基礎上搭建web服務,GitLab CI/CDGitLab 內置的一款工具,易于實作持續集成,持續交付,持續部署的pipelineGitLab 支持開發團隊對其所轄倉庫擁有更多的控制,所以從代碼的私有性上來看,GitLab 是一個更好的選擇,

c) Gitee

Gitee(碼云)是國內規模最大的代碼托管平臺哦,相比于其他平臺,Gitee訪問速度更快更穩定,不會因為某些神秘的原因登不上去,Gitee在開源倉庫方面差不多是在模仿Github,功能齊全,但感覺Gitee比較注重本地化與社區,其目標用戶主要是企業或團隊,相應的有小隊和任務的功能,持續集成方面也有推出正在內測中的Gitee Go

d) Bitbucket

BitBucket 2008 年創建的源代碼托管網站,采用 Mercurial Git作為分布式版本控制系統,同時提供免費賬戶和商業計劃,主要面向慈善企業和企業用戶/其主要市場是大型企業,

2.總覽

工具名 創建時間 使用人數 專案數 私有倉庫 適用范圍 CI / CD 用戶界面 備注
Github 2008 3100w 10000w 免費,無合作人數上限 全球性開源 支持 簡明干凈,用著最習慣 最大的開源代碼平臺
Gitlab 2011 3000w 54w 同上 企業、學校等內網Git私服 支持 功能劃分清晰 自托管的 Git 專案倉庫
Gitee(國內) 2013 600w 1500w 免費,最多5人合作 全球性開源 開發中 相對比較亂 針對國內用戶的代碼托管方案
Bitbucket 2008 500w ??? 同上 企業/團隊Git私服 支持 很干凈,喜歡 為專業團隊而生,"code, manage, collaborate"

三、調研持續集成/部署工具


1. GitLab

oo2020_pre3_task3為例,倉庫在這里,用的是樣例中的.gitlab-ci.yml哦,去掉only: tags,不然只有有tag的commit才能觸發pipeline

GitlabCI / CD控制臺,第一個stage:

第二個stage:

為了獲得代碼的測驗覆寫率使用了maven插件:jacoco-maven-plugin,配置在mvn test執行時自動執行mvn jacoco:report,用Stackoverflow上面的方法,從生成的csv中提取出總代碼覆寫率,設定coverage正則運算式

mvn_test:
  stage: test
  dependencies:
    - mvn_build
  script:
    - echo "------Run JUnit4------"
    - mvn clean test
    - awk -F"," '{ instructions += $4 + $5; covered += $5 } END { print covered, "/", instructions, "instructions covered"; print 100*covered/instructions, "% covered" }' target/site/jacoco/jacoco.csv
  coverage: '/\d+.\d+ \% covered/'

再在Gitlab -> project -> Setting -> CI / CD -> General pipelines settings 找到badge.md,就可動態顯示coverage了,好耶,

2. Github Actions

Github上使用這個倉庫, 配置yaml:

name: my CI test
on: push
jobs:
  job_build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: check
      run: |
        java -version
        javac -version
        mvn -v
    - name: build
      run: |
        mvn compile
...

Github Action里一個.yml對應一個頂級元素workflow,它和Gitlab里的pipeline差不多哦

workflow包含多個job,即不同階段,用need欄位確定執行次序,

每個jobs還分為多個stepstep里才是執行的腳本,這一點很好,在控制臺可以看到不同step的輸出資訊

當然Github Action有不少開源的Action,直接在step里用uses指明Action的倉庫名就能直接用了,上文的.yml就用Action安裝了Java環境

3. Gitlab vs. Github Actions

CI / CD主要的作業是自動化單元測驗、在QA的類生產環境中自動化集成測驗,okay就自動部署到生產環境,這對于敏捷開發而言很舒服,對于下一個可交付的版本,不用再去浪費時間人工操作了,在提高開發效率的同時,大家也都能在倉庫中了解當前版本的問題,

上面兩個工具只是稍微嘗試了一下,總的說來Github Actions用的是遠程的服務器,跑起來更快;Github Actions具有Github開源的主要特征,有不少Action可供呼叫,但用起來總不夠靈活,Gitlab的腳本結構更清晰,撰寫起來容易;Gitlab CI / CD功能更全面,有里程碑設定,代碼評審和合并請求啥的...

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

標籤:其他

上一篇:Cypress UI/API測驗的使用參考

下一篇:Springboot集成flyway實作資料庫自動遷徙

標籤雲
其他(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