项目 内容
这个作业属于哪个课程 2021春季软件工程(罗杰 任健)
这个作业的要求在哪里 个人阅读作业#2
我在这个课程的目标是 通过课程学习,完成第一个可以称之为“软件”的项目,同时了解软件工程中用到的方法,确定自己的职业目标
这个作业在哪个具体方面帮助我实现目标 快速了解《软件工程》这门学科研究的内容,同时学习完成软件项目必不可缺的工具

BUAA_2021_SE_READING_#2

1. 教材提问

  • 由于我还没有买到教材,参考的是邹欣老师的博客

1.1 单元测试应由谁来写?

在这篇讲义中,老师提到这么一段话:

单元测试必须由最熟悉代码的人(程序的作者)来写。

代码的作者最了解代码的目的、特点和实现的局限性。所以,写单元测试没有比作者更适合的人选了。

问:如果我很忙,能不能让别人代劳做单元测试?

答:如果忙到连单元测试都没有时间做,那么你也没有时间写好这个功能。在一些极限编程的方法中,是可以考虑让别人来做单元测试的,但是,程序的作者还是要对单元测试负责。最好是在设计的时候就写好单元测试,这样单元测试就能体现API的语义,如果没有单元测试,语义的准确性就不能得到保障,以后会产生歧义。

我个人对此不是很存在疑问,在我个人的开发经历中,作为一个基本的开发者,对于程序的架构或者整体的设计性的任务,我们几乎接触不到,所做的都是在有限的框架下,进行一个“填空式”的开发,对于此,每个“空”的需求已经十分清晰了,如果让开发者自己编写单元测试,即使代码覆盖率提上去了,那真的能做到对需求的全覆盖么?

1.2 关于结对编程理论的提问

在这篇讲义中,老师提到这么一段话:

结对编程不是程序开发者独到的发明,在现实生活中,也存在着类似的搭档关系(Partnership):

越野赛车(驾驶,领航员)

驾驶飞机(驾驶,副驾驶)

战斗机的编组(长机,僚机)

提示:这些任务都有共同点:在高速度中完成任务,任务有较高的技术要求,任务失败的代价很高。

这些项目设计两人(或)两组人,真的是要提高效率或是互相提醒么?这些项目真的和软件项目开发十分类似么? 我个人认为,随着现在仪表电子化水平越来越高,驾驶越野赛车,驾驶飞机等任务完全可以由一个人来完成,而之所以设置两人共同完成这个任务,是因为为了防止出现特殊情况下一人失能,而安排的双人执勤,或是由一个资历较老的操作人员,带领一个新上岗的或是学员来完成任务,是一种教学行为。事实上,对于以前飞机仪表复杂的年代,曾经出现过>=三人的机组配置,实际上确实需要这么多人同时完成任务,才能保证任务的顺利完成。

而软件开发是么?真的需要两个人同时进行且交换身份同时审视,才能高效的完成任务么,我对此存疑。在软件开发过程中,不同人同步进度,互相提问是必不可少的,但是我认为,两人以这种模式结对开发,我对此保留意见。

1.3 关于团队的提问

在这篇讲义中,老师提到了很多种类的团队。

在这篇讲义中,老师使用动物对团队成员进行比喻。

对于我们的小作坊课程组建的临时团队,如何确定每个人应该是哪种“动物”,各种动物的比例应该是多少,如何防止,一人有难,八人围观局面的产生。

1.4 关于需求的提问

在这篇讲义中,老师提到了NABCD。

在这篇讲义中,老师提到了用户调研。

对于某些公司的某些产品,在发布时显然发布了与用户所需要的不符的产品(比如iPhone取消耳机接口,多家厂家纷纷效仿,最终也获得成功,成功的推出了airPods)。请问真的需要那么考虑客户所需么,还是可以学苹果如此“戏弄”客户。

1.5 关于绩效的提问

在这篇讲义,老师讲了绩效相关

请问老师,您如何看待在以往的软件工程课程中,同学互当老好人,实行“共产主义”。

可能还有更多的问题在我仔细阅读中会一步一步的显露出来,由于时间紧张,本人阅读速度过快,所以不能面面俱到

2. 调研持续集成/部署工具

由于我个人之前仅使用过gitlab和github作为代码的远程仓库,本次我就选择Gitlab CI和Github Action来进行学习和实验。

2.1 Gitlab CI

仓库地址:传送门

2.2 Github Action

仓库地址:传送门

2.3 对比及感受

  • 两者的yml写法还是有所不同,在之后的学习中要更加细致的学习,今天知识一个简单的测试实验,使用了OOpre作业的代码。
  • 这种集成工具,对代码质量有了一定提升,至少对于新加入的代码,在merge或push时都会过一下pipeline
  • 部署的每一个步骤都可视化
  • Gitlab 的 CI/CD 需要指定镜像
  • Github Action 有许多插件可以直接使用

BUAA_2021_SE_READING_#2的更多相关文章

  1. BUAA_2021_SE_READING_#1

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 个人阅读作业#1 我在这个课程的目标是 通过课程学习,完成第一个可以称之为"软件"的项目 ...

随机推荐

  1. 对DevOps的九大误解,是时候纠正了!

    DevOps是开发和运维的结合,有助于集成和自动化测试过程以及部署存储库,还提供了透明度以及灵活性.DevOps的目标如下: ●更快的上市时间(TTM). ●减少各种修复之间的前置时间.●提高部署频率 ...

  2. 21_MySQL表外连接实战

    -- 查询每名员工的编号.姓名.部门.月薪.工资等级.工龄.上司编号.上司姓名.上司部门? SELECT e.empno,#员工编号 e.ename,#员工姓名 e.deptno,#员工部门 e.sa ...

  3. Golang 实现 Redis(9): 使用GeoHash 搜索附近的人

    本文是使用 golang 实现 redis 系列的第九篇,主要介绍如何使用 GeoHash 实现搜索附近的人. 搜索附近的POI是一个非常常见的功能,它的技术难点在于地理位置是二维的(经纬度)而我们常 ...

  4. vue版本一直是2.9.6版本,卸载也卸载不掉,更新也更新不了

    原文链接:https://blog.csdn.net/zlzbt/article/details/110136755 主要是找到本地文件 E:\StudyFile\VueStudy λ where v ...

  5. PythonPEP8 风格规范指南

    PEP是Python Enhancement Proposal的缩写,通常翻译为"Python增强提案".每个PEP都是一份为Python社区提供的指导Python往更好的方向发展 ...

  6. 缓存cache和缓冲区buffer

    一.cache 1.cache的定义.从宏观上讲,缓存是处理速度不匹配的问题.可以是静态缓存(内存缓存.磁盘缓存).动态缓存(前端的缓存)和数据库缓存.另一个角度,从CPU来看,可以是寄存器和内存之间 ...

  7. Python 过滤字母和数字

    [前言]在写爬虫时,正则表达式有时候比较难写,一个是自己不熟练,二者数据分析提取数据千奇百怪. 一.好在python有个re模块,提供了很多更加简便的方法:可参考此文档:https://www.cnb ...

  8. Java网络编程UDP通信原理

    前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信   TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...

  9. Git:本地仓库管理

    git log:查看 commit 提交历史 git log --pretty=oneline:简化log输出内容 git reflog:查看每一次命令的历史记录 版本回退 git reset HEA ...

  10. 剑指 Offer 26. 树的子结构

    剑指 Offer 26. 树的子结构 Offer 26 题目详情: 题解分析 解法一: 第一种比较容易想到的解法就是查看这两棵树的前序遍历和中序遍历序列是否都匹配. 因为前序遍历和中序遍历可以唯一确定 ...