这个作业属于哪个课程 | 2021春北航计算学院软件工程(罗杰 任健) |
这个作业的要求在哪里 | 个人阅读作业 #2 |
我在这个课程的目标是 | 合作开发出一个具有实用性的项目,并锻炼自己的工程能力 |
这个作业在哪个具体方面帮助我实现目标 | 练习使用一系列分析工具,阅读材料让我受益匪浅 |
一、阅读提问
问题1:代码规范和代码复审
于是我们最后做了这个选择,每个“{”和“}”都独占一行。就是格式D:
if ( condition)
{
DoSomething();
}
else
{
DoSomethingElse();
}
依我本人的使用经历,当前最热门的编程开发系列IDE——Jetbrains公司的系列产品中,默认规范的代码风格都是"{"和if、else等关键字在同一行(不论是C++、C#还是Java),即如果使用代码自动规范工具,那么IDE会自动将代码整理成上述风格。我的疑惑在于,教材中”最后做的选择:格式D“是否考虑了所有的因素(以及教材的版本是否跟上了时代),譬如采用格式D时,若if-else分支很多,会造成行数的大量增加,导致最后所在的函数行数过多而不满足行数检查的风格?或者说,Jetbrains本身的代码风格检查不够合理,而与教材所提到的相冲突。至少我在去年的面向对象课程中,多次被这样的问题所困扰。
问题2:代码规范和代码复审
(3)运算符的实现必须非常有效率,如果有复杂的操作,应定义一个单独的函数。
(4)当你拿不定主意的时候,用成员函数,不要用运算符。
这是教材中对于C++操作符使用规范的说明。到目前为止,我使用重载操作符的操作次数并不多(主要都是上学期的编译实验课使用的)。我想知道对于相同的操作,C++中使用定义操作符以及定义函数在效率上是否有区别(尤其是在使用频繁的情况下)。依我本人的理解,定义函数有压栈、传参等操作,这些操作都需要时间,因此使用操作符会不会节省这些操作的时间?如果能的话,这两条规范是否过于绝对?
问题3:团队成员不同的投入和心态
在官僚层次驱动的项目中, 往往有一些鹦鹉会控制流程的关卡, 鹦鹉虽然对项目具体情况不了解, 也很忙, 但是项目的一些决定非得由她们来做, 她们做完决定之后, 拍拍翅膀飞走了... 这的确是比较让人郁闷的事。
我从身边从事计算机相关工作了解得知,这种毫不知情的”项目经理“正在减少(即项目经理的门槛正在变高),那么即使作为一直”鹦鹉“,不参与项目创作的过程,是否也需要对项目有一定了解?我认为在对项目不甚了解的情况下很难做出正确的关键决策。(而且原文中这个”她“字是否用得不妥,容易引起某些对于性别问题比较敏感的人群的误会)
问题4:测试的计划和执行
效能测试:在100个用户的情况下,产品搜索必须在3秒钟内返回结果。
负载测试:在2 000个用户的情况下,产品搜索必须在5秒钟内返回结果。
压力测试:在高峰压力(4 000个用户)持续48小时的情况下,产品搜索的返回时间必须保持稳定。系统不至于崩溃。
从数学的角度,我的第一反应并不能理解这些数字(几组时间的数字和用户的数量显然不成正比)。我想了解这几个测试的具体偏重解决的问题是什么,当工程能满足后面的测试时,前面的测试是否有必要?
问题5:绩效管理
在理想条件下, 把任务做得很好, 当然贡献会在最上面的 20%; 做的最差的, 贡献应该是最低的 10%. 但是在实践中要复杂得多, 有些人因为任务相对简单, 完成的很好, 但是对整个集体的贡献一般, 这种人可以得到 [好, 70%] 的位置。 有些人敢于做很难的事情, 结果未必令人满意, 但是对团队很重要, [中, 20%] 应该是一个合适的评价。
贡献度的评价是否应考虑完成的内容对于整个项目的影响?在一个项目中,往往有重复性的工作以及关键的工作。有些关键性的工作难度很大,但对整个工程是至关重要的。如果这部分工作做得很好,他是否应获得比30%更多的贡献度?相反地,如果关键性的步骤出现了重大问题,影响了整个项目的实现,是否应考虑降低他的贡献度?我认为不同难度的任务应有不同的贡献度计算方法,要做到奖惩分明。
二、调研源代码版本管理软件
我使用过的源代码版本管理软件有Gitlab和Github,对于BitBucket也有一定了解。
对于Gitlab和Github,其主要相同点在于:
-
都是基于Web的Git仓库
-
都提供了分享开源项目的平台
-
都为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所
主要不同点在于:
-
Gitlab允许允许免费设置仓库权限
-
Gitlab允许用户设置 project 的获取权限,进一步提升安全性
因此,从代码的私有性上来看,GitLab 是一个更好的选择。但是对于开源项目而言,GitHub 依然是代码托管的首选。对于BitBucket,其提供的服务也非常类似于GitHub,但是它的大部分功能也略有不同。BitBucket最适合小型开发团队,随着团队的成长,BitBucket提供了与GitHub和GitLab相比更温和的定价条件。BitBucket对于小团队免费,这意味着最多5名成员的团队将获得无限数量的免费存储库。支持Git,CodePlex,Google Code,HG,SourceForge,SVN导入。当然,BitBucket上面的项目不开源,这也是需要考虑的一点。
三、调研持续集成/部署工具
以下是我使用Gitlab CI以及Github Actions的经历。
Gitlab CI
该仓库的项目是我重修OO的第二次作业,我写的测试文件TestMain.java内容为:
import org.junit.Assert;
import org.junit.Test;
public class TestMain {
@Test
public void testMain() {
String ret = Main.test("x**3+x**2");
Assert.assertEquals("3*x**2+2*x", ret);
}
}
运行截图:
PS:由于需要将代码提交到课程网站进行评测,因此我最后在远程仓库中删除了test文件,在仓库中看不到该文件
Github Actions
我建立了一个仓库来放置我的OO评测机并尝试测试。很遗憾,由于我并未解决所有问题,因此最终没能运行出最终结果。不过,大部分步骤仍然成功完成,以下是部分运行截图:
感受:Gitlab CI提供了多种API供用户使用,而GitHub Actions则可以选择他人编写的actions文件模板直接使用,利用现成的模板可以减少不必要的工作。整体感觉Gitlab CI比Github Actions好用,可能是Gitlab我不太会配置相关环境所致。配置完成后,可以直接在网站上查看运行结果,还是相当方便的。