1.结合工程实践选题相关的一套源代码,根据其编程语言或项目特点,分析其在源代码目录结构、文件名/类名/函数名/变量名等命名、接口定义规范和单元测试组织形式等方面的做法和特点;

本次分析的源代码是《基于RaspberryPi的门禁系统开发》项目的源代码,该项目实现了网页端登录开锁和人脸识别开锁。

 

   该项目的目录结构:

  

 

该项目采用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代表检测器。

 

2.列举哪些做法符合代码规范和风格一般要求:

该代码文件名函数名准确,编码符号准确,注释完整,可读性强,容错性强,代码的简洁、清晰、无歧义。

 

3.列举哪些做法有悖于“代码的简洁、清晰、无歧义”的基本原则,及如何进一步优化改进;

  相关代码没有建立类,没有使用好面向对象的思想,个别变量命名相似,难以辨别。

  应当将相关代码组建在同一类中,变量名称应当采用驼峰式命名法,做到清晰好理解,代码的帮助文档和相关信息要补充完整,让读者能快速理解并使用。

 

4.总结同类编程语言或项目在代码规范和风格的一般要求。

  比如java,java要求代码文件开始时,详细标注功能,作者,时间等。

  1.   要求函数名和变量名采用驼峰式命名。
  2.   要求符号和变量间隔合理,做到清晰整洁。
  3.   要求文件名符合文件内容
  4.   要求文件目录清晰合理,相关内容做到合理的分门归类。
posted on 2019-10-03 20:36  黎明的世界  阅读(270)  评论(1编辑  收藏  举报