软件生命周期
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件生命周期
软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。
软件定义:确定软件开发工程必须完成的总目标;可行性分析;采用的策略和系统必须完成的功能;工程需要的资源和成本并制定进度表。
软件开发:总体设计,详细设计,编码和单元测试,综合测试。
运行维护:软件持久的满足用户的需要。
生命周期的基本任务:问题定义,可行性研究,需求分析,总体设计,详细设计,编码和单元测试,综合测试,软件维护
软件过程
定义:为了开发出客户需要的软件,什么人、在什么时候、做什么事以及怎样做这些事以实现某一个特定的具体目标。
瀑布模型:阶段间具有顺序性和依赖性、推迟实现的观点、质量保证的观点。
完全是靠用文档驱动,客户在产品交付前,只能通过文档来了解软件。
快速原型:快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。
增量模型:先设计完成主要功能的构件,在此功能的基础上完成其它构件功能。
它分批地逐步向用户提交产品,整个软件产品被分解成许多个增量构件,开发人员一个构件接一个构件地向用户提交产品。
螺旋模型:大快速原型的每一个阶段前都增加了风险分析。
它是险驱动的,但这也可能是它的弱点,原因在于分析人员经验可能不丰富看不出真正的风险。
主要适用于内部开发大规模软件项目。
喷泉模型:是典型的面向对象的软件过程模型,体现了面向对象软件开发过程迭代和无缝的特性。
Rational统一过程:迭代式开发,管理需求,使用基于构件的体系结构,可视化建模,验证软件质量,控制软件变更
敏捷过程:四个声名:个体和交互胜过过程和工具;可以工作的软件胜过面面俱到的文档;
客户合作胜过合同谈判;响应变化胜过遵循计划
极限编程:根据用户需求先一次性的迭代开发,这中间产生的需求变化先不解决,等主需求完成后再进行解决。
有效的开发实践:客户作为开发团队的成员,使用用户素材,短交付周期,验收测试,结对编程,测试驱动开发,集体所有,持续集成,可持续的开发速度,开放的工作空间,及时调整计划,简单的设计,重构,使用隐喻
大题:
为什么说喷泉模型较好地体现了面向对象软件开发过程无缝和迭代的特性?
由于在整个开发过程中都使用统一的软件概念“对象”,所有其他概念都是围绕对象组成的,目的是保证分析工作中得到的信息不会丢失或改变,因此,对生命周期各阶段的区分就不重要,不明显了。
分析阶段得到的对象模型也适用于设计阶段和实现阶段。
由
于各阶段都使用统一的概念和表示符号,因此,整个开发过程都是吻合一致的,体现了开发过程的无缝的,这自然就很容易实现各个开发步骤的多次反复迭代,达到认识的逐步深化。
数据流图
数据流图:是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。
它只描绘数据在软件中流动和被处理的逻辑过程。
数据字典的内容
数据流;数据流分量(即数据元素);数据存储;处理
大题:成本/效益分析的方法
现在值(前两项相除)累计的现在值年将来值(元)
i是年利率
1 2500 1.1
2 2232.14 2232.14
2 2500 1.25 1992.98 4225.12
3 2500 1.
4 1779.4
5 以前所有的现在
值相加
4 2500 1.57 1588.80
5 2500 1.7
6 1418.57
纯收入:=累现计的现在值-估计成本
投资回收期:算下一年的累计的现在值。
根据情况算第几年可以回收成本。
算法,多出的钱除以下一年赚出来的钱
大题:在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
并非任何问题都有简单明显的解决方法,事实上,许多问题不可能在预定的系统规模或时间期限之内解决。
如果问题没有可行的角,那么花费在这项工程上的任何时间、人力、软硬件资源和经费,都是无谓的浪费。
可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
应该从技术可行性,经济可行性,操作可行性三方面研究目标系统的可行性。
数据模型中包含3种相互关联的信息:
数据对象、数据对象的属性及数据对象彼此间相互连接的关系
图形工具:
层次方框图:树形的,从上到下,一堆小方框
Warnier图:一堆大括号,从左到右
IPO图:从左到右几个大方框或者一张IPO表
大题:为什么要进行需求分析通常对软件系统有哪些需求?
为了开发出真正满足用户需求的软件产品,首先必顺知道用户的需求。
对软件需求的深入理角是软件开发工作获得成功的前提条件,不论人们把设计和编码工作做得如何出色,不能直正满足用户需求的程序只会令用户失望,给开发者带来烦恼。
通常对软件系统要确定:功能需求;性能需求;可靠性和可用性需求;出错处理需求;接口需求;约束;逆向需求;将来可能提出的要求
模块独立
概念:模块化、抽象、信息隐藏和局部化概念的直接结果;开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立
标准:两个标准是内聚和耦合。
耦合衡量不同模块彼此间互相依赖的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。
作用:有效的模块化的软件比较容易开发出来;独立的模块比较容易测试和维护
耦合:最强的是内容耦合,最弱的是非直接耦合
内聚:功能>顺充>通信>过程>时间>逻辑>偶然
注:系联中尽量使用数据耦合,不用内容耦合。
启发规则
1、改进软件结构提高模块独立性
2、模块规模应该适中
3、深度、宽度、扇入都应适当
4、
模块的作用域应该在控制域之内5、力争降低模块接口的复杂程度6、设计单入口单出口的模块7、模块功能应该可以预测
大题:程序复杂程度的定量度量
复杂度=判定结点+1(IF+1)
给流程图画出流图P138
方法:在流图中,IF上面的多个模快都可以合并。
人机界面设计P119
1、系统响应时间
2、用户帮助设施
3、出错信息处理
4、命令交互
测试步骤
1、模块测试
2、子系统测试
3、系统测试
4、验收测试
5、平行运行
非渐增式测试与渐增式测试
非渐增式测试一下把所有模块放在一起,并把庞大的程序作为一个整体来测试,测试者面对的情况十分复杂。
改正错误极端困难。
渐增式测试把程序划分成小段来构造和测试,在这个过程中比较容易定位和改正错误。
对接口可以进行更彻底的测试;可以使用系统化的测试放法。
大题:什么是回归测试,为什么要回归测试,如何做回归测试
重新执行已经做过的测试的某个子集,以保证上述这些变化没有带来非预期的副作用,叫做回归测试;回归测试就是用于保证由于调试或其他原因引起的变化,不会导致非预期的软件行为或额外错误的测试活动;利用捕获回放工具,软件工程师能够捕获测试用例和实际运行结果,然后可以回放,并且比较软件变化前后所得到的运行结果。
白盒测试和黑盒测试
白盒测试主要是测试程序内部的正确如循环和选择。
黑盒测试主要是测试程序功能性的,也就是外部测试,更多的看种的是程序最终的结果,不考虑程序本身。
白盒用于测试过程的早期阶段,黑盒用于测试过程的后期。
如何等价划分P172
每类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同。
因此,可以从每个等价类中只取一组数据作为测试数据。
这样选取的测试数据最有代表性,最可能发现程序中的错误
大题:软件再工程过程
1、库存目录分析:按照业务得要程度、寿命、当前可维护性、预期的修改次数标准,把库
中的应用系统排序,从中选出再工程的候选者,然后明智地分配再工程所需要的资源。
2、文档重构:老程序固有的特点是缺乏文档。
具体情况不同,处理这个问题的方法也不同。
3、逆向工程:是分析程序以便在比源代码更高的帛象层次上创建出程序的某种表示的过程
4、代码重构:某些老程序具有比较完整、合理的体系结构,但是,个体模块的编码方式却
是难于理解、测试和维护,在这种情况下,可以重构可疑模块代码
5、数据重构:对数据体系结构差的程序很难进行适应性修改和增强,对许多应用系统来说,
数据体系结构比源代码本身对程序的长期生存力有更大的影响。
6、正向工程:也称为革新或改造,这项活动不仅从现有程序中恢复设计信息,而且使用该
信息去改变或重构现有系统,以提高期整体质量。
大题:软件的可维护性与哪些因素有关?在软件开发过程中应该采取哪些措施来提高软件产品的可维护性?
答:软件的可维护性与软件的可理解性,可测试性,可修改性,可移植性,可重用性、系统文档和用户文档有关。
在软件开发过程中应该1、提高软件可理解性,使外来读者非常好理解软件的结构、功能、接口和内部处理过程。
2、提高可测试性,使诊断和测试更容易进行,程序工程更好理。
3、提高可修改性,耦合、内聚,信息隐藏等,都影响软件的可修改性。
4、可移植性,把与硬件、操作系统以及其它外部设备有关的程序代码集中放到特定的程序模块中降低移植修改难度。
5、提高可重用性,同一事物不做修改或稍加改动就在不同环境中多次重复使用。
软件成分的重用级别:
代码重用,设计结果重用,分析结果重用
大题:面向对象设计应该遵循哪些准则?简述每条法准则的内容,并说明遵循这条准则的必要性。
1、模块化:开发过程中对象就是模块。
它把数据结构和操作这些数据的方法紧密结合在一
起。
2、抽象:面向对象方法不仅支持过程抽象,而且支持数据抽象。
使用者无须知道内部的算
法和数据元素的具体青示方法,就可以通过这些操作符使用类中定义的数据
3、信息隐藏:在面向对象方法中,信息隐藏通过对象的封装性实现;类结构分离了接口与
现实,从而支持了信息隐藏。
4、弱耦合:耦合主要指不同对象之间相互关联的紧密程度。
弱耦合就是减少紧密程度。
这
有助于使得系统中某一部分的变化对其他部分的影响降到最低程。
5、强内聚:加强模块内各个元素彼此结合的紧密程度。
这样在设计中使用一个构件内的各
个元素,对完成一个定义明确的目的的所做出的贡献程度更大。
6、可重用:尽量使用已有的类,如果确实需要创建新类,则在设计这些新类的协议时,考
虑将来的可重复使用性。
这们可以提高软件开发生产率和目标系统质量
能力成熟度模型
1、初始级:软件过程无序的,有时甚至是混乱的
2、可重复级:项目工程活动处于项目管理体系的有效控制,执行着基于以前项目的准则且合乎现实的计划
3、已定义级:软件机构
已经定义了完整的软件过程,软件过程已经文档化和标准化。
4、已管理级:对软件过程和软件产品都建立了定量的质量目标,所有项目的重要的过程活动都是可度量的。
5、优化级:集中精力持续不断地改进软件过程。