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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3、上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下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

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

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

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

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

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

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

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

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

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

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

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

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

  中文编程并不单指程序是由汉字组成,更要在于其编译技术得自身掌握,因而编程和编译互为统一发展、缺一不可。但汉语的博大精深,经常会出现歧义和地域性差异,导致汉语编程的统一风格很难实现。例如从 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界刮起革命的风潮。

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

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

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

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

10、课上同学们应该根据自己的爱好和情况组成了5-6 人的项目小组。 并且报告了助教。(王喆)
      10.1: 请每个小组在 cnblogs.com 上面创建团队博客,第一个博客把小组成员都介绍一下
      详见http://www.cnblogs.com/bywb/p/5850954.html 
      10.2: 现代软件工程这门课已经上了好几年了,以前有很多学生做过团队项目(说不定包括本校的学生),请你们找一个以前的团队采访一下:

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

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

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

                - 对学好软件工程有什么建议
      详见http://www.cnblogs.com/bywb/p/5847261.html

11、请问 “软件” , “软件工程”,瀑布模型,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位志愿者在美国尤迪洲雪鸟度假胜地提出的。

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

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

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

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

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

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

 

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

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

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

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

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

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

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

 

posted on 2016-09-08 21:35  北洋五霸  阅读(371)  评论(0编辑  收藏  举报

导航