为何软件工程教科书上的内容和现实的软件项目之间存在着必定差别?

前些天,有位同窗软件工程课的做业上,对于读完《构建之法》以后问了几个问题,其中两个问题我印象比较深入:一个问题是关于单元测试的,是否是必须全部分支,覆盖率达到100%;另外一个问题是关于如何结对编程的。html

在读2.1.2 好的单元测试的标准时,在P27中读到了上文,做者说代码覆盖率须要考虑到每一个模块是否覆盖到了每一个函数,是否覆盖到了每一个语句,是否覆盖到了每一个条件分支,是否覆盖到了每一个布尔表达式的TURE|FALSE。可是在实际的软件工程中,在进行单元测试时,咱们真的要保证有100%的代码覆盖率吗?是否只要保证了单元测试覆盖了全部的代码路径以后,像是语句覆盖之类的就能够不用所有代码覆盖了呢?就像若是出现了《100%代码覆盖率的悲剧》中提到的状况那样,某段代码功能看起来很简单,没有条件,没有循环,没有转换,没有任何复杂的东西,只是一段简单的老胶水代码。那么这时候咱们也须要对它们进行代码覆盖,进行测试吗?这类的代码咱们是否也要对它们保证彻底覆盖呢?程序员

在读4.5.2 为何要结对编程时,在P85页读到了上文的内容,做者说两人结对编程时,程序的质量将取决于水平较高的一位,也就是说在编程过程当中是由水平较高的程序员做为主导。可是这样的话,在进行编程的过程当中,是否会出现水平较高的程序员长时间的掌控着键盘,而水平较低的程序员是否也会以为由水平高的写代码可以更好地完成项目或者课设,而后本身基本上没有作什么核心任务这种状况呢?那么到项目结束时,就会出现不会的人仍是不会,会的人更加会了的状况。像这样的状况在咱们的课设中也是能够看到的。若是咱们想要避免出现这样的状况,那么在编程初期咱们应该怎么样分配工做才可以保证即有质有量地完成编程任务,不会出现代码来不及写的状况,又可以让两我的都可以都参与到主要代码的编程中?怎么样的工做量才可以让结对编程的两我的都可以有所收获呢?编程

我上学时也有过相似的困惑。当年由于自学了一些编程技术,因此有机会在学校的网络中心兼职,负责维护、改版学校的网站。平常的网站开发,也没有用啥软件项目管理知识,纯粹就是小做坊式开发,毕竟网站也不算复杂,也还运行的不错。网络

大三的时候我和另外一个兼职的同窗都转到软件学院去了,第一学期学的就是软件工程,一学期课程上完,以为软件工程讲的太好了,之前的作法简直是土到家了,一点不科学。恰逢网站要改版,和同窗一商量,都以为项目开发,要文档先行,必定要按照软件项目管理的流程,先把需求分析文档、设计文档写好,再着手开发!函数

关于文档的重要性那是记得倒背如流,毕竟考试前刚背过,可是对于如何写需求分析文档和设计文档,倒是两眼一抹黑,那时候网上资源也不算太丰富,源代码处处都是,恰恰文档找不到能够借鉴参考的,因而成天都在琢磨如何写文档。结果到咱们毕业的时候,文档也没憋出来,那次网站改版也宣告流产了!单元测试

这让我对软件工程产生了怀疑,为何我按照软件工程讲的反而作不出项目来了?学习

随着时间推移,项目经验的丰富,已经把这事都快忘记了,这两个问题却是让我又有机会去反思一下:为何实际的项目和书本的介绍老是会有些出入?彻底按照书本去作有时候反而画虎不成反类犬?测试

若是只看单元测试问题:网站

  • 单元测试,重要吗?
    固然重要!
  • 单元测试覆盖率100%好很差?
    固然好!
  • 既然如此咱们之后项目必需要单元测试,全部代码分支的覆盖率必须100%
    这样的规定就有问题了,由于它只是孤立的考虑了单元测试的重要性,而忽略了它对时间和成本的影响,也忽视了不一样项目对单元测试要求的差别性。

单元测试的目的是什么?保障代码质量。换个角度说,就是单元测试是保障代码质量的手段之一。再回想下软件项目管理里面的铁三角,四个要素:时间、范围、成本和质量之间是相互影响和制约的。
设计

单元测试写得好,能够提升代码质量,可是须要更多的时间和成本,到底要把单元测试写到什么程度,彻底取决于要如何平衡这几个要素之间的关系。

一味的追求单元测试的覆盖率,就陷入了教条主义的陷阱,错把手段当目的!

再看结对编程和文档的例子,也是相似的问题,结对编程和写文档,都是提升项目质量能够应用的手段,但并非最终的目的。

在教科书上,各个章节都是相对独立的,都是一个个的知识点,而现实的软件项目是立体的,是须要将各个知识点组合在一块儿的。在学习这些知识点时,若是不能站在更高的角度去综合看待,而是孤立的只看这一个知识点,就容易陷入教条主义之中,错把手段当目的。

要对这类问题不困惑,总仍是离不开作中学(Learning by Doing),在实际的项目积累经验,对课本上理论知识进行印证。这样遇到各类不一样的项目场景的时候,能抓住重点和本质,采用适合的手段来达到项目的目标。Make it run, make it right, make it fast!

相关文章
相关标签/搜索