BUAA 软件工程 第一次作业
BUAA 软件工程2022 第一次作业
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 北航 2022 春季敏捷软件工程 |
这个作业的要求在哪里 | 作业说明链接 |
我在这个课程的目标是 | 了解并提高自己对软件工程的认识和实践能力,加强软件开发技巧与团队协作能力,收获软件工程实践经验 |
这个作业在哪个具体方面帮助我实现目标 | 快速了解现代软件工程,学习团队协作的方式,学习源代码管理的方法以及CI/CD的方法 |
阅读提问
Q1:单元测试真的能产生可重复、一致的结果吗
单元测试应该产生可重复、一致的结果
如果单元测试的结果是错的,那一定是程序出了问题,而且这个错误一定是可以重复的。
在第2章中,有如上的结论,但是以我在OO第2单元时的测试来说,我不认为测试结果可重复,在多线程中,往往出现各种多线程的小问题,而这些小问题都是在程序运行了非常长的时间后,在某一种非常苛刻的情况下触发的bug,而重复运行这一段代码,极有可能不会再次触发这个bug,结果也自然不一致了,我想在现在的各种软件项目中,多线程的项目应该占了绝大多数,这在测试中难免出现一些概率极低的bug且无法复现。
Q2:单元测试应该谁来写?
单元测试必须由最熟悉代码的人(程序的作者)来写。
第2章中有如上的说明,但是我认为最适合写单元测试的人应该是最熟悉该模块需求的人,或者说由提出该需求的人来测试,这是因为程序的作者可能只是按需求完成了代码,那么在测试时,也会按自己的代码的理解来完成测试,而如果他在写代码时已经误解了该需求,那么无论如何去测试,都是测不出问题的,因为在他眼中这就是正确的,而在真正的需求上,可能该功能是有问题的,因此我认为应该由最熟悉需求的人来写测试。
Q3:在完成时间上使用六西格玛方法是否正确?
但是从标准方差来看,Al的方差是5.3,而Bob是1。
第3章中有一个比较交付时间的分析,在实际完成时间与估计时间上进行六西格玛来评价,我个人认为不是很妥。我们看看六西格玛的定义:(百度百科)
六西格玛(Six Sigma,6 Sigma)是一种管理策略,它是由当时在摩托罗拉任职的工程师比尔·史密斯(Bill Smith)于1986年提出的。这种策略主要强调制定极高的目标、收集数据以及分析结果,通过这些来减少产品和服务的缺陷。六西格玛背后的原理就是如果你检测到你的项目中有多少缺陷,你就可以找出如何系统地减少缺陷,使你的项目尽量完美的方法。
我们可以看到,这个方法实际上是对项目的缺陷作评价的,6个西格玛=3.4失误/百万机会,也就是说对项目的失误率来作评价,而一个程序员过早完成任务,也能算失误吗,我个人认为用平均时间和超出时间来作评价更恰当。
Q4:真的建议使用goto吗?
问:我们能不能用goto?
答:函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto。
第4章中,代码设计规范中,有如上描述。但是在我个人开发来讲,我从未使用过goto,正如评论所说:
goto语句使程序的静态结构和动态结构不一致,从而使程序难以理解,难以查错。
goto语句的结果:在C/C++等高级编程语言中保留了goto语句,但被建议不用或少用。在一些更新的高级编程语言,如Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读;尽管如此后来的c#还是支持goto语句的,goto语句一个好处就是可以保证程序存在唯一的出口,避免了过于庞大的if嵌套。
goto往往会使得程序结构变得奇怪,结对的另一方应该也很少使用goto,这就加大了理解难度。我认为goto可以使用其他东西来代替,不是很习惯在代码中看到goto。
Q5:PM是否真的能做到与大家平等?
Program Manager 和一些公司的 Project Manager 的区别:
Project Manager Program Manager 是团队的行政领导, 带领大家在项目中工作。 和大家平等工作, 推动团队完成软件的功能。 通常是团队和外界打交道的唯一代表 一个团队可以有很多PM 对项目的功能有最后的决定权 和其他团队成员一起形成决议 管事也管人 管事不管人 不一定做具体工作 一定做具体工作
阅读第9章项目经理篇时,有如上的表格,其中描述Program Manager为与大家平等工作、与其他成员一起形成决议、管事不管人。但是在我大学里实际的项目中,我认为这是很难做到的。在我第一次当项目组长时,我最初的想法也是大家应该是平等的,共同对项目提出建议,然后投票决定项目的走向等等,我应该起到一个类似于主持人的作用,项目会议应该是所有人一起参与进来,各抒己见,然而,实际上,大部分项目到了最后都是我开一个会,全程也是我在说明,这个地方应该如何去完成,这个地方应该需要注意什么细节,这个地方有前人的博客可以借鉴,其他人可能基本不发言。就算这样,已经把相关博客找好了,实现的功能输入输出描述好了,干起活来,还是得催,比如我曾经有一个项目,在寒假便安排好了任务,要求两周内完成后给我看一下效果,但是这个任务硬是拖到了暑假,最后我花了一个晚上把之前发给他的博客复现了一遍,实际上按那篇来做根本不会出现很奇怪的问题。我认为不管人的话,至少在大学是很难完成一个类似于PM的任务的。当然在工作上可能不一样,但是我还是对PM可以于大家平等表示怀疑,PM理应对每一个项目中的人进行管理,对没有跟上进度的也理应去push,如何才能实现真正的平等呢?
调研源代码版本管理软件
参考wiki、知乎,此处主要选取了以下代码版本管理软件作分析:Github、GitLab、Gitee、Bitbucket、Plastic SCM。其中除了Bitbucket外本人均使用过,Github、GitLab、Gitee主要是在写课程代码时使用,不过目前Github在国内连接不稳定,体验不如之前了;另外Plastic SCM是在做unity开发时使用的,这是由于游戏中往往有大量的模型文件,这在其他不支持超大单个文件的代码版本管理软件中很难进行版本控制。
相同点
实际上目前大部分版本管理软件都实现了这些非常基础的功能:
- 拉取请求
- 代码审查
- 内联编辑
- 问题跟踪
- Markdown支持
- 双向认证
- 高级权限管理
- 托管的静态网页
- 功能丰富的API
- Fork / Clone Repositories
- 代码段
- 第三方集成
不同点
- 使用人数
从下表中可以看出,单从使用人数来说,Github和Gitlab都远远超过其他软件,其中Github最多。(该表格摘自wiki)
Name | Users | Projects |
---|---|---|
Assembla | Unknown | 526,581+[47] |
Bitbucket | 5,000,000[48] | Unknown |
GitHub | 65,000,000[49] | 200,000,000[49] |
GitLab | 31,190,000[50] | 546,000[51][j] |
GNU Savannah | 93,346[52] | 3,848[52] |
Launchpad | 3,965,288[53] | 40,881[54] |
OSDN | 54,826[55] | 6,294[55] |
Ourproject.org | 6,353[56] | 1,846[56] |
SourceForge | 3,700,000[57] | 500,000[57] |
- 开源与收费(部分借鉴博客)
GitHub | GitLab | Bitbucket | Plastic SCM | |
---|---|---|---|---|
导入种类 | 支持导入Git,SVN,HG,TFS(但是除Git外的貌似需要插件) | 支持导入Git | 支持导入Git,CodePlex,Google Code,HG,SourceForge,SVN | 仅支持Plastic |
大小限制 | 项目不能超过 1 GB,单个文件不能超过 100 MB | 每个存储库有 10GB 的空间限制 | 当项目即将达到 1GB 时,会有邮件通知 | 免费版本项目最高5GB,单文件最高可支持1TB |
收费策略 | GitHub 的企业版起价为 $2500 /10人,每年计费一次 | 收费为$10 /10人,每年收费一次 | 每位用户$39 ,对用户数没有限制,每年收费一次 | 免费供最多3个用户;每增加25GB文件 $5 ,每增加一个人$7(每月) |
是否开源 | 否,GitHub 以开源友好而闻名,并且拥有最大数量(19.4M +)的开源项目但其本身不是开源的。 | 是,GitLab 社区版的源代码开放在他们的网站上 | 否,在购买托管服务的方案中提供了「产品定制」的功能 | 否,主要为unity开发提供版本控制服务。 |
- 缺点与优点
软件 | 优点 | 缺点 |
---|---|---|
GitHub |
1. 是当前最大的开源免费代码仓库,现在private仓库也免费使用 2. 提供开发者一个交流合作的平台,通过pr和issue帮助拥有者维护开源程序 3. 提供了发布的模块给开发者进行发布的版本管理 4.兼容性,源代码位于GitHub的项目可以轻松地定制到任何云主机服务 |
1.GitHub的服务不是完全免费的,如果想要享受GitHub提供的所有功能,需要付费。 2.大小限制:文件大小不能超过100Mb,存储库可以托管信息1Gb。 |
Gitlab |
1.与LDAP(轻量级目录访问协议)集成,允许在Internet上定位和访问各种资源。GitLab EE支持多种LDAP服务和组同步。 2.免费,这意味着用户可以拥有无限数量的私有存储库。 |
1.界面相对较慢 2.存储库常见的技术问题。 |
Bitbucket |
1.提供无限的免费私人仓库 2. 支持中文 |
1. 功能相比Git少很多 2. 对于开源不够彻底 |
Plastic SCM |
1.单个文件无限制 2.完全分布式,开发人员可以在他们的本地机器上克隆存储库,并在不连接到主服务器的情况下签入、分支和合并。 3.图形用户界面和可视化 |
1.免费仅支持3人,5GB的团队项目 2.仅支持Plastic,受众较小,功能有限,一般用于unity游戏开发 |
调研持续集成/部署工具
采用本人之前数据库的后台管理系统,该系统由vue编写,可实现线上编译并将编译结果保存至仓库,同时可设置在线访问该系统(由于后端未部署目前只能看到首页,无法登录)。下面作详细示范。
Github Action
这里我采用了推荐博客的教程,只是该教程是部署一个react应用,实际上大部分的操作是相似的。
首先,我们需要编写一个action的workflow文件,如下:
name: Build and Deploy
on: [push]
jobs:build-and-deploy:concurrency: ci-${{ github.ref }} runs-on: ubuntu-lateststeps:- name: Checkout
BUAA 软件工程 第一次作业相关推荐
- 软件工程第一次作业补充
软件工程第一次作业(2) 关于<构建之法>的5个问题 1)P28,2.1.3回归测试具体怎么操作? 2)P46讲到了软件工程师的成长,那么对于我们大学生来说,需要培养哪方面的品质? 3)P ...
- 软件工程第一次作业(补充)
软件工程第一次作业补充 花20分钟写一个能自动生成小学四则运算题目的"软件",要求:除了整数以外,还要支持真分数的四则运算.将代码上传至coding.net, 并将地址发布至自己的 ...
- 广工软件工程第一次作业
这个作业属于哪个课程 广工软件工程学习 这个作业要求在哪里 软件工程第一次学习 这个作业的目标 评估当前的自己.展望未来中的所有问题和要求 其他参考文献 无 文章目录 git 自我评估 1. 个人简介 ...
- 软件工程第一次作业:写一篇自己的博客
这个作业属于哪个课程 18级软件工程基础 这个作业要求在哪里 第一次个人作业:阅读与准备 我在这个课程的目标是 学会创建自己的博客以及Markdown的语法 其他参考文献 git优点缺点 其他参考文献 ...
- 2017年秋季学期软件工程第一次作业(曹洪茹)
作业一 在开始作业要求的正文之前,我先简单谈谈自此课开课以来,包括读了许多大牛写的博文之后的几点感悟和思考. 首先,作为一名有四年地方大学生活经验的军校研究生,我很激动也很庆幸在研究生阶段能遇到这么一 ...
- 软件工程——第一次作业
Part one:自我介绍 首先进行一些自我介绍,我叫贾雅杰,河北廊坊人,本科就读于南昌大学计算机科学与技术专业,现有编程能力稍弱,希望通过这学期的课程有所提高.第一次使用博客,希望大家多多提出宝贵的 ...
- 李昂 软件工程第一次作业
第1次个人作业 2.分析软件 第一部分 结缘计算机 1.计算机是你喜欢的领域吗?是你擅长的领域吗? 这两个问题,不得不说我的答案都是否.我很难喜欢计算机编程,更遑论软件硬件原理等等,感觉有些晦涩了,无 ...
- 高级软件工程第一次作业--准备
1) 回想一下你对计算机/软件工程专业的畅想 考研之所以选择计算机专业,是因为本科就是这个专业.不去跨专业,是因为觉得换个专业考,比起那些科班出身的人,考上的机率会更小,也有一部分原因是因为比起计 ...
- 对三类软件(游戏,系统,工具)的分析与心得(软件工程第一次作业)
软件有很多种,如工具类软件.游戏类软件.系统类软件,它们的运行方式也各种各样,如以单机方式运行.以网站方式运行或者以APP方式运行在手机端等,请选取三种软件,分析它们各自的特点. 1 这些软件的开 ...
最新文章
- html表单颜色选择器,如何在Django管理中使用HTML5颜色选择器
- html复选框多行排列布局
- CISCO路由器/交换机的配置文件备份及还原
- python 声明变量类型_每日一课 | Python 检查变量的类型
- python显示表格_在Python中获取Excel表格的数量
- 不得不看之跳槽加薪利器:2019需求最旺盛的十大IT技能
- php 应用程序错误,系统化PHP中的Web应用程序的错误代码?
- [错误总结]升级spring-boot->2.6.2|hiberate->5.4.33.Final|spring cloud->2021.0.0 |spring admin->2.4.1
- Python使用标准库itertools中count类求解数苹果问题
- readyboost提升明显吗_主动降噪影响音质吗?为什么降噪耳机打开降噪后音质会有明显提升...
- AI 假冒老板骗取 173 万!
- 关于Windows7下 IIS 7 对ASP.NET 的配置的一点感想
- 网络信号_如何用有线电视线传输网络信号
- Poj/OpenJudge 1094 Sorting It All Out
- FLV文件格式官方规范详解
- (完美)华为P20pro CTL-AL00的usb调试模式在哪里打开的教程
- 免费采集器-网页数据采集器
- Mybatis解决查询返回Map类型时值为null的字段没有在Map结果集中的问题
- 开源物业管理系统的对比
- 全面保护个人电脑中的宝贵数据和文件(转)
热门文章
- oracle loip,配置数据链路、IP 接口和 IP 地址
- matlab函数fftshift,matlab中fft算法_matlab中fftshift函数_matlab中fft函数的用法(2)
- Lombok_刘锋的博客
- 安装m_map以及用matlab绘制高精度海岸线地图
- 新石器时代长江黄河流域文化简表
- 杭电OJ,已重新开放!HDOJ
- 51单片机 软件安装与下载
- Simplescalar 模拟器介绍 及 sim-outorder超标量乱序执行步骤详解
- RouterOS(ROS)软路由光猫拨号上网配置
- java调用maven接口实现java执行maven命令