第二章 个人技术和流程

2.1 单元测试

大部分软件是由多人合作完成,不同工作人员相互有依赖关系。例如,一个人负责的模块功能被别人调用。软件的很多错误都来源于程序员对模块功能的误解、疏忽或不了解模块的变化。怎样能让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证?单元测试是一个很有效的解决方法。

好的单元测试标准:a.单元测试应该在最基本的功能/参数上验证程序的正确性。

b.单元测试必须由最熟悉代码的人(程序的作者)来写。

            c.单元测试过后,机器状态保持不变。

            d.单元测试要快(一个测试的运行时间是几秒钟,而不是几分钟)。

            e.单元测试应该产生可重复、一致的结果。

            f.独立性——单元测试的运行/通过/失败不依赖于别的测试,可以人为构造数据,以保持单元测试的独立性。

            g.单元测试应该覆盖所有代码路径。(100%的代码覆盖率不等同于100%的正确性)

            h.单元测试应该集成到自动测试的框架中。

            i.单元测试必须和产品代码一起保存和维护。

针对一个Bug Fix(错误修正),要做Regression Test(回归测试)。目的是:

            a.验证新的代码的确改正了缺陷。

            b.同时要验证新的代码有没有破坏模块的现有功能,有没有Regression(“倒退”)。

2.2 效能分析工具

可以选择两种分析方法:a.抽样;b.代码注入。

要注意避免没有做分析就过早地进行“效能提高”。如果我们不经分析就盲目优化,也许会事倍功半。

2.3 个人开发流程

1.计划:估计这个任务需要多少时间

2.开发:a.需求分析b.生成设计文档c.设计复审(和同事审核设计文档)d.代码规范(为目前的开发制定合适的规范)e.具体设计f.具体编码g.代码复审h.测试(包括自测,修改代码,提交修改)

3.报告:a.测试报告b.计算工作量c.事后总结,并提出过程改进计划

2.4 实践

实践最简单的项目:WC

1. 实现一个简单而完整的软件工具(源程序特征统计程序)。

2. 进行单元测试、回归测试、效能测试,在实现上述程序的过程中使用相关的工具。

3. 进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间。

4. 使用项目管理系统,练习使用其中的事件跟踪系统。(选用TFS,Bugzilla或者Trac,了解原理) 

5.进行最简单的项目管理系统的定制

WC项目要求

程序处理用户需求的模式为:wc.exe[parameter][file_name]

各个参数的意义:

基本功能列表:wc.exe-c file.c:char count

            wc.exe-w file.c:word count

            wc.exe-l file.c:line count

拓展功能:-s 递归处理目录下符合条件的文件。

       -a 返回高级选项(代码行/空行/注释行)。

空行:全部是空格或格式控制符,如果包括代码,则只有不超过一个可显示的字符,例如“}”。

代码行:包括多于一个字符的代码。

注释行:不是代码行,并且包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:}//注释      在这种情况下,这一行属于注释行。

         [file_name]:文件或目录名,可以处理一般通配符。

         文本文件,确定字/词/句。

高级功能:-x参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

如何保证质量——回归测试

1.手动测试,手工比较。

     2.要做到不断地测试,可以把WC的主要功能封装成一个类,然后测试程序调用这个类的主要函数,得出结果并与标准做比较。

     3.更进一步,把测试文件和正确的测试结果保存在文件中,测试驱动程序只要比较测试的输出和标准结果就能得出答案。

     4.再进一步,把自动构建脚本和构建验证测试结合起来。每一次构建之后,就自动运行测试,然后记录出现的Bug。

时间: 2024-11-25 07:42:09

第二章 个人技术和流程的相关文章

构建之法(第二章个人技术和流程)

在第二章的学习之中,了解到第二章主要讲:单元测试,回归测试,效能分析,个人软件开发流程(PSP) 1.单元测试 软件是由多人合作完成的,不同的工作有相互依赖的关系.单元测试应该准确,快速地保证程序基本模块的正确性. 单元测试好坏的标准如下: 1.单元测试应该在最低功能/参数上验证程序的正确性.        2.单元测试必须由最熟悉代码的人(程序的作者)来写        3.单元测试后,机器状态保持不变        4.单元测试要快(一个测试的运行时间是几秒钟,而不是几分钟)       

构建之法第二章个人技术和流程

