项目 内容
这个作业属于哪个课程 2021春季软件工程(罗杰 任健)
这个作业的要求在哪里 个人阅读作业#2
我在这个课程的目标是 从实践中学习软件工程相关知识(结构化分析和设计方法、敏捷开发方法、软件测试、软件项目管理、软件开发工具和环境等),培养合作开发能力
这个作业在哪个具体方面帮助我实现目标 通过阅读全面了解软件工程的方法论和具体模式流程,同时调研版本管理软件和持续集成/部署工具

一、阅读提问

1. 软件的行为和用户的期望值不一样,一定是 Bug 吗?

1.2.4 节软件工程的目标中有这样一句话

什么是 Bug 呢?简单地说,软件的行为和用户的期望值不一样,就叫做 Bug。

我想到这个问题:软件的行为和用户的期望值不一样,就一定是 Bug 吗?

我查阅了维基百科,其对 Bug 的描述是这样的

是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。

根据我的实践,软件的行为与用户的期望值不同可能是出于开发者与用户的期望并不一致,也可能是受运行环境等因素影响。因此我认为,软件行为和用户期望不一致,并不能直接断定是程序本身的错误,也就不好直接定义为 Bug。

2. 变量的命名方法如何选择?各种场景下命名规范的形成有什么内在的原因?

4.2 节代码风格规范中提到

