首页 技术 正文
技术 2022年11月6日
0 收藏 400 点赞 742 浏览 7646 个字

作业链接

优秀作业推荐

上面的几篇优秀博客的作者都是在阅读《构建之法》的同时积极思考,结合身边的例子提出自己对问题的理解,或是在提问前给出初步的分析与回答,或是辩证地指出教材中所说的和自己的实际体验中所感受到的有出入的地方。让大家阅读教材并提出几个问题的初衷在于:

@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 的特色功能,让任何看到博客的人都能立刻上手没有障碍:

相比之下,部分同学在使用完之后给出的感受和前面调研中的几乎一样,冷冰冰地给出可能是网上整理的对比图草草了事,上手的部分也是完成了课程组给出的最小示例,没有更多的深入探寻,如果仅仅是对于完成博客作业而言已经足够,但是既然已经上手实践,何不多走两步,多看远一点,不被所提供的资料局限?

热门问题

在阅读并提问中,大家提问的比较多的两个问题(同时也是每年软工必问的热门问题):

  1. 单元测试一定要作者写吗?

@vczh:

针对单元测试指出一点。TDD不是形式上的先写测试再写代码。TDD的一个重要作用是帮助你设计组件。你站在组件的调用者的角度,用测试用例写出组件到底该怎样被调用,算是第一步。至于如何安排足够的输入,有一部分当然是要借助代码来完成的,写完后继续补充完整的测试用例也不是不行。单元测试不是完全黑盒也不是完全白盒。以后发现了bug,还可以继续往里面增加一个测试来重现。以后重构了,还能保证犯过的错误永远不会再出现。随着开发进度的推进,测试用例不断的变多也是正常的。

具体信息可以参考《xunit test patterns》,千万不要看中文版。

@宝玉:

很多问题其实本质是什么是“手段”?什么是“目的”?

单元测试的目的是什么?是不是作者写不过是不同的手段,甚至单元测试本身也是手段。

  1. goto 语句是否应该使用?

@HansBug:

关于这个问题,其实书里面和 Dijk 大佬说的是两个层面上。Dijk 说的是单纯从程序本身的角度来看,不应该图一时之快选择 goto;而书中这个地方其实真正所说的是,规则和约定只是手段而不是目的,即限制 goto 的目的在于宏观意义上优化代码质量。然而这意味着存在例外——如果在部分情况下(比如一些极特殊的设计,或者比较极端的性能要求下),当goto在可控的情况下并不会造成代码质量失控,那么也应该是允许使用的,甚至可能还得去探索一下 goto 的方法论。

总而言之,dijk大佬是站在高级语言程序的视角分析 goto 本身的利弊,而文中这句话是在说目的和方法之间的关系。

以上是我的理解,欢迎讨论。

问题与建议

