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要求代碼文件開始時,詳細標註功能,做者,時間等。