软件过程
软件过程为一个为建造高质量软件所需完成的任务的框架,即形成软件产品的一系列步骤,包括中间产品、资源、角色及过程中采取的方法、工具等范畴。
信息隐蔽
信息隐蔽指在设计和确定模块时,使得一个模块内包含信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的.
桩模块
软件测试技术的一种,主要用在单元测试阶段。
由于对已开发的单元模块功能和行为测试会涉及到仿真对象的概念,比如说驱动模块和桩模块。
桩模块:桩模块(Stub)是指模拟被测试的模块所调用的模块,而不是软件产品的组成的部分。
主模块作为驱动模块,与之直接相连的模块用桩模块代替。
在集成测试前要为被测模块编制一些模拟其下级模块功能的“替身”模块,以代替被测模块的接口,接受或传递被测模块的数据,这些专供测试用的“假”模块称为被测模块的桩模块。
瀑布模型的优缺点
1、瀑布模型有以下优点
1)为项目提供了按阶段划分的检瀑布模型
查点。
2)当前一阶段完成后,您只需要去关注后续阶段。
3)可在迭代模型中应用瀑布模型。
增量迭代应用于瀑布模型。
迭代1解决最大的问题。
每次迭代产生一个可运行的版本,同时增加更多的功能。
每次迭代必须经过质量和集成测试。
2、瀑布模型有以下缺点
1)在项目各个阶段之间极少有反馈。
2)只有在项目生命周期的后期才能看到结果。
3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
4)瀑布模型的突出缺点是不适应用户需求的变化.
3.衡量模块独立性的两个标准是什么?它们各表示什么含义?
两个定性的度量标准:耦合与内聚性
耦合性:也称块间联系。
指软件系统结构中各模块间相互联系紧密程度的一种度量。
模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。
内聚性:也称块内联系。
指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。
模块内元素联系越紧密,内聚性越高。
软件质量
概括地说,软件质量就是“软件与明确的和隐含的定义的需求相一致的程度”。
具体地说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及所有专业开发的软件都应具有的隐含特征的程度。
影响软件质量的主要因素,这些因素是从管理角度对软件质量的度量。
可划分为三组,分别反应用户在使用软件产品时的三种观点。
正确性、健壮性、效率、完整性、可用性、风险(产品运行);可理解性、可维修性、灵活性、可测试性(产品修改);可移植性、可再用性、互运行性(产品转移)。
软件质量因素软件质量因素主要包括以下十点:功能性质量因素:正确性,健壮性,可靠性非功能性质量因素:性能,易用性,清晰性,安全性,可扩展性,兼容性,可移植性
正确性正确性是指软件按照需求正确执行任务的能力。
“正确性”的语义涵盖了“精确性”。
正确性无疑是第一重要的软件质量属性。
技术评审和测试的第一关都是检查工作成果的正确性。
机器不会主动欺骗人,软件运行出错通常都是人造成的,所以不要找借口埋怨机器有毛病。
健壮性健壮性是指在异常情况下,软件能够正常运行的能力。
正确性描述软件在需求范围之内的行为,而健壮性描述软件在需求范围之外的行为。
开发者往往把异常情况错当成正常情况而不作处理,结果降低了健壮性。
用户才不管正确性与健壮性的区别,反正软件出了差错都是开发方的错。
所以提高软件的健壮性也是开发者的义务。
健壮性有两层含义:一是容错能力,二是恢复能力。
可靠性可靠性是指在一定的环境下,在给定的时间内,系统不发生故障的概率。
可靠性本来是硬件领域的术语。
比如某个电子设备在刚开始工作时挺好的,但由于器件在工作中其物理性质会发生变化(如发热),慢慢地系统的功能或性能就会失常。
所以一个从设计到生产完全正确的硬件系统,在工作中未必就是可靠的。
软件在运行时不会发生物理性质的变化,人们常以为如果软件的某个功能是正确的,那么它一辈子都是正确的。
可是我们无法对软件进行彻底地测试,无法根除软件中潜在的错误。
平时软件运行得好好的,说不准哪一天就不正常了,如有千年等一回的“千年虫”问题,司空见惯的“内存泄露”问题、“误差累积”问题等等。
时隐时现的错误一般都属于可靠性问题,纠错的代价很高。
性能性能通常是指软件的“时间-空间”效率,而不仅是指软件的运行速度。
人们总希望软件的运行速度高些,并且占用资源少些。
性能优化的关键工作是找出限制性能的“瓶颈”可以通过优化数据结构、算法和代码来提高软件的性能。
易用性易用性是指用户使用软件的容易程度。
现代人的生活节奏快,干啥事都想图个方便。
所以把易用性作为重要的质量属性对待无可非议。
导致软件易用性差的根本原因:理工科大学教育存在缺陷:没有开设人机工程学、美学、心理学这些必修课,大部分开发人员不知道如何设计易用的软件产品。
开发人员犯了“错位”的毛病:他以为只要自己用起来方便,用户也就会满意。
软件的易用性要让用户来评价。
当用户真的感到软件很好用时,一股温暖的感觉油然而生,于是就用“界
面友好”、“方便易用”等词来评价软件产品。
清晰性清晰意味者所有的工作成果易读、易理解,可以提高团队开发效率,降低维护代价。
开发人员只有在自己思路清晰的时候才可能写出让别人易读、易理解的程序和文档。
可理解的东西通常是简洁的。
一个原始问题可能很复杂,但高水平的人就能够把软件系统设计得很简洁。
如果软件系统臃肿不堪,它迟早会出问题。
所以简洁是人们对工作“精益求精”的结果,而不是潦草应付的结果。
千万不要把在学校里“造文章”的手法用于开发产品!
安全性这里安全性是指信息安全,英文是Security而不是Safety。
安全性是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。
“道高一尺,魔高一丈”,绝对安全的信息系统几乎不存在。
开发商和客户愿意为提高安全性而投入的资金是有限的,他们要考虑值不值得。
究竟什么样的安全性是令人满意的呢?一般地,如果黑客为非法入侵花费的代价(考虑时间、费用、风险等因素)高于得到的好处,那么这样的系统可以认为是安全的。
可扩展性可扩展性反映软件适应“变化”的能力。
在软件开发过程中,“变化”是司空见惯的事情,如需求、设计的变化,算法的改进,程序的变化等等。
由于软件是“软”的,是否它天生就容易修改以适应“变化”?关键要看软件的规模和复杂性。
现代软件产品通常采用“增量开发模式”,不断推出新版本,获取增值利润。
可扩展性越来越重要。
可扩展性是系统设计阶段重点考虑的质量属性。
兼容性兼容性是指两个或两个以上的软件相互交换信息的能力。
兼容性的商业规则:弱者设法与强者兼容,否则无容身之地;强者应当避免被兼容,否则市场将被瓜分。
示例:中国联通和中国移动的手机互联互通问题金山软件公司的WPS与微软的Word 之争可移植性
可移植性是指软件运行于不同软硬件环境的能力编程语言越低级,其程序越难移植,反之则容易。
软件设计时应该将“设备相关程序”与“设备无关程序”分开,将“功能模块”与“用户界面”分开。
集成测试
集成测试,也叫组装测试或联合测试。
在单元测试的基础上,将所有模块按照设计要求(如根据结构图〕组装成为子系统或系统,进行集成测试。
实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。
程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。
它反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。
按这种方式理解,软件体系结构风格定义了用于描述系统的术语表和一组指导构件系统的规则。
层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户。
在一些层次系统中,除了一些精心挑选的输出函数外,内部的层只对相邻的层可见。
这样的系统中构件在一些层实现了虚拟机(在另一些层次系统中层是部分不透明的)。
连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。
这种风格支持基于可增加抽象层的设计。
这样,允许将一个复杂问题分解成一个增量步骤序列的实现。
由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。