现代软件工程 第一章 【概论】练习与讨论

一、像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的“软件”,和同窗们比较一下各自程序的功能、实现方法的异同等等。(苏志华)php

     详见http://www.cnblogs.com/bywb/p/5859547.htmlhtml

二、选择mobile app手机应用(唐家炜)python

(1)此类软件是何时开始出现的, 这些软件是怎么说服你(陌生人)成为他们的用户的?  他们的目标都是盈利么?  他们的目标都是赚取用户的现金么?仍是别的?linux

  严格意义上我接触的手机移动应用开始于塞班,兴起于ios,成熟于安卓和ios。苹果手机引领了潮流,你们就都纷纷开始用手机应用了。本质上他们都是盈利的,有直接从用户手中赚钱的,也有经过广告实现收益的。最高明的是经过用户向第三方付款,经过资金沉淀实现盈利。ios

(2)你我的第一次用此类软件是何时,你当时多大,具体在什么学校读几年级,是什么状态,对软件有什么指望  软件是如何到你手里的,例如:邮购,下载,互相拷贝,从应用商店购买,等等。 (这个必须详细写,否则这道题目得0分,我要看看全世界的学生怎么抄袭这一段的)。git

  本人2012年参加高考。第一次用app是玩塞班自带的爸妈手机上的游戏,初中左右。到了高中有了一台nokia手机,开始安装一些基本应用,如上网浏览器,这是我真正使用手机应用。到了大学,我有了一台iphone,才开始普遍使用手机应用。一开始是玩游戏,后来主要是用微信交流,用日历去安排日程,用课程格子安排课程,用大众点评去吃饭结帐。程序员

(3)咱们知道有些软件是收费的,有些是“免费” 的, 那么,写这个软件的工程师们,他们的工资大约是多少,请给出尽可能详细的分析,精确到年收入多少万元人民币。 github

   我历来没有到专业相关企业去过实习,我只能从本科毕业时工做的同窗了解一些状况,在天津8k起步,在北京10k起步。我实在不了解企业的盈利状况,没法给出详尽的分析。我曾经去听过一些国内仅次于BAT的二线互联网企业,他们也认可他们在烧钱,但他们坚信为社会提供服务迟早会挣到钱。算法

(4)你是如何学会用这软件的?它给你什么好处,坏处? 这些软件是如何处理 bug 的?  如何更新新版本的?  你估计软件团队更新一个主要版本花了多少 人月? 请写上人月的定义. 数据库

  如今手机应用之间的人机交互相似,极易操做。好处是生活方便,坏处是我常常看到别人盯着手机,忽略了现实生活,成了“低头族”。做为用户,我在手机上没法debug,若是老是闪退出问题,也只好找替代软件。如今的手机应用版本更新很快,一到两个月必然更新,以一个团队1k个成员,得1k我的月。人月是工做量的计量单位,是项目全部参与者工做时长的累计,是最为方便计算成本的数据。是项目管理中经常使用的概念。

(5)同一类型的软件之间是如何竞争的?你如今还用它么,或者是同类软件的不一样品牌,为什么?

  手机应用的竞争很激烈,但又很奇怪,如今陷入了合并风暴,大众点评美团,优酷土豆,滴滴优步。竞争主要是经过烧钱打价格战。在价格战结束以后,我依然会使用使用,叫外卖确实比堂食更加方便,电子商务确实比溜商场更加快捷。

(6)5年后, 这种软件运行的硬件会有什么变化, 软件再过 5 年还会存在么,为何?

  乔布斯玩的是“道”,库克勉强算是“术”,只能从配置上不断提升,缺少创新。在可预见的未来,手机依旧会存在,手机应用做为手机的强大支撑依旧会存在,五年是确定的。

(7)列举你在使用上述软件的时候观察到的 “特殊”现象,它们和硬件有什么不一样?  这些能说明软件的某些本质特性么?

  人表面上在触摸手机,处理器是手机的大脑,而指导人脑工做的和指导处理器工做的原则就是软件,总之是看不到的,但一定存在的。

