软件工程第一次阅读作业
一、提问
1.第二章 好的单元测试的标准
单元测试必须由最熟悉代码的人(程序的作者)来写。
虽然理论上来讲没有人会比作者更了解自己的代码,但正因如此,作者往往只能查验那些他在编写过程中就已经考虑到的问题,无法发现自己没有考虑到的问题。在实际工程中,测试和代码编写往往是两个不同的部门来负责,因此我认为结对互相编写单元测试可能会更好(前提是知道对方的需求)。
2.第四章 代码设计规范
函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto
goto函数真的有必要使用吗?因为很多时候为了简便,并不想设定唯一出口,以往的编程中没有这个习惯。
3.第四章 代码复审
代码复审和单元测试的区别在哪?
4.第三章 软件工程师的发展
身边的很多同学都有考计算机二级,然而我问了一下同系的同学,基本上没有人去考过级,这种考级对于我们真的有必要吗?它并不像导游证之于导游专业,会计证之于会计专业那样不可或缺吧。
5.第九章 领导力——高效的团队讨论
在上学期的一些课程中,我所在的团队经常召开会议,但是往往是无功而返,最终什么都没有改变(就像老师提到的“事后诸葛亮会议”)。在这学期的软件工程课程中,长达十五周的团队项目肯定需要开很多会议,尽管书中已经给过一些建议,但是我们当中并没有一个类似PM的人,该如何避免重蹈覆辙呢?
6.第十二章 用户体验
如今软件的用户体验,除了流畅和功能强大之外,用户往往希望广告能够尽可能的少,但在软件开发者的角度考虑,广告投放似乎是必要的。虽然在我们的课程中不必考虑这个问题,但在实际运用中如何投放不会让人反感的广告呢?
7.第十六章 IT行业的创新
不但大众不喜欢创新,甚至连创新者自己都不例外,有些创新者甚至恨创新。
在这一部分中,老师提到了电报和电话的矛盾。实际生活中,雅虎和阿里巴巴似乎更让人熟悉。同是互联网大头,一个捷足先登却不思进取,另一个追求创新后来者居上。在互联网时代,拒绝创新似乎是致命的,但是在我们的学习过程中,我们不断地去了解基本概念,不断的去学习那些旧知识。学校似乎没有考虑为我们灌输新兴思想(AI算是当下正火的),这是为什么呢?
二、“软件”和“软件工程”概念的提出
“软件”的概念最早由阿兰图灵在1935年提出,但也有人认为软件正式出现在1958年John Turkey的论文中。
“软件工程”的概念最早由Margaret Hamilton在1968年联邦德国召开的会议上提出。
三、趣事
1、
《美丽心灵》上映后,有记者采访纳什:电影拍得真实吗?恐怕艺术加工的成分很大吧。纳什:你说得对,其实查尔斯没那么高。
——查尔斯是约翰纳什臆想中存在的室友。
2、
著名计算机科学家Donald Knuth(高德纳)写的排版软件TeX版本号可以算是个趣事,从TeX第三版开始,之后的升级是在小数点后加入一个新数位,使之越来越接近Pi的值。TeX目前的版本是3.1415926。
以上趣事均来自于知乎。
四、当前主要使用的源程序版本管理软件和项目管理软件的优缺点
1.软件使用量排名
1、github:约31,000,000用户量
2、SourceForge:约3,700,000用户量
3、Bitbucket:约5,000,000用户量
4、GitLab:约100,000用户量
2.各软件的优缺点
Git:
1.是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
2.速度快、灵活,分支之间可以任意切换。
3.离线工作,不影响本地代码编写,等有网络连接以后可以再上传代码,并且在本地可以根据不同的需要,本地新建自己的分支。
4.对初学者不够友好。
5.国内速度较慢。
Trac:
1.有着良好的扩展性。
2.Trac的权限体系是比较完备的设计。
3.需要安装很多插件,较繁琐。
BUGZILLA:
1.检索功能强大。
2.后端数据库支持功能强大。
3.配置文件较复杂。
4.本地化不够友好。
Mercurial:
1.命令兼容SVN。
2.扩展性强,append only的存储结构。
3.很多命令有双字母的简称,使用起来方便。如hg commit的简称为hg ci。
4.功能太过简陋。