在阅读大家的作业过程中,遇到了几个共性的问题(下面的内容就事论事,具体体现在了分数里面):

  1. 阅读并提问的部分中有一个非常有意思的点,那就是存在非常多的同类甚至同样的问题,《构建之法》全文32万字,大家只需要提出至少 5 个问题,但粗略统计一番,提交的 48 份作业中有 13 份提到了 GOTO 语句,平均4个人里面就有一个人提问,比如这样的:

    还有这样的:

    当然我们并不是不允许大家提问,而是一方面大家可以从书中找到其他的部分,没有接触过的部分进行提问,比如 NABCD 的理解、对冲刺阶段的认识、PM 的认识等等,另一方面对于这种大家接触过的,写过代码,有自身经历的问题,可以结合学习经验和查阅资料自己进行一个初步的回答,比如下面这个对于 goto 的提问则翔实很多,展现了作者提问时完整的思维过程,并且将相关的参考资料通过超链接附在里面,做到有理有据:

    提什么问题还是次要的,重要的是在阅读并提问的环节中不能缺少了自己思考的过程,单纯地抛出一个问题,这样的提问是低效的,也是我们所不提倡的。

  2. 在软件调研阶段,少部分同学直接使用了其他网站上整理的对比表格,甚至是英文的表格直接复制粘贴过来,虽然我们鼓励大家搜寻参考资料,但是大家也使用过部分工具,如 Github 和 Gitlab,因此我们也应该从自身的角度出发,结合自身的使用体验和感受作出对比,而不是单纯的“拿来主义”。 随便举出几个例子:

    实际上,这部分调研也并不是谁写的多就给的分高,如果只是为了拿一个对照表的话,直接 google 搜 github vs gitlab 就可以得到答案,可是:

    • 直接拿英文的 copy 过来是否过于敷衍了事?更重要的是:copy 过来的参考资料是否有标明出处? 引用他人的表格/资料, 要加引用说明。 这是写科学论文的基本功,博客作业也不例外。
    • 对比上面的每一条,是否自己亲手试验过?因为时效性关系,别人的表格可能已经过时了。如果没有自己试验过,那就有可能传播了不准确的信息。

    如果思考了,实践了,那这一环节的目的也算是达到了;如果没有思考,甚至翻译也懒得翻译,还没有标明出处,甚至自己还没读过一遍,这样的分数拿来也是没有意义的

  3. 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分)
    • 相同点(1分)
    • 不同点(1分)
    • 注️:直接摘录其他网站上的内容并没有给出参考来源本部分0分
  • 实践部署,自己对使用 CI/CD 工具后的看法(10分)
    • 每个持续集成解决方案上手:3分

      • 仓库可访问,可以看到 CI/CD 的结果(2分)
      • 截图证明使用(1分)
    • 体验感受:4分
      • 对工具的特点进行描述(1分)
      • 对上面的特性进行进一步分析(1分)
      • 对上述的工具进行系统化的对比,说明各种工具的优劣区间(2分)
  • 回复评论(1分)
    • 及时回复,积极互动(1分)
    • 没回复(-1分)
    • 模板回复,如“谢谢老师/助教,我会努力的”(0分)

对于本次作业的评分,大家可以将自己各项得分按照评分细则进行对比并参考优秀作业的每个部分,思考自己可以提升的地方;如果仍对得分有异议的同学欢迎找我交流讨论。

前两次作业得分千帆图

得分明细