三、上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFS、GitHub、Trac、Bugzilla、Rationale,Apple XCode),请用一个实际的源代码管理工具来创建源代码仓库,并签入/签出代码。(唐家炜)

Microsoft TFS:

优势:

1.任务版上能将需求、项目进度尽收眼底,对于小团队而言,比甘特图更有用

2.集成了项目管理、版本控制、BUG 跟踪,能有效实现 SCRUM

3.能与 VS 无缝接合

缺点:

1.整个系统是用 asp 实现的,用浏览器访问至关慢

2.从 IE 上访问、填写各类开发、测试记录,也是很慢,感受不如 mantis  BT 这样基于 php 的那么方便、迅速

3.XP系统没法访问,还要求64位的操做系统

 

github与SVN的优劣

1)适用对象不一样。Git适用于参与开源项目的开发者。他们因为水平高,更在意的是效率而不是易用性。Svn则不一样,它适合普通的公司开发团队。使用起来更加容易。

2)使用的场合不一样。Git适用于经过Internet,有多个开发角色的单个项目开发, Svn 适合企业内部由项目经理统一协调的多个并行项目的开发。

3)权限管理策略不一样。Git没有严格的权限管理控制,只要有账号,就能够导出、导入代码,甚至执行回退操做。Svn则有严格的权限管理,能够按组、按我的进行针对某个子目录的权限控制。区分读、写权限。更严格的,不支持回退操做。保证代码永远能够追踪。

4)分支(branch)的使用范围不同。Git中,你只能针对整个仓库做 branch, 并且一旦删除,便没法恢复。而svn中,branch能够针对任何子目录,它本质上是一个拷贝操做。因此,能够创建很是多、层次性的 branch,而且,在不须要时将其删除,而之后须要时只要checkout老的svn版本就能够了。

5)基于第三点,Git适用于单纯的软件项目,典型的就是一些开源项目,好比Linux内核、busybox等。相反,Svn擅长多项目管理。好比,你能够在一个svn仓库中存放一个手机项目的bsp/设计文档/文件系统/应用程序/自动化编译脚本,或者在一个svn中存放5款手机项目的文件系统。git中必须创建n (项目数)* m(组件数)个仓库。Svn中只须要最多n或者m个就能够了。

参考:http://www.cnblogs.com/AyaBrea/p/5285574.html

四、写程序这个活动大多数状况下是我的行为。 咱们据说的优秀程序员彷佛都是单打独斗地完成任务。同窗们在大学里也认识一些参加ACM 比赛的编程牛人,  他们写的ACM 比赛的程序是软件么?   “写程序作软件有区别么? 请采访这些学生。 (梁绍楠)

   唐家炜同窗说:程序固然不是软件,写程序仅是软件开发的一部分,作软件涵盖的东西要更   多,例如作软件须要进行用户的前期调研、需求分析、软件开发、后期测试、上线运营等等 好多环节。

  朱翔宇同窗说:我以为“写程序”和作软件不是一回事,程序只是为了实现软件的功能和性  能要求而编写的指令序列。而软件是一个或多个程序编译出来的成品,是程序、数据及其相关文档的一个大的完整集合。

 软件工程是否是教那些不怎么会写程序的人开发软件? 你怎么看?

    软件工程是一门庞大的、覆盖面广的学科,涉及程序设计语言数据库软件开发工具、系统平台、标准、设计模式等方面。包含软件开发原理、过程、方法、管理,会写程序仅是其中的一部分,而且在当下软件应用与发展的背景下软件工程的管理、行业运做规范等愈来愈重要。

