软件工程个人阅读作业#2

软件工程个人阅读作业#2

项目 内容
这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健)
这个作业的要求在哪里 个人阅读作业#2要求
我在这个课程的目标是 培养软件开发过程中的团队合作能力,了解软件工程中的开发过程
这个作业在哪个具体方面帮助我实现目标 阅读《构建之法》,了解课程内容;了解版本管理工具软件和持续集成工具

阅读提问

收到作业要求后用几天时间通读了一下课本,我在图书馆借到的是《构建之法》第二版,时间有限,读得有些粗略,一些问题可能是由于我缺少软件工程的经验二产生的,希望这门课结束后我能够对软件工程有更深的理解。

问题1

我在《构建之法》第二版中2.1.2节看了这样一段文字

单元测试必须由最熟悉代码的人(程序的作者)来写。代码的作者最了解代码的目的、特点和实现的局限性。所以,写单元测试没有比作者更适合的人选了。

这部分可能与我曾经的一些经验不同,我认为由别人来进行单元测试,也可以达到类似于黑箱测试的效果,比如之前一些课程的测试数据由课程组提供,也能够将输入数据的各种范围尽量覆盖,并且由他人进行测试也可以避免程序员思考的情况或边界条件不周全而导致的错误。

问题2

《构建之法》第二版4.3.2节中提到为了实现函数有单一出口可以使用goto语句。类似于

HRESULT HrDoSomething(int parameter)
{
	if (SomeCode() != ok)
	{
		Goto Error;
	}
	
	if (SomeCode() != ok)
	{
		Goto Error;
	}
	
Error:
	return hr;
}

曾经的一些课程中老师曾经明确说过不要使用Goto语句,Goto语句容易造成程序流程的混乱。我觉得对于上述代码可以考虑设置一个变量来存储要返回的值,在不同分支中对这个变量赋予不同的值,也可以让函数有单一出口,对于某些异常情况,可以考虑使用异常处理机制。

问题3

《构建之法》第二版4.4.2节中关于代码复审的步骤中提到

程序员必须测试过代码。什么叫测试过?最好的方法是在调试器中单步执行。

问:有些错误处理的分支我不能执行到怎么办?

答:如果作者都不能让程序执行到那些分支,那谁能保证那些错误处理的正确性呢?

既要在代码复审前一步一步调试执行代码中的每一个分支,又要进行代码复审,这样的审查方式会不会由于审查过于仔细导致开发效率的降低?怎样做到既兼顾在审查中降低bug数量,又保证开发效率呢?

问题4

《构建之法》第二版9.4节中介绍了PM(项目经理)的能力要求,其中的专业能力主要包括理解和表达能力,书中并没有提到与编程相关的能力。

我认为项目经理重要的一部分责任是与开发人员沟通,所以项目经理最好有一定对开发工作的了解,或者有一定开发的经历。这一点书中没有提到。

问题5

《构建之法》第二版15.1.3节中介绍了Bug会诊的相关内容,其中提到

项目接近尾声时,要确保门槛越来越高。今天的“Must”(超过门槛的修复)必须比昨天及以前的”No“的严重性要高,这样才能不断地提高系统的稳定性。

书中在下边的对话中提到,随着门槛提高,会有更多的Bug留在软件中,也提到了很多关于Bug的材料会被会诊说”no“,好像努力白费了一样。

书中回答到了,这样有利于软件的稳定性,以及可以将一些代码修改放到其他分支中。但是我觉得这些Bug可能仍需要在之后的版本中更新修复,那为何要在会诊中反复决定对一个Bug修改方式呢?

调研源代码版本管理软件

Github、Gitlab、Bitbucket都是基于Git的项目管理工具。都有以下基础功能,比如:

  • 拉取请求
  • 代码审查
  • 内联编辑
  • 问题跟踪
  • Markdown支持
  • 双向认证
  • 高级权限管理
  • 托管的静态网页
  • 功能丰富的API
  • Fork / Clone Repositories
  • 代码段
  • 第三方集成

此外这几个平台也有以下的不同点:

  • 哪个是开源的服务或产品

    • GitLab 有一个开源代码版本。GitLab 社区版的源代码也开放在他们的网站上。

    • GitHub 以开源友好而闻名,并且拥有最大数量(19.4M +)的开源项目,但其本身不是开源的。

    • Bitbucket也不是开源的,但在购买托管服务的方案中提供了「产品定制」的功能。

  • 开源与协作,谁是最优之选

    • GitHub,GitLab,Bitbucket都具有“发现”功能。除了 GitLab,每个都提供了“follow”功能。
    • 在协作上,GitHub 是开源协作方面的首当其冲的选择。目前 GitHub 拥有全世界最大数量的公共开源项目,全球顶级科技公司( Google / Apple/ Facebook/ Twitter/ Microsoft/Alibaba/ Tencent)纷纷加入 GitHub ,全球顶级开源项目(Linux/ Nodejs/ Swift/ Ruby / Docker)都优先选择在 GitHub 上开源,这里还有全球顶级编程大牛贡献代码。这里不仅仅是专业开发人员的交友乐园,也聚集了很多对软件开发感兴趣的人学习。甚至,一个活跃的 GitHub 账号也能成为理想工作的敲门砖。
  • 导入的代码仓库类型

    • GitHub支持导入Git,SVN,HG,TFS
    • GitLab支持导入Git
    • Bitbucket支持导入Git,CodePlex,Google Code,HG,SourceForge,SVN

调研持续集成/部署工具

Gitlab CI

使用本人去年春季学期面向对象课程第11次作业的仓库,使用Maven创建一个项目,并编写一个简单的Junit单元测试。

编写好yml文件并push到仓库中,可以触发CI。

GitHub Action

在项目中编写yml文件,push到一个github仓库中,可以出发构建和测试。

使用CI和CD工具后的看法

CI/CD工具能够在代码提交后自动构建测试代码。持续集成的整个过程都是自动化的,可以减少重复的测试操作,能够提高效率降低工作量。可以让开发人员在提交代码后很快发现代码中的错误。

posted @ 2021-03-13 15:34  °不凉少年  阅读(121)  评论(2编辑  收藏  举报