2021年软工-第二次阅读作业
2021年软工-第二次阅读作业
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2021春季软件工程(罗杰 任健) |
这个作业的要求在哪里 | 个人阅读作业#2 |
我在这个课程的目标是 | 了解软件开发工程的具体流程,学习项目实践开发的方法与步骤。 |
这个作业在哪个具体方面帮助我实现目标 | 阅读软件工程课程教材内容,了解课程知识组成情况,调研源代码版本管理软件,并学习相关持续集成/部署工具的使用方式。 |
阅读提问
问题1:对于编程水平相差较大或者说擅长领域完全没有重合的两人,驾驶员和领航员类型的结对编程方法是否仍能获得较优的合作投入产出比。
根据《构建之法》第4章4.5节单元测试部分的如下一段文字:
结对编程中有两个角色:
1.驾驶员(Driver):控制键盘输入。
2.领航员(Navigator):起到领航、提醒的作用。
这两个角色是可以互换的。和现实生活中的例子类似,一个人负责具体的执行(驾驶,用键盘编写程序等),另一个人负责导航、检查、掩护等。
虽然对于我来说还没有完成过正式的结对编程任务,但是根据我在一些跨专业课程的小组合作任务的经历来看,如果合作的队友之间编程水平相差较大,以至于部分队友需要几个小时才能编写好另一部分队友一个小时内就能完成的代码,那么这不仅是让擅长编写代码的队友感到焦虑,也会降低整个小组合作工作的效率。那么对于结对编程来说,如果发生类似的情况,是否仍能获得较优的互作投入产出比。
问题2:敏捷开发是否会容易拉长项目最终完成的期限。
根据《构建之法》第6章6.4节敏捷总结部分的如下一段文字:
敏捷的方法能帮助你尽快让用户看到项目的部分价值。当你尽早交付部分价值时,也许用户对你目前交付的东西已经很满意了,这样你就不用再花时间来实现其他需求。另一种可能是,用户看到了部分系统,他们有新的需求,这样你就可以实现新的需求,而不用再浪费时间实现过时的需求了。
这段话主要说明了项目早期成果满足用户情况下,敏捷开发将有助于项目任务能够如期完成。但是,如果考虑项目早期成果难以满足用户的情况,这会不会造成项目的早期内容需要推倒重做,以至于项目其他工作进展滞后,最终拉长项目完成的期限。
问题3:计算机软件开发领域里的PM职业人才主要来源是哪里,主要会是来自于计算机相关专业的学生吗。
根据《构建之法》第9章9.6节PM人才主要特征的如下一段文字:
你是否觉得你的长处不在于写代码和debug,而是协调、沟通,让一个团队或组织有效运转起来?你是否喜欢表达,善于和各种专业背景的人沟通?你是否经常思考如何该井生活中点点滴滴的小问题?你是否会思考这样的问题么:新浪微博、豆瓣、qq、微信都可以社交,它们的定位、产品特性、用户群、解决的需求,有什么不同?你是否对以下领域感兴趣,甚至自己找过相关的书来看:心理学、社会学、组织行为学、统计学、商业模式?
通过阅读这一段话,我个人对PM这个职业的人才特征有了更加深刻的理解。此外,我也知道对于现实中的一些关键项目,项目经理往往具有举足轻重的地位。那么,既然PM这个重要的职业并不需要负责技术开发,计算机软件开发领域里的PM职业人才主要来源会是哪里,他们会是计算机相关专业的学生吗?
问题4:Goto语句是否有利于清晰体现程序的逻辑。
根据《构建之法》第4章4.3节代码设计规范的如下一段文字:
只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto。
个人理解,goto语句可类比于汇编程序中的跳转指令,它容易造成包含分支和循环结构的程序逻辑混乱,往往会给阅读程序代码的工作人员带来更为复杂的任务难度。因此我对这里写到的goto语句有助于程序逻辑的清晰体现感到很有疑问。
问题5:软件开发过程中是否有必要保证代码具有100%的正确性,如果有必要又应该如何实现呢。
根据《构建之法》第2章中2.1节单元测试部分的如下一段文字:
要注意:100%的代码覆盖率并不等同于100%的正确性。
在之前我们所学的课程中有提到,单元测试的主要功能是准确、快速地保证程序基本模块的正确性。那么,如果说具有100%代码覆盖率的单元测试都无法保证代码具有100%的正确性,这是否暗示着软件开发的过程中没有必要保证代码具有100%的正确性,而只用保证一个较高且符合开发人员个人体感要求的正确性呢。
调研源代码版本管理软件
目前广泛使用的基于源代码管理软件Git的项目管理工具主要有Github、Gitlab和Bitbucket,通过调研,可知道三者之间的异同大致包含以下几个方面。
-
平台中开源存储库的支持情况:
在这三者之中,GitLab是唯一支持开源存储库的平台。GitLab平台为用户提供在其官方网站上查看完整代码的功能。而在GitHub平台中,虽然有一大类免费开源项目,但它并未在开源存储库中分类。在GitHub平台中,有许多免费的开源式项目,有助于吸引具有类似兴趣的人。在Bitbucket平台上,有自托管版本功能,开发人员可以选择私下托管其项目,但Bitbucket平台中不存在开源存储库功能。
-
从其他平台导入存储库的支持情况:
在使用Bitbucket平台的情况下,用户可以从Mercurial平台导入存储库。在GitHub中,该功能也会得到支持,此外用户还可以从其他平台导入存储库。但在GitLab平台的情况下,用户只能从Git平台导入存储库。
-
项目的分布管理情况:
Bitbucket平台可用于在团队成员之间分发项目,这一点相对来说十分方便。GitHub平台则使用组织级别来分配项目,并被公司和组织广泛使用。在 GitLab 平台中,项目内容分组分发,组成员可以访问项目并在Gitlab平台上共享代码。组级管理可以通过将用户添加到组中的操作来完成,并且可以使用GitLab平台的通知功能管理组。
-
团队协作流程情况:
Bitbucket和GIthub平台支持pull request的功能,可通过该功能将个人的修改请求合并到团队项目上。在这之后,则需要团队项目负责人审核并同意该合并请求。在GitLab平台中,则采用的是具有类似流程的merge request功能。
调研持续集成/部署工具
Gitlab CI
-
部署截图如下:
-
仓库地址:https://gitlab.buaaoo.top/SoftwareEngineering18373339/Software-Engineering-Homework-Gitlab
-
该CI/CD工具的特点、特性描述以及适应场合:
- 强力的CI部署能力与docker支持。
- 私人的GitLab-Runner设置十分简单。
- pipeline能够手动启动。
- 适合有一定量人数的团队工程,如一定规模的商业化应用。
Github Action
-
部署截图如下:
-
仓库地址:https://github.com/OmedetoHe/OmedetoHe-Software-Engineering-Homework-Github-Action-Test
-
该CI/CD工具的特点、特性描述以及适应场合:
- 与github相集成且状态描述清晰。
- 在marketplace里准备好了大量的现成workflow代码,可直接复制使用。
- 更适合个人或小型团队使用的中小型项目。