软件工程第一次作业
1.一个能自动生成小学四则运算题目的“软件”。
我写的计算器使用MFC编写,支持整数和真分数的四则运算。其中,整数的四则运算中的除法给出了有余数和无余数两种选择;真分数中也保证了结果必须为真分数且是最简分数的要求,以适应不同年龄段的小学生。用户可输入答案,并看正确答案和自己的答题正确数量。代码已上传至coding.net,地址为:https://git.coding.net/douliyoutang49/ruangong.jisuanqi.git。
2.在一周之内快速看完《构建之法》,列出你不懂的5-10个问题。
(1)对于第2章“2.3个人开发流程”里,作者告诉了我们CMU的专家针对软件工程师的模型——PSP,接着引用了大学生和工程师的PSP数据比较,然后告诉我们:工程师在“需求分析”和“测试”这两方面明显得要花更多的时间;但在具体编码上,工程师要比学生要花少1/3的时间。我想知道,为什么“从学生到职业程序员,花在写代码上的时间少了很多,而花在“需求分析”和“测试”的多了”职业程序员写代码的时间不应该更长吗?通过网上查找资料得知,工程师为公司服务,公司大部分的目的是赚钱,所以这是为了生产用户喜欢的东西、并尽量减少由于使用时出现错误带给他们麻烦。他们更注重商业价值,在这三方面的时间分配也就不一样了。另外,我自己的经验告诉我:职业程序员有很多公司内部的代码可以直接调用,而大学生绝大部分要自己写,所以大学生花的写程序时间比工程师的长。
(2)第三章“3.1个人能力的衡量与发展”中关于初级软件工程师如何成长的第五种成长中说道:绝大部分软件工程师的工作成果都是可以公开的。我想知道这是 为什么呢,公开了以后他们不怕自己的东西、甚至公司的重要东西被人窃取吗?对此,通过查找得知,公开的目的主要有一下几种:有助于自己更娴熟地掌握相关知识;有助于提高自己的项目质量;能够让你免费利用大家的智慧与劳动;是推销自己的很好方式;能够让你获得对项目的拥有权;同时可以获得一定的成就感和满足感。后来自己也想了想,重要的关于公司机密的东西,是属于不会公开的一部分的。
(3)第四章“4.3.2 goto”中说道:只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto。记得大一学习C语言时,老师是不建议我们使用goto的,因为Goto语句破坏了程序结构,使程序可读性变差,大量使用goto语句造成的后果更明显。通过查找资料得知,之前对goto语句的使用也有较大的争议;而关于goto语句的解决方法,在1974年,D·E·克努斯对于GOTO语句争论作了全面公正的评述,其基本观点是:不加限制地使用GOTO语句,特别是使用往回跳的GOTO语句,会使程序结构难于理解,在这种情形,应尽量避免使用GOTO语句。但在另外一些情况下,为了提高程序的效率,同时又不至于破坏程序的良好结构,有控制地使用一些GOTO语句也是必要的。但我仍然觉得应该限制goto语句的使用。
(4)第六章“6.1 敏捷的流程简介”中说道敏捷开发的原则中的第三条:经常发布可用的软件,发布间隔可以从几周到几个月,能短则短。我觉得这样未免有些“仓促”了,软件发布应该更注重的是质量,如果只做了一些稍稍的改动就把他发布出去的话,我觉得这样的意义不大。应该等到真正的能有一些重要的改变的时候再发布出去比较好。就像现在生活中用到的很多软件,很快就会更新一次,但我作为使用者,很少能发现这些能有什么大的、提升了使用质量的变化。从有关资料得知,这其实也有很多好处。如,对用户来说:可以增加新功能;解决以前版本的漏洞或BUG;增加稳定性和对新的操作系统的良好支持等等。对软件开发人员等,也可以促使他们不断进步。
(5)在第十一章“11.3 其他设计方法”中,作者为我们介绍了“文学化编程”,但我看完了以后,仍然不太懂什么是“写文档,时不时写些代码”的意思。通过网上查找资料得知,“正如高德纳所构想的那样,文学编程范型不同于传统的由计算机强加的编写程序的方式和顺序,而代之以让程序员用他们自己思维内在的逻辑和流程所要求的顺序开发程序。文学编程自由地表达逻辑,而且它用人类日常使用的语言写出来,就好像一篇文章一样,文章里包括用来隐藏抽象的宏和传统的源代码。”
(6)第十二章“12.3 评价标准”中,作者给出了“一致化和标准化”的原则。我觉得,现在的我们非常注重个性,过分一致化和标准化,有时候不是喜爱个性的人所喜欢的。软件可以在不影响使用的情况下,让用户自己选择是否更改一些界面上的东西。换成他们喜欢的表达方式,说不定会更引起他们对软件使用的兴趣,从而增加软件的推广度。
(7)第十六章“16.1.5 迷思之五:要成为领域的专家,才能创新”中,作者在最后也像我们提出了这个问题:为什么领域的专家有时候没有领域外的创新者那么有创意?对此,我觉得,可能是因为领域内的专家因为太熟悉自己所在的领域了,所以很多有可能会激发创新灵感的事对他们来说,都是情理之中的事。因此,他们能够发现的闪光点比起领域外的人来说,少了不少。在网络上,我没有找到这个问题的权威答案,但也发现了其他人的想法,比如博客园一位同学的观点:这个问题也是我想问的。那我就做一点简单的分析,就跟当局者迷之说差不多,在自己擅长的领域内对自己领域的眼光有一定的局限性,由于学习了该领域的太多只是,有些知识已经是被认为该领域的公理了,神圣而不可推翻,以至于该领域的专家不敢轻易的推翻前人留下的公理,然而领域外的创新者可能对其他相关的领域有独到的见解,从而可以从另外一种角度来看待该领域的问题,所谓知识都是相连的,少掉了一些局限性更能实现创新。我也不知道我分析的对不对,不过关于为什么领域的专家有时候没有领域外的创新者这么有创意的问题也很值得我们研究。我觉得这也是一个很不错的解释。
3.分析软件特点
(1)游戏软件——开心消消乐
通过在网络或电视等媒体上做广告或者通过优质的服务的体验使玩过的人主动为他们传播来说服陌生人成为他们的用户。以盈利为目标。通过让用户支付购买道具或享受更好的待遇等方式赚取用户现金。
通过直接下载、相互拷贝的方式进入用户手中。
通过用户留言或者专业人员检测的方式发现BUG,维修人员更改游戏代码、相关文档等进行修复。如何更新新的版本 :添加功能、更换操作界面等技术上的更新、升级数据文件、旧系统有BUG升级完成补丁等。
同一类型软件之间如何竞争:进一步增强画面效果、加强真实感或娱乐感等提高用户体验满意度;进行技术上的创新;紧跟当下流行元素;增加广告投入。
(2)企业或学校或某组织内部的软件——天翼校园宽带
是用电信网的猫必须要使用的软件,不是为了盈利,是为了能在校园内使用电信猫。
工作人员帮助下载的。
通过专业测试人员或者用户留言、给客服人员打电话等出现的相关问题发现BUG并进行维护。一般很少更新,在出现问题或添加更好的功能时会更新。
此软件和同类软件之间的竞争主要是选择网络的竞争,是校园里电信、移动、联通三家运营商之间的竞争。
(3)基于网页的软件——淘宝
网上购物现在是生活中不可缺少的一部分,为了使生活便捷主动下载的。以盈利为目的。可以通过支付宝里的钱的利息赚钱,收取用户部分收费内容来赚钱,收取个人或企业在线开店以及广告的费用。
打开链接的方式进入用户手中。
主要通过专门的测试人员以及重大事件中出现的问题来发现BUG,后由专业人员对服务器等出现的问题进行修复。服务器的问题,可以通过修改相关配置的文件;页面与浏览器不兼容的问题,需要更改一些代码。“更新有2种方式,一种是页面内容的更新,在不更改页面的结构通过后天改变外观的方式;一种是页面结构的分析,这需要对原来的页面进行修改甚至需要重新设计新的页面,这种情况只能通过ftp上传新页面到服务器。”
同一类型软件之间如何竞争:通过加大优惠促销力度、完善售后服务、增强配送力度、增加功能性等提高用户满意度,通过降低商家入驻门槛、越发成熟的管理等保持大量店家;同时不断提高自己的技术,减少网页卡慢、由于访问人数众多导致服务器崩溃的现象出现。
使用游戏时观察到的“特殊”现象:出现卡、慢现象。使用校园宽带软件时观察到的“特殊”现象:无法正常接连到网络,通常要删除拨号连接配置器重新拨号。使用淘宝时观察到的“特殊”现象:除夕夜时出现服务器崩溃。
与硬件不同,软件是看不见、摸不着的,以程序和文档的形式存在,可以用来操控硬件的。上述可以说明软件的本质特性,如:可用性、可维护性、可变性、不可见性等。