软件工程第一次作业补充
软件工程第一次作业补充
https://coding.net/u/chen666/p/functioon/git/commit/7c66299ee8d0ac13290d2d6697c19063d8ba055f
选取三种软件,请分析它们各自的特点:
1.手机应用
全球在使用的移动电话已经超过10亿部,而且这个数字每天都在不断增加。在除美国之外的各个发达国家,手机用户都比计算机用户多。手机应用的开发者主要是以盈利为目的来推广自己的应用,另外通过对自己开发的应用的推广来实现企业的发扬光大,在市场上占据一定的地位,以便于更多的盈利。
安装方便,适用简单,通过下载就可以安装,然后使用,并且可以结合图片、文字、音频、视频、动画等方式展现企业的品牌和产品信息。
在用户使用应用的同时,他们会自测,检查出有关应用的bug,然后再进行修复更新,最后推送到手机客户端,提醒手机用户需要更新,用户自行选择需不需要更新。同一类型的软件会通过宣传以及对自己产品的介绍等来竞争。
2.企业或学校或某组织内部的软件
主要供企业或学校或某组织内部的成员来学习、使用,以此来提高学校学生或者企业成员等的学习或工作效率,(学习为主,盈利为次)。
学校专业老师或者是IT专业人才来通过编程实现一个软件的使用,实用性比较强。有什么新的需求或者什么的可以及时实现更新。通过账号的注册就可以使用。
3.游戏
游戏的趣味性较大,这样可以吸引大量的用户,主要以盈利为目的,部分游戏会赚取用户的现金,只需要通过电脑或者手机的下载就可使用,简便灵活,使用方便。 游戏是一个往返重复、自我更新的结构。游戏有一个开放的结构,它的运动无穷无尽。预先规定游戏空间界限的规则和秩序构成了游戏的本质,这种秩序是游戏内发的,而非外部强加的。游戏一直在它自身的秩序里游戏着,不断往返重复,让游戏者专注于自身,从而摆脱那种造成“此在”真正紧张感的主动者的控制。然而游戏并非是封闭的,它在运动中不断更新自身,形成对作为文本的游戏的不断理解和解释,体现了解释的历史性和生发性会自测,检查出有关应用的bug,然后再进行修复更新,后推送到客户端,让用户下载更新。
与硬件的不同:
硬件:不仅能看到还能摸的到。像硬盘,光驱,机箱等.
软件:你只能看到但摸不到.是按装在电脑里的一些程序,像文字编辑,游戏之类的.
硬件:主机(主要部分)、输出设备(显示器)、输入设备(键盘和鼠标)三大件组成。而主机是电脑的主体,在主机箱中有:主板、CPU、内存、电源、显卡、声卡、网卡、硬盘、软驱、光驱等硬件。其中,主板、CPU、内存、电源、显卡、硬盘是必须的,只要主机工作,这几样缺一不可。
软件:一般来讲软件被划分为系统软件、应用软件,其中系统软件包括操作系统和支撑软件(包括微软发布的嵌入式系统,即硬件级的软件,使电脑及其它设备运算速度更快更节能)软件是用户与硬件之间的接口界面。用户主要是通过软件与计算机进行交流。软件是计算机系统设计的重要依据。为了方便用户,为了使计算机系统具有较高的总体效用,在设计计算机系统时,必须全局考虑软件与硬件的结合,以及用户的要求和软件的要求。
软件的本质特性:
构造性:具有一定的结构,是问题空间的具体描述,是知识产品。
演化性:是不断进行更新进化的。
个人项目或团队项目最重要的是什么?该如何去做好最重要的这一点?书36页表格
从表格当中可以很明显的看出:大四学生与工作三年的软件工程师相比,花费时间最主要的差别在于需求分析与测试。只有分析明白了写的代码的需求是什么,才能更容易的去写(就比如该做什么都不清楚,那如何去做这件事情呢),需求分析不光要站在用户的角度设身处地的为用户着想,将“如何实现”转化为“实现什么”,引导用户提出合理的需求,然后分析所提出需求的重要性并进行总结,然后将整理得到的需求分析以合适的方式递给用户,然后在软件开发的过程当中不断的完善需求。
通过查阅资料,我还知道了需求分析除了书第八章所提到的需求分析的方法外,还有: 1.系统功能需求:(软件)系统必须具备的功能、性能、属性。包括系统性能(功能速度、响应时间、恢复时间等等)、可靠性、易用性、安全性、移植、部署等方面的内容需求。2.设计约束的需求:影响系统实现的各种设计约束,包括开发语言、数据完整性方针、资源的限制、运行的环境的要求等等。
还要注意的一点是要想得到好的需求,还要有一定的所研究领域的专业知识,深刻理解业务,熟悉用户的工作流程,从用户的切身利益点出发。
2.敏捷流程的需求是经常变化的(书118页表格),但是在书本105页又说:敏捷流程的第一步骤就是:找出完成产品需要做的事情。既然需求是经常变化的,那从哪个角度出发来写代码呢?
通过查阅资料,我知道了:敏捷需求分析认为,需求应建立在以用例为中心的需求文档体系,采取协作式而非合同式的沟通方式之上。具体可分为五个关键点:
用例; 协作; 迭代,即需求不是一次最终确定,而是先完成主要框架,再通过迭代逐步精化; 整个过程中以分析为支撑,做需求同时也在做分析,分析模型的输出结果应跟需求分开; 把用例分解到用户故事,在整个软件生命周期过程中来驱动开发和测试。
所以说表格中所说的需求应该是细化了的需求,而敏捷流程步骤所说的需求是指一个大的整体的框架,还有不同的一点是需求分析以文档为中心,并不是传统的沟通方式。
迭代是敏捷需求分析与细化过程中最显著的方式。迭代的特征包含如前文所述的两部分:全生命过程、小粒度的以业务价值为基础的划分。迭代是要产生最终产品的反复,也就是说你的一次一次的反复必须都能产生最终的产品,而不是中间的半成品。这也反映了需求划分的原则,以及每一次小的迭代,其结果都是可确认的。因此,迭代过程中重要的一种方法是分解,以及关注于当前价值实现的部分。如果一个需求暂时不能被理解并且与当前的商业目标的关系并不那么直接,那么它应该被分解和延后,而不是草草地做一个似是而非的大方案而囊括之。
3.软件团队模式以及开发流程当中,提到了一些似乎不怎么好的模式,比如对于软工课上的学生的“主治医师模式”、(一个学生干活,其他学生打酱油)既然这个模式不太好,为什么还要使用呢?我觉得应该把89页那句话去了,这样有助于学生自己思考去选择哪种模式,而不是对这种模式抱有投机取巧的念想。(书本第五章)
4.怎样才能提升自己的创新意识?第16章
首先,培养求知欲。学而创,创而学这是创新的根本途径。青年要具备勤奋求知精神,不断地学习新知识,才能在自主创新中发挥生力军作用。其次,培养好奇欲。将蒙昧时期的好奇心向求知时期的好奇心转化,这是坚持、发展好奇心的重要环节。要对自己接触到的现象保持旺盛的好奇心,要敢于在新奇的现象面前提出问题,不要怕问题简单,不要怕被人耻笑。第三,培养创造欲。不满足于现成的思想、观点、方法及物体的质量、功用,要经常思考如何在原有基础上创新发明、推陈出新,大脑里经常有“能否换个角度看问题?有没有更简捷有效的方法和途径”等问题盘旋。第四,培养质疑欲。“学起于思,思源于疑”。有疑问才能促使学生去思考,去探索,去创新。因此,要鼓励青年大胆质疑、提出多种解决问题的方案及最佳方法。从多角度培养青年的思维能力,激励青年创新。鼓励青年提问,大胆质疑,是培养青年创新意识的重要途径。提出问题是取得知识的先导,只有提出问题,才能解决问题,从而认识才能前进。一定要以锐不可当的开拓精神,树立和提高自己的自信心,既要尊重名人和权威,虚心学习他们的丰富知识经验,又要敢于超过他们,在他们已进行的创造性劳动的基础上,再进行新的创造。
青年创新意识的培养,要有创新思想和创新实践,允许在创新过程中犯错误。要大胆的试、大胆的闯,才会尽快成长起来。
5.这是一件大事还是一件小事?书本第五章95页
回答:这是一件很大的事,车设计好了,然后又提出要加倒车灯,那么就必须重新设计尾部。。。。。。所有的一切都得重新开始。所以说瀑布模型有很多的局限性,如果有新的需求了,就很难甚至不可能回溯了,就相当于全部的一切都白干了,最终产品要在最后才能出现。对于需求不确定的项目可以采用原型模式,由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。可以很好的解决需求不确定的问题。