还有一些地方不适合用“匈牙利命名法”,比如,在一些强类型的语言(如 C#)中,对类型有严格的要求,不同类型的值是不能做运算的...在这类语言中,前缀就不是很必要。

这是“匈牙利命名法”的一个不适用场景的分析,我想知道对于其他语言和命名方法,具体情况是怎么样的,因此有了这个问题。

我查阅了一些资料,主流的变量命名方法有 Pascal、Camel 和匈牙利命名法,在一个程序中,这些方法可能是可以交替使用的,比如类使用 Pascal 命名法,而变量使用 Camel 命名法。在使用 IDEA 和PyCharm 两个 IDE 时,能够发现其对于变量的命名有着不同的规范;同时阿里的开发手册上也有对于变量命名的要求。因此我有这样的疑惑,命名方法的选用需要考虑哪些方面的因素,在不同语言和不同科技公司中不同的命名规范是怎么形成的?

3. 如何理解 TSP 原则中”团队的各个成员对团队的目标、角色、产品都有统一的理解“

5.3.7 节讲述 TSP 的原则有下面一条:

  1. 团队的各个成员对团队的目标、角色、产品都有统一的理解

在一个较大规模软件系统开发中,不同开发者面对的可能只是其中几个功能模块,那么他需要对产品有全局的理解吗?前文也提到,遵循一些设计原则通常会带来一些高昂的代价,类似地,我认为遵循 TSP 的这条原则也需要付出不小的沟通成本。这条原则是否对于大规模的团队模式不再适用?或者说对产品“统一的理解”只局限在自己需要理解的部分?

4. 采用用户调查问卷进行调查时,是否需要设置有效性检查?

8.3 节讲述用户调研方法时提出,可以使用用户调查问卷进行用户调研

用户调查问卷看似容易,其实大有门道

文中列举了一些常见的问卷设置错误,对我很有启发。我想到在我的实际体验中,用户调查问卷有不小的概率并不会得到用户认真的对待。查阅资料后发现,有些调查者会在用户问卷中加入个别特殊的问题,判断作答者是否是认真完成问卷,但代价是可能会引起少量被调查者的反感。那么我们在发放用户调查问卷时,是否需要设置这样的问题?

5. 二维绩效评定体系是否有普适性?团队贡献如何量化?

17.6 节绩效管理中提到:

有些公司实施过二维的评价体系:

完成任务维度:...

团队贡献维度:...

比起单纯根据代码量或者根据犯错频率评定绩效,这种二维评价体系在全面性和合理性上都有明显的进步,但是我认为团队贡献的量化本身存在一定的困难。在我曾经参与的一个课题中,起步阶段有一个被划分成几部分的论文集,每个人需要阅读其中一部分,寻找可以应用于项目的方案。大家都很好地完成了阅读任务,但是最终只会采用一个方案,那么读到这个方案的人是否对团队有着更突出的贡献?在软件开发团队中是否会有类似的大家分别探路的情况?此时如何对团队贡献分级?

二、调研源代码版本管理软件

主要调研了 GitHub 和 GitLab,比较它们之间的异同

相同之处

  • 都是使用 Git 作为代码管理工具的代码托管平台
  • 在团队流程中,开发者需要先进行 fork(并不是 Git 原生的功能),以完成服务端的代码仓库克隆

不同点

  • GitHub 在很长一段时间里,对私有仓库收费,但 GitLab 一直支持免费的私人仓库搭建
  • 从使用现状来看, GitHub 是最火爆的开源项目托管平台,其中不乏知名开源项目Spring、MyBatis、React、Vue等;而 GitLab 是企业端 Git 仓库的首选,也是各种私有化项目的优选
  • GitLab 的下列特性,可能使得其在私有化项目管理上更加便利:
    • 允许用户选择分享一个 project 的部分代码
    • 允许用户设置 project 的获取权限
    • 通过 innersourcing 让不在权限范围内的人访问不到该资源

三、调研持续集成/部署工具

选用 2020_oo 第三单元第一次作业进行测试,这是仓库

Pipelines:

点击 Stages 下的小圆圈可以看到详细信息:

这是 GitHub 上的仓库

这是测试效果:



(本次测试内容只是一些简单的 assert)

需要注意的点是,maven 倾向于使用约定而不是配置,在约定下,源代码和测试文件均有指定的位置。当源文件和测试文件没有放置在正确的目录下,就可能出现 No tests to run 或者 Cannot find symbol 错误。(没有自己创建过 maven 项目,以为 reimport 就万事大吉了,不知道还有这种约定,白白耗费了许多时间QAQ)

查阅资料,结合实际体验,得到 GitLab CI/CD 和 GitHub Actions 有如下共同点:

  • 工作流由多个任务构成
  • 使用简单的 yaml 格式文件配置工作流
  • Self Hosted and .com

GitLab CI/CD 还有如下优势:

  • CI/CD 整合程度很高,完全不依赖第三方插件
  • 可以进行自动化的 CI/CD Pipeline 配置

而在 GitHub 中,可以很方便地集成他人的action。

个人阅读作业#2——软工模式&CI/CD的更多相关文章

  1. 软工2021个人阅读作业#2——构建之法和CI/CD的运用

    项目 内容 这个作业属于哪个课程 2021学年春季软件工程(罗杰 任健) 这个作业的要求在哪里 2021年软工-热身阅读作业#2 我在这个课程的目标是 了解和掌握现代软件开发和项目管理技术,锻炼在大规 ...

  2. 团队第一次作业(软工C#造梦厂)

    一.团队简介 a.团队名称:软工C#造梦厂 b.队员列表 姓名 学号 张旭(组长) 201731024123 周成杰 201731024136 邹扬锋 201731024134 赵俊安 2017310 ...

  3. [2021BUAA软工助教]个人第一次阅读作业小结

    BUAA个人阅读作业小结 一.作业要求 https://edu.cnblogs.com/campus/buaa/BUAA_SE_2021_LR/homework/11776 二.评分规则 言之有物,按 ...

  4. 软工个人阅读作业2 —— 构建之法与CI/CD

    项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 阅读思考教材,调研软工工具 这个作业在哪个具体方面帮助我实 ...

  5. 【软工作业&思考】关于软工的一些概念性理解暨第一次阅读作业

    概述 项目 内容 本次作业所属课程 2019BUAA软件工程 周二班 本次作业要求 第1次个人作业当然,比这个更重要百倍的还是实实在在的思考,这也是标题如此命名的原因 我在本课程的目标 在原有实践经验 ...

  6. [BUAA软工]第一次博客作业---阅读《构建之法》

    [BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...

  7. [2017BUAA软工]个人阅读作业+总结

    阅读作业 没有银弹 No Silver Bullet - Essence and Accidents of Software Engineering - Brooks 在这篇论文中,作者阐述了软件的四 ...

  8. [BUAA2021软工助教]个人阅读作业#2小结

    作业链接 见个人阅读作业#2 优秀作业推荐 Shaun_Yao ✍️ 道法之间--软工第2次博客作业 Potassium ✍️ 构之有道,建之有法--软工个人阅读作业#2 MarkDay ✍️ < ...

  9. 软工网络15个人作业4——alpha阶段个人总结

    软工网络15个人作业4--alpha阶段个人总结 一.个人总结 用自我评价表:http://www.cnblogs.com/xinz/p/3852177.html 总结Alpha冲刺过程. 由于直接用 ...

随机推荐

  1. PM2 in depth

    PM2 in depth ecosystem.config.js module.exports = { apps : [{ name: "app", script: ". ...

  2. 1月加密货币交易所访问量破3亿!NGK生态星空计划、NGK生态所带来双重利好!

    据最新数据显示,2021年一月份,加密货币交易所网站的访问量急剧上升.约有3.44亿访问者涌入了加密货币交易所,超过2020年12月的1.96亿访问者总数,创2018年1月以来新高. 加密货币交易所网 ...

  3. 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解

    本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...

  4. window.onresize绑定事件以及解绑事件

    问题描述 在Vue工程中,添加样式,部分需要做到自适应,需要添加resize事件,由于是单页面应用,如果组件初始化的时候绑定事件,在切换页面的时候不去注销事件,如果来回切换,会让resize事件执行多 ...

  5. 小白养成记——Java比较器Comparable和Comparator

    一.使用情景 1.  调用Arrays.sort()方法或Collections.sort()方法对自定义类的对象排序 以Arrays.sort()为例.假定有如下自定义的Person类 1 publ ...

  6. JavaScript async/await:优点、陷阱及如何使用

    翻译练习 原博客地址:JavaScript async/await: The Good Part, Pitfalls and How to Use ES7中引进的async/await是对JavaSc ...

  7. finally会执行吗:try/catch的测试

    翻译练习 原博客地址:Will it finally: a try/catch quiz 你知道try和catch是怎么工作的,但是你知道finally是怎么工作的吗?它是在抛出异常后执行还是在ret ...

  8. ADT基础(三)—— HashMap

    ADT基础(三)-- HashMap 1 哈希表 哈希表(hash table),也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维 ...

  9. 【知识点】 gcc和g++的联系和区别

    目前(2020-09)GCC 编译器已经更新至 10.2版本,其功能也由最初仅能编译 C 语言,扩增至可以编译多种编程语言,其中就包括 C++ . 除此之外,当下的 GCC 编译器还支持编译 Go.O ...

  10. 记一次Linux内核崩溃:kdump,crash,vmcore

    原理 Linux内核发送崩溃时,kdump会生成一个内核转储文件vmcore. 可以通过分析vmcore分析出内核崩溃的原因. crash是一个被广泛应用的内核奔溃转储文件分析工具.使用crash调试 ...