5你所在的学校有计算机科学专业和软件工程专业么?相关专业的教学计划和毕业出路有什么不一样?阅读有关软件工程和计算机科学的区别的文章,谈谈你的见解。文章:http://www.drdobbs.com/architectureand-design/software-engineering-computer-science/217701907 (唐家炜)

   天津大学有计算机科学与技术学院和软件学院,二者关系很是密切,在学生看来,没有什么本质性的区别,由于学生关注于就业。在老师给的参考资料里面,有一张图片,区别了两个专业。软件工程强调软件可用性、稳定性、可维护性、软件成本等,软件工程实际上是研究如何更好地完成工程的学科,还达不到科学的程度,由于它的研究对象就是工程。而计算机是不针对工程,更准确地说,不研究人,研究机器,研究计算的属性,研究算法的复杂度。

  简而言之,软件工程管理人的行为,使项目可控,使成果按时在预算内达到要求,而计算机科学则是在算法上对项目实施改进。软件工程更偏向于管理学,而计算机科学更依赖于数学。而在中国的实际来看,是相似的,由于毕业都会去到互联网公司。

六、有学生提到,在大学选课的时候,能够写一个“刷课机”的程序,利用学校选课系统的弱点或漏洞,帮助某些人选到某些课程。或者帮助用户刷购票网站,先买到火车票。这些软件合法么?符合道德规范么?是在“软件工程”的研究范围么? 请你们讨论。 参考信息: 一般人们都在路边招手叫出租车,只有不多的人打电话约车, 从2014年起,在不少叫车软件出现后, 在路边招手每每看到不少出租车不停车,它们已经被叫车软件订了。这个例子和上面的有不一样么?(刘祉成)

  通过小组的讨论,咱们一致认为这类软件虽然没有违反法律,可是不符合道德规范。根据《构建之法》中第17章第6节软件工程师的职业道德中所提到的《职业道德规范和实践标准》的原则一:软件工程师的行为应与公众利益一致。这些软件的制做人违反了该原则,由于这些软件因流通渠道不公开的缘由,必然没法让全部用户得知并使用,所以制造了用户之间的不公平,其行为帮助了一部分用户获得了利益确实令一部分用户的利益遭受损失,与公众利益相左。

  叫车软件软件的出现虽然使一些在路边招手叫出租车的人叫不到车,可是这种软件既是合法的,同时也符合道德规范。由于叫车软件并无与公众利益相左。软件是在积极推广的,用户只要有手机,在有网络的环境下就可使用。对用户来讲并没用产生不公平。

七、有人认为,"中文编程", 是解决中国程序员编程效率一个秘密武器,请问它是一个 "银弹" 么? (苏志华)

  中文编程并不单指程序是由汉字组成,更要在于其编译技术得自身掌握,于是编程和编译互为统一发展、缺一不可。但汉语的博大精深,常常会出现歧义和地域性差别,致使汉语编程的统一风格很难实现。例如从 http://weibo.com/2210132365/BiYTws20这一连接的内容来看,虽然简单实现了中文编程,可仍然是中英混杂在一块儿,代码的可读性不强,而且在编写的过程不停切换中英文则大大下降了效率和用户体验。http://www.chinesepython.org/ 该连接里提出"中蟒"这一基于Python的中文编程语言,利用了Python编程格式的优势,但并无实现其余语言的汉化,于是表示不出C、Java、C#等编程语言的优点,另外其平台的扩展性也不是很好,只在部分linux和windows上测试过,同时繁体字也未达到简洁明了的初衷。正如http://baike.baidu.com/subview/545069/545069.htm所言,汉语编程须要具备易用性、安全性、本地化、国际化、跨平台、融合性、先进性、天然醒、无代码编程等特色,但就目前的编程环境来讲,单单文件的中文名就可能会致使整个程序的崩溃,更别提庞大的汉语编程,而彻底利用中文编程来开发软件、国际化和跨平台的实现尤其困难。综上所述,我的认为"中文编程"还算不上是"银弹",其应用场景的不普遍性和较差的用户体验、开发的难度等缺点,仍不足以在IT界刮起革命的风潮。

八、建立我的技术博客(建议是 cnblogs.com),列出问题并在每一个问题后面,请列出哪一章节的什么内容引发了你的提问,  ② 你对此进行了什么思考 (每一个问题至少写100 字)?(梁绍楠)

   详见http://www.cnblogs.com/liangshaonan/p/5861571.html

九、快速看完整部教材,列出你不懂的 5 - 10 个问题,发布在你的我的博客上。(苏志华)

  详见http://www.cnblogs.com/xlwm/p/5850260.html

