软件工程第一次作业

(一)自我简介

  新学期的开始,也是对软件工程课程一个新的开始。而我是青海大学一名计算机系164班的一名学生——洪居兴,也是该软件工程课程中的一员。

身处在信息化时代,接触到的是信息化科技,正因为如此一直对计算机上的软件以及手机应用有着强烈的好奇心,力求能明白软件的构成。已经上过的理论课中,能让我感受到软件的魅力,当然这都

离不开老师用心的教导,这都让我对未来的课程充满了热情。我认为认真学好该门课程需要做到以下几点:

1) 上课认真听讲,做好相应的笔记;

2) 课后完成相应的作业;

3) 遇到不懂的问题需要及时查找资料或者询问老师;

  对软件的兴趣不仅仅局限于书本上,更希望自己能亲自体验软件开发的乐趣和享受成功的喜悦;为此学完这门课程最大的希望就是能够对软件开发的构成有一定的了解,并能依据自己所学做一个

小软件为目标,也借此为自己打开一扇新的大门。

  但是学好软件工程并不是一件容易的事情,除了上课时间外,还需要花费大量的时间来学习,为此课后的大量空余时间都是学习软件构成必不可少的,对很多的知识都将需要课下花费时间学习,我

相信自己能够实现自己最初所希望的目标。为自己开辟新的世界。

                                                                      2018年3月19日

 

(二)软件有很多种:包装在盒子里的软件、基于网页的软件、企业或学校或某组织内部的软件、游戏、手机应用、操作系统、工具软件,选取三种软件,请分析它们各自的特点。

  • 1)这些软件开发者是怎么说服你(陌生人)成为他们的用户的?他们的目标都是盈利么?他们的目标都是赚取用户现金么么?还是别的?
  • 2)这些软件是如何到你手里的(邮购,下载,互相拷贝)
  • 3)这些软件是如何处理Bug的?又是如何更新新的版本的?
  • 4) 同一类型的软件之间是如何竞争的?
  • 列举你在使用上述软件时观察到的“特殊”现象,它们和硬件有什么不同?这些能说明软件的某些本质特性么?

一、    对各类软件的定义

  基于网页的软件(Web APP):Web App即是一种框架型APP开发模式(HTML5 APP 框架开发模式),该开发具有跨平台的优势,该模式通常由“HTML5云网站+APP应用客户端”两部份构成

游戏(Games):现如今的游戏包括电脑游戏和手机游戏;电脑游戏(PC games)是指在电子计算机上运行的游戏软件。这种软件是一种具有娱乐功能的电脑软件。手机游戏是指运行于手机上的游戏软件。

手机应用(Mobile Apps):可以在智能手机上进行安装软件,使手机具有本没有的应用。

二、    软件及其特定的特点

  基于网页的软件(Web APP),这类软件的优势在于开发成本较低,使用web开发技术就可以轻松的完成web app的开发,而它的升级不需要像客户端那样下载文件进行升级,它的本质只是一个网站,只需要从从移动设备上的浏览器访问,不需要安装额外的软件,因此升级或者维护都相当于对一个网站进行维护,只能使用有限的移动硬件设备功能。然而,因为现在没有什么商品或卖场提供这种web App,所以如何搜索这些移动Web App并不是一件容易的事情, 进行浏览器进行访问的方式对于数据流量的消耗是个需要解决的问题。

  游戏(Games),是广大群众喜爱的一项娱乐活动,人们玩游戏具有主动性、积极性,现在基本是处于全民游戏的时代,它可以作为忙碌生活中的调味剂,然而青少年沉迷游戏的趋势依旧持续上涨,这也是游戏带来的负面的影响。另一方面,游戏具有兴趣性。兴趣属于动机的一个方面,可以激发人们去从事某种活动的力量。这就可以让对游戏开发激起兴趣,从而逐渐对游戏的喜爱转移到对游戏的开发上。它是一柄双刃剑,我们不能否定它给我们带的益处。

  手机应用(Mobile Apps)随着信息化时代的来临,智能手机的兴起给手机应用的发展提供了巨大的发展空间。简单描述手机应用就是降低了人们对电脑的依赖程度,因为手机应用可以为人们提供简单方便的服务,更因为手机小巧的外形,众多的功能,便于携带等等,致使更愿意使用手机以及手机上的应用让生活趋于简单化,但是带来的影响却是使生活成为“低头一族“,带来一系列的问题,例如疾病的发生率上涨等等。

三、问题回答

1)这些软件开发者是怎么说服你(陌生人)成为他们的用户的?他们的目标都是盈利么?他们的目标都是赚取用户现金么?还是别的?

2)这些软件是如何到你手里的(邮购,下载,互相拷贝)

3)这些软件是如何处理Bug的?又是如何更新新的版本的?

