个人阅读作业

项目 内容
这个作业属于哪个课程 北航 2022 春季敏捷软件工程
这个作业的要求在哪里 https://bbs.csdn.net/topics/605073900
我在这个课程的目标是 了解软件工程方法论,包括软件的构建和团队的管理。了解GIt和CI/CD工具
这个作业在哪个具体方面帮助我实现目标 阅读邹欣老师的《构建之法》,尝试使用CI/CD工具

略读《构建之法》后提出的问题

一、为什么要用一周的时间看一本书

看到第一次作业中是这样一道题,要求一种之内看完整部教材并提出5-10个问题,并且这道题也出现在了书第一章的练习题部分。

在一周之内,快速看完整部教材,列出你不懂的5-10个问题,发布在你的个人博客上。

我感到十分不理解和无从下手。我从小不擅长阅读,尤其是不擅长快速阅读。从初中时老师开始训练我们快速阅读书籍,有一些阅读课让全班同学在一间房子里阅读所谓”名著“,我看到周围同学读的都很快,一会就读完了一大厚摞,我感觉十分的焦虑,故也尝试加速阅读,试图跟上他们的速度。不过这样做之后我发现文字不进脑袋,我根本不知道书里在说什么,过一会就身心俱疲并对读书产生了畏难情绪了。

这种畏难情绪一直伴随我到了高中毕业,期间我一直不喜欢读书,因为读书是要应付考试,读书是需要快速的,读书是无趣的。直到上了大学,我不再需要快速阅读了,我可以在自己喜欢的时候慢慢的阅读自己喜欢的书,虽然我仍然不经常读书,但是却不再有畏难情绪了。

之后我也抽象的理解了读书的过程:将书中的文字映射成脑中已经存在的概念,然后通过概念的连接和组合创造新的概念。最终脑中的概念形成某种有序的数据结构。而对于我来说,我对将文字映射成脑中已有概念的能力很低,脑中的概念数量相较于饱读诗书的同学而讲很少,因此表现为我阅读的速度很慢。当我快速阅读时,大量的文字没有足够的时间映射为概念,因此书便只是文字,阅读过后什么也剩不下。

因此,看到第一周的作业我很生气,为什么要求我们一周读完一本书?我没有时间去理解概念,去将概念整理成概念结构,幸好此书结构不是线性的而是树状的,我可以适当剪枝阅读,并且第一周作业较少我可以熬夜去读,也总算是在一周之内大概读完了这本书。

我的第一个问题是,为什么要一周读完一本书?这和敏捷是否有关?是否可以分阶段阅读,对于不擅长略读的同学一些指导?

二、为什么要提5-10个问题

为什么是5-10个而不是0-10个?为什么必须是问题而不能是其他形式比如见解和认同?

刚开始读书的时候,我感觉自己的意见和作者的意见吻合程度都很高,我没有不认同作者的地方,于是我又开始畏难,如果我整本书都与作者的意见保持一致,是不是这个作业我就做不了了?老师在留作业的时候有没有考虑到这种可能性?我知道这比较极端,因为整本书有很多很多章节很难说找不出5个问题,但是我还是对这种不确定的感觉很难受。我希望作业是在任何情况下都是在有限时间内100%可解的。

三、图形化界面是如何自动测试的

在书中13.2章中提到了测试的各种方法。

比如说我需要自动化测试某个框输入为空时弹出窗口告知我输入非法,这种测试显然不是单元测试,可能比较像构建验证测试。但是这个测试怎么能实现自动化比较令人好奇。我知道web网页的测试可以通过一个叫selenium的包来做,它可以识别网页中的元素,并模拟点击和输入等操作。但是是不是所有的窗口应用都有类似的测试方法呢?

四、解决问题vs程序正义

教材P51 中提到

软件工程师不能按时交付的原因之一,是他们有时候不满足于”解决目前直接的问题“,而是想“解决问题背后的问题”,或者“解决通用的、不直接的、但有重大意义的问题”

书中说的“解决目前直接的问题”让我联想到可能包括了类似打表特判类的解决问题的方法,比如说不去解决线程为什么不能正常中止的内部原因而是在超时后直接将线程杀掉,或者不能解决线程之间的等待问题,选择让一个线程sleep 3秒。如果是对时间有明确要求的任务,可能我真的敢做出这样的事情,不过也一定会在这里标上一个todo,在有时间时去解决这个背后的原因,如果我有充足的时间那么一定会直接去后者。不然的话程序迭代几个版本小强就要泛滥了。

