C 项目管理

  C 语言项目管理包含三个部分,分别是编码规范、自动化测试和结构化编译。

一、编码规范

  由于编码规范实在没有什么可说的,在这里附上 GNU 编码规范供参考。

二、测试

  为了确保项目质量,在代码完成后通常需要进行测试,其中通过代码代替人工去实现测试的方法叫做自动化测试。

1.测试框架的功能

——TAP 通过一种可移植的方式,将测试结果从不同的测试框架中抽离出来,将其格式统一化,这种操作的好处是对测试结果进行收集、处理和分析时更加容易。更多可通过这个链接进行了解。

——Fixture:在测试用例执行前后,对测试环境进行准备和清理。我们可以用这个功能在测试前准备测试数据,测试后清理这些数据。

——Generator:让测试代码根据一定的规则自动生成测试用例。

——Code Coverage:该指标为,当测试运行时,其能够测试到的不同程序逻辑的比例。按照维度的不同,这个覆盖率可以被细分为函数覆盖率、指令覆盖率、判断覆盖率等。

2.单元测试

  通常是测试的第一步,是对组成程序整体结构的基本单元进行功能正确性验证的一个过程。一般来说这个基本单元是运行过程中用到的各个函数,单独调用这个函数,输入各种参数并检查其返回值是单元测试的通常做法。学术一些的描述就是隔离单元原本需要依赖的外部环境,使测试范围尽可能的集中在被测单元上。

  CUnit 是一个专门用于 C 语言单元测试的轻量级测试框架,可以参考该链接

  关于 C 项目可以使用的更多单元测试框架可以参考这个链接

3.集成测试

  当组成程序的基本单元通过测试后,将测试粒度进一步扩大,测试当不同单元被整合在一起时,它们是否能很好的协同工作。值得注意的是,并非每种测试类型都有与之对应的一种测试框架,测试框架只是提供了一些测试的能力。而被测对象、测试的功能范围以及测试方式(模拟资源或真实环境)决定了测试类型和测试目的。集成测试通常需要数据库、网络连接等真实的外部资源,所以在测试时,使用带有 Fixture 功能的测试框架进行测试。

4.功能测试

  功能测试和集成测试很像,两者都同时涉及程序的多个单元,并使用真实的外部环境提供测试所需要的资源。但功能测试的对测试结果的正确性要求更加严格,而集成测试关心的是各个组件是否能协同工作,比如说当各个组件协同工作时不会进入异常。

5.性能测试

  个人觉得性能测试是一个开发人员需要重点关注的测试,作为一个对自身有一定要求的程序员而言,实现基本功能并保证程序不出 bug 是基本要求,我们还需要关注程序的性能,尽可能让代码占用更少的内存,执行速度更快!在大多数情况下,可以使用 Perf 进行性能测试,它提供了一系列常用且精确的性能指标,并抽象了不同 CPU 在硬件上的差异,以便更加同一地评价不同体系上的程序性能情况。

1.Perf

  Perf 可以检测程序运行期间发生的页错误数量、经过的 CPU 时钟数、CPU 分支预测失败的次数,等等。当然,某些硬件指标是否可用,还要看对应 CPU 上的 PMU(Performance Monitoring Unit)单元是否支持。比如 perf stats 命令可以查看程序运行时有关 CPU 计数器的一些信息,也可以通过这个链接去了解 Perf 的更多信息。

2.WPR

  在 Windows 平台上也可以使用这个工具进行性能测试,可以通过这个链接去了解更多信息。

6.其他测试

  比如兼容性测试、安全性测试、端到端测试等,但个人觉得对开发人员来说最重要的还是单元测试性能测试。可以通过这个链接了解测试更多的信息。

三、结构化编译

    Linux 下编译 C 文件通常会使用 gcc 作为编译工具,但当文件越来越多时每次敲命令很不方便,于是诞生了 Makefile。随着项目日益庞大,并且有了跨平台需求后,Makefile 也不是很方便了,于是 Cmake 诞生了,本章会提到这两种工具,并附上自己学习 Cmake 的笔记链接。

1.如何组织 C 代码的目录结构

  通常会按功能和层次进行划分,比如驱动层、协议层和应用层等,每个功能或每个层次的文件夹也可以进一步细分,最细粒度的文件夹分为代码文件夹(src)和头文件夹(inc)。

2.使用 Makefile 进行结构化编译

  规模稍微大一点的工程,使用 gcc 或其他工具链进行编译就很麻烦了,这个时候可以选择用 Makefile 去编译。比如说单纯使用 gcc 进行编译,只产生了最终结果而没有中间文件,

3.使用 Cmake 进行跨平台的自动化构建

  Cmake 相比 Makefile 有以下几点优势:

  1.和 Makefile 相比,不同平台下可能有自己的编译工具,如果想要跨平台,必须要保证能够在不同的平台上进行编译,如果使用 make 工具,就要为每一种标准写一次 Makefile ,非常麻烦。

  2.更容易编写,Cmake 的语法更通俗易懂,也没有Makefile 那种难以理解的通配符,方便编写。

  3.在大型项目中,便于管理代码,但以我目前的水平来看,似乎 Makefile 也能达到同样的效果,可能是我接触的项目不够大吧。

 

  关于 Cmake 的学习笔记可以点这个链接

posted @ 2022-03-04 08:24  一只吃水饺的胡桃夹子  阅读(171)  评论(0编辑  收藏  举报