计算机科学速成课 Crash Course Computer Science 第十六集 软件工程 Software Engineering

计算机科学速成课 Crash Course Computer Science

第十六集 软件工程 Software Engineering

为了写大型程序,程序员用各种工具和方法,所有这些形成了“软件工程”(software engineering)学科,这个词由工程师Margaret Hamilton创造,她帮助NASA在阿波罗计划中避免了严重问题,她曾说过:“It’s kind of like a root canal: you waited till the end, but there are things you could have done beforehand. It’s like preventative healthcare, but it’s preventative software.”。

对象

把大项目分解成小函数可以让多人同时工作,不用关心整个项目,关心自己的函数就好,但是把代码打包成函数依然不够,解决办法是把函数打包成层级,把相关代码都放在一起,打包成对象(object)。对象可以包含其他对象,函数和变量,把函数打包成对象的思想叫“面向对象编程”(Object Oriented Programming)。这种思想通过封装组件,隐藏复杂度。

API

把大型软件拆成一个个更小单元,适合团队合作。各个单元(对象)需要文档(documentation)帮助理解代码都做什么,以及定义好的“程序编程接口”(application programming interface),简称API。API帮助不同程序员合作,不用知道具体细节,只要知道怎么使用就可以。API控制哪些函数和数据让外部访问,哪些仅供内部。“面向对象”的编程语言可以指定函数是public或private,来设置权限,如果函数标记成private,意味着只有同一个对象内的其他函数能调用它,如果函数是public则其他对象可以调用它。

IDE

“面向对象编程”的核心是隐藏复杂度,选择性的公布功能,因为做大型项目很有效,所以广受欢迎,计算机上几乎所有软件都是“面向对象”编程语言写的。有一点很重要:代码在编译前就只是文字而已,可以用记事本或任何文字处理器,但一般来说,现代软件开发者会用专门的工具来写代码,工具里集成了很多有用功能帮助写代码,整理,编译和测代码,因为集成了所有东西,因此叫做集成开发环境(integrated development environments),简称IDE。所有IDE都有写代码的界面,还带一些有用功能,比如代码高亮来提高可读性,许多IDE提供实时检查比如拼写,大型项目有很多源代码文件,IDE帮助开发者整理和看代码,很多IDE还可以直接编译和运行代码,IDE还可以定位到出错代码,还会提供信息帮你解决问题,这叫做“调试”(debug),调试很重要,大多数程序员会花70%~80%时间调试而不是在写代码,好工具能极大帮助程序员防止和解决错误。

文档

除了写代码和调试,程序员工作的另一个重要部分是给代码写文档(document),文档一般放在一个叫做README的文件里,以告诉其他程序员看代码前先看这个文件,文档也可以直接写成“注释”放在源代码里,注释是标记过的一段文字,编译代码时注释会被忽略,注释存在的唯一作用就是帮助开发者理解代码,好文档能帮助开发者过了一段时间后还能理解自己的代码,对其他人也很重要。文档还可以提高复用性(code reuse),与其让程序员一遍遍写同样的东西,可以直接用别人写好的来解决问题。

源代码管理

除了IDE,还有一个重要软件帮助团队协作——源代码管理(source control),也叫“版本控制”(version control / revision control),苹果或微软这样的大型软件公司会把代码放在一个中心服务器上,叫做“代码仓库”(code repository),程序员想改一段代码时,可以check out。一般这种操作可以直接在IDE内完成,然后开发者在自己的电脑上编辑代码,加上新功能并测试,如果代码没问题并且通过测试,就可以把代码放回去,这称为提交(commit),当代码被check out 而且可能被改过了,其他开发者不会动这段代码,防止代码冲突和重复劳动。重要的是,你不希望提交的代码里有问题,因为其他人可能用到了这些代码,导致他们的代码崩溃,造成困惑而且浪费时间,代码的主版本(master)应该总是编译正确并尽可能少bug,但有时bug还是会出现,fortunately,源代码管理可以跟踪所有变化,如果发现bug则全部或部分代码可以“回滚”(rolled back)到之前的稳定版,同时“源代码管理”记录了谁改了什么代码。

质量保证测试

写代码和测代码密不可分,测试一般由个人或小团队完成,测试可以统称“质量保证测试”(quality assurance testing),简称QA,严格测试软件的方方面面,模拟各种可能情况,看软件会不会出错,基本上就是找bug。

beta版 alpha版

“beta版”软件意思是软件接近完成,但不是100%完全测试过,公司有时会向公众发布beta版以帮助发现问题,用户就像免费的QA团队,beta版之前的版本:alpha版本一般很粗糙,错误很多,经常只在公司内部测试。

发布了36 篇原创文章 · 获赞 5 · 访问量 5230

猜你喜欢

转载自blog.csdn.net/qq_43413123/article/details/104418229