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

教材学习内容总结

  1. 再次强调一遍!!!

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

  2. 单元测试的功能是让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能够得到稳定、量化的保证。
  3. 好的单元测试的标准

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

    PSP2.1

    计划
    • 明确需求和其他相关因素,指明时间成本和依赖关系
    开发
    • 分析需求
    • 生成设计文档
    • 设计复审(和同事审核设计文档)
    • 代码规范
    • 具体设计
    • 具体编码(可以看到实际项目中,写代码占的比例很少)
    • 代码复审
    • 测试(包括自测、修改代码,提交修改)

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

  8. 软件设计的两个原则
    ①单一职责原则(Single Responsibility Principle,SRP)
    一个模块(类)应该只有一个导致它变化的原因,一个模块应该完全对某个功能负责。
    ②开放-封闭原则(Open-Close Principle,OCP)
    软件实体应该是可以扩展的,同时是不可修改的。

    • 允许扩展:当应用的需求发生改变时,我们可以对模块进行扩展,从而改变模块的功能。
    • 不允许修改:对模块行为进行扩展时,不必改变模块的本身。
  9. 扩展有数据方面、需求方面、用户方面、软件构建方面等各种类的扩展需求。

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

  • 问题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

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

参考资料

猜你喜欢

转载自www.cnblogs.com/jsjliyang/p/9891449.html
今日推荐