[I.1] 个人作业:阅读和提问

项目 内容
这个作业属于哪个课程 首页 - 2026年春季软件工程 - 北京航空航天大学 - 班级博客 - 博客园
这个作业的要求在哪里 [I.1] 个人作业:阅读和提问 - 作业 - 2026年春季软件工程 - 班级博客 - 博客园
我在这个课程的目标是 掌握软件工程的核心方法论与实践技巧,建立规范的软件研发思维,能独立完成从需求分析到软件发布的全流程开发,同时提升团队协作与项目管理能力
这个作业在哪个具体方面帮助我实现目标 通过泛读《构建之法》全书,梳理出自己对软件工程核心概念的困惑与思考,培养批判性阅读和有价值提问的能力,为后续深入学习软件工程的理论与实践打下基础

阅读提问

问题1:中小团队手工测试文档化的落地矛盾

引用原文:我看了第13章《软件测试》中13.4.1手工测试部分的这段文字:

九条:不就是这样一个简单的文件么,我自己不用写也可以记住。
阿超:好记性不如烂笔头,当测试矩阵有上百个可能的设置,产品又日趋复杂的时候,我们需要把一些手工测试结果记下来。另外,如果来了个新手接班,项目要移交给他 / 她,怎么办?

提出问题:在人数少于5人的微型研发团队中,产品迭代周期短、人手极度紧张,开发人员往往同时兼任测试工作,此时严格按照书中要求完成全量的手工测试文档编写,反而会占用大量核心开发迭代的时间。这种情况下,手工测试的文档化应该如何平衡“可追溯、可交接”的规范性,和微型团队“快迭代、轻流程”的实际需求?

资料与实践经验:我查阅了国内大量初创互联网团队的研发实践,发现多数10人以内的团队,仅会对核心流程的手工测试用例做极简文档记录,甚至很多团队仅靠测试人员的脑内记忆和即时沟通完成手工测试,仅在出现线上故障后才会补充对应的测试记录。而书中强调的完整手工测试文档模板,包含标题、详情、对象、步骤、修改记录等完整字段,在微型团队中几乎无法落地。

我的困惑:书中的手工测试规范,是否更适用于中大型、长周期的软件项目?对于微型团队、敏捷短迭代的场景,手工测试文档化的最低标准应该是什么?如何避免“为了文档而文档”的形式主义,同时又能保证测试工作的可交接、可追溯?


问题2:开发兼任测试/QA时,如何保证质量保障的独立性?

引用原文:我看了第14章《质量保障》中14.2节的这段文字:

软件测试(Test):运用一定的流程和工具,验证软件能实现预先设计的功能和特性,工作的流程和结果通常是可量化的。例如,测试用例、Bug、代码覆盖率……
软件质量保障工作(Quality Assurance):软件团队为了让软件达到事先定义的质量标准而进行的所有活动,包括测试工作。

提出问题:国内大量中小软件团队、高校课程项目组中,没有独立的测试/QA角色,通常是开发人员互相测试,甚至开发人员自己负责自己模块的测试与质量保障。这种情况下,是否必然会出现书中提到的“既然有专人负责,那我就不用负责了”的反面情况?以及开发人员天然的“我的代码没有问题”的思维盲区,该如何通过流程设计弥补,保证质量保障的有效性?

资料与实践经验:我参与过的数据库大作业项目,虽然数据库大作业主要考察数据库的应用,并没有Bug测试的要求,但我们希望做出一个可用的网站。过程中,我们没有设置独立的测试角色,都是组员交叉测试。实际执行中,交叉测试往往流于表面,只会关注功能是否跑通,深入的边界测试做的比较少,异常场景测试直接被忽略;而自己测试自己的代码,更是会下意识避开自己没考虑到的异常分支,最终导致代码写完后,出现大量低级Bug,修了很久才修好。同时我也了解到,很多创业公司的早期项目,都是“全栈开发+兼职测试”的模式,同样面临质量保障失效的问题。

我的困惑:书中强调独立测试角色的必要性,但现实中大量团队无法配置专职测试/QA,这种情况下,有没有轻量化的流程和制度,能让开发兼任测试/QA的模式,依然能实现有效的质量保障?如何避免开发人员既当“运动员”又当“裁判员”带来的质量风险?


问题3:跨界创新如何避免陷入“外行式伪创新”的陷阱?

引用原文:我看了第16章《IT行业的创新》中16.1.5迷思之五的这段文字:

统计数据表明,70%的创新者说,他们最成功的创新,是在他们的拿手领域之外发现的。
蒂姆·伯纳斯-李是一个物理学家,他在1989年3月提议,想利用超文本实现方便的信息共享和更新……他和同事们实现了通过互联网的HTTP协议通信,WWW就这样诞生了。

