一 笔记 | 这就是软件工程师( 二 )


1.7代码注释:像说明书一样清晰
其实我觉得好的注释是,别人带着问题去看你这段代码和注释,看完以后问题就解决了 。当我去调用这个模块或者函数时,好的注释直接摆了个例子告诉我,你这样写就好了,就像一份说明书,你去看的时候,脑海里有一个目标,然后它会非常清晰地一步一步告诉你,这样做就可以了 。这就是注释应该起到的作用 。
1.8编程原则:教科书没有告诉你的“为什么”
①避免重复原则
写代码的时候,如果出现雷同或相似的片段,就要想办法把它们提取出来,抽象成一段独立的代码.然后用这一段代码去解决多种问题 。因为这样做既能降低程序的复杂度,又能减少维护的工作量 。用一种方式解决多种问题,是避免重复原则的精髓,所以写代码写到高级阶段,其实是做数学建模 。
②单一职责原则
一个类或者模块应该有且只有一个职责,简单来说就是各司其职 。单一职责原则除了可以把复杂的问题简单化、模块化,从而降低问题的复杂度,让你更容易实现和驾驭,它还是一个可以让你的组件不断复用的原则 。
③高内聚、低耦合原则
这是UNIX操作系统设计的经典原则,其中内聚指的是一个模块内各个元素彼此结合的紧密程度,耦合指的是不同模块之间的依赖程度 。高内聚,低耦合(也叫解耦)简单来说,是让每一个模块做到独立,做到精益求精,同时把模块间的耦合降到最低,不会因为动了一个模块,而导致其他模块出问题 。
④开闭原则
开闭原则具体来说是指,对修改是关闭的,对扩展(协议)是开放的,这是为了保证把稳定的东西放在内核,把易便的东西扔出去,最终保证稳定性和重用性 。
1.9解决问题:别把原则当教条
毕竟我们编码的最终目的不是符合哪项原则,而是解决实际问题 。程序就是一个解决问题的手段,核心问题是:这个程序真正要解决的问题是什么 。
1.10全面思考:做测试比写代码难
①单元测试,一般是白盒测试
【一笔记 | 这就是软件工程师】单元测试的目的就是测试这些零件是否都能正常工作,可以说,单元测试实力问题最近的地方 。
②功能测试,一般是黑盒测试
一个功能是由很多个单元模块组装起来的,如果这些单元模块没有很好地配合在一起,互相矛盾,那整个功能也就不能正常实现了 。因此,软件工程必须有功能测试,测一测各个模块合在一起能否正常运转 。
③集成测试
从测试的角度来讲,单元测试测的是家庭,功能测试测的是社区,集成测试测的是整个城市的交互 。具体到软件工程上,集成测试其实模块和模块之间或者系统和系统之间的测试 。
④非功能测试
比如性能测试、安全测试、稳定性测试、健壮性测试、破坏性测试、可用性测试、灵活性测试,等等 。非功能测试主要用来检查软件应用程序的非功能性方面(性能、可用性、可靠性等),帮助降低与产品非功能性方面相关的生产风险和成本,优化产品的安装、配置、执行、管理和监控方式 。
⑤回归测试
回归测试的意思是把以前做过的测试以及犯过的错误再测一遍 。它的主要目的是确保代码或配置的修改、需求的增加不会影响现有的功能 。通常来说,回归测试的成本是非常大的,尤其是对那些使用人肉测试方式的公司来说 。所以一般来说,回归测试意味着自动化测试 。
1.11程序测试:对软件工程师的基本要求
①测试要自己做,尤其不能让用户称为你的测试工程师
②除了测试基本输入以外,还要努力构想更多的边界条件