教材学习内容总结
- 再次强调一遍!!!
程序 = 数据结构 + 算法
软件 = 程序 + 软件工程
软件企业 = 软件 + 商业模式
- 单元测试的功能是让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能够得到稳定、量化的保证。
- 好的单元测试的标准
- 单元测试应该在最基本的功能 / 参数上验证程序的正确性
单元测试要测试API中的每一个方法及每一个参数。- 单元测试必须由最熟悉代码的人(程序的作者)来写
- 单元测试过后,机器状态保持不变
- 单元测试要快
一个测试的运行时间是几秒钟,而不是几分钟- 单元测试应该产生可重复、一致的结果
单元测试不能解决所有的问题,不必期望它能够发现所有的缺陷。- 独立性
单元测试的运行 / 通过 / 失败不依赖于别的测试,可以人为地构造数据(不是造假数据!!!!),以保持单元测试的独立性。- 单元测试应该覆盖所有代码路径
但是100%的代码覆盖率并不等同于100%的正确性!- 单元测试应该集成到自动测试的框架中
- 单元测试必须和产品代码一起保存和维护
- 回归测试建立在单元测试的基础上,“回归”在这里的意思可以理解为“回归到以前不正常的状态”,其实我觉得应该如此理解“之前出错的测试用例回归,验证新的代码已经进行了修正”。
- 效能分析一般的做法是先用抽样的方法找到效能瓶颈所在,然后对特定的模块用代码注入的方法进行详细分析。
- 在效能优化之前,如果不经实际结果分析就盲目优化,也许就会事倍功半。
- PSP
掌上游戏机个人软件开发流程(Personal Software Process)指导了一个软件工程师在接到一个任务之后应该怎么做。
PSP2.1
计划
- 明确需求和其他相关因素,指明时间成本和依赖关系
开发
- 分析需求
- 生成设计文档
- 设计复审(和同事审核设计文档)
- 代码规范
- 具体设计
- 具体编码(可以看到实际项目中,写代码占的比例很少)
- 代码复审
- 测试(包括自测、修改代码,提交修改)
记录用时
测试报告
计算工作量
事后总结
提出过程改进计划
- 软件设计的两个原则
①单一职责原则(Single Responsibility Principle,SRP)
一个模块(类)应该只有一个导致它变化的原因,一个模块应该完全对某个功能负责。
②开放-封闭原则(Open-Close Principle,OCP)
软件实体应该是可以扩展的,同时是不可修改的。
- 允许扩展:当应用的需求发生改变时,我们可以对模块进行扩展,从而改变模块的功能。
- 不允许修改:对模块行为进行扩展时,不必改变模块的本身。
- 扩展有数据方面、需求方面、用户方面、软件构建方面等各种类的扩展需求。
教材学习中的问题和解决过程
- 问题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 |
计划在本学期读完,希望自己可以做到。