美文网首页
模块化,流程化,自动化

模块化,流程化,自动化

作者: 浙南旧事 | 来源:发表于2023-11-03 14:57 被阅读0次

    最理想的情况是,一个模块(比如一个库)只输出指定的外部接口,其余内部接口对外都不可见,都是static的。
    这个目标不太好实现。
    如果是一个很小的模块,所有代码都在一个文件中,只有少量的对外接口,也只有少量的内部接口,这是可以实现的。
    但是,一般意义上的一个模块,通常是较大的,包含多个较小的子模块,除了对外提供的接口和子模块内部的接口,还有子模块之间交互的接口。子模块之间交互的接口,不应该让外部看见,但又不是子模块内部的接口,无法做成static。
    为了处理子模块之间接口的问题,可以把模块中所有代码都放在一个文件中,但这种做法比较少见。或者,把子模块之间的接口做成定义在头文件中的static函数,这种做法也不多见。目前只能采取折中办法,子模块之间的接口对外还是可见的,只是用特定的名称去约束,去检测,避免外部调用到这些接口。比如模块对外提供的接口形如:ABC_doSomething1, ABC_doSomething2,而子模块之间接口的名称就用ABC_privDoSomething1,ABC_privDoSomething2。

    每个对外接口应该都有详细的说明,比如是否线程安全,是否有调用顺序的要求等。接口内部应该记录被调用的情况,比如进入各个分支的次数,每次的耗时,当前的执行位置。

    为了对模块进行测试,模块的实现者要编写自测用的上层代码(上层调用本模块的接口)和下层代码(本模块调用下层的接口)。这样不依赖其他模块就可以对本模块进行测试。尽量做成平台无关的,这样可以在开发机器上进行测试,而不用在实际的目标设备上测试。测试要完全,覆盖到所有的接口,所有的用法,所有的路径。测试应该包含非法,异常的情况,比如参数不合法,错误的调用顺序等。

    模块最好没有外部全局变量,静态变量在编译时就统计出来。静态变量也应该少用,把必须的静态变量统一起来管理,做好记录,运行时可以判断静态变量的正确值是怎么样的。可以在统一管理的静态变量之间加入一些magic,这样运行时就可以判断静态变量有没有被破坏(踩内存)。

    记录好动态申请的内存,运行时任意时刻都可以查到本模块申请的内存,释放的内存。运行时最好能判断动态申请内存里的内容是否是正确的。

    相关文章

      网友评论

          本文标题:模块化,流程化,自动化

          本文链接:https://www.haomeiwen.com/subject/ixkoidtx.html