如果说第一章我还有点概念,那么第二章我可以说一窍不通,什么是VSTS,什么是单元测试,什么是回归测试,还是什么是效能分析--好多的新名称,第一次看见,是那么的没有头绪.要不是百度了,仅仅看书,我完全不知VSTS--Visual Studio Team System,是由微软开发的一套具有高生产力.高集成性.可扩展的生命周期开发工具. 2.1.1节图文并茂的告诉我,单元测试重要作用,可能是自己的能力不足,相关知识了解的太少了,一边看还一边想,单元测试怎么写?写在哪里?什么时候写?就算是按照书本上的

构建之法 第二章 个人技术和流程

这一章重点介绍的是以前了解过但未曾注重过的单元测试&回归测试:个人技术素养是团队协作的基础. 1.VSTS单元测试 源代码 public Class User() { public User(string userEmail) { memail = userEmail; } private string memail;//private变量拒绝外部类访问(除非用get/set方法) } 测试代码1 public void ConstructorTest() { string userEmail

第二章个人技术和流程课后题

1.软件工程和程序设计大调查 专业         用时                代码                用工具 16计本     两天                500行             Java c语言 16数本     两天                200行             SQ  c语言 说明软件开发是一项繁重的工作,一个人做的话需要耗费大量时间经历,所以需要团队合作,不同的人有不同的想法,开发需要顾虑到每个人的想法,因此团队配合很重要,整合意

《Getting Started with WebRTC》第二章 WebRTC技术介绍

本章作WebRTC的技术介绍,主要讲以下的概念: .  如何建立P2P的通信 .  有效的信令选项 .  关键API的关系 2.1 设置通信 尽管WebRTC通信的基础是P2P的, 但设置这个通信的初始步骤是要求一些协作的. 这些动作通常由Web服务器和/或信令服务器提供. 这个协作可以允许两个或多个WebRTC设备或端找到彼此,交换通信的细节, 协商定义了他们如何通信的会话, 最后建立它们之间的直播P2P媒体流. 2.2 一般流程 应用场景其实是很多的,从简单的页面DEMO到多方会议. 这里只

【带你从零开始,开发一个阅读站】第二章,技术选型

首先,上图展示的是项目的部署方式.用户通过手机访问上面的nignx,即应用nignx将请求分发到三台web服务器中,服务器将从redis缓存里获取热点数据,如过期或者非热点数据则从数据库中获取并同步到redis.此过期时间设定为12小时.另外数据库和redis未保存正文内容.当用户读取正文内容时,服务器读取文件,并在前端页面做展示. 其次,图片是另外一组服务器.同样图片也做热点缓存,只不过缓存在本地内存.这里的热点数据即首页展示的50本书籍,并且会一天清理一次热点图片. 另外需要注意的是,本项目

【构建之法】第2章 个人技术和流程

1 单元测试 (1) 单元测试 (2) 回归测试 回退操作 2 效能分析工具 先用抽样的方法找到效能瓶颈所在,然后对特定的模块用代码注入的方法进行详细分析 3 个人开发流程 (1) 计划 明确需求和其他相关因素,指明时间成本和依赖关系 分析需求 生成设计文档 设计复审(和同事审核设计文档) 代码规范(为目前的开发定制合适的规范) 具体设计 具体编码 代码复审 测试(包括自测,修改代码,提交修改) 记录用时 测试报告 计算工作量 事后总结 提出过程改进计划 一个模块(类)应该只有一个导致它变化的原

现代软件工程 练习与讨论 第二章 个人技术

1. (1)要找满足在2-31中,只有两个相邻的数不是的它的约数的数. (2)不存在 (3)2147483648 (4)并行优化最外层循环 2. 花2到3周完成,代码量几百行到几千行不等,很少有人使用代码管理工具,大部分是合作完成.程序的实用性较差,也不维护.版本少说明很多人实际上并没有自己完成作业.

构建之法(概论,个人技术和流程)

构建之法这本书第一章给我们讲述了软件以及软件工程的含义. 软件=程序+软件工程.书中用编写出加减法题目的程序的例子生动形象的说明了程序,软件,工程之间的关系,以及软件工程的一些概念.程序,在这里指的是源程序,就是一行行的代码.他们是建立在数据结构上的一些算法.但软件工程的内容远不止这些.软件工程的核心部分包括和软件开发活动(构建管理.源代码管理.软件设计.软件测试.项目管理)相关的内容.广义上的软件工程也包括用户体验.用户界面设计等.所以,一个推论是:软件=程序+软件工程,一个扩展的推论是:软件