BUAA2020软工作业(二)——对软件工程的初步理解

时间:2022-12-08 16:39:17
项目 内容
这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健)
这个作业的要求在哪里 个人博客作业
我在这个课程的目标是 进一步提高自己的编码能力,工程能力
这个作业在哪个具体方面帮助我实现目标 反思过去,展望未来
其他参考文献 《构建之法——现代软件工程》第二版

一、速读《构建之法》后的几个小问题

1.关于技能的反面

书中3.3节,作者提出了一个考察一个人是否精通魔方的方法:

a. 给面试者一个各面打乱颜色的魔方;

b. 要求他把六面还原;

c. 如果还原了,要求他把魔方恢复成我最初给他那个混乱的局面,必须一模一样。

我感觉对于还原成原混乱的局面的这个要求,如果不提前告诉被考察者这个要求,那么应该不会有人去留意这个问题,也就不会记得自己复原的具体过程。如果提前告诉被考察者这个要求,那么应该只要记忆好就可以做到。所以我觉得这个问题不应该作为考察一个人是否精通魔方的问题。那么作者用这个对这个例子的理解是什么呢?

2.关于创新

在16.1.2节中,作者给出了“创新者甚至恨创新”的支持例子,就是假设发明电报的人被发明电话的人上门推销,发明电报的人会感到不安,因为电话这个创新将会颠覆目前的电报产业,导致辛辛苦苦建立起来的电报公司失去市场。而在我看来恰恰相反,一个颠覆性的产品必将会带来很大的商业价值,只要抓住机会加以利用,就会取得成功。比如这个电报和电话的问题,发明电报的人看到商机后,完全可以投资帮助这个发明电话的人建立市场,电话市场发展起来后,也许电报会失去市场,但是他们两个人都会获得更大的收益,实现双赢。请问作者是否考虑到了这种情况呢?

3.关于用户需求

在8.3节中,作者提到了自己的体会:

微软公司有专门的部门,经常招募目标用户来做试验。这项活动有专门的研究人员和PM负责,作为开发人员,我也曾实地参观过用户使用新版本的Outlook (我们隐蔽在单向玻璃窗后面)。研究人员通常让被试者完成一-些任务, 例如,

在Excel中,你想互换一个表格中的行和列,你怎么做到的呢?

你想给不少客户都发送内容相似的贺年邮件,但是客户的名称和地址都各不相同,你怎么用Word/Outlook完成这个任务?

在Excel中,你在看一些大的表格的时候,要来回移动,但是这样表格的标题栏就看不到了,怎样锁定标题栏呢?

众所周知人们在刚接触一款强大的软件的时候,不免都会受到认知阻力的影响,而据我调查很多高级软件的设计厂商都没有配套的详细的教程,或者教程太过专业很难入手,用户在使用的时候只能自己去搜索相应的资料。众所周知产品是以用户为中心的,所以软件厂商是否应该把重心向编写教程方面侧重一下呢?

4.关于代码规范

作者在4.3节中提到:

函数最好有单一的出口,为了达到这一目的,可以使用goto。

但是现在网上普遍的一种理论是goto有害论。goto虽然用起来很*,但是它会使程序逻辑非常复杂,不易阅读。而且使用goto使得分析和验证程序(尤其是涉及循环的程序)的正确性的任务非常困难。我也有相同的理解,所以我觉得我们在团队项目中,应该尽量少用goto语句,不知道作者对此看法如何?

5.关于用户体验

在第12章用户体验中,作者提到一个产品设计的细节——静音按钮要同时关闭闹钟铃声么?

  • 如果关掉了,那么就会造成习惯静音的用户接收不到闹铃的问题,遭到用户的抱怨;
  • 如果不关掉,就会出现书中说的纽约交响乐团的管弦乐演出被iPhone闹钟铃声打断的问题,后果也很严重。

事实上,在现在的大部分软件的功能中都会存在矛盾性的问题,一个功能既有好的方面也有不好的方面。那么,我们在设计产品时,面对复杂的用户需求,怎么做合理的取舍才能让软件被大多数人所接受呢?

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

软件:图基在1958年发表的论文《具体数学的教学》包含了在搜索中发现的最早的“ 软件 ” 一词的用法。在工程环境中,最早的“软件”一词的发表是在1953年8月,Richard R. Carhart在RAND Corporation的研究备忘录中发表的。

软件工程:1969年(阿波罗11号期间),由MIT Draper 实验室的数学与电脑科学先锋— Margaret Hamilton女士提出。下面是她的原话:

我一直以来坚信这项发明流着艺术与科学的血液,虽然当时很少人是这么想。因此,我致力于为软件以及那些发明者争取应有的正统性与尊重,所以我开始使用“软件工程”这样的字眼来将之与硬件还有其他工程学类做出区别。

三、请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?

林纳斯·本纳第克特·托瓦兹,生于芬兰赫尔辛基市,拥有美国国籍。他是Linux内核的最早作者,随后发起了这个开源项目,担任Linux内核的首要架构师与项目协调者,是当今世界最著名的电脑程序员、黑客之一。他还发起了Git这个开源项目,并为主要的开发者。

林纳斯在网上邮件列表中也以火暴的脾气著称。例如,有一次与人争论Git为何不使用C++开发时与对方用“放屁”(原文为“bullshit”)互骂。2012年6月14日,托瓦兹在出席芬兰的阿尔托大学所主办的一次活动时称Nvidia是他所接触过的“最烂的公司”( the worst company)和 “最麻烦的公司”(the worst trouble spot),因为Nvidia一直没有针对Linux平台发布任何官方的Optimus支持,随后托瓦兹当众对着镜头竖起了中指。

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

用户数量排名:参考wiki百科

BUAA2020软工作业(二)——对软件工程的初步理解

1.Microsoft TFS的优缺点:

优点:是对敏捷,msf,cmmi等项目、过程管理、过程改善的支持。任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用。

缺点:能应用起来的团队、公司的数量极少,多数真正用起来,也就是源代码管理这部分,这也仅仅是占TFS极小部分功能。

2.GitHub的优缺点:

优点:GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。

缺点:可能不是捕捉创意过程和记录创意点子的最佳工具。对于这种特殊功能模拟可以选择LayerVault 或其他相似工具。之前,我们已经强调过Github非常适用代码跟踪,但是却不是最好的设计跟踪工具。将图片内容转化为代码,或者将设计用于产品设置,看起来依旧不是那样顺利。

3.Trac的优缺点:

优点:非常灵活,可以随心所欲控制可以和SVN集成

缺点:功能不是很强大

4.Bugzilla的优缺点:

优点:免费,有中文版支持

缺点:快速搜索结果不准确。只能管理缺陷。

5.Apple XCode的优缺点:

优点:编译速度极快,每次操作都很快速和轻松。自动提供撤消、重做和保存功能,无需编写任何编码。

缺点:更新版本后,某个插件可能会失效。

五、调查完目前流行的源程序版本管理软件和项目管理软件后,请你选择其中至少2个软件来进行动手实践

1.Git

BUAA2020软工作业(二)——对软件工程的初步理解

使用git进行版本管理可以说是十分方便的了,由于git没有GUI,所以如图配合iterm2进行使用,效果极佳。

2.Github

BUAA2020软工作业(二)——对软件工程的初步理解

平时使用Github都是进行代码备份用的,以防电脑突然坏掉了,写了一半的代码就白写了。但同时Github也是一种记录,记录了一个程序员的成长,同时在Github中我们还可以阅读到很多高质量的开源代码,方便学习。