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要求代码文件开始时,详细标注功能,做者,时间等。