zoukankan      html  css  js  c++  java
  • 构建之法阅读笔记02

    第2章 个人技术和流程

    2.1 单元测试

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

    2.1.1 用VSTS写单元测试

    2.1.2 好的单元测试的标准

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

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

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

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

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

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

    单元测试应该覆盖所有代码路径。

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

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

    2.1.3 回归测试

    针对一个Bug Fix,我们也要做Regression Test。目的是:

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

             2.同时要验证新的代码有没有破坏模块现有的功能,有没有Regression

    2.2 效能分析工具

    两种分析方法:

             1.抽样

             2.代码注入

    如果我们不经分析就盲目优化,也许会事倍功半。

    2.3 个人开发流程

    PSP2.1

    计划

      *估计这个任务需要多少时间

    开发

      *分析需求

      *生成设计文档

      *设计复审(和同事审核设计文档)

      *代码规范(为目前的开发制定合适的规范)

      *具体设计

      *具体编码

      *代码复审

      *测试(包括自测,修改代码,提交修改)

    记录用时

    测试报告

    计算工作量

    事后总结

    提出过程改进计划

    2.4 实践

    2.4.1 基本作业:从Hello World开始

    2.4.2 实践最简单的项目:WC

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

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

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

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

    2.4.2.1 WC项目要求

    程序处理用户需求的模式为:

             wc.exe[parament][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参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

    需求举例:

    wc.exe -s -a *.c

    返回当前目录及子目录中所有*.c文件的代码行数、空行数、注释行数。

    2.4.2.2 工作的细分

    罗马不是一天建成的。三个估计时间。

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

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

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

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

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

    2.4.2.4 标准测试集,正确性和速度评比

    记录实际时间和时间分配。

  • 相关阅读:
    Linux下Utuntu使用
    模拟退火算法
    五大常用算法:分治、动态规划、贪心、回溯和分支界定
    图像处理与机器视觉行业分析
    数字图像处理知识结构整理
    算法之美--读书笔记
    台湾大学林轩田和李宏毅机器学习课程
    下载SCI论文
    OpenCV机器学习库函数--SVM
    fmri的图像数据在matlab中显示,利用imagesc工具进行显示,自带数据集-by 西南大学xulei教授
  • 原文地址:https://www.cnblogs.com/cj-125/p/8301773.html
Copyright © 2011-2022 走看看