软件工程第一次阅读作业
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2022年北航敏捷软件工程 |
这个作业的要求在哪里 | 个人阅读作业-阅读和调研 |
我在这个课程的目标是 | 学习现代软件工程开发的模式以及流程 |
这个作业在哪个具体方面帮助我实现目标 | 阅读《构建之法》了解现代软工概念,学习软件开发理论 |
阅读提问
1.关于过早优化问题
第3章第2节提到一个工程师再写程序的时候经常容易在某一个局部问题上陷阱去,花大量时间对其进行优化;无视这个模块对全局的重要性,甚至不知道这个“全局”是怎么样的。
我的问题是怎么平衡局部优化和“全局”进度推进之间的关系?因为我认为有的时候这种较早的局部优化往往对后续工作的推进提供十分便捷的方法或者数据来源,极大简化后续工作。
2.结对编程问题
第4章中说到结对编程一般分为两个角色,一个是驾驶员,一个是领航员,驾驶员负责控制键盘输入,领航员起到领航和提醒的作用,并且两个角色可以互换。
我的问题是如果结对的两个人编程水平差距较大,那么在轮到水平较差的人作为驾驶员时无法达到领航员的要求时,是及时转换角色继续这个项目还是从头开始,降低项目难度呢?
3.团队开发模式
第5章提到团队开发的模式有主治医师模式、明星模式、社区模式、业余剧团模式、秘密团队、特工团队、交响乐团模式、爵士乐模式、功能团队模式、官僚模式。
我的问题是团队开发的模式有如此之多,而且不同的模式适合不同的项目。有这么多模式存在,所以我们需要在项目开始之前确认适合该项目的模式?还是说团队开发模式只是一个抽象概念?
4.关于用户体验与质量问题
第12章中提出了好的用户体验是所有人都想要的。如果它和产品质量有冲突怎么办?
文中并没有直接给出答案,而是采用了讲述GE公司的故事来陈述的。这个问题在实际生活中经常出现,我自己的观点是用户体验要大于产品完成质量的。因为站在一个消费者的角度,如果一个产品,它的功能和质量十分强大,但是又很多非人性化的设计,我只有在不得不使用的前提下才会使用它。如果这个产品都不能实现一些功能的话,为什么要使用它呢?那么作为一个开发者,我们要如何把握中间的平衡呢?
5.关于绩效和工作效率问题
第17章第6节中提出研究发现自主性、精通某个领域以及使命感这三种内部驱动因素极大地影响员工的工作效率,那么在讨论绩效、奖惩、激励员工的时候,就要特别注意内部的驱动因素。
我的观点是,绝大多数的工作是非主观意愿上想做的,那么从何提高自主性呢?又怎么提及使命感?我同意让精通某个领域的人去做这个领域的工作是更好的做法。我认为现实中往往最大的驱动还是外部驱动,诸如奖金,考试成绩等等,也就是外部驱动效果要高于内部驱动,但是决定做的任务的上限往往由内部驱动决定的。
调研源代码版本管理软件
Github和Gitlab团队协作流程
Github的团队协作流程如下:
1.创建开发分支
2.Fork项目到个人仓库
3.Clone项目到本地
4.经常更新和项目保持同步
5.push修改到自己的项目上
6.请求合并到团队项目上
7.团队项目负责人审核及同意请求
(其中第一步最后一步偷项目负责人完成。)
Gitlab和Github的团队协作流程基本一致。
区别
Gitlab和Github都是基于Web的Git远程仓库,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。从代码的私有性上来看,GitLab 是一个更好的选择,并且相对于Github有完善的管理界面和权限控制。但是对于开源项目而言,GitHub 依然是代码托管的首选。
调研持续集成 / 部署工具
仓库链接
我只做了Github Action
实现如下:
yml:
# This is a basic workflow to help you get started with Actions
name: main
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [ main ]
pull_request:
branches: [ main ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
# Runs a single command using the runners shell
- name: set up JDK 1.8
uses: actions/setup-java@v1
# 设置setup-java脚本的输入参数
with:
java-version: 1.8
- name: test
run: |
javac Main.java
执行结果