提出问题
快速通读教材《构建之法》,并参照提问模板,提出5个问题。
如何提出有价值的问题? 请看这个文章:http://www.cnblogs.com/rocedu/p/5167941.html ,以及 在互联网时代如何提问题。 还有这些要点:
- 在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文
- 列出一些事例或资料,支持你的提问。
- 说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾?
一个模板可以是这样:
我看了这一段文字 (引用文字),有这个问题(提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。
或者这样:
我反对作者的观点(提出作者的观点,自己的观点,以及理由)。
大学生应该能写出自己的思考, 而不是摘抄书本内容。
提示:编程经验不多的同学,建议看16章 “创新”, 提出自己的问题。
问题一:
d. 进一步说,“覆盖率”有下面几个层次:
- 1.函数的覆盖,这个模块的每一个函数都覆盖了么?
- 2.语句的覆盖,这个模块的每一个语句都覆盖了么?
- 3.分支的覆盖,这个模块的每一个条件分支都覆盖了么?
- 4.条件的覆盖,这个模块的每一个布尔表达式的TURE|FALSE都覆盖了么?
在读2.1.2 好的单元测试的标准时,在P27中读到了上文,作者说代码覆盖率需要考虑到每个模块是否覆盖到了每个函数,是否覆盖到了每个语句,是否覆盖到了每个条件分支,是否覆盖到了每个布尔表达式的TURE|FALSE。但是在实际的软件工程中,在进行单元测试时,我们真的要保证有100%的代码覆盖率吗?是否只要保证了单元测试覆盖了所有的代码路径之后,像是语句覆盖之类的就可以不用全部代码覆盖了呢?就像如果出现了《100%代码覆盖率的悲剧》中提到的情况那样,某段代码功能看起来很简单,没有条件,没有循环,没有转换,没有任何复杂的东西,只是一段简单的老胶水代码。那么这时候我们也需要对它们进行代码覆盖,进行测试吗?这类的代码我们是否也要对它们保证完全覆盖呢?
问题二:
在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。
在读4.5.2 为什么要结对编程时,在P85页读到了上文的内容,作者说两人结对编程时,程序的质量将取决于水平较高的一位,也就是说在编程过程中是由水平较高的程序员作为主导。但是这样的话,在进行编程的过程中,是否会出现水平较高的程序员长时间的掌控着键盘,而水平较低的程序员是否也会觉得由水平高的写代码能够更好地完成项目或者课设,然后自己基本上没有做什么核心任务这种情况呢?那么到项目结束时,就会出现不会的人还是不会,会的人更加会了的情况。像这样的情况在我们的课设中也是可以看到的。如果我们想要避免出现这样的情况,那么在编程初期我们应该怎么样分配工作才能够保证即有质有量地完成编程任务,不会出现代码来不及写的情况,又能够让两个人都能够都参与到主要代码的编程中?怎么样的工作量才能够让结对编程的两个人都能够有所收获呢?
问题三:
得到了需求之后,软件团队就要考虑实现这些需求。一个公司可能有多种软件产品和服务,它们各有不同的战略意义。一个软件或服务也由很多功能组成,它们有机地结合起来,才能解决用户的问题,产生效益。
在读8.5 功能的定位和优先级时,在P171页读到了上文的内容,作者说开发一款软件需要在需求分析时将所收集到的用户的需求按照不同的着重点来开发不同的功能。但是我们要如何来确定每项功能的优先级呢,如何确定那种功能是这款软件的杀手功能呢?是根据市场上其他软件的使用情况来决定,还是根据对目标人群的调查来决定?而且根据书上P174—P175中的三幅图来看,我们是不是不仅仅要将杀手功能决定好定位,并做好它,还需要在这基础上添加一些市面上同款软件没有的功能呢?就像我们在去餐厅就餐时,如果有一家餐厅卫生又好吃,还不时有些小活动,我们一般都爱去那吃,那么在开发软件上也应该要做到这样的吧,这样才能够产生效益。
问题四:
好的用户体验当然是所有人都想要的,如果它和产品的质量有冲突,怎么办?牺牲质量去追求用户体验么,用户能接受吗?
在读12.1.6 用户体验和质量时,在P269页读到了上文的内容。确实,在开发软件时或者是更新软件时,难免会遇到上述的情况。如果用户的需求,用户的体验和我们的优化的功能或者软件起冲突了,那么我们是该顾着用户的需求呢,还是继续推出优化软件?作者在这段话后面引用了一个案例来说明了作者自己的答案,但是似乎太片面了,并不是所有的情况都可以是顾用户的需求,舍功能的优化的。并且当两者利弊都差不多时,我们该怎么选择呢?是否能有个准则来让我们衡量呢?
问题五:
可以看出,在算法和数据库领域,创新的想法一开始往往不被接受,而那些建立在前人基础上的“线性扩展”则往往有着更好的命运。
在读16.1.2 迷思之二:大家都喜欢创新时,在P349-P350页读到了上文的内容,结合前文的内容,不难看出作者认为更新升级往往比起创新更容易让人们接受。确实,就像是如果你还不容易学会了某种常用的编程语言,例如C语言,java等,结果一段时间后,开始使用某种新的编程语言进行编程了,又只能从头学起了,这样的话,确实只是更新会比创新更让人接受。但是,如果仅仅只是更新换代,不进行技术的创新的话,那么科技的发展就只能停留不前了。我们现在的社会不也是一步步从原来的创新中建立起来的吗?如果我们否定了创新,那么我们是不是也否定了现在呢?那么我们该如何打破人们对于创新的偏见呢?
【附加题】:请将问题提交至豆瓣:https://book.douban.com/subject/27069503/, 并在博客中给出链接
在豆瓣页面的最下方 “读书笔记” 那里发言, 《构建之法》的作者会亲自答复问题