软件工程 第1次个人作业

软件工程 第1次个人作业

作业介绍

项目 内容
这个作业属于哪个课程 2019春季计算机学院软件工程(罗杰)(北京航空航天大学)
作业要求介绍 第一次阅读!
我在这个课程的目标 通过课上的听讲以及课后的实践了解和掌握一些现代软件工程的方法论和工具,同时重点提高自己的团队协作能力。
这个作业在哪个具体方面帮助我实现目标 通过阅读《构建之法》这部教材,对软件工程有一个整体的认识。

一、快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上。

1. 第1章 1.2.2节:

Build To Learn:开发软件,构建系统的目的是做进一步的试验,试图发现客观规律或探求某方法的优劣。这些项目经常是科研论文的基础工作。

在科研论文的工作中,经常需要编写一些程序来对这些算法进行实现或对某个真实的场景进行模拟,在论文完成之后,这行程序很大可能就不会再使用了,那么这些程序还需要严格按照软件工程的一般方法和过程进行开发吗?

2. 第4章 4.3.2节:

函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto。

适度使用goto语句确实有助于程序逻辑的清晰体现, 但也容易使程序的可读性变差,使分析和验证程序正确性(特别是涉及循环)的任务变得复杂。在实际编程中,这种“适度”该如何把控?

3. 第4章 4.5.2节:

在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起做单元测试,一起做集成测试,一起写文档等。

虽然两人合作可能在一定程度上更有助于保证软件开发的质量,但是这种坐在一起共用一台电脑的行为是否显得过于极端?这样真的不会降低编程效率?

4. 第9章 9.1节:

Program Manager:微软的职位名称。微软产品团队三足鼎立的角色分配就是PM、开发、测试。PM负责除产品开发和测试之外的所有事情。从某种意义上说,是前面两种角色的综合。

在实际开发中,PM和开发、测试人员负责的工作类型有很大的不同,三者如何才能保持这种三足鼎立的平衡关系?如何避免“程序员暴打产品经理”这种事件的发生?

5. 第16章 16.5节:

一些人士批评“很多企业还处于手工式的开发生产阶段”,我不知道软件除了用手工,还可以用什么别的来写。也许有人说,是不是那些CASE(ComputerAided Software Engineering)工具,或者是代码向导(Code Wizard),用右键一点,然后继续点[下一步]、[下一步]就可以产生出很多很多代码?这些固然好,但是你可以点一下产生很多代码,另一个公司也可以点一下产生很多同样的代码。你的核心技术在哪里呢?

一个软件的核心技术必须通过手写的代码来体现吗?如果存在一个可以根据算法的思路或者流程自动生成具体代码的工具,那么核心技术是否体现在算法的设计层面而非具体的实现?

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

“软件”一词最早是1953年8月由Richard R. Carhart在兰德公司的研究备忘录中提出的。

“软件工程” 一词则是1968年由北大西洋公约组织(NATO)在联邦德国召开的国际会议上提出的。

三、【附加题】:大家知道了软件和软件工程的起源,请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?

关于著名的计算机科学家Donald E. Knuth和他的排版软件TeX的趣事:

  1. Donald E. Knuth在写完《计算机程序设计艺术》(The Art of Computer Programming,TAOCP)第三卷后,由于对当时粗糙的排版技术忍无可忍,开始开发排版软件TeX。他原本以为只需要半年时间就能完成,但最终用了超过十年时间,直到1989年TeX才最终停止修改。

  2. TeX的版本号码十分有趣。从TeX第三版开始,之后的升级是在小数点后加入一个新数位,使之越来越接近圆周率π的值。当前版本的TeX是3.14159265,它的最后更新时间是2014-01-12。这显示了TeX已经十分稳定,任何的升级都十分细微。高德纳曾表示“最后一次升级是(于我过世后)将版本数改为π,那时任何余下的漏洞将被看作程序的功能。”

  3. TeX是非常稳定的程序,高德纳悬赏奖励任何能够在TeX中发现程序漏洞(bug)的人。每一个漏洞的奖励金额从1美分开始,并每年翻倍,直到目前的327.68美元封顶。然而高德纳从未因此而损失大笔金钱,因为TeX中的漏洞少之又少,而真正发现漏洞的人在获得支票后,宁愿将其裱起来留作纪念也不愿拿去兑现。

来源:知乎

四、上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFSGitMercurialGitHubBitbucketTracBugzillaRationalApple XCode)?

版本控制软件

软件名 优点 缺点
Git 免费、开源的分布式版本控制系统,强大的分支管理,支持离线工作,速度快。 命令行指令比较复杂,初学者容易误操作,有一定的学习曲线
SVN 免费、开源的集中式版本管理系统,有良好的目录级权限控制系统,可以管理非文本数据。 必须联网,对服务器性能要求高,分支的管控方式不灵活。
Mercurial 跨平台的分布式版本控制软件,相比于git命令行简单。容易上手。 功能不如git强大。

项目托管平台

软件名 优点 缺点
GitHub 世界上最大的代码托管平台,活跃人数多,有大量优秀的开源项目,(2019年开始)提供无限免费的私人仓库。 有一定的学习曲线,免费私人仓库限制合作者人数。
Bitbucket 提供无限免费的私人仓库,简单易学,支持中文。 项目数和用户数不如Github丰富。

项目管理软件

软件名 优点 缺点
MicroSoft TFS 针对专业团队的开发人员工具的集成服务器套件,供个人或小团队免费使用,不限语言和工具,面向敏捷团队。 硬件要求高、速度较慢;实际需求少,能应用起来的团队、公司的数量比较少。
Trac 功能灵活,可以随心所欲控制可以和SVN或git集成,具有良好的扩充性 不支持多项目,需求和缺陷没有分离。
Bugzilla 免费开源,定制功能强,强大的检索功能和后端数据库支持功能。 界面不够友善,快速搜索结果不准确。
Apple XCode 功能强大,编译速度快,支持多种语言,拥有便捷的代码管理器。 不能跨平台,比较臃肿

猜你喜欢

转载自www.cnblogs.com/David-Liu-/p/10478996.html
今日推荐