个人作业-阅读和提问

项目内容
这个作业属于哪个课程2023年北航敏捷软件工程
这个作业的要求在哪里个人作业-阅读和提问
我在这个课程的目标是锻炼工程思维,提高开发能力
这个作业在哪个具体方面帮助我实现目标通过阅读《构建之法》,了解现代软件工程概况,掌握相关基本概念,并提出疑问

问题1:单元测试是否必须由程序的作者来写

不同意教材观点

原文内容

2.1.2 好的单元测试标准

单元测试必须由最熟悉代码的人(程序的作者)来写。

代码的作者最了解代码的目的、特点和实现的局限性。所以,写单元测试没有比作者更合适的人选了。

相关资料

参考了 https://zhuanlan.zhihu.com/p/580947398 中给出的论述。

开发人员(程序作者)做测试,优点是对代码熟悉,编程技能较强,测试效率高;缺点是需要花费大量时间,且个人的思维具有局限性,难以做到更全面的测试。

测试人员(非程序作者)做测试,优点是有比较系统的测试思想,能更好地保证用例的覆盖;缺点是编程技能较弱,且需要花时间熟悉代码。

个人理解和提问原因

在看到书中这段话时,我联想到了面向对象课下作业的自测与互测,我花了大概 60% 编码的时间来做课下测试,但是在互测时仍有被测出 bug。即使是一个几百行的小程序,程序作者都难以做到百分百覆盖的测试,而大型软件可能有几百万行代码,如果所有的代码都是作者自己测试,可能会存在较多的问题。

并且根据我个人的经验,自己写的代码总觉得是”完美“的,且编码已经耗费了很大一部分精力,于是在做测试时就会有一种惰性,可能会导致测试效率不高,覆盖率不够等问题。

因此我觉得书中的理念有点不合理,单元测试是否必须由程序的作者来写?是否应该由专门的测试人员来做?更进一步,是否应该让多名测试人员对同一代码分别单独进行测试?

问题2:结对编程是否能提高开发效率

不能给出回答

原文内容

4.5.2 为什么要结对编程

每人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。在结对编程中,因为有随时的复审的交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。这样,程序中的错误就会少很多,程序的初始质量会高很多,这样会省下很多以后修改、测试的时间。具体地说,结对编程有如下的好处:

  1. 在开发层次,结对编程能提供更好地设计质量和代码质量,两人合作解决问题的能力更强。两人合作,还有相互激励的作用,工程师看到别人的思路和创意,得到实时的讲解,受到激励,从而努力提高自己的水平,提出更多创意。
  2. 对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
  3. 在企业管理层次上,结对能更有效地交流,相互学习和传递经验分享知识,能更好地对应人员流动。

总之,如果运用得当,结对编程可以取得更高的投入产出比。

相关资料

来源于维基百科

虽然编码通常比一个程序员单独工作更快地完成,但是整体程序编写时间(程序员数目 × 花费的时间)增加了。管理者需要在工作更快的完成以及缩减测试和调试时间和更高的编码成本之间平衡。这些因素的相对权重在不同的项目、不同的任务之间也不同。对于那些程序员没有完全理解的任务上,程序员期待更多的创造性,挑战,以及高复杂度,此时使用结对编程最有帮助。在简单的,程序员都完全了解的任务上,结对编程导致生产力的净下降。

个人理解和提问原因

对于结对编程能否提高开发效率这个问题,书中并没有给出明确的结论,所以我提出这个疑问。如果结对编程能提高开发效率,是它的什么优势带来的?反之,如果不能,是什么问题导致的?

结对编程能够有效提升程序质量,减少修改和测试的时间,同时可以带来纪律和时间管理的提升,从这些角度来看,结对编程确实能提高开发效率,缩短时间。

但如上文资料中所说,虽然编码时间可能缩短了,但是投入的人员是原本的两倍,而如果两个人分别进行开发,投入时间相同时,总产出可能会更高。也就是说总开发任务量相同时,结对编程可能并不能减少开发时间。并且对于经验不足的人来说,在结对过程中需要有较长的磨合时间,花在交流上的时间会更多(比如需要更多的交流才能明白对方思想、对于编码的细节会有一些不必要的讨论等),这些因素都可能导致开发效率降低。

总之,我认为只有对于编程技能较强、有结对经验的程序员,且在追求质量而不是速度的开发任务中,结对编程才能更好的提高开发效率。

