软工[I.1] 个人作业:阅读和提问
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2025年春季软件工程(罗杰、任健) |
这个作业的要求在哪里 | [I.1] 个人作业:阅读和提问 |
我在这个课程的目标是 | 掌握软件工程的基础知识,开发出一款功能完善,受人欢迎的软件 |
这个作业在哪个具体方面帮助我实现目标 | 从书中了解软件工程中测试,开发,团队分工等理论知识 |
问题一
在单元测试这一章节,作者提出“单元测试必须由最熟悉代码的人(程序的作者)来写”,“代码的作者最了解代码的目的、特点和实现的局限性。所以,写单元测试没有比作者更适合的人选了”这些观点。
我有一个问题,即单元测试由测试人员编写是否会更加有效。根据我的实践,在为自己的代码编写单元测试时,由于会由代码的编写思路入手制造测试用例,反而会忽略一些最初没有考虑到的特殊情况,导致测试效果较差。同时在Google、Microsoft等公司,存在专门负责测试的岗位,以提高测试的独立性和可靠性。因此我不认同作者单元测试必须由最熟悉代码的人(程序的作者)来写这一观点,在我看来,由测试人员编写单元测试是一种更加可行的策略,原因如下:
- 让代码作者编写测试确实更快,但容易有“盲区”,即忽略了自己代码中的潜在问题。
- 测试人员可能对代码的实现不太了解,但他们更关注程序行为是否符合预期,能站在用户或系统角度进行测试。
问题二
在讲义中,作者指出“冲刺阶段是时间驱动的 (time-boxed), 时间一到,就结束。这个特点看似不起眼, 其实它有效地给各种延期的想法断了后路,很高明。”
我的问题是,在Scrum的实践中,时间截止时强制终止Sprint是否是一种合理的做法。虽然Scrum指南强调Sprint不能延长,即便任务未完成,也应该在下一个Sprint中调整优先级并重新规划。但是在一些公司会根据实际情况调整Sprint长度,以适应项目需求。同时在具体实践中,曾经遇到过某个Sprint的任务即将完成,但由于突发问题导致延期,此时强制结束Sprint的做法导致团队士气受挫,觉得之前的努力被浪费了。
我的困惑是:如果关键任务未完成,是否可以在Sprint结束后单独设立“修正期”来完成,以应对某些突发情况,同时不影响下一轮Sprint?
问题三
在讲义中,作者指出“当你在项目后期发现了问题,问题的根源往往是项目早期的一些决定和设计,这时候,再要对其进行修改就比较困难了。这要求测试人员从项目开始就要积极介入,从源头防止问题的发生。”
我的问题是,如果测试需要在项目早期介入,测试人员如何制定测试方案,同时如果测试人员过早介入,是否会导致资源浪费。通过查询资料,我了解到,测试驱动开发(TDD)强调开发人员在编写功能代码之前先编写测试用例,这样测试实际上在项目开始时就已经介入,在Scrum框架下,测试人员在Sprint规划阶段就需要参与,并帮助制定验收标准。
但是在具体实践中,会遇到用户需求就经常发生改变的情况,此时在开发前就尝试编写测试用例会导致测试用例需要反复调整,造成大量浪费。
我的困惑是:
- 测试人员在项目初期应该具体做哪些工作,才能避免“无用功”,仅仅参与需求讨论是否足够?
- 是否所有类型的软件项目都适合“测试早期介入”?例如,在游戏开发项目中,需求可能变化较快,测试是否应该等功能稳定后再深入介入?
问题四
在讲义中,作者以“你姥姥的遥控器”为例,强调用户界面设计应该减少不必要的复杂性,使其更易于普通用户(尤其是老年用户)使用。、
我的问题是,书中给出的“极简遥控器”案例说明了减少按钮的好处,但实际产品往往不能仅依赖于极简设计,否则可能会牺牲部分功能,所以在保证功能完整的同时,如何有效简化用户界。通过查询资料,我了解到部分公司通过“隐藏复杂性”的方式优化用户体验,如iPhone控制中心提供最常用的功能,但完整设置仍然可以在“设置”应用中找到。但是在之前的项目开发中,我们尝试隐藏部分高级功能,简化界面。但最终用户反馈找不到需要的功能,导致使用体验较差。
我的困惑是:
- 如何确定哪些功能应该隐藏,哪些功能应该暴露?是否有量化的方法?
- 在设计软件时,如何平衡“新手友好”和“高级用户效率”之间的矛盾?
问题五
在讲义中,作者指出“但是针对整个项目的总测试计划(又叫测试总纲)要在计划阶段大致定下来,并指导所有测试工作的进行。”
我的问题是,测试计划是否可以完全在项目计划阶段就确定下来,如果可以,如何确定合理的测试计划。 通过查阅资料,我了解到测试计划需要随着项目的进展不断调整,特别是在敏捷开发模式下,测试计划是迭代和持续调整的,而不是一次性制定完成。同时在之前的课程项目中,我在最初阶段制定了测试计划,但在开发过程中遇到了需求变更,不得不调整测试策略。
我的困惑是:测试计划要指导所有测试工作,那么是否意味着它应该尽可能详细?如果项目需求发生变更,如何兼顾灵活性和计划性?
问题六
在讲义中,作者指出“PSP的目的是记录工程师如何实现需求的效率,可以帮助软件工程师提高开发效率、减少错误。”
我的问题是,PSP是否适合所有的工程师。通过查阅资料,我了解到PSP包含计划、设计、代码、测试等步骤,有助于开发者减少缺陷,提高开发效率。但是PSP的执行需要工程师输入数据, 记录工程师的各项活动,造成大量的额外记录工作,可能影响开发速度。
我的困惑是:PSP是否适合所有工程师?在敏捷开发环境中,它是否会与快速迭代冲突?