2023北航软工第一次作业-阅读提问

文章讨论了单元测试的局限性,提出对于复杂逻辑判断的测试需求;对“精通”的定义提出疑问,认为熟练度和思维能力应并重;分析结对编程的挑战,寻求更有效的错误发现策略;探讨团队中如何根据成员能力和心态分配任务;最后,思考创新来源于开发者还是用户的问题,指出两种创新模式的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目

内容

这个作业属于哪个课程

2023北航软工

这个作业的要求在哪里

https://bbs.youkuaiyun.com/topics/613531493

我在这个课程的目标是

学习软件工程相关理论,并开发一个自己的软件

这个作业在哪个具体方面帮助我实现目标

了解了软件工程的基本理论,并引发我进一步思考

阅读提问


问题1:关于单元测试的局限性:是否有更好的测试方法?

在单元测试的这一章中,作者讲述了单元测试的必要性以及好的单元测试的标准。

但是我对此产生了疑问。首先,在我写程序的经历中,更多的错误发生在那些复杂的逻辑判断中,而不是最底层的函数/方法中(例如编译器的错误处理,其中有大量的特殊情况)。如果整个代码是一棵树,单元测试相当于只对叶结点进行了检查。然而,那些非叶结点更容易出现错误,这些错误无法在单元测试中被发现。而且,单元测试使用的是小样例,且不采用随机生成的方式,有时即使覆盖到了所有代码,也不能发现错误。此外,单元测试需要耗费大量精力,那么是否有更好的方法呢?

作者还提到了在其他地方采用随机化的测试,如果我们可以将出现错误的数据保存下来,那么为什么不在单元测试中也采用随机数据呢?

问题2:什么是精通?

在技能的反面这一章中,作者用c#编程和魔方两个例子来阐述“技能”与“解决问题”之间的关系。

我的看法和作者不同。我认为算法和语言是两个独立的东西。即使很熟悉某个算法,如果使用不熟悉的语言或者IDE,也会难以实现。同理,即使很熟悉语言,也不能现场发明出算法。魔方同理,有些人拧魔方的手速很快,而另一些人对魔方底层的数学研究深刻,这两个东西也是互相独立的,没有哪个在另一者之上。

这两者可以概括为熟练程度和思维能力。两者兼备肯定是最好的,但是并不是所有人都能做到。如果说思维能力更加重要,那么为什么面试官会去关心面试者的熟练程度呢?

究竟什么算精通?

问题3:在结对编程中,是否能够做到“任何一段代码都至少被两双眼睛看过,两个脑袋思考过”,并及时发现问题?

书中提到,结对编程能够进行不间断的复审,从而发现问题。以我个人的经历,我认为这其实很难做到。在ACM竞赛中,经常会遇到三个人同时debug一份代码,却迟迟找不出一个小bug的情况。这是因为我们在对代码进行debug的时候,很容易出现思维定势,并出现盲区。在结对编程时,有“驾驶员”和“领航员”两个角色,领航员需要更关注整体架构,如果还需要对每一行代码都认真看,肯定会很大的影响效率。

当然,结对编程跟单独编程相比还是有不少优势的,但是如何将这些优势体现出来并不容易。所以应该如何去做,才能及时发现对方代码中可能出现的错误?

问题4:团队中,如何根据成员不同的能力和心态分配角色和任务?

在团队这一章中,作者提到猪/鸡/鹦鹉三种心态以及PM/DEV/QA三种角色。在实际的开发过程中,每个人的能力水平和愿意投入的精力是不同的。而且团队许多成员之间都不太了解,在这种情况下,如何去分配任务等?以及是否需要一个领导者?

问题5:创新的根源,来自于开发者还是用户?

在创新这一章中,作者用了VCD和魔方的两个例子来说明创新的重要性。但是它们中间有一些差别。VCD的创新是开发者通过自己的思考,把一项不起眼的技术发展成的VCD。而魔方的创新中,开发者并没有对魔方结构本身进行创新,他通过猜到了用户的需求获得了成功。那么在实际开发中,应该用哪一种来主导创新呢?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值