软工作业

(因本人水平有限,所写内容如有不对,请多多包涵)

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

由于本人能力有限,此次作业用c++来完成,也没有实现一个友好的用户界面。

[代码地址]

二、在一周之内快速看了《构建之法》,列出一些不懂的问题。

1)第二章的单元测试那一小节,书中说“如何能让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块的,而且模块的质量能得到稳定的、量化的保证?单元测试就是一个很有效的解决方案”。我大概知道了单元测试是用来做是什么的,也知道了单元测试的重要性,于是我满怀期待的往下看,可我发现自己看不懂了,单元测试要怎样做?我查资料后发现

单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。比如对函数abs(),我们可以编写出以下几个测试用例:

  1. 输入正数,比如11.20.99,期待返回值与输入相同;

  2. 输入负数,比如-1-1.2-0.99,期待返回值与输入相反;

  3. 输入0,期待返回0

  4. 输入非数值类型,比如None[]{},期待抛出TypeError

把上面的测试用例放到一个测试模块里,就是一个完整的单元测试。

但是测试模块又要咋样做呢?

2)49页中有一个”对通用的软件设计思想和软件工程思想的理解“的问题,下面有这样一句话“另一个工程师坚持做任何设计都要画UML图,这算思想么?”UML图是什么?设计的时候画UML图和思想有什么关系?百度百科中说“ (UML)又称统一建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。”看完这段话并没有让我有眼前一亮的感觉,对其和软件设计思想的关系还是不太明白。

3)171页的8.5节是功能的定位和优先级,这里介绍了杀手功能、外围功能、必须需求、辅助需求这些概念,并且通过他们得到了功能分析的四个象限。那就是说在第一象限的功能的优先级是最高的么?我在这一节中没有找到如何定义优先级或者优先级的划分相关的内容。网上搜索之后只找到一些需求优先级的确定方法。

4)313页中,对衡量软件工程的质量,提到了一个理论CMMI(Capability Maturity Model Integration,能力成熟度模型集成)并且下文提到运用CMMI模型管理项目,不仅降低了项目的成本,而且提高了项目的质量和安期完成率。还有能够提高其言的管理水平,降低企业的成本。为什么CMMI能做到这些呢?资料中显示“CMMI为改进一个组织的各种过程提供了一个单一的集成化框架,新的集成模型框架消除了各个模型的不一致性,减少了模型间的重复,增加透明度和理解,建立了一个自动的、可扩展的框架。因而能够从总体上改进组织的质量和效率。”单个的短句子都懂,可连起来就有点知道为什么了。

5)366页中提到了SWOT分析框架,提到”产品在市场上和别人竞争,有很多因素要考虑,SWOT表格是一个简单有效的分析工具“。表格,无非就是一张表么,为什么会成为一个简单有效的工具呢?它是咋样去分析的?查找资料后发现“S (strengths)是优势、W (weaknesses)是劣势,O (opportunities)是机会、T (threats)是威胁。SWOT分析法,即态势分析,就是将与研究对象密切相关的各种主要内部优势、劣势和外部的机会和威胁等,通过调查列举出来,并依照矩阵形式排列,然后用系统分析的思想,把各种因素相互匹配起来加以分析,从中得出一系列相应的结论。”这个的重点在于SWOT分析,而不是表格。感觉使用“SWOT表格是一个简单有效的分析工具”这句话,在这里表达的不是很合适。

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

 

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

手机应用:它是手机完善自身功能,提升用户体验的手段。现在随着手机的普及,手机应用的用户不断增加,这让手机应用的发展有了更多的机会。各种手机应用层出不穷,里面不乏有一些对我们很有用的应用。比如:微信,让我们出门在外拉近了与家人的距离;支付宝,它更改了我们的支付方式;高德地图,让我们不再害怕去一个陌生的地方会迷路!正因为这些软件对我有用,所以我成为了它们的用户。我认为它们这些软件的目的都是盈利,因为他们是商人。虽然它们有时候的目的不是我们的钱,而是我们的个人信息,但是我想个人信息也是我们的财产,在一定的情况下它就可以变成钱。

游戏软件:在百度百科中对游戏的定义是:一种基于物质需求满足之上的,在一种特定时间、空间范围内遵循某种特定规则的,追求精神需求满足的社会行为方式。而现在,我们一提到游戏这个词,第一时间想到的更多的是各种游戏应用。不论是手机游戏或者电脑游戏,它在虚拟的世界让人们获得精神上的满足感,想想如今很火的王者荣耀(一人单挑对面五人,拿到华丽的五杀,当那声Penta Kill想起,有谁不激动)、绝地求生(在100个人中成为最后的胜利者,那是每一个玩家的愿望)等游戏,都是这样。这些游戏本人也有玩,因为它确是给了我在现实世界所得不到的成就感。游戏的目的当然也是盈利。

企业或学校或某组织内部的软件:本人是一名在校学生,这种软件经常有接触。就拿学校的选课系统来说吧,它在一定程度上是带来了很多的便利;但是,不可否认的是,它存在着很多让人不爽的问题,比如:只有特定的校园网可以进行操作,每次选课都像打仗一样,那不叫选课,叫抢课!!因为同一个时间段访问人数过多,通常为了选课得等很久很久...虽然有这么多问题,虽然学校一直不升级系统,虽然很不情愿,但是我们还是得使用它。这就是企业或学校或某组织内部的软件,尽管它不好用,可我们没有其他选择。这些软件一般不存在盈利目的。(如果可以盈利,我想那些软件会好用很多)

手机应用和游戏都是自己找资源去下载,这些软件有背后的运营商会去修复BUG,把新的版本发布在网络上。他们同类软件之间的竞争,我认为更多的是从用户体验方面来竞争,只有你的软件比其他软件的用户体验更好,用户才会去使用。学校的软件我们不需要付出什么就可以使用,它的维护应该是学校的技术人员在做,而更新我认为要等学校领导也觉着软件太不好用了,才会去找外面的软件公司来帮忙更新。这种软件的竞争应该是性价比方面。特殊现象的话,同一个软件在手机上可以用运行,在电脑上通过一些其他的软件也可以运行。而手机的硬件设备,给电脑用不了,这就是它们的不同。这些说明软件的运行需要一定的环境,并且软件是不可见的。

posted @ 2018-03-23 15:34  彩虹色  阅读(211)  评论(2编辑  收藏  举报