软工2021个人阅读作业#2——构建之法和CI/CD的运用
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2021学年春季软件工程(罗杰 任健) |
这个作业的要求在哪里 | 2021年软工-热身阅读作业#2 |
我在这个课程的目标是 | 了解和掌握现代软件开发和项目管理技术,锻炼在大规模开发中的团队协作能力 |
这个作业在哪个具体方面帮助我实现目标 | 阅读教材,在自学、发问、回答这个步骤中了解软件工程中基本概念;初步学习CI/CD相关概念和运用 |
阅读提问
问题一:个人在团队中应该只是一个流水线上的机器吗?
教材P47有如下段落:
软件开发有很多个人的、感情驱动的因素……我总觉得灵感是属于业余爱好者的。我们职业人士只是每天持续工作。今天你继续昨天的工作,明天你继续明天的工作,最终你会有所成就。
在作者关于团队对个人的希望这一小节中,为了说明个人需要在工作中保持理性,引用了Chuck Close所说,但是在我看来,灵感更是一个专业人士所需要的素质,固然在一个团队的合作中,按照规定的代码风格、项目流程来进行开发是极为重要的,但这与灵感和创造力并不冲突。在教材P51页中谈及了人们对职业的态度有哪些等级,对于那些处于第五层——理想的呼唤的人们而言,这不仅仅是工作,更是一种创造。
问题二:结对编程对于在二者能力有一定差距的情况下,其作用到底在“代码复审”还是在“人肉教程”?
教材P79有如下段落:
每个人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。
结对编程是代码复审的一种极致,在两人成组的代码开发中,“领航者”能够更好的监督正在编写程序的一方以免“偏航”,然而,面对能力较为悬殊的两人,能力较弱者在行使审查机制时,是否真的能高于能力较强者的自我审查的作用呢,而能力较弱者在进行代码实现中,能力较强者的审查机制有极大的可能成为另一种编写代码的方式——即你说一句,我写一句,这无论从对于二者的公平性上,还是对开发的效率上,抑或是结对编程所期望的复审机制上,都无从谈起,倒不如是说“带新人”。
问题三:激励一个敏捷的团队的动机是什么?
教材P116有如下段落:
自主管理:以前领导布置了任务,我们实现就可以了,现在要自己挑选任务;每次Sprint结束之后,还要总结不足,提出改进,并且自己要实施这些改进。“自主管理”不等于“没有管理”。
敏捷团队能够不断迭代开发,及时跟进用户需求并保证进度推进和质量,其最重要的能力在于自主管理,然而,对于一个敏捷团队而言,什么是激励他们自主管理和不断迭代的动机呢,或者说,该怎样对敏捷团队整体的贡献进行评价呢,团队内部可以从分工和任务中评判个人贡献度,但是从一个公司的角度,对于敏捷团队的的贡献,应该是用户的满意程度,抑或是迭代开发的次数,还是完成项目的时间花费呢?从哪种角度进行考核,来产生一个既能够激励敏捷团队跟进用户、不断迭代、自我纠错,又能够合理的评价其贡献的方法。
问题四:WBS在分而治之中如何避免子节点的相互覆盖?
教材P178有如下段落:
做好WBS的几个要点:
- 保证所有子节点覆盖了全部父节点包含的内容。
- 保证各个子节点不要相互覆盖。
我们在实际的项目划分中,很难做到真正的将子节点任务完全划分开来,在有些任务中,会出现“我中有你,你中有我”的情况,例如,假设在用户注册部分,输入密码中必须包括大小写字母,然而,这一部分的实现可以在前端进行处理后提示用户,也可以在后端处理后反回拒绝注册的信息,在此时,二者在划分中就产生了重合。上例描绘的较为牵强,但是在笔者进行开发的过程中,常常出现分配任务中有着不可避免的重叠而发生类似“三不管地区”的情况,因此,产生了是否真的能够保证WBS进行子节点划分时不产生重叠的方法。
问题五:渐进发布对于用户使用体验和市场评价的影响?
教材P331有如下段落:
又如微软公司在Windows10的发布过程中,同样采用了不同目标人群+不同发布频率的方式:……
自从Windows10以来,微软改变以往大版本更新,采用每半年进行一次小幅度更新的方法提供最新的操作系统,与此同时,也带来了Canary、Windows Insiders等体验版本,然而,这些版本在使用中不够稳定,在我平日的使用中,常常出现蓝屏等现象,大大降低了使用体验,并且,在20H1稳定版本中依旧出现了大面积严重Bug的问题,导致微软更新不得不设置门槛,在这种渐进发布和小版本迭代中,虽然确实能够看到系统在功能上的不断丰富,但操作系统作为个人电脑使用的基础和核心,稳定性是其核心竞争力,然而,在Insiders版本的大量使用和正式版依旧不够稳定的状况下,确实影响到了用户对于这款操作系统的评价,因此,渐进发布的弊端该如何去降低,又如何达到一个利弊的平衡点呢。
问题六:创新者不是一马当先吗?
教材P345有如下段落:
其实,大部分成功的创新者都不是先行者,例如搜索引擎,Google是很晚才进入这个领域的。又如Apple的音乐播放器iPod……
创新不仅仅在于你是否是这个领域的开拓者,Google能拥有世界绝对优势的市场份额,只是因为他很幸运?其搜索引擎依靠算法优势,依靠对用户需求的把握,依靠自身建立起来的Gmail、YouTube等等产品所打造的巨大王国所支撑着,这些都不是创新吗?Apple依靠对美和艺术的产品抓住了用户的心,虽然音乐播放器、手机等早已出现很久,但设计感这种创新依旧让他成为巨鳄。创新不是狭义的仅仅开创了这个领域的产品才叫创新,更何况,如果智能手机的开创者是先行者,大哥大对于智能手机而言又是什么呢。
问题七:刷课软件是否合乎道德和公平?
教材P410有如下练习题:
- 刷课软件和刷票软件
……
大家都喜欢给分高又可以摸鱼的大水课,然而,这种课总是人满为患的,以前,大家准时等待电脑屏幕面前拼手速,现在,大家一个个写起了脚本软件拼技术。对于这个问题,没有一个法律规定抢课是违法的,但从道德的角度思考,抢课软件是否合乎我们的道德观念呢。有人说,不是所有人都会写脚本软件,只有你这种计算机学院的同学学过这个,这种技术上的不公平,难道真的合适吗?但也有人说,我花了时间学习技术,花了时间实现软件,这就是我应得的报酬,有什么不合适?你行你上啊?而且又不是没课选不能毕业了,有能力就值得更好的。这个问题真的很矛盾,双方各自站在自己的利益上考虑,又谈什么公平与否呢,如何对这种行为的道德或公平与否下结论,真的很让人迷惑。
调研源代码版本管理软件
Github和Gitlab的相似之处
- Github和Gitlab都是基于web的git仓库,在很大程度上gitlab是仿照github来做的,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化存储的场所。
- GitLab和GitHub提供了一个简单的问题跟踪器,可让您同时更改多个问题的状态和受让人。
- GitLab和GitHub均提供了广泛的第三方集成。将版本控制系统与其他应用程序集成在一起可以充实您的工作流程,并可以提高开发人员和非开发人员的工作效率。
Github和Gitlab的不同之处
GitLab与GitHub之间的最大区别之一是GitLab的内置持续集成/交付。对于许多开发团队而言,CI可以节省大量时间,并且可以作为一种质量保证的好方法。GitLab免费提供自己的CI,无需使用外部CI服务。
Features GitLab GitHub released September 2011 April 2008 Free plans Unlimited public and private repositories Free for public repositories only Paid plans Starts at $39 per user per year Starts at $84 per user per year Code review features yes yes Wiki yes yes Bug & issue tracking yes yes Private branch yes yes Build system yes yes (with 3rd party service) Import projects yes no Export projects yes no Time tracking yes no Web-hosting yes yes] Self-hosting yes yes (with enterprise plan) Popularity 546.000+ projects 69.000.000+ projects
调研持续集成/部署工具
GitLab CI
使用OO第一单元第一次作业
新建Maven项目并部署在GitLab仓库
push到远程仓库,开始运行pipeline
GItHub Action
依旧使用OO第一单元第一次作业进行部署
配置WorkFlows并push入远程仓库开始部署
使用CI和CD工具后的看法
- GitHub Actions的每个job中的steps更像GitLab CI中的stages,二者这种细分、渐进式的持续部署方式,简化了大规模部署的复杂性。
- CI/CD工具利用git仓库帮助我们同步、管理源码,并且在此基础上持续集成、部署,让迭代开发更加自动、方便。同时,也提供了相应测试代码覆盖度显示等功能,更人性化、自动化的帮助测试人员进行回归测试、单元测试等等。
- 个人觉得GitHub Actions还不够完善,且在使用中不如GitLab CI容易上手。
软工2021个人阅读作业#2——构建之法和CI/CD的运用的更多相关文章
- [BUAA2021软工助教]个人阅读作业#2小结
作业链接 见个人阅读作业#2 优秀作业推荐 Shaun_Yao ✍️ 道法之间--软工第2次博客作业 Potassium ✍️ 构之有道,建之有法--软工个人阅读作业#2 MarkDay ✍️ < ...
- [2019BUAA软工助教]第一次阅读 - 小结
[2019BUAA软工助教]第一次阅读 - 小结 一.评分规则 总分 16 分,附加 2 分,共 18 分 markdown格式统一且正确 - 2分 不统一:扣 1 分 不正确:扣 1 分(例如使用代 ...
- [BUAA软工]第一次博客作业---阅读《构建之法》
[BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...
- 软工网络15个人作业4——alpha阶段个人总结
软工网络15个人作业4--alpha阶段个人总结 一.个人总结 用自我评价表:http://www.cnblogs.com/xinz/p/3852177.html 总结Alpha冲刺过程. 由于直接用 ...
- 福大软工 · 第十一次作业 - Alpha 事后诸葛亮(团队)
福大软工·第十一次作业-Alpha事后诸葛亮 组长博客链接 本次作业博客链接 项目Postmortem 模板 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描 ...
- 软工网络15团队作业4——Alpha阶段敏捷冲刺1.0
软工网络15团队作业4--Alpha阶段敏捷冲刺1.0 1. 各个成员在 Alpha 阶段认领的任务,以及整个项目预期的任务量(使用整数表示,与项目预估的总工作小时数一致.比如项目A预估需120小时才 ...
- 软工网络15团队作业4——Alpha阶段敏捷冲刺2.0
软工网络15团队作业4--Alpha阶段敏捷冲刺2.0 1.提供当天站立式会议照片一张. 2.每个人的工作 成员 昨天已完成 今天计划完成 郭炜埕 熟悉微信web开发者工具 完成新建话题界面的设计 郑 ...
- 软工网络15团队作业4——Alpha阶段敏捷冲刺3.0
软工网络15团队作业4--Alpha阶段敏捷冲刺3.0 1.每天举行站立式会议,提供当天站立式会议照片一张. 2.项目每个成员的昨天进展.存在问题.今天安排. 成员 昨天已完成 今天计划完成 郭炜埕 ...
- 软工网络15团队作业4——Alpha阶段敏捷冲刺4.0
软工网络15团队作业4--Alpha阶段敏捷冲刺4.0 1.每天举行站立式会议,提供当天站立式会议照片一张. 2.项目每个成员的昨天进展.存在问题.今天安排. 成员 昨天已完成 今天计划完成 郭炜埕 ...
随机推荐
- C++算法代码——你要乘坐的飞碟在这里[usaco]
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1056 题目描述 一个众所周知的事实,在每一慧星后面是一个不明飞行物UFO. 这些不明 ...
- ipv4ipv6 地址字符串表示最大长度
1 for IPV4 #define INET_ADDRSTRLEN 16 111.112.113.114 32位IPV4地址,使用10进制+句点表示时,所占用的char数组的长度为16,其中包括最后 ...
- 翻译:《实用的Python编程》02_03_Formatting
目录 | 上一节 (2.2 容器) | 下一节 (2.4 序列) 2.3 格式化 虽然本节稍微有点离题,但是当处理数据时,通常想要生成结构化的输出(如表格).示例: Name Shares Price ...
- http server源码解析
本文主要过下http生成服务和处理请求的主要流程,其他功能并未涉及. 使用例子 const http = require('http'); http.createServer((req, res) = ...
- jdbc连接数据库(oracle、mysql)
很简单,直接贴代码吧!代码注释自认为足够理解! 第一步创建数据库连接类,数据库连接地址.数据库驱动.用户名.密码建议创建为公共变量,方便修改,一目了然. package db; import java ...
- 树的遍历c/c++
先序遍历(递归) 1 void preOrderTraverase(TreeNode * r) 2 { 3 if(r) 4 { 5 printf("%d\t",r->_dat ...
- AndroidStudio 中 gradle.properties 的中文值获取乱码问题
0x01 现象 在gradle.properties中定义了全局变量,然后从 build.gradle 中设置 app_name: resValue "string", " ...
- 【秒懂音视频开发】05_Qt开发基础
控件的基本使用 为了更好地学习Qt控件的使用,建议创建项目时先不要生成ui文件. 打开mainwindow.cpp,在MainWindow的构造函数中编写界面的初始化代码. 窗口设置 MainWind ...
- 通过穷举法快速破解excel或word加密文档最高15位密码
1.打开文件 2.工具 --- 宏 ---- 录制新宏 --- 输入名字如 :aa 3.停止录制 ( 这样得到一个空宏 ) 4.工具 --- 宏 ---- 宏 , 选 aa, 点编辑按钮 5.删除窗口 ...
- Asp.Net Core WebAPI中启用XML格式数据支持
因为XML是一种非常常用的数据格式,所以Asp.Net core提供了非常便利的方式来添加对XML格式的支持 只需要在IOC注册Controller服务的后面跟上.AddXmlDataContract ...