现代软件工程 第四章 练习与讨论

4.7.1  结对项目的案例和论文

在现代软件工程教学的过程中,同学们已经总结了不少切身体会。例如:

总结1[i]:
那是project到了比较关键的创造阶段,整整一天,我们俩椅子靠椅子的坐在电脑前,一边讨论一般coding,那次才真正的体会到结对真的能够带来效率。一整天的coding是容易走神的事,还好有pair在旁边指导,总是不断在我敲某某变量之前提前告诉我成员变量的名字,数据修改时帮忙检查是否有漏掉的,变量和函数定义的时候一起为其取名字,感觉有点眼花了,就换了个角色,我也开始对他“指指点点”了,一个人coding,一个人review,确实能减少一些不必要的错误,减少一些漏洞,算法实现后一起做些简单的测试,看到bug了再一起分析,我能明显的感觉到与以前的个人编程不一样,我们能比较快的找到bug初始点,并能提出比较的修改方法。特别是当看到功能进一步实现时,心里确实挺happy,更重要的这份感受有同伴与你一起分享。

总结2[ii]:
于是我们进行了项目中最关键的一次Pair Programming,我们利用编译课上机时间,在机房里Pair完成了整个项目的类的设计与程序结构的设计。我们一起分析出类,然后找属性,写方法头,开始是WG用键盘,后来我用。一个明显的好处是,写完一条自己不确定的语句,马上可以跟Pair一起缕一缕思路。一下午下来,感觉甚为清爽,因为终于清楚这个项目的做法了。

学术界、工业界对结对编程已经有不少研究,请阅读至少两篇相关论文或论文[iii]。

4.7.2  性格对合作的影响

人和人不一样,在和别人合作的时候,要注意各人表达观点的方式和思考的方式不尽相同。请看网上关于MBTI的文章[iv],测试并分享各自的MBTI类型,讨论不同性格类型对合作有多大的影响, 在合作的各个阶段应该如何应对[v]。

4.7.3  是否需要有代码规范

对于是否需要有代码规范[vi],请考虑下列论点并反驳/支持:

  1. 这些规范都是官僚制度下产生的浪费大家的编程时间、影响人们开发效率, 浪费时间的东西。
  2. 我是个艺术家,手艺人,我有自己的规范和原则。
  3. 规范不能强求一律,应该允许很多例外。
  4. 我擅长制定编码规范,你们听我的就好了。

4.7.4  代码复审的讨论

小飞: 哇,这么多酷的C++ 功能都不能用,那我们还学什么C++,为了迎接考试,我都把Operator Overload、Polymorphism背得滚瓜烂熟了,为什么不让我用?

阿超: 我们写程序是为了解决问题,不是“为赋新词强说愁”,这些高级的语言特性,不是不让用,而是要用得慎重,不要动不动就写三五个类,一个套一个,要把注意力集中在能否用简洁的方法解决问题上来。

小飞: 这么多规范,我不知道怎么写第一行程序了。

阿超: 自我复审也很重要——把代码摆在面前,当作是别的菜鸟写的。把你通常问别人的,以及别人会问你的问题都自己问一遍。这样就能发现不少问题。

小飞: 如果开发者很厉害,那么复审者就没有什么作用,也许这些复审都是走过场?

阿超: 同理可以推论,如果开发者很厉害,那么测试人员也没什么作用,也是走过场,干脆把他们送回家得了。我们敢这样做么?

小飞: 这些规范啊, 建议啊, 都是细枝末节的东西, 我们要做世界级的软件,搞这些东西是不是太小家子气了?

阿超: 首先世界级的软件也会因为小小的纰漏而导致世界级的问题。例如我们常常听到的安全漏洞和紧急补丁。其次,软件的开发是一个社会性的活动, 有它的规律。其中一个规律就是“破窗效应”(broken windows theory)[vii][YEKA1] [XZ2] ,如果团队成员看到同伴们连一些细小的规范都不遵守,那自己还要严格执行单元测试么?另一个成员看到这个模块连单元测试都没有,那他自己也随意修改算了。这样下去,整个软件的质量可想而知。


[i]      参见:http://www.cnblogs.com/ustc_msra_ase/archive/2010/11/28/1890424.html

[ii]      参见:http://www.cnblogs.com/xinz/archive/2010/11/27/1889978.html

[iii]     参见:http://c2.com/cgi/wiki?PairProgrammingCaseStudy 以及 http://www.thefreelibrary.com/Case+study%3a+using+pair+programming+in+development+of+a+complex+module.-a0246014267 以及 http://www.cs.utexas.edu/users/mckinley/305j/pair-hcs-2006.pdf

[iv]     请看: http://en.wikipedia.org/wiki/Myers-Briggs_Type_Indicator

[v]     另外请参见 《对性格内向者的10个误解》: http://blog.jobbole.com/12488/

[vi]     参见:http://www.vaikan.com/the-conventions-we-follow/   
http://www.aqee.net/things-everyone-should-do-code-review/
http://scientopia.org/blogs/goodmath/2011/07/14/stuff-everyone-should-do-part-2-coding-standards/

[vii]     参见:http://en.wikipedia.org/wiki/Broken_windows_theory


[YEKA1]上一章已经给出了注释,此处删去注释?

[XZ2]都挪走

现代软件工程 第四章 练习与讨论

时间: 2024-10-07 01:13:14

现代软件工程 第四章 练习与讨论的相关文章

现代软件工程 第十四章 练习与讨论

