專欄文章 質量保障系統的落地實踐 (二) 專案管理設計 - 程式碼資訊設計
前言
專欄文章 質量保障系統的落地實踐 (一) 概覽篇
專欄文章 質量保障系統的落地實踐 (二) 專案管理設計 - 基礎資訊與缺陷資訊設計
大家好,以上兩篇文章,先從大體上介紹了質量保障平臺的概況,而後談了談專案管理板塊如何對接三方缺陷管理平臺,裡面包含了賬戶體系的對映設計,從而將缺陷資訊沉澱至質量保障平臺。
那麼本篇文章我們將開始介紹專案管理 - 程式碼資訊設計的內容,相信有了上一篇文章的底子,這篇文章的閱讀將更清晰明瞭。
程式碼資訊資料庫設計
現在主流的程式碼管理平臺有很多,大多數管理平臺均能提供一定的開放能力,我們可以透過這些開放能力嘗試得到一些我們想要的資料,本篇文章以 git 為例,介紹如何收集專案提交的程式碼資訊。
那麼我們先來看看 git 平臺 api 能夠提供的資料:
# 獲取程式碼提交資訊
url = f"{CODE_SERVER_HOST}/api/v4/projects/{code_project_id}/repository/commits" # git獲取一定時間範圍內的提交記錄
params = {
"ref_name": branch_name, # 分支名
"since": since, # 統計開始時間
"until": until, # 統計結束時間
"page": page,
"per_page": page_size,
"order": "default"
}
# 介面響應
[{
'id': 'a4a18684d2f35ceb*****2fe360cbaad0285888',
'short_id': 'a4a1****',
'created_at': '2024-04-15T17:26:26.000+08:00',
'parent_ids': ['e4f3afb3b3cf28eff****28436dc5f1463654'],
'title': '提交title',
'message': '提交內容',
'author_name': 'author_name',
'author_email': 'author_email',
'authored_date': '2024-04-15T17:26:26.000+08:00',
'committer_name': 'committer_name',
'committer_email': 'committer_email',
'committed_date': '2024-04-15T17:26:26.000+08:00'
},
{....}
]
從上述 git 介面可以看出,想要獲取一段時間內的程式碼提交情況,需要幾個引數:code_project_id,ref_name、since、until,那麼結合到質量保障平臺中,該如何設計呢?在實際專案迭代中,往往存在專案 1 涉及程式碼應用 1、程式碼應用 2,專案 2 設計程式碼應用 2、程式碼應用 3 的情況。而程式碼應用可以歸屬到某一組織節點,所以我們可以得出專案、程式碼應用、組織結構之間的關係:
結合 git 介面請求的必要引數,那麼資料表的設計自然而然可以得到:
# 服務應用管理-服務應用資訊
class ApplicationInfo(BaseModel):
department_id = models.IntegerField(verbose_name=u"歸屬組織節點")
app_code = models.CharField(max_length=150, verbose_name=u"服務code")
code_project_id = models.IntegerField(null=True, blank=True, verbose_name=u"應用專案id")
is_available = models.BooleanField(default=True, verbose_name=u"是否有效")
class Meta:
db_table = 'Application_Info'
verbose_name = "服務應用管理-服務應用資訊"
verbose_name_plural = verbose_name
# 服務應用管理-專案服務管理
class ProjectApplicationInfo(BaseModel):
department_id = models.IntegerField(verbose_name=u"歸屬組織節點")
project_id = models.IntegerField(verbose_name=u"專案id")
app_code = models.CharField(max_length=150, verbose_name=u"服務code")
code_project_id = models.IntegerField(verbose_name=u"應用專案id")
branch = models.CharField(max_length=50, verbose_name=u"程式碼分支")
since_time = models.CharField(max_length=30, verbose_name=u"開始統計時間")
until_time = models.CharField(max_length=30, verbose_name=u"結束統計時間")
is_available = models.BooleanField(default=True, verbose_name=u"是否有效")
class Meta:
db_table = "Project_Application_Info"
verbose_name = "服務應用管理-專案服務管理"
verbose_name_plural = verbose_name
接下來我們來看介面的返回值,裡面有幾個關鍵欄位:short_id、committer_name、committer_email,透過 short_id 可以訪問 git 的檢視詳情:
url = f"{CODE_SERVER_HOST}/api/v4/projects/{code_project_id}/repository/commits/{commit_short_id}"
# 介面響應
{
'id': '993b76f0c97031195****51f04a5025fb8d',
'short_id': '993****6f0',
'created_at': '2024-04-07T14:54:10.000+08:00',
'parent_ids': ['dee5f****a13c31d1651cbcc995ce2e882f'],
'title': 'title',
'message': 'message',
'author_name': 'author_name',
'author_email': 'author_email',
'authored_date': '2024-04-07T14:54:10.000+08:00',
'committer_name': 'committer_name',
'committer_email': 'committer_email',
'committed_date': '2024-04-07T14:54:10.000+08:00',
'stats': { # 程式碼變更資訊
'additions': 34,
'deletions': 0,
'total': 34
},
'status': None,
'project_id': 20**4, # project_id即傳參中的code_project_id
'last_pipeline': None
}
以上關於程式碼提交資訊的詳情,特別是變更程式碼的數量就是我們需要採集的重點資料,那麼設計資料表:
class ProjectCodeCommitInfo(BaseModel):
department_id = models.IntegerField(verbose_name=u"歸屬組織節點")
project_id = models.IntegerField(verbose_name=u"專案id")
app_code = models.CharField(max_length=150, verbose_name=u"服務code")
code_project_id = models.IntegerField(verbose_name=u"應用專案id")
branch = models.CharField(max_length=80, verbose_name=u"程式碼分支")
title = models.TextField(verbose_name=u"commit提交標題")
committer_name = models.CharField(max_length=80, verbose_name=u"提交人姓名")
committer_email = models.CharField(max_length=100, verbose_name=u"提交人郵箱")
committed_time = models.CharField(max_length=30, verbose_name=u"提交時間")
additions = models.IntegerField(verbose_name=u"新增程式碼")
deletions = models.IntegerField(verbose_name=u"移除程式碼")
total = models.IntegerField(verbose_name=u"變更程式碼總數")
class Meta:
db_table = "Project_Code_Commit_Info"
verbose_name = "服務應用管理-專案應用分支程式碼提交記錄"
verbose_name_plural = verbose_name
程式碼資訊與賬戶體系關聯
到目前為止,我們已經設計了儲存專案程式碼提交資訊的資料表,接下來只需要依據介面需要的傳參,訪問對應 open api 獲取到對應的程式碼提交資訊即可,這樣我們就將三方平臺的原始資料進行了採集。那麼到了這一步,又碰到了和缺陷管理板塊類似的問題 - 賬戶體系的關聯,我們可以看到程式碼提交列表、程式碼提交詳情中均有一個 committer_email 欄位,這個欄位為研發本地提交程式碼至 git 服務時,本地設定的郵箱,所以說這個郵箱和質量保障平臺的賬戶體系中的郵箱是沒有直接關聯的,那麼該怎麼做,才能將二者關聯起來?答案也如同缺陷管理板塊的一樣,透過對映表進行轉換,同樣的我司大部分人的提交郵箱如果沒有自定義設定過的話也是有統一字尾的,那麼處理邏輯與缺陷對映處理邏輯類似:
# 依據程式碼提交郵箱獲取對映後的使用者郵箱
def fetchCodeTargetEmail(department_id, committer_email):
email_mapping_record = CodeEmailMappingInfo.objects.filter(
department_id=department_id, source_email=committer_email, date_delete=None
)
target_email = None
if email_mapping_record:
email_mapping_info = email_mapping_record[0]
target_email = email_mapping_info.target_email
return target_email
# 提交郵箱進行資料對映,關聯到對應使用者郵箱,儲存時進行替換
target_email = fetchCodeTargetEmail(department_id, committer_email)
if target_email:
committer_email = target_email
千行程式碼缺陷率
透過第二篇文章的實現思路,我們已經能夠獲取到專案提交的缺陷資訊,而透過這篇文章的實現思路,又可以得到專案的變更程式碼資訊,那麼就可以得到一個側面反饋研發質量的一個指標:千行程式碼缺陷率,統計歸於 A 研發的缺陷數量,歸於 A 研發的變更程式碼數量,計算可得。除此之外,變更程式碼數量也可以從側面反饋出每個研發開發工作量的大小:
總結
本篇文章的處理思路與第二篇文章類似,故此只提如何依據程式碼管理平臺 open api 返回值設計資料庫以及賬戶體系關聯邏輯,希望大家多留言交流,謝謝。
相關文章
- 專欄文章 質量保障系統的落地實踐 (三) CI 管理設計 - 整合設計
- 專欄文章 質量保障系統的落地實踐 (三) CI 管理設計 - 基礎設計
- 專欄文章 質量保障系統的落地實踐 (四) 效能管理設計 - 造數工廠
- 如何保障前端專案的程式碼質量前端
- 專案實踐-MD設計-底部選單欄(一)
- 設計專案全生命週期管理系統構建與實踐
- java版工程專案管理系統原始碼+系統管理+系統設定+專案管理Java專案管理原始碼
- 一個工程實踐專案的完整軟體系統設計方案
- java版工程專案管理系統原始碼+系統管理+系統設定+專案管理+合同管理+二次開發Java專案管理原始碼
- 職工資訊管理系統的設計
- 軟體專案管理 8.4.軟體專案質量計劃專案管理
- 《程式設計師修煉之道:從小工到專家》之程式碼質量程式設計師
- 專案質量管理
- 就業資訊管理系統設計與實現就業
- 如何統計專案程式碼?
- java版工程專案管理系統原始碼+系統管理+系統設定+二次開發Java專案管理原始碼
- 企業工程專案管理系統原始碼+系統管理+系統設定+二次開發專案管理原始碼
- 資訊系統專案管理系列之二:專案生命期和組織專案管理
- Python專案實戰(一)《Python程式設計 從入門到實踐》Python程式設計
- 宜人蜂巢專案質量管控體系實踐
- 程式設計二三事 - 如何從點滴做起開發高質量專案程式設計
- 圖片管理系統:原理、設計與實踐
- [MAUI 專案實戰] 筆記App(二):資料庫設計UI筆記APP資料庫
- 小程式的專案結構設計
- 程式設計師如何修煉專案管理能力?程式設計師專案管理
- 資訊系統專案管理系列之三:專案管理過程專案管理
- 資訊系統專案管理系列之五:專案整體管理專案管理
- 資訊系統專案管理系列之六:專案範圍管理專案管理
- 如何使用專案管理設計專案五個階段專案管理
- 鏈遊專案系統開發方案設計
- 愛碼單車隊——專案原型設計+概要設計原型
- 一個專為程式設計師設計的精緻 Java 部落格系統程式設計師Java
- 高併發文章瀏覽量計數系統設計
- 貝殼_程式設計實踐_銀行系統程式設計
- DAPP智慧合約LP質押挖礦系統開發(專案設計)APP
- 低程式碼實時數倉構建系統的設計與實踐
- 團隊作業第五次—專案系統設計與資料庫設計資料庫
- 專案中多級快取設計實踐總結快取