分析一套源代碼的代碼規範和風格並討論如何改進優化代碼

1.結合工程實踐選題相關的一套源代碼,根據其編程語言或項目特色,分析其在源代碼目錄結構、文件名/類名/函數名/變量名等命名、接口定義規範和單元測試組織形式等方面的作法和特色;java

本次分析的源代碼是《基於RaspberryPi的門禁系統開發》項目的源代碼,該項目實現了網頁端登陸開鎖和人臉識別開鎖。python

 

   該項目的目錄結構:編程

  

 

該項目採用python編寫,文件命名規範準確,文件名Lock直觀的表示了該項目與鎖相關,函數名和變量名直觀準確,註釋完整。好比數組

# 加載人臉檢測模塊
def face_detect():
     global detector
     global sp
     global facerec
# 1.加載正臉檢測器
     detector = dlib.get_frontal_face_detector()
# 2.加載人臉關鍵點檢測器(使用68點特徵提取器)
     sp = dlib.shape_predictor(predictor_path)
# 3. 加載人臉識別模型
     facerec = dlib.face_recognition_model_v1(face_rec_model_path)
# 對文件夾下的每個人臉進行:
#glob.glob(pathname)返回全部匹配的文件路徑列表
#os.path.join(path1,path2)鏈接多個路徑
     for f in glob.glob(os.path.join(faces_folder_path, "*.jpg")):
          print("Processing file: {}".format(f))
          img = io.imread(f) #導入圖片
 # 1.人臉檢測
          dets = detector(img, 1) #特徵提取器實例化
          print("Number of faces detected: {}".format(len(dets)))
          for k, d in enumerate(dets):             
  # 2.關鍵點檢測
               shape = sp(img, d)
  # 3.描述子提取,128維向量。
               face_descriptor = facerec.compute_face_descriptor(img, shape)
  # 轉換爲numpy數組
               v = numpy.array(face_descriptor) 
               descriptors.append(v)
     return descriptors

  在該模塊中函數名face_detect()直觀的表達該模塊是人臉檢測模塊。變量名detector表明檢測器。app

 

2.列舉哪些作法符合代碼規範和風格通常要求:編程語言

該代碼文件名函數名準確,編碼符號準確,註釋完整,可讀性強,容錯性強,代碼的簡潔、清晰、無歧義。函數

 

3.列舉哪些作法有悖於「代碼的簡潔、清晰、無歧義」的基本原則,及如何進一步優化改進;單元測試

  相關代碼沒有創建類,沒有使用好面向對象的思想,個別變量命名類似,難以辨別。
測試

  應當將相關代碼組建在同一類中,變量名稱應當採用駝峯式命名法,作到清晰好理解,代碼的幫助文檔和相關信息要補充完整,讓讀者能快速理解並使用。優化

 

4.總結同類編程語言或項目在代碼規範和風格的通常要求。

  好比java,java要求代碼文件開始時,詳細標註功能,做者,時間等。

  1.   要求函數名和變量名採用駝峯式命名。
  2.   要求符號和變量間隔合理,作到清晰整潔。
  3.   要求文件名符合文件內容
  4.   要求文件目錄清晰合理,相關內容作到合理的分門歸類。
相關文章
相關標籤/搜索