4) 同一类型的软件之间是如何竞争的?

  对于这几个问题,将从基于网页的软件(Web APP)、游戏(Games)、手机应用(Mobile Apps)这三个软件类型中举出应用相对较广泛的具有代表性的软件进行回答。回答有不准确之处请指出错误之处,谢谢。

  具有代表性的Web APP是酷狗官方网站,在未使用酷狗客户端听音乐时,网站成了听音乐的一个良好场所,成为Web APP用户大多都是从广告宣传上或者相应的客户端软件上进行推荐获取信息,从而间接成为其客户;但是它的目的不一定是盈利,盈利可以从数据流量、广告费等等方式进行获利,相对于酷狗官方网站,可以从网站上进行下载客户端,也可以直接在网站上听音乐,可以说是属于半盈利的状态。而对于Web APP的访问可以从移动端的浏览器就可以进行访问,简单直接更为重要的是方便;而Web APP的开发基于网站,为此可以说是对其进行BUG的处理或者更新新的版本都是从网站维护或者更新的方面进行入手,具有维护简单,成本低的良好特性。这一类型的软件之间同过对应客户端软进行竞争,从网站打开的快慢、网站空间的稳定性、网站标题的设置和网页内容的布局等等方面着手,哪一方在这些方面上更具有优势,客户都将会趋向于这一方。

  具有代表性的游戏(Games)以最近较为火爆的游戏绝地求生为例,它从宣传上有一定的力度,从游戏平台或者利用网络平台进行大范围的广播,先得到一部分游戏玩家的反馈后,依据取得的效果进行下一步的推广,也从已有游戏玩家的推荐中了解甚至购买。他们的目标是纯粹的盈利,收取的费用一般是从网上支付。这些游戏可以从它的官方网站上或者游戏平台等等方式进行下载安装。该类软件处理游戏BUG和更新软件都是官方将BUG的补丁或者用来升级的补丁发布,客户下载补丁后依据软件自行更新或者修补BUG。在我看来,这一软件之间的竞争在于对游戏的可玩性,想在游戏上脱颖而出或者说实现垄断的现象,都需要游戏的题材新颖,可操作性强等等,最重要的是开发软件需要充足的资金,这也是决定是否能开发一款好的游戏关键的因素。

  具有代表性的手机应用(Mobile Apps)有很多,以腾讯QQAPP为例,它吸取客户从广告的宣传,以及应用推荐中来达到吸引客户的目的,它为客户提供一个聊天的平台,他们的目标也是用来盈利,在腾讯QQ上有相应的诸多功能,但是采用这些功能有时需要支付费用,也就是Q币或者网上支付的形式。该软件由应用商店的推荐中推荐安装,也可从别人处拷贝进行安装,该类处理BUG或者更新新版本,是从软件商店里重新下载最新版本的APP,进行安装即可。在我认知中,腾讯QQ以更好的图形化界面和众多的功能来与其他软件进行竞争,也从用户的需求方面着手,采取将各种优势集于一身的方式。

(三)对于作业“在一周之内快速看完《构建之法》,列出你不懂的5-10个问题”

一、            在第三章3.2软件工程师的思维误区中提到的误区中其中一个是“分析麻痹”,书上阐述过多的分析会导致停滞不前,但我对书上所说的观点有所不赞同,认为尽可能的做到对问题分析全面,从而对软件最终的实现以及达到的效果将会更好,较少的分析可能会使软件存在一些缺陷。但是从网络上查看的资料来说:第一点,对于需求分析,弄清楚用户想干什么,要经过多次的沟通并且参与到业务的流程,在一个软件开发过程中,需求分析是这么重要,没有它真的是寸步难行;第二点,框架设计,需要分析主流框架,技术栈,编程语言,团队或个人已有的技术储备,代码托管方式,产品自动构建,基本上就是可靠性,易用性,可扩展性,安全性,可维护性;第三点,模块设计,开始分解功能需求,划分代码模块,理清模块依赖关系,接口关系,原则是低耦合,高内聚,可复用,可扩展。这些都是需要分析的问题,并不是单一的方面,应该只有详细的分析才能达到最终较好的效果。在自己平常打程序的过程中,对一个问题往往从各个方面考虑它可能存在的事件,并查找资料寻求更好的解决办法,增加分析的力度,才能更好的解决面临的问题。

二、            在第五章,5.4中依据该段话:大家在回想小学和中学的学习过程,大家在一个班集体,有多少工作是以“团队”的形式来完成的,有多少工作是以“工作组”形式完成的,或许大部分工作都是以“非团队”形式完成的。我认为团队与集体是同一性质,没有较大的区别,对书上的说法不是很明白,主要在于不理解“团队精神与集体主义的区别”。查找的资料中有提到:团队精神更强调的是一骨子气势,一种软实力。有的时候不同的团队,有着不同的团队精神,比如有的团队是效率型的,那他们的团队精神强调高效,按时完成工作;而有的团队是合作型的,那他们的团队精神强调把大家的心气聚到一起,有事大家一起上,共同解决问题。而集体主义,有的时候更强调一致性,只要这个集体完成某些工作就行,忽略了个人的作用,着眼于大体,往往把一个集体看成了一个整体,也就是把对个人的要求强加到每个人身上,难免有的时候差强人意。对集体和团队的阐述,明白这两者的差别,也明白了软件的开发需要团队的协作,并不是像集体那样对待,在团队中个人的能力能得到最好的发挥,在自己擅长的领域大显身手,这都是集体所不能带来的效果,面对集体主义,一个团中每个人可能因为差异做不到都完美,这对一个团队的发展往往都是非常不利的。

