说明

项目 内容
这个作业属于哪个课程 2021春季软件工程 (罗杰 任健)
这个作业的要求在哪里 个人阅读作业#2
我在这个课程的目标是 初步获得软件工程师的能力
这个作业在哪个具体方面帮助我实现目标 了解软件开发的大概流程,了解CI/CD流程

我的疑惑

1.低层次的问题能依赖工具解决么?

关于这个问题首先是在书中第三章中关于软件工程师的成长上讨论,书中描述了一个软件工程师的面试时一直在解决低层次的问题

  • 嗯,怎么开始一个C#的命令行程序呢?
  • 定义数组是怎么弄的?是“int [] arr”还是“int arr[]”,
  • 还是ArrayList, 还是Array。哦,我平时都是上网查的。哦,我不知道还有MSDN 网站。
  • 嗯,为什么编译没过呢,哦,这里少一个分号。
  • 嗯,怎么设断点?怎么定义命令行参数?额

书中认为一个精通xx的人应该能够解决高层次问题,而解决高层次问题要首先通过不断练习来解决掉低层次问题,才能有脑力解决高层次问题。

那在各种IDE越来越成熟的今天,像数组定义,函数名称这些IDE的自动补全都能做得非常好,另外一些像编译的依赖,断点设置,用现成的工具也能很好解决。

那能不能利用工具解决掉大部分份低层次的问题,直接去解决高层次问题呢?或者说什么时候该用工具解决什么时候该去练习呢呢?

2.什么情况下该使用C++中的类?

书中4.3节代码设计规范关于C++的类中提到

仅在必要时,才使用“类”

那什么情况才能称为必要情况呢,考虑我们最近的一个编程作业:

读入一张图片,对该图片的直方图均衡化,最后画出该图片的均衡画前的直方图和图片本身。

这种情况下我可以写很多个不同的函数,每个函数处理不同的功能,然后设计一些全局的容器来存储直方图的相应信息,也可以写一个大的类来把相关函数和信息集成,两者都能完成任务,且编写时间差不多,但是第一种可能所有函数散在不同地方,可读性和逻辑性较差,那我该使用类吗?如果不该,那什么情况能够称为必要的情况呢?

3.团队该如何制定规范

书中第五章的课后讨论讲到

很多流程的目的是帮助大家减少风险,确保质量,但是流程未必全 都是正面作用。请看下面的故事:

走6天流程改一行代码:https://www.iteye.com/news/25109这种情况需要改进么,如何改进?

对于一群没有实际经验的学生来说,有如此之多的设计流程和理论,那我们在开发的过程中是否应该制定例如每日例会的这样的规范,应该在开发流程的什么阶段设计规范,团队开发规范是否也能像软件功能需求一样进行更改?

4.创新不需要考虑实际问题吗?

书中16.1章创新迷思二中给出了一些反对创新人的观点

  • 这从来就行不通
  • 没有人需要这些方案 在实际中根本行不通 大众不会理解这个创新
  • 你的创新要解决的根本就不是一个问题
  • 你的创新要解决的是一个问题,但是没人关心这个问题
  • 这个问题早就被完全解决了

这些问题固然可能是某些反对创新者的武器,但是在实际创新过程中,这些不都是非常实际的问题吗,难道创新的过程中不需要考虑这些问题吗?

5.软件的缺陷是否应该在规格书中说明?

书中10.3章提到规格书中应该写出好的功能的副作用

一些好的功能还会有副作用。我们要把这些副作用明明白白地 写出来。例如:美国很多地区用节能灯(LED)代替了原来的白炽 灯,装在交通灯上。这一措施虽然节能,但是LED发热少,下雪天不 能融化灯面的积雪,导致出现交通问题。当初的Spec务必要把这一副 作用(危险)给写出来。

书中15.1章也提到优秀的软件团队会发布有已知缺陷的软件。

那么如果发布的软件有已知缺陷是否也应该在规格书中写明呢?

源代码版本管理软件调研

相同点

都是基于web的git仓库(bitbucket还支持Mercurial),提供代码存储、发布、分享,在线编辑,团队管理等功能。

不同点

github gitlab Bitbucket
仓库管理 提供免费的公有库和小型团队私有库 免费公有库和私有库,提供更加完善的仓库权限管理 小型私有库免费
教育支持 github education提供面向教师和学生的社区,还有免费的Student Developer Pack和相关的教学工具
VCS支持 github importer 支持从其他的VSC中导入仓库 只支持git控制仓库 支持从其他VSC中导入
团队架构 organization/team架构,不支持team的导入导出 为groups结构,支持group导入导 workspace/project,project下是一系列仓库。

CI/CD调研

两次CI/CD测试都是使用的OO第一单元多项式求导的代码

gitlab

demo地址

使用maven+junit5.4测试,使用local-registry.inner.buaaoo.top/image-dev/java:11镜像

github Action

demo地址