说句题外话,我把这句话放在搜索引擎里去搜,发现有好多好多人都对这个问题进行了提问,试问为什么一本书有那么多字,大家偏爱这段呢?是不是就像某个程序只存在一点点bug,这个比较显眼就被大家轮番hack呢?甚至老师根本不想表达这个意思,而是我故意曲解并找茬才来提问的。

大家只是在完成老师的任务罢了。而这个任务有什么用呢?好吧,那我就当做是我软件工程思维太强了,和邹欣老师太一致了,以至于我不能从这个任务中有所收获吧。

五、什么时候用类,什么时候用对象

P227中提到

应对变化的灵活性(Adapt to Change)

例如, 一个企业的流程管理软件,它能处理员工的各种请假需求,程序员会把每一种假

期当作一个假期的子类(Sub Class) 来处理。如果现在新增一个假期类型(例如“志愿

服务者假期”),程序怎么变?有些设计要求工程师必须改源代码,添加子类,且在所

有和假期相关的地方添加相应的处理,并要求所有管理软件都更新到最新版本。

我以前以为自己理解类的继承类的实例化之间的区别,现在发现自己又不懂了。

假如说有一个类叫做职业(occupation),那么教师(teacher)应该是职业的子类,还是职业的对象呢?

如果教师是职业的子类的话,那么我就可以以教师为类实例化一个实体(罗杰老师),而如果我把教师当做职业的对象的话,我就可以实例化一个自然人(罗杰),然后给他的职业属性赋值为职业的对象(教师)。两者似乎都说的通,只不过映射到数据库、和编写代码的时候要差一点。教师作为实例的话,存入数据库会更有拓展性,比如要新建医生这个职业,只需要在数据库中增加一列。如果我想要为老师或者医生编写点特殊代码的话,那就会选择类(因为类里才能编写代码!)。也不知道我的这个想法对不对?

调研源代码版本管理软件

GitHub

作为全球最大的同性交友网站源代码管理网站,GitHub里存储了大量富有名望的开源项目,如果说有人想把他的贡献开源共全世界程序员共享,那么大概他会选择GitHub而不是其他。

GitLab为学生提供免费的premium pack,这允许我们自由创建Privite仓库,和任意数量的人进行开源的或闭源的合作。

(GitHub近期在声援乌克兰)

GitLab

GitLab有一个官方版,应该比不太过GitHub,一般提到GitLab都是因为它提供个人搭建的安装包,可以保证源代码在私有的环境储存,配置自己的CI runner,非常适合企业内部开发。我们的OO系统就是使用的GitLab提供的免费服务。

(GitLab近期也在声援乌克兰)

Gitee

作为一款国产的Git网站,有着非公开仓库5人合作人数(总)上限,而且不为学生提供Premium,如果不是因为我的同学访问GitHub有困难,我是绝对不会选择Gitee来作为团队开发工具的。

(Gitee不声援乌克兰,说明代码无国界,但代码仓库有国籍)

调研CI/CD工具

GitLab CI

去年做数据库大作业的时候,为了不让我的前端同学每次提交代码后催我帮他们deploy,我就给他们写了个gitlab-ci,当时前端也没有写测试,我就只写了编译和deploy两步,之后他们只需要push到分支就可以自动部署了。

这个项目不是那么太好,就不开源了

GitHub Action

在GitHub上,我上传了一个用于调用北航博雅课程的接口,其中有一些加解密的模块需要测试是否与浏览器行为保持一致。于是就顺便写了一个TestCase,让GitHub Action中也能运行一下。

这是一个开源项目,网址是:https://github.com/Dr-Bluemond/BuaaBykcCrawler

区别

GitLab和GitHub两者都是基于Git的代码管理,在指定事件发生时(Push或Merge)执行构建、测试和部署任务,定义任务都使用了各自风格的yml格式配置文件。他们也都支持将私有主机配置为runner执行部署任务。所以这两者体感上没有太大区别。不过团队开发项目还是可以在国内运行的GitLab更加方便。

posted @ 2022-03-10 23:15  春日野草  阅读(240)  评论(5编辑  收藏  举报