15.3.1 有些成功人士或公司认为不需要独立的测试角色(Test),你怎么看? 我猜想和踢足球类似,还是那几个原因: 人太牛: 不世出的天才,例如高德纳写书时发现排版软件不好用,就自己写了一个.也没听说他为这个软件项目请了什么独立测试人员.对了,他不读Email,有秘书帮他处理这些事——这也是一种分工! 有些软件工程师是在后台钻研和开发高难度的算法,或者做某种后台的处理工作,这个工作本身的难度较高,测试主要是自己通过工具完成.如果一定要找一个测试人员,这个测试人员的水平要相当高才行,如果水平那

现代软件工程 第十三章 练习与讨论

13.5.2  有错不改 果冻: 微软的产品经过这么多版本的不断完善,应该是把所有问题都搞定,“止于至善”了吧? 阿超: 那也不一定,在非常有名的电子表格软件Excel中,就有这样一个Bug:Excel 的日期计算功能认为1900年是一个闰年,这是不对的,但是它愣是一直没有改正这个错误. 众人: 真的?为什么屡教不改呢? 阿超: 故事是这样的,当时这类电子表格软件的市场领头羊是Lotus 1-2-3这一款软件.它的日期计算功能有一个Bug,就是把1900年当作闰年.这类软件在内部把日期保存为“从

现代软件工程 第七章 练习与讨论

7.7  移山开发方法——比TFS敏捷更精简 几个软件学院的学生来请教阿超,同学们自豪地说,我们要用全套TFS敏捷开发模式开发项目! 真的?阿超不敢相信. 同学: 对!我们要用全5个工作项类型 – 任务.缺陷.场景.风险.服务质量需求. 阿超: 你们有多少实战项目的经验?哦,都没有.这么说这是你们第一个真正的实用项目,我建议你们先忘记这么多工作项类型,把时间花在写代码上好了. 同学: 可是老师要我们上敏捷开发模式呀? 阿超: 当敏捷模式变成强迫,那还能敏捷到哪儿去呢?如果你们非用不可,我建议你们

现代软件工程 第六章 练习与讨论

6.3.1  什么时候适合选择敏捷 我们看了这么多方法论之后,一些同学一定比较困惑,到底选择哪一种开发方法比较好呢? 这在实践中不是难题,有学者还列出了一些简单的问题来帮助人们做决定[i]: 表6-3 问题引出方法 问题 Yes – 偏向传统的瀑布+文档的流程 No –   偏向敏捷流程 1. 项目需要有明确的spec 么? 2. 项目没有明确的用户,也无法联系用户进行沟通 3. 软件系统是大型的么? 4. 软件系统是复杂的么?例如实时系统 5. 软件的生命周期很长么? 6. 你使用比较差的软件

现代软件工程 第五章 练习与讨论

团队模式和团队的开发模式有什么关系? 如果你领头开展一个全新的项目,你要怎么选择“合适”的团队模式? 不同的团队模式如何影响团队绩效的评估? 团队精神和集体主义的区别?     大家回想在小学和中学的学习过程,大家在一个班集体,有多少工作是以“团队”(Teamwork)的形式来完成的,有多少工作是以“工作组”(Workgroup)形式完成的?或许大部分工作都是以“非团队”的形式完成的.“团队精神”和平常讲的“集体主义”有什么区别? 现代软件工程 第五章 练习与讨论

现代软件工程 第三章 练习与讨论

1  选哪一种医生? 作为一个软件工程师, 你觉得自己表现如何? 有没有这样的体会: 看书的时候觉得“技止此耳”,开发项目的时候才觉得实际情况和书上讲的都有一些出入,一些重要的细节书上没有提.我们很多人是边看Asp.net的书, 边开发Asp.net 的项目,这相当于一边看医学书一边动手术…… 如果你是病人,你希望你的医生是下面的哪一种呢? a)     刚刚在书上看到你的病例, 开刀的过程中非常认真严谨, 时不时还要停下来翻书看看…… b)    富有创新意识, 开刀时突然想到一个新技术. 新

现代软件工程 第十一章 练习与讨论

1  如何避免在产品开发后期不断有重大修改,导致其它模块的连锁反应? DCR Tell mode vs. Ask mode设计变更 在项目早期,如果大家觉得要做一个设计变更,便可以采用告知模式(Tell-mode)的形式,也就是说,修改方必须通告所有关系人:“我在这里修改了某某界面, 我在某个API 增加了一个参数.”但是修改方不必取得其他关系人(或者模块)的事先同意,就是说可以先行设计并编码.当然,如果其他关系人不同意,修改还是不能签入. 当项目进行到稳定阶段,例如达到了代码完成(CC)阶段,

软件工程—第四章

第四章—需求工程 软件需求是决定软件开发是否成功的一个关键性因素,可以划分为业务需求.用户需求.系统需求.功能需求和非功能需求等类型.业务需求包含:业务.客户.特性.价值和优先级.用户需求是从用户的角度描述系统功能需求和非功能需求.功能需求描述系统应该提供的功能和服务.非功能需求还可以分为很多类型.系统需求则详细的描述系统应该做什么. 需求工程的过程包括需求获取.分析.规格说明.验证和管理等.首先,需求获取的是对客户需求的普遍理解,然后对收集到的需求进行提炼.分析和认真审查即需求分析,需求规格说

现代软件工程 第四章 【结对编程】练习与讨论

4.7.2  性格对合作的影响 人和人不一样,在和别人合作的时候,要注意各人表达观点的方式和思考的方式不尽相同.请看网上关于MBTI的文章,测试并分享各自的MBTI类型,讨论不同性格类型对合作有多大的影响, 在合作的各个阶段应该如何应对. ISTJ 安静.严肃,通过全面性和可靠性获得成功.实际,有责任感.决定有逻辑性,并一步步地朝着目标前进,不易分心.喜欢将工作.家庭和生活都安排得井井有条.重视传统和忠诚. ISFJ 安静.友好.有责任感和良知.坚定地致力于完成他们的义务.全面.勤勉.精确,忠诚