软件工程第一次阅读!

||
|:--|:--|
|项目|内容|
|本次作业所属课程|北航软件工程|
|所属作业|第0次作业|
|课程目标|尽量做吧QAQ|
|作业回报|熟悉构建之法和一些奇怪的冷知识|

1.快速看完整部教材,列出你仍然不懂的5到10个问题。

问题1.用户满意度的定义是否欠缺考虑?

1.2.4 用户满意度:用户在使用时发现了软件的很多问题,影响了用户使用软件的效率。

我认为这里的用户满意度不仅仅和软件是否实现用户需求、是否高效率运作有关,还和软件是否实现更高层面的需求有关。用户的需求不是固定不变的,一个软件不仅仅要面对用户的基本需求,还需要注意用户的发展性需求,甚至可以主动创造需求去教育用户“这才是你们想要的”。而书中对满意度的描述还局限在基本需求这块。

问题2.灵感和激情在团队工作中重不重要?

3.1 团队对个人的期望: 理性地工作:软件开发有很多个人的、感情驱动的因素,但是一个成熟的团队成员必须从事实和数据出发,按照流程,理性地工作。

在软件开发领域也是有很多创造性开发项目的,比如一种业内从未出现过的功能开发,一种全新的游戏开发,我认为事实和数据只能作为软件开发出发点的一部分。一方面软件开发不是一个死板的过程,工程自身也需要成员灵感的碰撞;另一方面团队成员作为人类个体,灵感和激情不仅仅可以保证工作效率,还可以创造出问题一中“发展性需求”的实现。而且很多空白或者接近空白的领域中,事实和数据都是极其有限的,只有具有灵感和感性目标的团队才能更有可能到达目标。

问题3:命名规则是不是有待商榷?

4.2.6 避免过多的描述。例如游戏开发中最后出现的“大boss”,不用写“theFinalBattleMostDangerousBossMaster”,可以直接写boss。

一方面即使namespace在大部分语言中都有运用,但是在项目里面看到“boss”这样过简的描述也容易歧义,另一方面对于一些无namespace概念的语言来说确切的命名更是必须的。

问题4.goto真的适合在软件工程中使用吗?

4.3.2 只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto。

goto对程序可读性的破坏是一个方面,另一方面我们也需要考虑到大部分程序员对goto是很陌生的,甚至大部分人从业至终也没有写过一条goto语句,用goto语句行为自身就不存在“规范”可言。

问题5.结对编程的相互督促是否合理?

4.5.3 结对编程的过程也是一个相互的过程,每个人的一举一动都在别人的视线之内,所有的想法都要受到对方的评价?

我认为结对编程的督促应该是每过一段时间同步交流一次,以时间刻度来看比如过几分钟交流一次或者观察一次,事无巨细地观察和交流很容易让双方抛出不成熟的看法给对方,这既不利于软件开发地效率,因为双方会空耗时间在大量的突发性想法上,也不利于团队双方的磨合,对于对方的开发风格和实力会产生紊乱和质疑。

2.请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?

根据维基百科的介绍Richard R. Carhart最先将工程的概念引入软件领域

The earliest known publication of the term "software" in an engineering context was in August 1953 by Richard R. Carhart, in a Rand Corporation Research Memorandum.

--引用自维基百科

3.大家知道了软件和软件工程的起源,请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?

关于谷歌软件大牛Jeff Dean的冷"知识"

1.The rate at which Jeff Dean produces code jumped by a factor of 40 in late 2000 when he upgraded his keyboard to USB 2.0.
在2000年后段,Jeff码代码的速度突然激增了40倍,原因是他把自己的键盘升级到了USB 2.0

2.gcc -O4 emails your code to Jeff Dean for a rewrite.
gcc的-O4优化选项是将你的代码邮件给Jeff重写一下

3.Unsatisfied with constant time, Jeff Dean created the world’s first O(1/n)algorithm.
Jeff对常量的时间复杂度并不满足,于是他创造了世界上第一个O(1/n)的算法。

4.上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?

以下图片资料均来源于维基百科

主流的源程序版本管理软件和项目管理软件包括:

使用人数分布情况:

|||
|:--|:--|:--|
|VCS|优点|缺点|
|Git|适合分布式开发,强调个体。公共服务器压力和数据量都不会太大。速度快、灵活。任意两个开发者之间可以很容易的解决冲突。离线工作。| 模式上比SVN更加复杂。代码保密性差,开发者把整个库克隆下来就可以完全公开所有代码和版本信息。|
|SVN| 对目录的组织的管理更加方便。保证提交操作的完整性。SVN允许一个文件有任意多的可命名属性,功能十分完全。|不能离线工作。不能恢复到历史版本。提交、更新、浏览历史的速度慢。|
|Microsoft TFS|任务版上能将需求、项目进度一览无余。能有效实现 SCRUM,能与 VS 无缝接合。|搭建、维护tfs比较复杂,硬件要求也比较高。整个系统是用 asp 实现的,用浏览器访问较慢。|
|Mercurial|可以一键完全恢复到历史版本的某一个切面。hg的版本库不需要维护。封装好。相比git,hg很少暴露一些实现内的细节。|分支管理不灵活。Mercurial的branch管理和Git相比不是很方便。|

posted @ 2019-02-28 18:04  给岁月以文明  阅读(239)  评论(3编辑  收藏  举报