十、课上同窗们应该根据本身的爱好和状况组成了5-6 人的项目小组。 而且报告了助教。(王喆)
      10.1: 请每一个小组在 cnblogs.com 上面建立团队博客,第一个博客把小组成员都介绍一下
      10.2: 现代软件工程这门课已经上了好几年了,之前有不少学生作过团队项目(说不定包括本校的学生),请大家找一个之前的团队采访一下:

                - 当时的项目有多少用户,给用户多少价值? 如今还有人用吗?

                - 这个项目可否给咱们团队继续开发,源代码/文档还有么? 

                - 项目开发有什么经验和教训

                - 对学好软件工程有什么建议

十一、请问 “软件” , “软件工程”,瀑布模型,Code Complete,Agile Methodology 这些词汇是如何出现的 - 什么时候、何地、何人提出。(刘祉成)

  软件:软件(software)这一术语最先由理查德·卡哈特(ichard R. Carhart)在1953年8月的兰德公司的研究备忘录提出。

  软件工程:软件工程(software engineering)这一术语是由玛格丽特·汉密尔顿在阿波罗11号登月计划时期在麻省理工仪器实验室创造的。

  瀑布模型:瀑布模型(Waterfall Model)这一术语是由温斯顿·罗伊斯(Winston Royce)在1970年提出的。

  《代码大全》:《代码大全》(Code Complete)是由Construx Software公司的首席软件工程师Steve McConnell在1993年11月出版的。

  敏捷方法:敏捷方法(Agile Methodology)是2001年2月由17位志愿者在美国尤迪洲雪鸟度假胜地提出的。

十二、咱们不是在真空里谈软件工程, 软件要运行在硬件芯片上面, 浅谈计算机芯片的发展历史。(苏志华)

      正如软件要运行在硬件芯片上面,一个好的软件的必备性即是硬件的可兼容性。电脑芯片的诞生于发展则被誉为20世纪最伟大的发明之一。而芯片技术决定了计算机升级换代的发展速度,每一代的芯片技术,都致使一代新型计算机的诞生。半导体技术自己就表明了科学的重大突破,世界上第一台现代电子计算机ENIAC的"大脑"即是第一款电脑芯片。随着时间的推移,微处理芯片推动着时代发展,Intel公司推出的400四、8080等芯片完全引起了电脑界的革命,电脑不再是当时人们所认知的"庞然大物",它们为其走进千家万户创造了必要条件。而在1981年,IBM的我的电脑使用英特尔的8088微处理器,更是将两家公司拔高到如日中天的地位。1993年,Intel Pentium处理器的问世,宣告我的电脑开始进入多媒体时代,进而推进了世界的互联网发展和全球化趋势。针对中国来讲,我国虽然是世界第一制造业大国,世界第一贸易大国等,全球手机和电脑大多为中国制造,但是每一年却要进口超过2000亿美圆的芯片,整个集成电路产业受制于欧美,中国芯片发展仍然有着不小的挑战。但我国以自力更生,艰苦奋斗的精神大力研发自主技术一直从事于芯片研究,2016年6月20日,新一期全球超级计算机500强榜单公布,使用中国自主芯片制造的“神威·太湖之光”取代“天河二号”登上榜首,这无疑说明我国的芯片技术逐渐发展了起来。可身为当代大学生,尤为是软件工程专业的学生,仍是要客观全面认清我国与世界强国的硬件、软件差距,不断探究,才能为将来作更好的规划。

