软件工程第一次阅读作业

一、看完《构建之法》,我仍然不懂的问题

1.第二章 个人技术和流程

关于单元测试,我注意到这样一句话

单元测试必须由最熟悉代码的人(程序的作者)来写。

单元测试是为了确保程序基本模块的正确性,可是由于程序是自己写的,那么很有可能作者只测试了自己考虑过的数据,而对一些边缘数据或者异常数据测试不到,那么是否可以向他人征集测试数据?或者由他人根据模块的功能编写单元测试是否可行?

2.第三章 软件工程师的成长

关于软件工程师的思维误区中,我注意到这样一句话

这个毛病早就被归纳为“过早的优化是一切罪恶的根源”。

我在模块化编程时,习惯性先进行简单的优化,如果等到最后程序完成时再进行优化,我认为可能就会有很多可以进行优化的地方被忽略掉而只进行重点优化,就算一一找出可以优化的地方也会更加耗费时间,所以在编程时就进行基础的优化是否会更好一些?

3.第四章 两人合作

关于如何结对编程,我注意到其中第3条

驾驶员和领航员不断轮换角色,不要连续工作超过一小时,每工作一小时休息15分钟。领航员要控制时间。

我对于驾驶员和领航员不断轮换角色感到了疑惑,根据我的编程经验,不断换工作会影响自己的编程思路,降低工作效率,此外我认为每个人有自己擅长的工作,扬长避短才能提高效率。此外不要连续工作超过一小时是否太过绝对?我在编程时有时编到兴起,几乎会忘了时间,感受不到疲劳,如果在这期间突然打断,感觉就像灵感突然被抹去,所以休息时间是否可以更加灵活的自由把控?

4.第十四章 质量保障

关于分工的问题,我注意到一句话

分工之后,每个角色为了自己的绩效而优化,会出现局部最优而全局未必最优的情况。

在第三章中写到过早的优化是一切罪恶的根源,是否这也是其中的一个原因呢?如果是,那么在分工后,每个角色应该在何时进行优化?

5.第十六章 IT行业的创新

关于赢者通吃

这个游戏规定第一名得到全部的分数,第二名(不管多接近)到倒数第二名都是0分,最后一名还要倒扣分。软件行业就是一个赢者通吃的环境,最后一名还要把自己的身家倒贴进去。

如果软件行业是赢者通吃的环境,那么是否意味着例如美团外卖饿了么外卖这样的竞争软件只会有一者生存下去?但综合来看,它们的功能不完全一致,所以如果它们一直共存下去了,是否意味着赢者通吃的软件环境有一个前提——软件的功能完全一致?所以只要有自己独特的卖点和受众是否就不会被通吃?

二、“软件” 和 “软件工程” 这些词汇是如何出现的

  • “软件”是由John Tukey1958年在其论文"The Teaching of Concrete Mathematics"中提出来的。
  • “软件工程”一词是由Margaret Hamilton创造的。在1968年北大西洋公约组织在前联邦德国开会提出的。

三、软件工程发展的过程中有趣的冷知识和故事

很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。
Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?
事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!
你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。
不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。
Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:
Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。

四、目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点

版本管理软件 优点 缺点
Git 1.适合分布式开发,强调个体。2.公共服务器压力和数据量都不会太大。3.速度快、灵活。4.任意两个开发者之间可以很容易的解决冲突。5.离线工作。 1.学习周期相对而言比较长。2.不符合常规思维。3.代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
Mercurial 1.学习门槛较低。整体上看,需要掌握的命令要比git少很多。2.可以一键完全恢复到历史版本的某一个切面。3.封装好。相比git,很少暴露一些实现内的细节。 1.分支管理不灵活。Mercurial的branch管理和Git相比不是很方便。2.没有命名空间。
Trac 1.有良好的扩充性。2.Trac的权限体系是比较完备的设计。3.非常灵活,可以随心所欲的定制,可以和TortoiseSVN集成。 1.不支持多项目。2.需求和缺陷没有分离。3.核心功能很少,不安装插件基本上没法用。
Bugzilla 1. 检索功能强大2. 强大的后端数据库支持3. 极富多样的配置设定 1. 安装需要Perl和配置MySQL数据库,过程比较繁琐2. 修改配置文件很麻烦3. 流程无法定制

用户量排名

1.Github:约31,000,000用户量
2.SourceForge:约3,700,000用户量
3.Bitbucket:约5,000,000用户量
4.GitLab: 约100,000用户量

原文地址:https://www.cnblogs.com/xie8/p/10473986.html