2.7 软件工程(Software Engineering)

2022-10-02
3分钟阅读时长

工程师会通过协作与工具完成大型程序的编写,相关的事情则形成了「软件工程」这个学科,该词由工程师 Margaret Hamilton 提出。

2.7.1 对象

2.3.4 节中提及的「函数」仍然无法应对超大数量级的代码,比如微软的 Office 有共计 4kw 行代码,全抽象成函数少说也有几十万个。

解决方法是将函数打包成新的层级,将相关的函数代码归为一类,打包成为「对象」(objects)。

比如汽车软件和定速巡航有关的函数,像是设定速度、逐渐加速减速、定制定速巡航等,都可以打包为“定速巡航对象”。程序员在使用时,通过最外层的层级逐次往下找:Car. Engine. CruiseControl. setCruiseSpeed(550)。

2.7.2 面向对象编程

将函数打包成为对象的思想称为「面向对象编程」(Object-Oriented, OO),常见的 OO 语言有 Python 和 Java。其本质在于通过封装组件来隐藏复杂度,就像之前把晶体管打包成了逻辑门,很适合大型工程。

一类软件中介为另一类软件中介提供服务的方式,是通过「程序编程接口」(Application Programming Interface, API)实现,使用文档(documentation)可以辅助帮助其他人理解代码的作用。

API 可以控制函数和数据的访问权限,确保安全。若函数被标记为 public,则其他对象可以顺利调用(call)它;若函数被标记为 private,则只有同一个对象内的其他函数可以调用它。

2.7.3 IDE

集成开发环境(Integrated Development Environments, IDE)是指集成了写代码、编译、测试、调试(debug)、实时检查、高亮代码等功能的专门工具,例如 VIM。

大多数程序员会耗费 70%~80% 的时间用于 debug,好的工具能够帮助程序员防止错误和解决错误。

2.7.4 文档与注释

文档(documentation)是用于对代码的解释说明,通常命名为「README」来告诉其他程序员看代码前先看这个文件。

文档还有助于开发者在几个月后理解自己的代码,同时能够提高复用性,更好地利用其他程序员写好的东西来解决问题,而不是自己造轮子。

注释(comments)同样是解释代码的,只不过是放在源代码中使用特殊标记注明。编译器在编译代码时,会忽略注释,其唯一作用是帮助开发者理解代码。

2.7.5 版本控制

源代码管理(Source Control)又名版本控制(Revision Control)。大型软件公司会把会把代码放到一个中心服务器上,称为「代码仓库」(code repository)。

程序员可以从代码仓库中把想修改的代码借出(check out),该操作可以在 IDE 中完成。修改测试后再提交(commit)回代码仓库。当某段代码被 check out,且可能被修改过时,其他开发者不会动这段代码,防止冲突和重复劳动,有助于分工协作。

代码的主版本(master)应编译正常且尽可能少 bug,若其出现问题则可以回滚(rolled back)到之前的稳定版(stable version)。这经由版本控制管理实现,其跟踪了所有变化,也记录了谁修改了什么代码。

2.7.6 质量保证测试

质量保证测试(Quality Assurance testing, QA)是指个人或团队严格测试软件的方方面面,模拟各种可能情况,试验软件是否出错(找 bug)。

较为粗糙版本称为 alpha 版,是 beta 版的前身,通常只在公司内部测试。软件接近完成但没有 100% 测试过的版本称为 beta 版,有时会向公众发布进行测试。