软工第一次作业
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 链接 |
这个作业的要求在哪里 | 链接 |
我在这个课程的目标是 | 学习软件工程的有关知识,参与到一项团队工程中 |
这个作业在哪个具体方面帮助我实现目标 | 了解持续集成/部署工具 |
阅读提问
这样的结构,由于没有明确的“{”和“}”来判断程序的结构,在有多层控制嵌套的时候,就不容易看清结构和对应关系。下面的改进(格式C)虽好,但是阿超认为还是不够清晰:…
于是我们最后做了这个选择,每个“{”和“}”都独占一行。
(来自讲义)这里似乎并没有表明为什么else和}不可以放在一行。个人认为为了结构的“非常清晰”,可能会导致代码行数增加得很多。这样是否算一个弊端。
更严格地说,不要把不同的变量定义在一行上。
Foo foo1, foo2; // bogus
不太理解为什么不同的变量定义在一行也会影响代码规范。
- 关于A/B测试,我有一个疑问,在书中也提到了它的一个弱点,就是
要分清各种因素的关系, 例如,网站 “改版三列布局” 和 “用户在网站停留时间” 之间是下面的哪一种关系?
不相关, 当前收集到的数据只是随机的;相关, 但不是决定因素;因果关系
在这个问题上我想到数据挖掘课堂上曾经提到过的一点,就是发现两组数据有较高的相关性,能说明他们之间有因果吗?其实并不能。在这里A/B测试也具有这样的一个问题。书中也提到有很多大厂使用这个方法,那么这个因素分析是怎么解决的呢,还是说结果为重,不再分析其中具体的原因。
PM 文化的盛行有副作用么?
这一段中说到PM多了之后设计出来的东西大多中规中矩,“很多方面了无新意”。我认为互联网产业的产品很多并不一定靠所谓的“新意”,它们取胜更多靠的是某些功能赢得了用户的心。
焦点小组中的:讨论者对于他们不熟悉的事物 (例如颠覆式的创新) 不能表达有价值的想法 - 在汽车出现之前, 我们找一帮马车夫来畅想 “未来的交通工具”, 他们未必会贡献很有价值的想法。
关于这点,我认为,不应该只由完全熟悉该事物的人群来组成焦点小组。有时对一些不熟悉的事物,我们发出的见解可能会很荒谬,但是也存在着一定的概率,为了解该事物的人群打开一些新的思路,因为存在一定的概率,这些“熟悉该事物”的人群由于工作就是围绕这件事物,导致其身处信息茧房,其思维会受到一定的限制。
比不犯错误? 软件项目的进展不是一帆风顺的, 总有问题发生, 出现了问题, 就一定会记在相关人员的帐上,以便总结提高。 但是一定会作为绩效评估的依据? 那倒不一定。
如果成员的行为只影响自己, 或者是探索式的行动,则不是坏事。 例如有些成员自行探索最新的技术, 但是最后决定不采用此技术。
如果团队成员的行为影响整个团队 (例如 build break 导致daily build 失败), 则要注意。 在一个里程碑中可以统计谁导致这样的错误最多。 对这样的人可以采取 <移山之道> 中提到的 build master 方法处理。
实际工作岗位中,影响自己的行为占比大概是多少呢。实际工作中会不会无时无刻不处于团队工作中,如果工作时间长,那么个人探索学习新技术的时间会不会很少?
调研源代码版本管理软件
Github
- 本身非开源
- 允许用户拥有免费的私密仓库,但是最多只能有三名团队成员
- 可以帮助我们做出一份很有组织型的项目文档
- 开源展示项目
- 可以比较分支
Gitlab
- community edition开源
- 允许用户创建公共仓库
- 提供免费的私人仓库
- 提供导航至存储库的功能
- 项目分析上,它提供项目开发图表
- 提供Group Milestones, Time Tracking and Issue Tracker等工具来帮助开发
- cloud-native, 高度安全
Bitbucket
- 无限制的私人仓库
- 分支比较,提交历史查询
- 如Jira,Crucible,Bamboo,Jenkins,HipChat的集成工具
调研持续集成/部署工具
代码仓库:仓库链接
Github Actions
Github Actions的最大优势应该是,它只需要一个YAML配置文件就可以自动开启服务,不用购买服务器。Github作为一个事件编排与执行系统,没有将领域模型限制在CI/CD或DevOps领域。它使用密钥简单,可以在虚拟机或Docker容器里运行。
Circle CI
(Travis CI可能需要一些付费的plan,所以我了解了一会之后没有再去学习怎么使用)
CI/CD特点
CI/CD使许多组织都可以更加频繁地发布产品,并且不牺牲质量。使用CI/CD可以降低风险,缩短审查时间,加快错误修复,提高架构效率,增强团队的协作与沟通。
Circle CI支持Github, Github Enterprise和Bitbucket。我还注意到Circle CI 具有Orb-可重用的配置包,使其具有可扩展性,功能比较强大。