1三、咱们说“软件企业 = 软件 + 商业模式”。下面提到的一个游戏团队,有很好的软件,可是商业模式和其余软件以外的因素呢?有没有考虑到?http://news.cnblogs.com/n/528911/(刘祉成)

  博客中提到的独立游戏团队所创做的游戏《Airscape - The Fall of Gravity》有着独特的玩法,较高的媒体评分及玩家评价,其推广过程也很用心,可是销量却很惨淡。“软件企业 = 软件 + 商业模式”貌似在这个案例上并不起做用,那么是否是在这两点之外还有其余的因素呢?文中的做者给出了他的答案:“咱们作了一个没有人愿意买的游戏。”并且在以后的文章中,他又强调了一点:“在我看来,想要成功就必须有如下三样:一个优秀的游戏、很是精彩的市场营销策略,再加上很是不错的运气。”做者在软件的质量、良好的营销策略之上又提出了一个要素:运气。在他看来,一个成功的游戏须要一些运气。而他的运气差,因此他的游戏即便质量优秀,推广积极,但销量仍是惨淡。我并不认同他的观点,纵然运气或多或少的影响成功的几率,但并非主要因素。通读全文,做者在没有进行需求分析的状况下用了三年半制做了这款游戏,他和他的团队忽视了软件工程中最开始的环节。我认为这是他的游戏销量惨淡的缘由。

  做者没有事先进行市场调研,不知道用户(玩家)喜欢什么,对什么类型的游戏感兴趣。所以游戏发售后玩家不买帐也是理所固然的。这里就不得不提到一位与本文做者彻底不一样的制做人,三上真司。他是卡普空公司知名游戏系列《生化危机》一到四部的制做人,他在制做《生化危机2》时将完成度很高的做品推到重来,制做《生化危机4》时更是屡次的推到重来,最终成品甚至开创了新的游戏类型——越肩视角射击游戏。在其访谈中,被问及为什么推到重来时,他的回答是:这个游戏根本很差玩,玩家不会买帐的。他清楚的知道他作出的产品没有知足玩家的需求,所以他勇于推到重来,直到知足玩家们的需求。因此《生化危机2》和《生化危机4》会成为叫好又叫座的游戏。

  游戏是第九艺术,独立游戏更像是一个个匠人们创造的艺术品,可是当独立制做人想经过游戏牟利时,艺术品就变成了商品,创做过程也随之变成了产品开发过程,那么原来不拘一格的开发过程也要符合软件工程。纵使一小部分幸运的团队所开发的游戏由于刚好知足了玩家的需求而大卖,但大多数独立团队的游戏依然处于一种叫好不叫座的状态。好的软件和良好的推广当然重要,但正确的分析用户的需求才是最重要的。

 

1四、开发软件有不少种方式,从软件运行的平台来看,能够在下面的平台运行:
  • 网页 (只要有浏览器就能够访问软件或服务)
  • Windows 平台 (例如最新的Windows 10 支持 PC,Surface,Mobile,甚至Xbox 运行)
  • 安卓平台 
  • iOS 平台 (Mac 和 iPhone)

请找一个同窗结对 (参看本书结对编程的内容),两人共同工做 (不能分开干活),从上面的列表中选取两个平台,在每一个平台上,写一个最简单的 "Hello World" 类型的程序,把写程序的经历写成博客发布出来,内容包括:

- 什么平台, 用什么编程语言,什么软件构建环境 (IDE),什么软件工程的工具,开发的流程大概是什么,最后程序的源码,和用户界面是什么?(能够从网上查找相关资料,甚至源程序均可以参考其余人的, 可是要本身把程序编译,运行)(王喆)

  详见http://www.cnblogs.com/summer23/p/5861652.html

 1五、这么多做业,彷佛压力很大啊! 请看TED 的演讲, 谈谈你对压力的见解,以及怎么和别人合做, 帮助别人,把压力转化为动力,在互相帮助的环境中成长。(梁绍楠)

  TED的演讲告诉咱们如何看待压力相当重要,认得压力每每来源于本身对压力的见解,咱们应该尝试将压力转化为动力。正如演讲中所说,大多数人不是由于压力生病,而是由于压力能让人生病这个观念而生病,可见,决定一我的成败与否的因素,关键不在于压力,而在于这我的对待压力的态度。

  在面对不一样的工做任务时要选择不一样的方法,享受团队合做时的和气,帮助团队成员在工做中释放更多动力。例如在团队任务中得到更多额外利益,会更加享受任务过程,同时变得更加专一,从而有更好的表现。人们在一个团队中作事,会更加有动力,没有同行竞争的压力。

相关文章
相关标签/搜索