[BUAA2021软工助教]个人阅读作业#2小结
作业链接
优秀作业推荐
- Shaun_Yao ✍️ 道法之间——软工第2次博客作业
- Potassium ✍️ 构之有道,建之有法——软工个人阅读作业#2
- MarkDay ✍️ 《构建之法》& CI/CD调研
- Ethanscript ✍️ 软工个人阅读作业2 —— 构建之法与CI/CD
- VOIDMalkuth ✍️软件工程-个人阅读作业 #2
上面的几篇优秀博客的作者都是在阅读《构建之法》的同时积极思考,结合身边的例子提出自己对问题的理解,或是在提问前给出初步的分析与回答,或是辩证地指出教材中所说的和自己的实际体验中所感受到的有出入的地方。让大家阅读教材并提出几个问题的初衷在于:
@SoftwareTeacher:每个人对于 ‘软件工程’ 有自己的理解,也有自己的困惑, 我们希望每个同学列出自己还不理解,不能回答的问题, 这样助教和老师才能有的放矢, 来帮助每个人。
“还不理解,不能回答的问题”不等价于自己只抛出一个问题,而不需要思考。
Potassium 对于 NABCD 模型有着不同的见解,举出四个大家正在使用的软件的例子,如 QQ、微信、网易云音乐和 Bilibili,认为当下的时代是否可以转化为 BD 模型,而邹欣老师在评论区指出,举出的四个例子都是成功的案例,而仍有很多满足了 BD 却没有成功的案例,应该结合来分析,在一来一去的交流之间对 NABCD 模型引申出了更加细致和更加深入的理解。
在实践部署 CI/CD 上手的部分,Shaun_Yao 对 CI 的各个阶段给出了详细的执行流程并配上了自己的讲解,并且在最后的使用小结部分提炼出了自己对自动化工具的看法:
在充分调研并实践后,我认为无论是Gitlab CI还是GitHub Actions,其背后的核心宗旨无外乎两点:自动化与标准化。
首先是自动化。我们知道,CI/CD工具关注的对象并非是代码的创造过程本身,而是代码在编写出来后对其进行编译、测试、提交、部署的这一系列过程。不难发现,这些过程其实都是非常机械的,不仅不需要什么创造力,而且过于繁琐的环境配置过程反而还会耗费开发者大量的精力,造成团队整体的生产效率低下。因此,将这一部分内容从代码开发中分离出来,并在服务器上自动加以实现,无疑是诸多软件开发团队的普遍需求,也是一类工具的核心使命。
其次是标准化。既然希望将这部分内容交由机器去完成,那么一方面,为了让机器的执行流程更加高效清晰,另一方面也是为了进一步减轻开发者的编程负担,标准化就显得至关重要了。
这里的标准化有三层含义,首先是执行流程的标准化。无论是Gitlab CI还是Github Actions,都利用YAML文件将整个持续集成过程分成了多个阶段,各阶段之间相互独立、顺序执行,从而使得执行流程清晰简明;其次是执行指令的标准化,这一点GitHub Actons做的明显要更好些——它将原本一条条原子化的指令进行了进一步封装,构成了一个个action,从而允许开发者彼此之间进行调用,进一步降低了编程负担;最后是执行环境的标准化,比如Gitlab中的Runner,通过在团队之间进行共享,就可以实现统一的运行环境,从而便于最后的集成和部署。
VOIDMalkuth 则对 Github Action 的使用方法进行了详尽的介绍,从创建到编写以及介绍 Github Action 之余 Gitlab 的特色功能,让任何看到博客的人都能立刻上手没有障碍:
相比之下,部分同学在使用完之后给出的感受和前面调研中的几乎一样,冷冰冰地给出可能是网上整理的对比图草草了事,上手的部分也是完成了课程组给出的最小示例,没有更多的深入探寻,如果仅仅是对于完成博客作业而言已经足够,但是既然已经上手实践,何不多走两步,多看远一点,不被所提供的资料局限?
热门问题
在阅读并提问中,大家提问的比较多的两个问题(同时也是每年软工必问的热门问题):
- 单元测试一定要作者写吗?
@vczh:
针对单元测试指出一点。TDD不是形式上的先写测试再写代码。TDD的一个重要作用是帮助你设计组件。你站在组件的调用者的角度,用测试用例写出组件到底该怎样被调用,算是第一步。至于如何安排足够的输入,有一部分当然是要借助代码来完成的,写完后继续补充完整的测试用例也不是不行。单元测试不是完全黑盒也不是完全白盒。以后发现了bug,还可以继续往里面增加一个测试来重现。以后重构了,还能保证犯过的错误永远不会再出现。随着开发进度的推进,测试用例不断的变多也是正常的。
具体信息可以参考《xunit test patterns》,千万不要看中文版。
@宝玉:
很多问题其实本质是什么是“手段”?什么是“目的”?
单元测试的目的是什么?是不是作者写不过是不同的手段,甚至单元测试本身也是手段。
- goto 语句是否应该使用?
@HansBug:
关于这个问题,其实书里面和 Dijk 大佬说的是两个层面上。Dijk 说的是单纯从程序本身的角度来看,不应该图一时之快选择 goto;而书中这个地方其实真正所说的是,规则和约定只是手段而不是目的,即限制 goto 的目的在于宏观意义上优化代码质量。然而这意味着存在例外——如果在部分情况下(比如一些极特殊的设计,或者比较极端的性能要求下),当goto在可控的情况下并不会造成代码质量失控,那么也应该是允许使用的,甚至可能还得去探索一下 goto 的方法论。
总而言之,dijk大佬是站在高级语言程序的视角分析 goto 本身的利弊,而文中这句话是在说目的和方法之间的关系。
以上是我的理解,欢迎讨论。
问题与建议
在阅读大家的作业过程中,遇到了几个共性的问题(下面的内容就事论事,具体体现在了分数里面):
阅读并提问的部分中有一个非常有意思的点,那就是存在非常多的同类甚至同样的问题,《构建之法》全文32万字,大家只需要提出至少 5 个问题,但粗略统计一番,提交的 48 份作业中有 13 份提到了 GOTO 语句,平均4个人里面就有一个人提问,比如这样的:
还有这样的:
当然我们并不是不允许大家提问,而是一方面大家可以从书中找到其他的部分,没有接触过的部分进行提问,比如 NABCD 的理解、对冲刺阶段的认识、PM 的认识等等,另一方面对于这种大家接触过的,写过代码,有自身经历的问题,可以结合学习经验和查阅资料自己进行一个初步的回答,比如下面这个对于 goto 的提问则翔实很多,展现了作者提问时完整的思维过程,并且将相关的参考资料通过超链接附在里面,做到有理有据:
提什么问题还是次要的,重要的是在阅读并提问的环节中不能缺少了自己思考的过程,单纯地抛出一个问题,这样的提问是低效的,也是我们所不提倡的。在软件调研阶段,少部分同学直接使用了其他网站上整理的对比表格,甚至是英文的表格直接复制粘贴过来,虽然我们鼓励大家搜寻参考资料,但是大家也使用过部分工具,如 Github 和 Gitlab,因此我们也应该从自身的角度出发,结合自身的使用体验和感受作出对比,而不是单纯的“拿来主义”。 随便举出几个例子:
实际上,这部分调研也并不是谁写的多就给的分高,如果只是为了拿一个对照表的话,直接 google 搜 github vs gitlab 就可以得到答案,可是:
- 直接拿英文的 copy 过来是否过于敷衍了事?更重要的是:copy 过来的参考资料是否有标明出处? 引用他人的表格/资料, 要加引用说明。 这是写科学论文的基本功,博客作业也不例外。
- 对比上面的每一条,是否自己亲手试验过?因为时效性关系,别人的表格可能已经过时了。如果没有自己试验过,那就有可能传播了不准确的信息。
如果思考了,实践了,那这一环节的目的也算是达到了;如果没有思考,甚至翻译也懒得翻译,还没有标明出处,甚至自己还没读过一遍,这样的分数拿来也是没有意义的。
CI/CD 上手实践的部分,我们还是希望看到各位同学除了课程组所提供的最简易入门教程之外可以自己探索一些新的功能和特性,充分利用工具辅助自己的开发。 最后对于使用的感受也是参差不齐,下面这一位同学未免就有点惜字如金了,而且只完成了 Gitlab 的部分:
希望大家对待每次博客作业不只是一份作业,更当成一份对自己的总结与思考。对于有深度的作业我们会推荐到博客园首页,也会邀请业内人士和其他学校的老师参与评论,交流观点,像Potassium的这篇构之有道,建之有法——软工个人阅读作业#2下的评论区热闹非凡,希望大家能够珍惜这种机会,创作惠己惠人的优秀博文。
评分规则
本次作业满分10分:
- 作业截止前提交有分
- 晚交一周以内:本次作业0分
- 晚交一周以上或不交:倒扣1倍本次作业分数
- 抄袭行为:倒扣2倍本次作业分数并根据学校有关规定严肃处理,判定标准课程组保有全部解释权。
作业评分标准满分25分,最后线性映射到10分,具体评分规则如下:
- markdown 格式清晰,便于阅读(2分)
- 阅读并提问,且带有自己的思考(10分)
- 是否达到数量:2分
- 大于等于5个提问:2分
- 小于5个提问:0分
- 是否达到提问标准中的任意两点(见下方):8分
- 有5个提问满足标准:8分
- 有3-4个提问满足标准:6分
- 有1-2个提问满足标准:4分
- 没有提问满足标准:2分
- 提问标准:
- 提问是否具体准确,避免假大空
- 是否有自己的思考/结合自身的经历/尝试给出初步的回答
- 查询了外部的资料,举出真实具体的事例
- 资料需要有参考链接,口头表述“查询了xxx的相关资料”无效
- 是否达到数量:2分
- 软件调研,展示方式条理清晰,内容丰富(2分)
- 相同点(1分)
- 不同点(1分)
- 注️:直接摘录其他网站上的内容并没有给出参考来源本部分0分
- 实践部署,自己对使用 CI/CD 工具后的看法(10分)
- 每个持续集成解决方案上手:3分
- 仓库可访问,可以看到 CI/CD 的结果(2分)
- 截图证明使用(1分)
- 体验感受:4分
- 对工具的特点进行描述(1分)
- 对上面的特性进行进一步分析(1分)
- 对上述的工具进行系统化的对比,说明各种工具的优劣区间(2分)
- 每个持续集成解决方案上手:3分
- 回复评论(1分)
- 及时回复,积极互动(1分)
- 没回复(-1分)
- 模板回复,如“谢谢老师/助教,我会努力的”(0分)
对于本次作业的评分,大家可以将自己各项得分按照评分细则进行对比并参考优秀作业的每个部分,思考自己可以提升的地方;如果仍对得分有异议的同学欢迎找我交流讨论。
前两次作业得分千帆图
得分明细
[BUAA2021软工助教]个人阅读作业#2小结的更多相关文章
- [BUAA2021软工助教]案例分析作业总结
目录 一.作业链接 二.优秀作业推荐 A+作业推荐 A作业推荐 三.总结 所有案例分析总结 特色与优点 问题与建议 不同类产品案例分析Bug汇总 CSDN问答社区.Stack Overflow.Seg ...
- [2019BUAA软工助教]第一次阅读 - 小结
[2019BUAA软工助教]第一次阅读 - 小结 一.评分规则 总分 16 分,附加 2 分,共 18 分 markdown格式统一且正确 - 2分 不统一:扣 1 分 不正确:扣 1 分(例如使用代 ...
- [BUAA2021软工助教]结对项目-第二阶段小结
一.作业链接 结对项目-第二阶段 二.优秀作业推荐 本次博客作业虽然是简单总结,但是以下作业中都不乏有思考.有亮点的精彩内容,推荐给同学们阅读学习. 磨练,结对编程!(中) zzx 和 zzy 同学实 ...
- 软工2021个人阅读作业#2——构建之法和CI/CD的运用
项目 内容 这个作业属于哪个课程 2021学年春季软件工程(罗杰 任健) 这个作业的要求在哪里 2021年软工-热身阅读作业#2 我在这个课程的目标是 了解和掌握现代软件开发和项目管理技术,锻炼在大规 ...
- 【1414软工助教】团队作业3——需求改进&系统设计 得分榜
题目 团队作业3--需求改进&系统设计 作业提交情况情况 本次作业所有团队都按时提交作业. 往期成绩 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目2:单元测试 ...
- [2017BUAA软工助教]剩余个人作业与deadline
软件工程剩余作业与deadline 标签(空格分隔): 软件工程 一.个人阅读作业+总结 对软件工程的学习做一个总结. 阅读下列关于软件开发本质和开发方法的博客/文章,结合自己在个人项目/结对编程/团 ...
- 【1414软工助教】团队作业2——需求分析&原型设计 得分榜
题目 团队作业2--需求分析&原型设计 作业提交情况情况 本次作业所有团队都按时提交作业. 往期成绩 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目2:单元测试 ...
- 【1414软工助教】团队作业4——第一次项目冲刺(Alpha版本) 得分榜
题目 团队作业4--第一次项目冲刺(Alpha版本) 作业提交情况情况 所有团队都在规定时间内完成了七次冲刺. 往期成绩 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目 ...
- 【1414软工助教】团队作业5——测试与发布(Alpha版本) 得分榜
题目 团队作业5--测试与发布(Alpha版本) 作业提交情况情况 所有团队按时提交. 往期成绩 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目2:单元测试 团队作业1 ...
随机推荐
- Webpack 5 配置手册(从0开始)
针对新手入门搭建项目,Webpack5 配置手册(从0开始) webpack安装顺序 1. `npm init -y`,初始化包管理文件 package.json 2. 新建src源代码目录 3. 新 ...
- 使用Azure API Management, Functions, Power Apps和Logic App构建应用
ASP.NET OpenAPI 可以非常方便的将我们的Web API项目自动文档化,除了自动文档化以外,我们还可以利用Azure API Management将Open API自动文档化了的Web A ...
- [Fundamental of Power Electronics]-PART I-5.不连续导电模式-5.3 Boost变换器实例
5.3 Boost变换器实例 作为第二个示例,考虑图5.12的Boost变换器.让我们来确定不同模式的边界并且求解DCM下的电压变换比.此前在2.3节中分析了在CCM工作的Boost变换器的特性,并确 ...
- 带你全面认识CMMI V2.0(三)——实践域
实践域以往被称为称为"过程域",如:配置管理,现在叫做"实践域".对于2.0版,则有25个适用的实践域.与以前版本的CMMI模型一样,"实践域&quo ...
- Python数据分析入门(十六):设置可视化图表的信息
现在我们添加图后,没有指定x轴代表什么,y轴代表什么,以及这个图的标题是什么.因此以下我们通过一些属性来设置一下. 设置线条样式: 使用plot方法:plot方法就是用来绘制线条的,因此可以在绘制的时 ...
- BUAA_2020_OO_UNIT4_REVIEW&ALL_REVIEW
OO第四单元总结&&学期总结 1. 第四单元作业总结 本单元三次作业都围绕了UML图的建模展开,第十三次作业只有类图,第十四次作业增加了顺序图和状态图,第十五次增加了部分UML规则的判 ...
- BUAA_2020_OO_UNIT2_REVIEW
OO第二单元总结 1. 设计策略 总的来说,三次作业没有大的重构,都是使用了多线程进行电梯调度,输入线程和运行线程分离,主要的不同在于三次电梯调度器线程的数量有所不同,第一次为一个,第二次为n个,第三 ...
- Ray Tracing in one Weekend 阅读笔记
目录 一.创建Ray类,实现背景 二.加入一个球 三.让球的颜色和其法线信息相关 四.多种形状,多个碰撞体 五.封装相机类 六.抗锯齿 七.漫发射 八.抽象出材料类(编写metal类) 九.介质材料( ...
- Printer Queue UVA - 12100
The only printer in the computer science students' union is experiencing an extremely heavy workload ...
- Django 模型(Model)
1. 模型简介 ORM 简介 使用 Mysql 数据库的环境配置 2. 定义模型 1)定义属性 2)字段类型 3)字段选项 4)关系 5)元选项 6)范例 3. 模型成员&管理器 1)类属性 ...