学号后四位 作业链接 提交日期 markdown 阅读提问 调研 实践部署 回复评论 总分 映射后最终成绩
3584 https://www.cnblogs.com/gottfriede/p/14550315.html 2021/3/17 2 8 2 9 1 22 8.8
3054 https://www.cnblogs.com/duckingss/p/14533764.html 2021/3/14 2 6 2 7 1 18 7.2
4216 https://www.cnblogs.com/AhaSokach/p/14547191.html 2021/3/17 2 10 2 10 1 25 10
3050 https://www.cnblogs.com/VOIDMalkuth/p/14536172.html 2021/3/15 2 10 2 10 1 25 10
3080 https://www.cnblogs.com/namoe/p/14542918.html 2021/3/16 2 8 2 8 0 20 8
3567 https://www.cnblogs.com/lxy-oo/p/14546276.html 2021/3/16 2 8 2 8 1 21 8.4
3580 https://www.cnblogs.com/MondayCha/p/14546985.html 2021/3/17 2 10 2 10 1 25 10
3622 https://www.cnblogs.com/miku-mylife/p/14551842.html 2021/3/17 2 10 2 10 -1 23 9.2
3018 https://www.cnblogs.com/nya0/p/14551090.html 2021/3/17 2 9 2 7 1 21 8.4
3201 https://www.cnblogs.com/6yyh6/p/14533667.html 2021/3/14 1 8 2 8 1 20 8
3480 https://www.cnblogs.com/fatca-oo/p/14533831.html 2021/3/14 2 10 2 10 1 25 10
3676 https://www.cnblogs.com/BUAAlhx/p/14550732.html 2021/3/17 2 10 2 6 1 21 8.4
3256 https://www.cnblogs.com/zxc3wyx/p/14551934.html 2021/3/17 2 8 2 7 1 20 8
3298 https://www.cnblogs.com/donsome/p/14545904.html 2021/3/16 2 6 2 7 -1 16 6.4
3142 https://www.cnblogs.com/zixfy/p/14527968.html 2021/3/17 2 10 2 10 1 25 10
3293 https://www.cnblogs.com/lkltcl/p/14531767.html 2021/3/14 2 10 2 10 1 25 10
3377 https://www.cnblogs.com/xmy1225/p/14552200.html 2021/3/17 2 8 2 8 1 21 8.4
3436 https://www.cnblogs.com/xianmei/p/14545524.html 2021/3/16 2 10 2 10 0 24 9.6
3464 https://www.cnblogs.com/xxlscxx/p/14547947.html 2021/3/17 2 10 2 9 0 23 9.2
3647 https://www.cnblogs.com/mokoghost/p/14534787.html 2021/3/14 2 10 2 7 1 22 8.8
5044 https://www.cnblogs.com/BUAA-City/p/14550651.html 2021/3/17 2 8 0 8 1 19 7.6
3004 https://www.cnblogs.com/CindyZhou/p/14528813.html 2021/3/13 2 10 2 10 1 25 10
3172 https://www.cnblogs.com/oounit1summary/p/14523837.html 2021/3/16 2 10 2 10 1 25 10
3197 https://www.cnblogs.com/cwm18373197/p/14551165.html 2021/3/17 2 10 2 10 0 24 9.6
3420 https://www.cnblogs.com/Gracia/p/14532301.html 2021/3/14 2 10 2 10 1 25 10
3075 https://www.cnblogs.com/yokies/p/14545634.html 2021/3/16 2 8 2 9 -1 20 8
3146 https://www.cnblogs.com/Ethanscript/p/14549614.html 2021/3/17 2 10 2 10 1 25 10
3204 https://www.cnblogs.com/wuchengfeng/p/14544693.html 2021/3/16 2 10 2 8 1 23 9.2
3439 https://www.cnblogs.com/donkey55/p/14545702.html 2021/3/16 2 10 2 9 1 24 9.6
3477 https://www.cnblogs.com/celestial39/p/14539842.html 2021/3/15 2 10 2 10 1 25 10
3636 https://www.cnblogs.com/tcyhost/p/14535607.html 2021/3/15 2 10 2 10 1 25 10
3665 https://www.cnblogs.com/member-re/p/14539741.html 2021/3/15 2 9 2 8 0 21 8.4
3717 https://www.cnblogs.com/zhangxiaoshu31/p/14551170.html 2021/3/17 1 8 2 8 1 20 8
5013 https://www.cnblogs.com/guo-shen/p/14546515.html 2021/3/17 1 6 2 4 -1 12 4.8
3110 https://www.cnblogs.com/ha-na-se/p/14551601.html 2021/3/17 2 8 2 9 0 21 8.4
3407 https://www.cnblogs.com/yzmcoding/p/14552028.html 2021/3/17 1 10 2 10 1 24 9.6
3808 https://www.cnblogs.com/joeye153/p/14530676.html 2021/3/13 2 10 2 9 1 24 9.6
3812 https://www.cnblogs.com/DanGuge/p/14540979.html 2021/3/16 2 10 2 9 1 24 9.6
1020 https://www.cnblogs.com/BuniQ/p/14546235.html 2021/3/16 2 8 1 8 1 20 8
3821 https://www.cnblogs.com/cyy—336699/p/14547000.html 2021/3/17 2 8 2 9 1 22 8.8
3019 https://www.cnblogs.com/Potassium/p/14525600.html 2021/3/13 2 10 2 10 1 25 10
3148 https://www.cnblogs.com/darewolf/ 未提交 -2 -10 -2 -10 0 -25 -10
3339 https://www.cnblogs.com/OmedetoHe/p/14546405.html 2021/3/16 2 8 2 10 1 23 9.2
3357 https://www.cnblogs.com/liuqian9961/p/14546916.html 2021/3/17 2 9 2 9 1 23 9.2
3358 https://www.cnblogs.com/lpc123/p/14550969.html 2021/3/17 2 6 2 10 -1 19 7.6
1045 https://www.cnblogs.com/SnowPhoenix/p/14548851.html 2021/3/17 2 9 1 10 -1 21 8.4
6161 https://www.cnblogs.com/8igfive/p/14546544.html 2021/3/16 2 10 2 9 1 24 9.6
1169 https://www.cnblogs.com/William1003/p/14542147.html 2021/3/16 2 10 2 9 -1 22 8.8
7155 https://www.cnblogs.com/djj12345678/p/14529022.html 2021/3/13 2 7 2 7 0 18 7.2
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,557
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898