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

Moucong Moucong     2022-08-27     124

关键词:

这一章重点介绍的是以前了解过但未曾注重过的单元测试&回归测试;个人技术素养是团队协作的基础。

1.VSTS单元测试

  1. 源代码

    public Class User() { public User(string userEmail) { memail = userEmail; } private string memail;//private变量拒绝外部类访问(除非用get/set方法) }

  2. 测试代码1

    public void ConstructorTest() { string userEmail = "[email protected]"; User target = new User(userEmail); Assert.IsTrue(target != null);//测试制定条件为真时测试成功 } 测试E-mail是否确实保存在了User类中。关于Assert:在工程之中可以使用该类对特定的功能进行验证,单元测试方法执行开发代码中的方法代码,但只有包含该语句的时候才能报告代码行为方面的内容。

  3. 测试代码2

    [ExpectedException(typeof(ArgumentNullException))] public void ConstructorTestNull() { User target = new User(null); }

    [ExpectedException(typeof(ArgumentException))] public void ConstructorTestEmptty() { User target = new User(""); }

    [ExpectedException(typeof(ArgumentNullException))] public void ConstructorTestBlank() { User target = new User(" "); }

第三处测试的时候会出错。why?因为ArgumentNullException与ArgumentException是system中不同的类(参见https://msdn.microsoft.com/zh-cn/library/system.argumentnullexception(VS.80).aspx),前者是由于空参数传递给不接受它的方法中引发的异常,后者是由于向方法中提供的一个参数无效而引发的。

2.单元测试标准

  1. 单元测试的基础性:在最基本的功能之上进行测试,覆盖API中的每一个方法【个人认为这样应该是极大地刺激了代码的简洁性革命】但是100%的代码覆盖率并不等于100%的正确性
  2. 单元测试不受以前单元测试实例的干扰
  3. 某个单元测试的成功与否不依赖于别的测试
  4. 单元测试必须和产品代码一起保存和维护

3.回归测试(regression test)

在新版本上运行所有已经通过的测试用例,以验证是否有“退化”的情况发生。单元测试是回归测试的基础。

4.效能分析实践

  • 源代码(伪代码)

    //分析一个文本文件中各个词出现的概率,然后把出现频率最高的10个单词打印出来
    DoIt()
    {
        ProcessFile()
        ProcessBuffer()
        OutputResult()
    }
    ProcessBuffer()
    {
        GetOneWord()
        FreqOneWord()
    }
    FreqOneWord(word)
    {
        Find the word in the array list,
        if(found)
            Update the frequency
        if(not found)
            Add the word in the array list with frequency = 1
    }
    OutputResult()
    {
        Arraylist.Sort();
        Output Top 10 entry;
    }
    
  • step 1 进行分析方法的选择:抽样(sampling)or 代码注入(instrumentation)

【抽样】得到运行时间的函数分布的大致抽样,速度快但是不能得到精确数据;

【代码注入】将检测的代码注入每一个函数中,速度慢但是各个效能数据可以被精确测量

  • step 2 理解必要的名词:

【调用关系树(call tree)】从mainh函数开始,调用者与被调用者函数形成的树型关系

【消逝时间(elapsed time)】用户角度看程序运行所花的时间

【本函数时间(exclusive time)】所有在本函数花费的时间,不包括被调用者花费的时间

【应用程序时间(application time)】应用程序占用CPU的时间,不包括CPU在核心态时花费的时间

  • step 3 抽样分析(利用效能浏览器 Performance Explorer)

耗时最高的前三个函数:FreqOneWorld,EqualsHelper,ArrayList.get_Item

举例来说明耗时时间的长短:

for(i = 0;i<m_worldList.Count;i++)
{
    ......
}

验证表明,mworldList.Count被调用了1 600 000次以上。也就是说,如果将for循环中的mworldList.Count用一个变量代替,将极大地节省时间。

【一些寻常的习惯可能极大地拖慢程序代码的整体时间性能。效能分析是给我们一种“强迫式”改善思维方式的外力】

5.PSP

个人开发流程(personal software process)又叫PSP,是指导软件工程师进行开发的方法论;一般包括计划、开发(含测试)、报告。PSP目的是记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度。

【也就是说,PSP并不是万能的(事实上也不存在万能的方法论);只是在前人实践的基础上总结出的通用方法集】

 

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

如果说第一章我还有点概念,那么第二章我可以说一窍不通,什么是VSTS,什么是单元测试,什么是回归测试,还是什么是效能分析……好多的新名称,第一次看见,是那么的没有头绪。要不是百度了,仅仅看书,我完全不知VSTS... 查看详情

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

绝大部分软件都是由多人合作完成的,大家的工作相互有依赖关系。某人负责的模块的功能被其他人调用,但如何让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的... 查看详情

构建之法--第二篇

构建之法——第二章在这一周中,我计划学习了《构建之法》的第二章,我认为从第二章开始,才算真正进入到了这本书的主题。这一章讲到的是个人技术和流程。首先,个人技术是衡量你是否能成为一名合格的软件工程师。而... 查看详情

《构建之法》2

这周,我阅读了《构建之法》的第二章和第三章,了解了个人技术和流程,以及软件工程师的成长。团队是由个人组成的,想要组成团队,开始软件工程工作,首先得确保每个成员是一个合格的软件工程师。单元测试、回归测试... 查看详情

《构建之法》第二次随笔

...念和技术,即单元测试、回归测试和效能分析工具。书的第二章讲述了个人技术和流程,给我们着重介绍了PSP(个人软件开发流程)。  绝大部分 查看详情

构建之法——第二篇

...在,那么对于我们而言真正的软件工程包括什么呢?根据构建之法中的描述,软件工程包括了开发,运营,维护软件的过程中的很多技术,做法,习惯和思想。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发... 查看详情

构建之法第二章

构建之法第二章本章为个人技术和流程,主要介绍了单元测试、回归测试、效能分析和个人软件开发流程等内容。单元测试:如何能让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得... 查看详情

《构建之法》读书笔记二

 这周读了《构建之法》的第二章。第二章主要讲到了个人技术和流程。 软件是由多人合作完成的,不同人员的工作相互有依赖关系。一个团队需要一定的流程来管理开发活动,每个工程师在软件生命周期所做的工作也应... 查看详情

《构建之法(第三版)》第二章

第二章:个人技术和流程书本内容回顾概述一个团队需要一定的流程来管理开发活动,每个工程师在软件生命周期所做的工作也应该有一个流程,在这一章里会介绍PS(PersonalSoftwarePro-cess,个人软件开发流程)。单元测试单元测试... 查看详情

《构建之法》-第二周

第二章的主要内容是个人技术和流程,由单元测试和个人开发流程组成。 单元测试主要通过举了例子阐述了在多人合作的软件开发中,如何能让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模... 查看详情

读《构建之法》有感其三

最近开始读第二章——个人技术和流程了。对于开发软件的团队需要一顶的流程来管理开发活动,而对于团队的个人分子在软件生命周期所做的工作也有一个流程。好的单元测试的标准应该是在最基本的功能或者参数上验证程序... 查看详情

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

 一个成功的商业软件的发不可能是一个人单枪匹马做出来的,而是一个团队通力协作共同完成的。而团队并不能让每个人都了解你的程序,也不能让你了解每个人的程序。所以一个团队要想做出一款好的产品团队里的成员必... 查看详情

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

构建之法这本书第一章给我们讲述了软件以及软件工程的含义。软件=程序+软件工程。书中用编写出加减法题目的程序的例子生动形象的说明了程序,软件,工程之间的关系,以及软件工程的一些概念。程序,在这里指的是源程... 查看详情

《构建之法》第二次

  第二章讲的是个人技术和流程。绝大多数软件是由多人合作完成的。单元测试能够让自己负责的模块功能定义更加明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证。  创建一... 查看详情

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

1单元测试(1)单元测试(2)回归测试回退操作2效能分析工具先用抽样的方法找到效能瓶颈所在,然后对特定的模块用代码注入的方法进行详细分析3个人开发流程(1)计划明确需求和其他相关因素,指明时间成本和依赖关系分析需求生... 查看详情

《构建之法》——个人技术和流程

#一、单元测试单元测试的作用:让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证。##1.1好的单元测试的标准单元测试应该在最基本的功能/参数上验证程序的... 查看详情

构建之法阅读笔记02

这次阅读了构建之法第二章个人技术和流程,这一章重点讲解了单元测试、回归测试、效能分析、个人软件开发流程。软件是由多人合作完成的,不同人员的工作相互有依赖关系,单元测试就是一个很好的解决多人代码之间难以... 查看详情

构建之法之个人技术和流程重点介绍

 2.1单元测试软件是由多人合作完成的,不同人员的工作相互有依赖关系。例如,一个人写的模块被其他人写得模块调用。软件的很多错误都来源于程序员对模块功能的误解、疏忽或不了解模块的变化。如何能让自己负责的模... 查看详情