提出问题:书中强调非本领域专家也能做出颠覆性创新,但现实中大量跨界者的创新,都因为缺乏对领域的基础认知,变成了不切实际的“伪创新”。那么非领域专家的跨界创新,该如何平衡“跳出行业固化思维的想象力”和“领域内的专业约束与客观规律”?如何区分“颠覆性创新”和“外行的想当然”?

资料与实践经验:我看到过大量互联网行业的跨界创业失败案例:比如传统行业的从业者跨界做线上SaaS产品,因为不了解软件产品的研发规律和用户的真实线上需求,设计出的产品完全脱离实际使用场景,最终项目失败;还有很多非技术背景的创业者,提出的“创新产品”,在技术上完全无法落地,本质上是伪创新。而书中蒂姆·伯纳斯-李虽然是物理学家,但他具备深厚的计算机与网络技术功底,并非完全的外行。

我的困惑:书中的案例里,跨界创新的成功者,其实都具备目标领域的底层技术/专业能力,并非完全的“门外汉”。那么“非拿手领域的创新”的边界在哪里?完全不了解一个领域的底层逻辑,是否根本不可能做出真正的创新?书中的观点是否弱化了领域专业能力对创新的基础作用?


问题4:短周期敏捷迭代中,ZBB要求是否会加剧技术债的堆积?

引用原文:我看了第15章《稳定和发布阶段》中15.1.4招数:ZBB的这段文字:

ZBB=Zero Bug Build,即这一版本的构建把所有已知的Bug都解决掉了。
项目ZBB意味着此次构建中所有两天以前报告的缺陷都已经处理。

提出问题:在互联网产品常用的2周一次的敏捷短迭代中,每个迭代末期都要求完成ZBB,会不会导致开发团队为了在迭代内清零Bug,采用临时的、非最优的修复方案,而不是从代码架构层面彻底解决问题?这种“快速清零Bug”的要求,是否反而会导致技术债不断堆积,损害软件的长期可维护性?

资料与实践经验:我查阅了大量互联网研发团队的迭代实践,发现很多团队为了满足迭代内的Bug清零要求,对于复杂的代码逻辑问题,会采用“打补丁”的方式临时规避,而不是重构有问题的代码模块。比如对于接口偶发的超时问题,开发人员不会去根因分析底层的网络请求逻辑,而是简单地增加重试次数,短期内解决了Bug,但长期来看会让代码逻辑越来越臃肿,后续维护成本指数级上升。同时,敏捷迭代中每个迭代都有新的功能开发任务,开发人员没有足够的时间去做深度的Bug修复和代码重构。

我的困惑:ZBB的要求,是否更适用于瀑布模型的软件发布前稳定阶段,而不是持续迭代的互联网产品?对于持续迭代的产品,该如何平衡“迭代内Bug清零”和“从根本上解决问题、控制技术债”这两个目标?书中的ZBB方法论,在敏捷短迭代场景中该如何做适配?


问题5:技术水平差距过大的两人结对编程,是否违背了其设计初衷?

引用原文:我看了第4章《两人合作》中4.5结对编程的这段文字:

在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起做单元测试,一起做集成测试,一起写文档。

提出问题:书中描述的结对编程,是两人平等互补地合作,但如果结对的两人技术水平、项目经验差距过大(比如资深开发和零基础新人),结对编程是否会变成“师傅带徒弟”的单向教学,而非平等合作?这种情况下,不仅会大幅降低资深开发的工作效率,也无法让新人得到主动思考的锻炼,完全违背了结对编程的设计初衷?

资料与实践经验:我在大一走进软件的课程项目中,曾和几位完全没有编程基础的同学完成编程作业,虽然不是结对编程,但感觉也比较类似。实际执行中,几乎所有的需求分析、代码设计、核心逻辑编写都是我完成的,其他同学只能做一些最简单的注释补充工作,全程都是我单向讲解,没有任何平等的交流与互补,最终不仅我的开发效率甚至比单独开发还低,其他人也表示全程跟不上思路,几乎没有学到东西。同时我也查阅了相关研究,结对编程的效率提升,大多发生在两人技术水平相当的场景中;当两人水平差距超过2年以上开发经验时,结对编程的整体效率反而低于两人分开开发。

我的困惑:结对编程是否有严格的适用前提,即两人的技术水平、认知能力必须处于相近的层级?书中是否过度美化了结对编程的效果,而没有提及水平差距过大时的负面效果?在高校教学中,学生的编程水平参差不齐,该如何分组,才能避免结对编程变成低效的单向教学?

posted @ 2026-03-09 13:07  lhl-lsyycf  阅读(19)  评论(0)    收藏  举报