问题3:MVP 配合什么样的反馈收集方式最有效

不同意教材观点

原文内容

5.3.6 渐进交付的流程,MVP 和 MBP

具体的做法是:把产品最核心的功能用最小的成本实现出来(或者描绘出来),然后快速征求用户意见。例如,一个社交网站已经有很多用户,都是免费的,产品团队想设计一个付费的 VIP 服务,MVP 的做法可以是这样 —— 在目前的用户入口页面中加一个 “VIP服务” 的链接,指向一个简单的介绍页面(用最小成本做出来)。观察到底有多少用户点击这个链接。如果点击量太小,那么这个 VIP 服务就不用做了。

相关资料

闪送是限时送达的同城递送服务,采用 MVP 的方法,从第一次开立项会到服务上线,只花了一周的时间。闪送第一周上线的时候,只做了一个简单的 PC 端下单页面,没有 APP 和微信公众号。每完成一个订单后,会对用户进行回访,收集用户反馈,从而更加坚定了产品理念 —— 保证物品安全和时效。

个人理解和提问原因

在看到书上开发 VIP 服务的例子时,我感觉”统计点击量“这样的做法非常不合理。首先,如果我是该软件的用户,我看到新增这样一个链接时肯定会出于好奇点进去,但这并不能说明我需要这样一个功能。其次,这个 VIP 服务并没有真的实现,只有文字的说明,也就是说用户还没有体验这个功能,此时只收集点击量无法得到有效的反馈。

收集无效的反馈并不能有效改进产品,因此我想知道哪些反馈收集方式更适合 MVP,什么样的方式是最有效的。

闪送选择回访的方式收集用户反馈,类似于需求分析中深入面谈的模式,能广泛而深入收集信息,这对于 MVP 的升级迭代是非常有用的。而像社交网站这样已经有大量用户的软件,深入访谈的效率不高,此时可以制定详细的调查问卷,显然比统计点击量要全面很多。

问题4:在软工课程中最好有人专门做 PM 吗

不能给出回答

原文内容

9.3 PM 做开发和测试之外的所有事情

在一个项目中,PM 的具体任务是什么呢?他们的任务是:

  1. 带领团队形成团队的目标/远景,把抽象的目标转化为可执行的、具体的、优美的设计;
  2. 管理软件的具体功能的生命周期(需求/设想/设计/实现/测试/修改/发布/升级/迁移/淘汰);

……

  1. 收集团队项目管理和软件工程的各种数据,客观分析项目实施过程中的优缺点,推动项目成员持续改进,从而提振士气

相关资料

参考了往届部分团队的博客,发现团队里基本上都有人专门负责 PM 和文档。

个人理解和提问原因

根据书中的描述,我感觉 PM 是一个相当重要的角色,最好有人能专门去做(“PM 做开发和测试之外的所有事情”)。但对于大部分同学们来说,正式的开发经验都非常少,更别说有机会做过 PM。如果有个同学专门做 PM 的话(不做开发),可能存在一些问题,比如领导力不足,工作量不平均等。因此我想知道,是否让做开发的同学兼职 PM 会更好,以及是否需要多名 PM 来协调整个团队。

问题5:压力测试时如何调整系统资源,一定要减少吗

不能给出回答

原文内容

13.2.9 压力测试

与此同时,可以减少系统可用的资源来增加压力。

注意,压力测试的重点是验证程序不崩溃或产生副作用。即看看在超负载的情况下,我们的程序是否仍能正确地运行,而不会死机。

相关资料

软件压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。

个人理解和提问原因

根据书上内容,可以得出压力测试主要有两方面,一是过量增加负载,二是减少系统资源。容易理解,减少系统资源是为了额外增加压力,更快地暴露软件问题。但是我觉得减少系统资源可能会导致以下三个问题:

  • 不同资源间分配不均。比如在内存还没有占用满时,磁盘 IO 已经不堪重负,万一程序存在内存泄漏的问题,就会因为磁盘资源不足的问题而无法发现。
  • 难以定位软件还是硬件问题。比如当内存不足时,该如何确定是软件导致的内存泄漏,还是内存的容量不足以进行这样的压力测试?
  • 损伤硬件。如果硬件长时间高负载运行,可能会造成不可逆的损伤。

因此我想知道应该如何更好地控制和调整系统资源的数量?一定需要减少资源来增加压力吗?哪些情况可以增加资源数量?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值