同样maven+junit5.4测试,利用actions/setup-java@v1的提交来配置java环境

特点&分析

github

  • 可以通过jobs.steps.uses来引用被人的action库,支持参数传递

  • job在不同平台运行

  • 更加完善的文本和教材,更好的界面

gitlab

  • 配置相对简单
  • 可以支持一些更加复杂的定制

总的来说两个CI/CD工具都可以完成自动部署和自动测试的功能,github的action和github平台更好地衔接,可以引用github库,还支持一些除了CI/CD之外的特性,譬如狙击白嫖怪,很符合开源社区的定位。而gitlab的CI/CD则更加注重对性能功能的一些定义,更加符合商用。

对比

关于两者的对比,区别很多,很细,具体的以有前人细致整理

阅读作业2&CI/CD调研的更多相关文章

  1. 《构建之法》& CI/CD调研

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 2021年软工-个人阅读作业2 我在这个课程的目标是 提升软件开发能力与团队意识 这个作业在哪个具体方面帮助 ...

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

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

  3. 个人阅读作业#2——软工模式&CI/CD

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 从实践中学习软件工程相关知识(结构化分析和设计方法.敏捷开发方法.软 ...

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

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

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

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

  6. 构建之法与CI/CD

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 个人阅读作业2 我在这个课程的目标是 认识软工,拥抱软工,提升相关能力以便日后与其朝夕相伴 这个作业在哪个具 ...

  7. 【软件工程】《构建之法》 & Git+ & CI/CD

    <构建之法> & Git+ & CI/CD 个人阅读作业#2 项目 内容 本作业所属课程 2020春季软件工程(罗杰 任健) 本作业要求 个人阅读作业#2 我的课程目标 具 ...

  8. 通读《构建之法》与CI/CD工具尝试

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 作业要求 我在这个课程的目标是 积累软件开发经验,提高工程能力 这个作业在哪个具体方面帮助我实现目标 通读课 ...

  9. 2021S软件工程——个人阅读作业2

    2021S软件工程--个人阅读作业2 项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任建) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 了解并熟悉软件开发的具体流程, ...

随机推荐

  1. Baccarat如何点燃DEFI市场?

    目前DeFi是成为了各大生态的"兵家必争之地",与此同时DeFi的高收益也成为吸引散户入局的一个利器.而虽然流动性挖矿板块近期的温度有所下降,但是这其中不乏还是有很多收益颇丰的De ...

  2. 一文读懂Servlet

    1 Servlet简介 Servlet就是sun公司开发动态web的一门技术 Sun在这些API中提供一个接口叫做:Servlet. 开发一个Servlet程序,只需两步: 编写一个类,实现Servl ...

  3. vue项目配置 `webpack-obfuscator` 进行代码加密混淆

    背景 公司代码提供给第三方使用,为了不完全泄露源码,需要对给出的代码进行加密混淆,前端代码虽然无法做到完全加密混淆,但是通过使用 webpack-obfuscator 通过增加随机废代码段.字符编码转 ...

  4. 逆向基础 C++ Primer Plus 第二章 开始学习C++

    C++ Primer Plus 第二章 开始学习C++ 知识点梳理 本章从一个简单的C++例子出发,主要介绍了创建C++程序的步骤,以及其所包含的预处理器编译指令.函数头.编译指令.函数体.注释等组成 ...

  5. Dockerfile怎么用

    目录 Docker的Dockerfile 1.常用命令 2.使用Dockerfile创建镜像 Docker的Dockerfile Dockerfile是由一系列命令和参数构成的脚本文件,这些命令应用于 ...

  6. 更换 grub 主题

    默认的 grub 界面比较简陋 然后突然有想法了,想换个主题 具体操作 1.下载 grub 主题包 去这个地址下载主题(应该是这个地址): https://www.gnome-look.org/bro ...

  7. 后端程序员之路 20、python复习

    Welcome to Python.orghttps://www.python.org/ 怎么用最短时间高效而踏实地学习 Python? - 知乎https://www.zhihu.com/quest ...

  8. ZooKeeper未授权访问漏洞确认与修复

    目录 探测2181 探测四字命令 用安装好zk环境的客户端连接测试 修复 修复步骤一 关闭四字命令 修复步骤二 关闭未授权访问 zookeeper未授权访问测试参考文章: https://www.cn ...

  9. C++多文件结构和预编译命令

    下面随笔将给出C++多文件结构和预编译命令细节. 多文件结构和编译预处理命令 c++程序的一般组织结构 一个工程可以划分多个源文件 类声明文件(.h文件) 类实现文件(.cpp文件) 类的使用文件(m ...

  10. Cloudam云端携手高校探索云计算在生命科学领域的应用

    随着云计算服务和实践的成熟,越来越多的行业对于云计算的需求也日益增加.不同行业的需求与云计算融合,就需要更大的算力支撑.这也意味着,云计算的需求市场日渐扩大,Cloudam云端自主研发的云E算力平台应 ...