三、            第四章中,结对编程不是很懂。感觉两个人一起编程效率不如分开吧,毕竟两个人分工来工作完成作业的进度要快些吧。查找的资料中有明确指出:有实验证明,平均下来,结对编程时间花销比单人编程增加10%的时间,但也会比单人编程减少15%的代码BUG。如果再算上后期代码的维护和学习成本,结对编程比单人编程更有效率,还更为节省成本。但是其中也提出结对编程的弊端,例如:有经验的人更喜欢单兵作战,找个人来站在他背后看着他可能会让他感到非常的不爽,最终导致编程时受到情绪影响,反而出现反作用。结对编程还存在的弊端有多方面,并不只是刚刚提到的那个;而单人分工合作可以在自己擅长的领域大显身手,将自己的任务完美完成,这样最后达到的效果不会是简单的“1+1=2“的效果。虽然结对编程和起单人分工合作各有优缺点,而我更觉得单人分工合作更胜一筹,但是结合资料和书上所说,结对编程更具有优势,还是不明白结对编程相对于单人分工合作的优势在于哪里,被大众所采用的原因又是什么?

四、            第五章中,提到许多团队模式,主要模式有:主治医师模式、明星模式、社区模式、业余剧团模式、秘密团队、特工团队、交响乐模式、爵士乐模式、功能团队模式,官僚模式。书上对这些模式有详细的解释,但是我想问对于软件开发的程序员来说那种模式比较适合且有用高效。在网络上查找的资料来看,各个模式都是有可取之处,每个人都有自己喜欢的模式,对每个模式的优缺点难以综合判断哪个模式是最好的。但是我觉得功能团队模式可能是最好的模式,在该模式下可以对自己的能力完成相对的任务,在遇到难以解决的问题还可以在团队内进行讨论,以求解决问题,也不存在管理与被管理的情况,觉得可以让团队发挥出最大的能力。然而看了资料,觉得很迷茫,对哪种团队模式是最好的还是有点模糊。

五、            第十一章里的11.3 其他设计方法中的说的:“另一方面,我们可以写很多文字,画很多图,写很多公式,还可以口若悬河地倾诉,但是最后在电脑上运行的,是代码“;这一句话不是很理解最后一句:最后在电脑上运行的,是代码。在我看来,没有之前的画图、公式和文字,怎么能从一步步分析中得到最终的方法,再用高级语言实验该方法;觉得之前的都是在为代码做准备,是必不可少的一部分。对书上所描述的话不是很理解,在网络上没有查找到相关的资料,但是我仍旧认为代码的实现和在代码编写完成之前的准备都是缺一不可的。只有两者的结合才能得到好的设计方法。

六、    在十三章中的13.4.3如何测试效能这一小节里,有效能测试、负载测试、压力测试,这三个测试描述中,都有提到在规定时间内返回结果,不明白该规定时间是如何确定的,为什么改时间不可以更早或者更久。在网络上查找的都是对测试效能的整体过程以及需要注意的情况,未提及测试中的各个时间的明确没有解释,没找到相关的说明,对该问题还是很迷惑,不明白时间是如何规定。

七、    在16章中的16.1.3 迷思之三:好的想法会赢。书上提及:在现实生活中,好的主意不一定赢。在我的观点中,认为好的想法,只要能实现,就能够大放光彩,对于书上说的内容不是很赞同。而好的想法,无疑在旧的形式上有了新的突破,打破旧的模式,走出一天不同的路,在当今时代里,这是走向成功的一个必不可少的条件。在网络上很多博客园的博主都赞同书上的观点,认为好的想法不一定适合于所面临的问题,会使问题过于复杂化,导致问题得不到解决。也有的博主的想法是不赞同的,认为好的想法符合当今创新的主题,是能够在实际中得到巨大的发展。

参考资料:

http://www.cnblogs.com/Ylove/p/7508248.html

https://www.cnblogs.com/zhanghongyu/p/8586504.html

http://www.cnblogs.com/guoleilei/p/6685770.html

http://www.cnblogs.com/22yuxianhao/p/6691019.html

http://www.cnblogs.com/yzj40/p/6672210.html

https://kb.cnblogs.com/page/58732/

http://blog.jobbole.com/12304/

http://www.bubuko.com/infodetail-408025.html

 2.花20分钟写一个能自动生成小学四则运算题目的“软件”,要求:除了整数以外,还要支持真分数的四则运算。

该程序采用C++高级语言编写,结合MFC的图形化界面。详细源文件请查看如下网址。

网址:https://git.coding.net/qhu_1600802113/jisuanqi.git

界面及运行显示:

原文地址:https://www.cnblogs.com/qhu-hjx/p/8626692.html