BUA软件工程个人博客作业
写在前面
| 项目 | 内容 |
|---|---|
| 所属课程 | 2020春季计算机学院软件工程(罗杰 任健) (北航) |
| 作业要求 | 个人博客作业 |
| 课程目标 | 培养软件开发能力 |
| 本作业对实现目标的具体作用 | 阅读教材,了解软件工程,并比较各个项目管理软件 |
一、《构建之法》的读后疑问与思考
1. 单元测试相关问题 (书本2.1.2)
单元测试必须由最熟悉代码的人(程序的作者)来写。代码的作者最了解代码的目的、特点和实现的局限性。所以单元测试没有比作者更适合的人选了。
虽然我十分肯定没有人比程序员自己更了解自己代码的观点,但对作者的这句话我仍有疑问。作者在 2.1的开头说道:“软件的很多错误都是来源于程序员对模块功能的误解、疏忽或不了解模块的变化。”然而,程序员意识到的可能出错的地方,他在写代码时往往已经注意了。这同时也意味着他写的单元测试的数据不大可能会包含到他没想到的出错情况。我们debug的过程中常常也有这样的困扰,感觉自己没有什么可错的地方,自己写的测试样例测了很多也没问题。但别人的测试样例却常能给我们很大的帮助。一个人自己写自己的单元测试,可能会思维受限,考虑不全。如果在大家都清楚代码实现功能的情况下,有人辅助进行单元测试以避免设计和情况的遗漏,是不是会好一点?
2.软件团队的模式 (书本 5.2)
本节中,作者介绍了多种团队的模式,有 主治医师模式、明星模式、社区模式、业余剧团模式、秘密团队、特工团队、交响乐团模式、爵士乐模式、功能团队模式、官僚模式。然而,作者并没有在文章中直接说明他们之间的优劣,似乎持着“不管白猫黑猫,抓到老鼠就是好猫“的态度。
作为学生的我们,专业能力还在培养之中,课上组队的模式多为主治医师模式、业余剧团模式和爵士乐模式。之前读过关于”鸡群效应“的相关文章,其在一定程度上否定了”超人“对团队的必需性。然而就我的大学经历来说,组队作业中最突出的不乏有”大佬“的团队(他们可能有时独挑大梁)。虽然这种团队存在一人带不动全组的情况,但能力相当的人组成的团队往往会应没有导向而没有突破性进展。那决定一个模式是否适合的重要因素是什么呢?团队模式是由组队人的水平一开始就决定的呢,还是说在合作过程中可以改变的呢?如果改变,又将怎样过渡以避免尴尬的境地?
3.关于项目经理(书本 9.3 )
在软件行业发展初期,软件都是为维持机器本身的运作服务,或是做科学计算,这时候也许看不出PM的作用。随着产业的发展,软件团队的复杂度都极大地提高了,这时候我们需要一些人,起到沟通、交换、影响、润滑、讨价还价的作用--就像商业社会的金钱一样--PM就是这样的角色。
PM做开发和测试之外的所有事情。
作者在这章中强调了PM的重要性,以及其所担任的任务。从作者的描述中,感觉PM更加注重的是软实力。虽然我们的大学课程有不少团队作业,却往往并没有PM的工作体现。这次软工作业,似乎是可以有PM的担当的,那么其预期的工作量是多少呢?在小型项目中,PM的价值如何更好得体现?
4.质量保障的相关问题 (书本14.1.2)
软件开发过程中的可见性( Visibility)
我们看这个项目开发过程中的场景:
领导:进度如何?
答:可能快了。
问:能看看演示吗?
答:嗯,不知道。可能到了项目的最后一天才能看......
上面的对话不能说明软件的功能如何(也许最后发现功能非常惊艳),项目的可见性是非常差的。不但是小规模、业余项目会出现这样的情况,大规模的专业团队也是如此。
上面的问题我也遇到过。项目开展一段时间后,也许背后的工作很多,然而可展示的部分却很少。可能实际工作进度只差一点了,但由于各个部分关联性很强,没有全部完成的情况下并不好展示。项目开发的可见性,非常重要,但确实也会存在上面我说的情况,那么我们该如何做得更好呢?
5.关于创新的迷思(书本 16.1)
迷思之一:……但是他们没有提到这些科学巨人在顿悟之前已经在相关科学打下了深厚的基础,同时他们也为这些问题思考进行了长时间的思考,那些看似神奇的时刻才能光顾他们。
迷思之五:统计数据表明,70%的创新者说,他们最成功的创新,是在他们的拿手的领域之外发现的。
作者的这两段话,乍一看是挺矛盾的。我挺赞成第一段话的,且不说创新性地解决问题,连精准地发现可突破创新的点所在何处,大致有个前进的方向,就需要很深厚的领域知识了。然而,第二段话却用数据表明,领域的专家没有领域外的创新者那么有创意。是不是存在领域专家长期深陷本领域的研究,导致其思想被已有的专业知识限制的可能呢?这似乎牵扯到了学识的广度与深度的问题。在时间精力有限的情况下,深与广又该如何平衡呢?生活中不少例子表明,创新的方向往往以需求为导向。创新又带来了新一轮的需求。那么能敏锐发现需求的人,是不是更加可能创新呢?
二、 “软件” 和 “软件工程” 词汇的由来
软件
化学家和统计学家约翰·图基(john W. Tukey)在1958年撰写的一篇科学文章时,首次使用了“软件”这一 术语。据报道,他早在1953年就已经提出这个概念,用来标记计算机程序(即”软件“)与使用这些程序的计算机(或”硬件“)之间的区别。
软件工程
1968年秋季,NATO(北约) 的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。在那次会议上第一次提出了软件工程(software engineering)这个概念,研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。
三、软件发展过程中有趣的冷知识和故事
之前看到一篇文章,总结了一些在软件开发中的有趣而著名的定理。详见
墨菲定律 (Murphy's Law)
凡是可能出错的事就一定会出错。
推论:计算机会按照你写出来的方式运行,而不是你臆想出来的。
防御性编程、版本控制、测试驱动开发、模型驱动开发等等都是预防墨菲定律很好的做法。
布鲁克斯法则(Brook's Law)
向一个延期的项目增加人手只会让它延期得更加厉害
如果一个项目进展落后了,仅仅增加人力很有可能会带来灾难性的后果。相反,提高编程效率、审查软件开发方法和技术架构是否合理,几乎总是会比增加人力带来更好的效果。如果没有,这可能意味着霍夫施塔特定律在起作用。
霍夫斯塔特定律 (Hofstadter's Law)
事情总是要花费比你预想更长的时间,即使你把霍夫斯塔特定律也考虑在内。
这条定律的递归性反映出,即使付出最大的努力,也知道任务是复杂的,去精确地估算它依然是非常难的,所以要给估算留一个缓冲区出来。
四、流行的源程序版本管理软件和项目管理软件
- 近年来,源程序版本/项目管理软件的使用人数情况如下:
| Software | Usage | Project |
|---|---|---|
| GitHub | more than 40 million* people | 100 million* |
| GitLab | 100,000 organizations | ------ |
| Bitbucket | 6 million developers and 1 million teams | ------ |
| Bugzilla | hundreds or thousands of organizations | ------ |
| Trac | list of uesrs | ------ |
- 工具的优缺点比较:
| 软件名 | 优点 | 缺点 |
|---|---|---|
| Git | 1.分支与合并 2.小而快速 3.分散式 4.资料保证 5.登台区 6.免费和开源 |
1. 前期学习知识较多 2. 对中文支持差 3. 代码历史保密性差,一旦开发者把整个库克隆到本地,就可以完全查看到所有的历史版本信息 |
| Mercurial | 1.更简洁好用的命令行指令 2.易于扩展 3.服务器配置相对于Git更加容易。 |
1.Mercurial的分支模型十分复杂,分支管理与Git相比不方便 2. Mercurial改写历史很麻烦 3. 没有命名空间 |
| Trac | 1.十分灵活,支持定制 2.良好的扩充性 3.权限体系设计得比较完备 |
1. 不支持多项目 2. 中文化不完整 3. 核心功能很少,不安装插件基本无法使用 |
| Bugzilla | 1. 检索功能强大 2. 优化的数据库结构 3. 定制功能强 |
1. 安装需要Perl和配置MySQL数据库,过程比较繁琐 2. 修改配置文件很麻烦 3.UI设计差 |
| Bitbucket | 1.支持私有免费项目 2.提交大文件速度快 |
1.项目检索不便 2.社区活跃度低 |
五、 软件使用尝试
(1) git
新建文件hello.txt

保存后 ,使用 git add命令,把文件添加到仓库缓冲区
使用 git commit 命令,把缓存区的所有文件正式提交到仓库

现修改 hello.txt的内容


实现版本回退

感受:git因为6系课程要求,接触有一段时间了。git使用起来是很方便的,只是之前对其知识的学习需要一定的时间。
(2)Mercurial

感受:轻量级,安装比较方便;命令行使用和git很相似,有些更加简洁。
BUA软件工程个人博客作业的更多相关文章
- BUAA软件工程个人博客作业
软件工程个人博客作业 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标 团队完成好的软件,并对自己作出规划 这个作 ...
- BUAA 2020 软件工程 个人博客作业
BUAA 2020 软件工程 个人博客作业 Author: 17373051 郭骏 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 ...
- 软件工程个人博客作业-软件案例分析:VS与VS Code
项目 内容 本作业属于北航 2020 年春软件工程 博客园班级连接 本作业是本课程个人项目作业 作业要求 我在这个课程的目标是 提高软件开发能力.团队协作能力 这个作业在哪个具体方面帮助我实现目标 提 ...
- 初窥构建之法——记2020BUAA软工个人博客作业
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标是 完成一次完整的软件开发经历并以博客的方式记录开发过程的心得掌握 ...
- 【BUAA 软工博客作业】个人博客作业
项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:热身作业,阅读并撰写博客 作业要求 课程目标 学习大规模软件开发的技巧与方法,锻炼开发能力 作业目标 阅读教材, ...
- [2017BUAA软件工程]第0次博客作业
[2017BUAA软件工程]第0次博客作业 结缘计算机 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 计算机是你喜欢的领域吗?是你擅长的领域吗? 我当时报考高考志愿的时候就已经是想好报 ...
- 【2020BUAA软件工程】个人博客作业
个人作业博客 项目 内容 北航2020软工 班级博客 作业要求 具体要求 我的课程目标 学习软件工程,掌握团队合作,锻炼自我 作业在哪个方面帮助我实现目标 通读<构建之法>,尝试理解软件工 ...
- 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业
初窥软件工程 2020BUAA软件工程\(\cdot\)个人博客作业 目录 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业 一.作业要求简介 二.正文 (一) 快速看完整部教材,列出 ...
- BUAA_2020_软件工程_个人博客作业
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标是 了解软件工程的技术,掌握工程化开发的能力 这个作业在哪个具体方 ...
随机推荐
- python3 byte,int,str转换
1 # bytes 与 int 2 b=b'\x01\x02' 3 num=int.from_bytes(b,'little') 4 print('bytes转int:',num) 5 6 b1=nu ...
- 使用sysbench测试mysql及postgresql(完整版)
使用sysbench测试mysql及postgresql(完整版) 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14592166.html 前言 使用sysbe ...
- go的令牌桶实现库 go-rate
关于我 我的博客|文章首发 go-rate是速率限制器库,基于 Token Bucket(令牌桶)算法实现. go-rate被用在LangTrend的生产中 用于遵守GitHub API速率限制. 速 ...
- 博文推荐|多图详解 Apache Pulsar 消息存储模型
关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储分离架构设计,支 ...
- Redis系列-存储篇list主要操作命令
Redis系列-存储篇list主要操作命令小结 在总结list之前,先要弄明白几个跟list相关的概念: 列表:一个从左到右的队列,个人理解更类似于一个栈,常规模式下,先进列表的元素,后出. 表头元素 ...
- Java中的equals()和hashCode() - 超详细篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的equals()和hashCode() - 详细篇>,希望对大家有帮助,谢谢 文章纯属原创,个人总结难免有差错,如果有,麻烦在评论 ...
- 庐山真面目之十三微服务架构中如何在Docker上使用Redis缓存
一.介绍 1.开始说明 在微服务器架构中,有一个组件是不能少的,那就是缓存组件.其实来说,缓存组件,这个叫法不是完全正确,因为除了缓存功能,它还能完成其他很多功能.我就不隐瞒了,今天我们要探讨 ...
- java面试-公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解
一.公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解 公平锁:多个线程按照申请的顺序来获取锁. 非公平锁:多个线程获取锁的先后顺序与申请锁的顺序无关.[ReentrantLock 默认非公平.s ...
- Java性能调优实战,覆盖80%以上调优场景
Java 性能调优对于每一个奋战在开发一线的技术人来说,随着系统访问量的增加.代码的臃肿,各种性能问题便会层出不穷. 日渐复杂的系统,错综复杂的性能调优,都对Java工程师的技术广度和技术深度提出了更 ...
- 数据库MySQL三
进阶4:常见函数 字节长度为12,一个汉字3个字节 8个字符 注意起始索引 1 -1 0 红色是记忆的 二.数学函数 当前日期包括时间 获取日期 获取时间 四.流程控制函数 案例 分组函数 单行函数: ...