2018-2019-1 20189215 《构建之法》第二章学习总结

教材学习内容总结

  1. 再次强调一遍!!!

程序 = 数据结构 + 算法
软件 = 程序 + 软件工程
软件企业 = 软件 + 商业模式

  1. 单元测试的功能是让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能够得到稳定、量化的保证。
  2. 好的单元测试的标准
  • 单元测试应该在最基本的功能 / 参数上验证程序的正确性
    单元测试要测试API中的每一个方法及每一个参数。
  • 单元测试必须由最熟悉代码的人(程序的作者)来写
  • 单元测试过后,机器状态保持不变
  • 单元测试要快
    一个测试的运行时间是几秒钟,而不是几分钟
  • 单元测试应该产生可重复、一致的结果
    单元测试不能解决所有的问题,不必期望它能够发现所有的缺陷。
  • 独立性
    单元测试的运行 / 通过 / 失败不依赖于别的测试,可以人为地构造数据(不是造假数据!!!!),以保持单元测试的独立性。
  • 单元测试应该覆盖所有代码路径
    但是100%的代码覆盖率并不等同于100%的正确性!
  • 单元测试应该集成到自动测试的框架中
  • 单元测试必须和产品代码一起保存和维护
  1. 回归测试建立在单元测试的基础上,“回归”在这里的意思可以理解为“回归到以前不正常的状态”,其实我觉得应该如此理解“之前出错的测试用例回归,验证新的代码已经进行了修正”。
  2. 效能分析一般的做法是先用抽样的方法找到效能瓶颈所在,然后对特定的模块用代码注入的方法进行详细分析。
  3. 在效能优化之前,如果不经实际结果分析就盲目优化,也许就会事倍功半。
  4. PSP掌上游戏机个人软件开发流程(Personal Software Process)指导了一个软件工程师在接到一个任务之后应该怎么做。

PSP2.1

计划

  • 明确需求和其他相关因素,指明时间成本和依赖关系

开发

  • 分析需求
  • 生成设计文档
  • 设计复审(和同事审核设计文档)
  • 代码规范
  • 具体设计
  • 具体编码(可以看到实际项目中,写代码占的比例很少)
  • 代码复审
  • 测试(包括自测、修改代码,提交修改)

记录用时
测试报告
计算工作量
事后总结
提出过程改进计划

  1. 软件设计的两个原则
    ①单一职责原则(Single Responsibility Principle,SRP)
    一个模块(类)应该只有一个导致它变化的原因,一个模块应该完全对某个功能负责。
    ②开放-封闭原则(Open-Close Principle,OCP)
    软件实体应该是可以扩展的,同时是不可修改的。
  • 允许扩展:当应用的需求发生改变时,我们可以对模块进行扩展,从而改变模块的功能。
  • 不允许修改:对模块行为进行扩展时,不必改变模块的本身。
  1. 扩展有数据方面、需求方面、用户方面、软件构建方面等各种类的扩展需求。

教材学习中的问题和解决过程

  • 问题1:VSTS是何物?
  • 问题1解决方案:查阅资料。VSTS的全称是Visual Studio Team System,是由微软开发的一套具有高生产力、高集成性、可扩展的生命周期开发工具,VSTS使得整个开发团队拥有更好的沟通与合作,并且保证了更好的质量。
  • 问题2:单元测试中代码覆盖率。
  • 问题2解决方案:查阅资料。在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。用代码覆盖率来衡量,有利也有有弊。代码覆盖率的定义是代码覆盖率 = 代码的覆盖程度,是一种度量方式。代码覆盖程度的度量方式又分为语句覆盖、判定覆盖、条件覆盖、路径覆盖等。但是代码覆盖率只能代表测试过多少代码,不能代表是否测试好这些代码。
  • 问题3:“我有银弹”的误区,名词解释。
  • 问题3解决方案:查阅资料。

「银弹」:银色子弹,在欧洲民间传说及19世纪以来哥特小说风潮的影响下,银色子弹往往被描绘成具有驱魔功效的武器,是针对狼人等超自然怪物的特效武器。后来也被比喻为具有极端有效性的解决方法,作为杀手锏、最强杀招、王牌等的代称。
因此在《构建之法》中的““没有银弹”是指没有任何技术或管理上的进展,能够独立地许诺十年内使软件系统项目生产率、可靠性或简洁性获得数量级上的进步。

在做软件工程中,没有足够复杂性、易变性的软件工程作业(或项目)要求,会使学生(或开发者)陷入“我有银弹”的误区,认为有可以解决一切问题的“银弹”方法,究其原因,还是复杂性和易变性是软件工程的基本要素

代码调试中的问题和解决过程

本书学习中目前还没有代码。

[代码托管]

本书学习中目前还没有代码。github链接为:https://github.com/jsjliyang 日后有代码会进行托管。

其他

《构建之法(第三版)》第2章《个人技术和流程》讲到了单元测试、回归测试、效能分析的涵义和使用(均由VSTS提供),以及个人软件开发流程PSP的最新标准PSP2.1,让我了解到在实际的工程中不光包含代码的编写,还包含很多规范性、有稳定结构的工作,都便于项目的顺利进行;讲到了软件工程必须有复杂性、易变性两个基本的要素,才能称之为有价值的软件工程。

学习进度条

章节数(新增/累积) 博客量(新增/累积)
目标 共17章 共17篇
2018.10.23 1/1 1/1
2018.11.01 1/2 1/2

计划在本学期读完,希望自己可以做到。

参考资料

原文地址:https://www.cnblogs.com/jsjliyang/p/9891449.html