[I.1] 个人作业:阅读和提问
[I.1] 个人作业:阅读和提问
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2025年春季软件工程(罗杰、任健) |
这个作业的要求在哪里 | [I.1] 个人作业:阅读和提问 |
我在这个课程的目标是 | 学习软件工程的思想和方法,进行软件开发的实践 |
这个作业在哪个具体方面帮助我实现目标 | 了解软件工程的基本概念 |
问题1 如何理解软件工程中的Bug
讲义 1 软件工程概论中提到
软件的行为和用户的期望值不一样的话, 就叫bug
软件工程的一个重要任务就是要决定一个软件在什么时候能“足够好”, 没有严重的“bug”,可以发布。
在实际的使用过程中,用户可能在非预期的情况下使用软件,导致行为与期望不符。用户的个人经验和背景也会影响他们的期望。不同用户群体可能对同一功能有不同的预期。例如,习惯使用某个软件的用户可能会期望其他类似软件有相同的操作方式。如果新软件的行为不同,用户可能会认为这是bug,但实际上这只是设计选择的不同。
对于这些用户对于bug的看法,开发人员应该如何平衡用户的主观意见?
问题 2 单元测试是否应该追求覆盖率
讲义 2 开发技术 - 单元测试 & 回归测试中提到
单元测试应该覆盖所有代码路径,包括错误处理路径,为了保证单元测试的代码覆盖率,单元测试必须测试公开的和私有的函数/方法。
在开发的过程中,单元测试会占用许多的时间成本,很多开发团队要求单元测试高覆盖率。但在实际开发中,某些代码(如getter/setter)可能不值得测试,覆盖它们反而浪费成本。同时,单纯追求高覆盖率可能导致无意义的覆盖,即开发者编写大量低效的测试用例,只为了覆盖代码行,而不验证实际功能。例如,调用了某个方法但没有断言其结果,这样的测试虽然提高了覆盖率,却毫无意义。
在以上的情景下,单元测试的高覆盖率是否有意义?是否有更好的指标衡量测试结果?
问题 3 结对编程能否真正提高开发效率
讲义 3 结对编程和两人合作中提到
每人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。这样,程序中的错误就会少得多,程序的初始质量会高很多,这样会省下很多以后修改、测试的时间。
在结对编程的过程中,两人的技术水平可能存在差异,此时有可能出现强势者主导开发的现象,另一方参与度低,产生心理负担;同时,在产生意见分歧的时候,由于双方知识结构、开发习惯的差异,可能无法说服对方,从而导致开发停滞。
问题 4 开发团队中PM的职责是什么
讲义 5 项目经理 Program Manager中提到
软件开发团队的PM做开发和测试之外的所有事情
PM的工作范围可能覆盖开发和测试之外的大部分事务,比如任务分配、进度跟踪、风险管理等工作,有时甚至要包括客户沟通、需求收集等工作。这样做可以减少开发者的非技术性负担,让他们专注于编码。然而,如果PM缺乏技术背景,可能会在某些决策上不够准确,从而影响整个项目的推进。此外,如果PM同时负责市场、其他部门沟通等任务,是否会使PM的职责过于繁杂,降低团队的效率?
问题 5 敏捷开发中文档的必要性
软件工程 敏捷的酒后问答中提到
敏捷思潮的价值观:
Working software over comprehensive documentation
可用的软件 重于 完备的文档
在敏捷开发的过程中,主张以沟通为主,减少需求分析、详细设计等文档的编写。然而,文档不足可能导致后期维护困难,新加入开发团队的成员难以充分了解整个项目;同时,软件交付后,用户也可能对文档有一定依赖。一个敏捷开发的团队如何平衡敏捷开发准则和对文档的需求?