读书笔记-4 《构建之法》

读书笔记-4 《构建之法》

刚刚拿到新买的《构建之法》,据说这本书被很多高校作为软工的教材(我们似乎也是),所以我准备精读这本书并付诸实践,在写笔记的过程中领悟其精髓,限于篇幅可能需要多次笔记。

第一章是关于软件工程的一些基本概念和前沿知识,之前读过的几本书里也有一些,个人认为这本书最为精炼和独特。

作者首先提到“软件=程序+软件工程”这个理论,程序在这里当然指源程序,我们平常写的一行行的代码,它们是建立在数据结构上的一些算法,用编程语言描述问题求解的思路和方法。程序要对数据进行操作,数据又有动态静态之分,有了代码和数据,工程师还需要把他们构建成机器能读懂的可执行代码。一个复杂的软件不仅要有合理的软件架构、软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数等,这些都是软件构建的过程。在一个团队中,成员们每天都在修改各种源代码,不断地进行优化、合并,这就需要很好的源代码管理能力,以及需要一系列的工具、流程和文档来保证程序的正确性,这就是质量保障,具体的验证过程则是软件测试。还有一些重要的概念比如软件维护、软件周期、用户体验,这里就不再详述。

其次作者抛出了软件工程的具体概念:软件工程就是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程,包括软件需求分析、软件设计、软件构建、软件测试和软件维护等领域。软件的特性则有:1.复杂性;软件可以说是人类创造的最复杂的系统类型,一些大型软件比如操作系统、办公软件等,有超过百万行的源代码、上万个文件,而且其数目通常会随系统规模的增长呈指数型递增,这对软件工作者的记忆有着很高的要求。 2.不可见性;作为用户,对一款软件的认识基本也就停留在页面、功能选项的层面,作为程序员也只是能看见源代码,但源代码不等同于软件,软件以机器码的形式在若干个CPU核上运行,当软件出问题时,系统反馈给程序员的只是一些错误代号、目标位置等等,真正的问题还是靠程序员去发现。 3.易变性;由于软件与程序员交互的枢纽是代码,所以修改起来十分方便,一般修改软件是为了增加新的功能或者是适应新的硬件。 4.服从性;软件必须要运行在硬件上才能起作用,而且还要符串系统其他方面的要求(例如配置)。 5.非连续性;对于很多软件,输入上的一点微小的变化就会引起输出的天壤之别。

第二章介绍了一些个人技术,广泛应用于团队开发。1.单元测试:保证各功能模块的正常工作,通常的步骤为:设置数据、使用被测试类型的功能、比较实际结果和预期结果。2.效能分析:抽样:利用VS得到程序运行时间的大致分布,以此针对性地优化代码;代码注入:将待检测的代码加入每一个函数,以精准测量各个效能数据,但这样会大大增加程序运行的时间,影响了程序真实的运行情况。3.个人开发流程PSP:计划、开发(分析需求、设计文档、具体设计、编码、测试)、报告。

第三章介绍的是软件工程师的成长,给我们发展软件能力指明了道路。1.个人能力发展:软件工程虽然通常是多人合作,但具体到一个模块基本都是一个人独立完成的,个人在团队找的流程大体为:(1)通过交流、实验等方法理解问题、需求或任务,提出一些大体的解决方案并估算工作量,(2)进一步寻找需求、通过交流决定一个可行的方案,(3)执行方案、把想法通过代码表达出来,(4)单元测试、验证方案的可行性与效能,(4)与其他成员合作、测试并修复bug,最终确定无误后发布解决方案。 2.初级软件工程师成长之路:(1)积累相关知识,提升技术技能(例如java、AS),(2)积累问题领域的知识和经验,(3)理解通用的软件设计思想和软件工程思想,(4)提升职业技能,(5)实际成果。我们需要一步一个脚印,逐渐培养能力。 3.团队对个人的期望:(1)交流,这是任何合作项目都必不可少的环节,(2)说到做到,按时交付切记拖拉,(3)接受团队赋予的角色并按其要求工作,(4)全力投入团队的活动,比如积极参加组会等等,(5)严格按照团队流程的要求工作,(6)充分的准备,即使是立会,(7)理性工作,摒除个人情感因素对团队工作的影响。

第四章主要涉及两人合作的内容。首先因为是合作,我们的代码是要给别人看的,因此要特别注意代码的规范问题,这部分在第二次读书笔记《代码大全2》已总结,在此略过。其次提及代码复审:也就是看代码是否在代码规范的框架内正确地解决了问题,目的在于找出程序的bug以及待改进之处,这一步十分重要,高质量的程序一定都经历了极其细致的代码复审阶段。最后是结对编程,其意义在于不间断地复审,及时地解决问题,毕竟每段代码同时被两个大脑审核,其出错概率必然大大降低。

 

 

原文地址:https://www.cnblogs.com/notegeek/p/8653296.html