目录
软件工程概述
1.软件生存周期
2.软件生存周期模型
瀑布模型
快速原型
增量模型
螺旋模型
喷泉模型
敏捷过程
3.软件开发方法
软件需求分析
1.可行性分析
2.软件需求分析
软件设计
1.软件设计的原则
2.内聚和耦合
软件测试
1.V模型
2.软件测试过程
3.黑盒测试与白盒测试
黑盒测试
白盒测试
4. 测试原则与注意事项
软件运行与维护
1.软件维护
个人主页:个人主页
系列专栏:【软考】程序员
软件:包含程序、数据及相关文档。。
软件工程:涉及到软件开发、维护、管理等多方面的原理、工具与环境。最终的目的是开发高质量的软件。
目的:提高软件生产率、提高软件质量、降低软件成本。问题定义:要解决的问题是什么
可行性分析:研究问题的范围,是否值得去解,是否有可行的解决办法
需求分析:确定软件系统必须做什么,确定功能、性能、数据和界面要求,确定逻辑模型
总体设计:概括地说,如何解决这个问题?指定推荐系统的详细计划并设计软件的结构
详细设计:怎样具体实现这个系统?对模块完成的功能进行具体描述
编码和单元测试:写成某种特定程序设计语言表示的源程序清单及测试每一个模块
综合测试:通过各类型的测试使软件达到预定的要求
维护:通过各种必要的维护活动使系统持久满足用户的需要文档的作用:
①提高软件开发过程的能见度;
②提高开发效率,便于发现错误和不一致性;
③作为开发人员在一定阶段的工作成果和结束标志;
④记录开发过程中的有关信息,便于协调以后的软件、开发、使用和维护;
⑤提供对软件的运行、维护和培训的有关信息,便于相关人员和用户之间的协作、
交流和了解;
⑥便于潜在用户了解软件的功能、性能等各项指标,为他们选购符合自己需要的
软件提供依据。
瀑布模型是将软件生存周期各个活动规定为先行顺序连接的若干阶段。
特点
1.阶段间具有顺序性和依赖性。前一阶段的工作完成之后,才能开始后一阶段的工作; 前一阶段的输出文档就是后一阶段的输入文档。
2.推迟实现的观点。对于规模较大的软件项目来说,往往编码开始得越早最终完成开发工作所需要的时间反而越长。
3.质量保证的观点。每个阶段都必须完成规定的文档,是“文档驱动”的模型;每个阶段结束前都要对所完成的文档进行评审,尽早发现问题,改正错误。
优缺点
瀑布模型的优点:
1.可强迫开发人员采用规范的方法;
2.严格地规定了每个阶段必须提交的文档;
3.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。瀑布模型的缺点:
只能通过文档了解产品,不经过实践的需求是不切实际的。适用于:需求是预知的、软件实现方法是成熟的、项目周期较短。
适用于
需求是预知的、软件实现方法是成熟的、项目周期较短。
快速原型:是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。
特点
1.快速原型模型不带反馈环,软件产品的开发基本上是线性顺序进行的;
2.快速原型的本质是“快速”。应该尽可能快地建造出原型系统,以加速软件开发过程,节约成本。
优缺点
快速原型优点
1.克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险;
2.适合预先不能确切定义需求的软件系统的开发。快速原型缺点
1.所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下;
2.使用前提是要有一个展示性的产品原型,一定程度上可能会限制开发人员的创新。
适用于
无完整的需求说明,只有一些基本要求、用于及早向用户提交一个原型系统
增量模型把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。
优缺点
增量模型的优点:
1.人员分配灵活,刚开始不用投入大量人力资源;
2.当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径;
3.逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品。增量模型的缺点:
1.软件体系结构必须是开放的;
2.模型本身是自相矛盾的。整体——独立构件;
3.不同的构件并行地构建有可能加快工程进度,但是冒无法集成到一起的风险。
适用于
1.适用于需求经常改变的软件开发过程;
2.如果在项目既定的商业要求期限之前不可能找到足够的开发人员,在这种情况下,增量模型显得特别有用。
螺旋模型的基本思想:使用原型及其他方法来尽量降低风险。把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。具有风险分析
优缺点
螺旋模型的优点:
1.主要优势在于它是风险驱动的。
2.对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;
3.减少了过多测试或测试不足所带来的风险;
4.维护只是模型的另一个周期,维护和开发之间没有本质区别。螺旋模型的缺点:
1.采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失;
2.过多的迭代次数会增加开发成本,延迟提交时间。
适用于
1.特别适用于庞大、复杂并具有高风险的系统。
2.适用于内部开发的大规模软件项目。
喷泉模型:是典型的面向对象生命周期模型。 “喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。
优缺点
喷泉模型的优点:
1.该模型的各个阶段没有明显的界限,开发人员可以同步进行开发;
2.多次反复地增加或明确目标系统,而不是本质性的改动,降低错误的可能性。喷泉模型的缺点:
1.由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,不利于项目的管理;
2.要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
适用于
适用于面向对象的软件开发过程。
通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。包括极限编程XP、水晶法、并列争求法和自适应软件开发ASD
软件开发方法:结构化方法、Jackson方法、 原型化方法、面向对象开发方法。
类别 | 特点 |
结构化方法 | 自顶而下、逐层分解。原则是分解与抽象,开发周期长,不适用于大规模、复杂的项目以及变化的需求 |
Jackson方法 | 面向结构的开发方法。主要包括JSP (Jackson Structured Programming)和JSD (Jackson System Development) |
原型化方法 | 适合用户需求不清晰、业务理论不确定、且需求经常变化的情况适合小规模的项目 |
面向对象开发方法 | 包括面向对象分析、 设计与实现,适合比较复杂的项目模型 |
考点1:开发方法
以下关于结构化方法的叙述中,不正确的是( )。
A、指导思想是自顶向下、逐层分解
B、基本原则是功能的分解与抽象
C、适合解决数据处理领域的问题
D、特别适合解决规模大的、特别复杂的项目答案:D
技术可行性:使用现有的技术能实现这个系统吗?
经济可行性:这个系统的经济效益能超过它的开发成本吗?
操作可行性:系统的操作方式在该用户组织内行得通吗?为谁设计,用户是谁?
要解决哪些问题?
为什么要解决这些问题
系统必须完成的事,以及必须具备的品质。
包括:
①功能需求: 所开发的产品必须具备什么样的功能
②非功能需求:是指产品必须具备的属性或品质,如可靠性、性能、响应时间、
容错性、扩展性等
③设计约束:也称为限制条件、补充规约,这通常是对解决方案的一些约束说明,
例如必须采用国有自主知识版权的数据库系统、必须运行在UNIX操作系统之下
等。
考点:软件需求分析
在软件正式运行后,一般来说,( )阶段引入的错误需要的维护代价最高。
A、需求分析
B、概要设计
C、详细设计
D、编码答案: A
软件设计原则:抽象、模块化、信息隐蔽、模块独立
模块设计原则:内聚:模块内的交互程度
耦合:模块间的交互程度
高内聚,低耦合
内聚类型 | 描述 |
功能内聚 | 最强的内聚,完成一个单一功能,各个部分协同工作,缺一不可 |
顺序内聚 | 各个处理元素都密切相关与同一功能且必须顺序执行, 前一个功能元素的输出就是下一个功能元素的输入 |
通信内聚 | 所有处理元素集中在个数据结构的区域上,或者各处理使用相同的输入数据或产生相同的输出数据 |
过程内聚 | 模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行 |
瞬时内聚(时间内聚) | 把需要同时执行的动作组合在一 起形成的模块 |
逻辑内聚 | 模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能 |
偶然内聚(巧合内聚) | 模块内的各处理元素之间没有任何联系 |
耦合类型 | 描述 |
非直接耦合 | 两个模块之间没有直接关系,分别从属于不同模块的控制和调用,之间不传递任何信息 |
数据耦合 | 两个模块间有调用关系,传递简单的数据值 |
标记耦合 | 两个模块之间传递的是数据结构 |
控制耦合 | 一个模块调用另一个模块时,传递的是控制变量,被调用模块根据控制变量执行某个功能 |
外部耦合 | 模块间通过软件之外的环境联结(如I/O将模块耦合到特定的设备、格式通用协议上) |
公共耦合 | 通过个公共数据环境相互作用的那些模块间的耦合 |
内容耦合 | 一个模块直接使用另一个模块的内部数据;或通过非正常入口而转入另一个模块内部 |
考点:软件设计的基本概念
创建好的程序或文档所需遵循的设计原则不包括( )。
A、反复迭代,不断修改
B、遵循好的标准和设计风格
C、尽量采用最新的技术
D、简约,省去不必要的元素答案:C
考点2:内聚和耦合
一组无逻辑关系的语句在程序中多处出现,为了节省存储空间,把这些语句放在
一个模块中,该模块的内聚是() 。
A、逻辑内聚
B、偶然内聚
C、过程内聚
D、通信内聚
答案:B
单元测试 模块测试 |
模块编写完成且无编译错误后进行。由程序员对自己编写的模块自行测试,主要发现编程和详细设计中产生的错误,测试计划应该在详细设计阶段制定。一般使用白盒测试法。 |
集成测试 | 把模块按系统设计说明书的要求组合起来进行测试。对由各模块组装而成的程序进行测试,主要目标是发现模块间的接口和通信问题。集成测试主要发现设计阶段产生的错误,集成测试计划应该在概要设计阶段制定。(黑盒测试) |
确认测试 | 检查软件的功能、性能和其他特征是否与用户的需求一致,它是以需求规格说明书作为依据的测试,软件确认测试首先要进行有效性测试及软件配置审查,然后进行验收测试。经过管理部门的认可和专家的鉴定后,软件即可交给用户使用。(黑盒测试) |
系统测试 | 把软件放在实际的硬件和网络环境中进行测试,主要测试软件的非功能需求和质量属性是否得到满足。常见的系统测试主要有恢复测试、安全性测试、强度测试、性能测试、可靠性测试和安装测试。(黑盒测试) |
黑盒测试
黑盒测试又称功能测试或者基于需求的测试。
主要的测试方法包括边界值分析法、等价类划分法、错误推断法、因果图等
边界值分析法:根据以往经验,大多数问题发生在数据的边界处。使用该方法需要,第一:确定测试单元输入信号的边界值;第二:用正等于边界值、略小于边界值、略大于边界值编写测试用例进行测试。
等价类划分法:把输入信号的范围分为若干子集,在每个子集中选取有少量有代表性的数据编写测试用例
错误推断法:根据经验分析,那些场景或者工况容易产生问题,针对性的设置用例进行测试
白盒测试
白盒测试又称结构测试或者逻辑驱动的测试。
在白盒测试又分为静态分析和动态分析两类。
静态分析是指不运行待测试的程序,通过代码检测、静态结构分析等通过工程师的逻辑思维去检查代码是否存在问题的方法。
动态分析是指运行待测试程序进行测试的方法统称。
白盒测试的目的:
a 对程序模块的所有独立的执行路径至少测试一次
b 对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次
c 在循环的边界和运行界限内执行循环体
d 测试内部数据结构的有效性等
做单元测试时,覆盖度是衡量测试是否全面的,是否可靠的关键指标。覆盖度分为语句覆盖、判定覆盖、条件覆盖、判定\条件覆盖,路径覆盖
(1)语句覆盖。被测程序的每个语句至少执行一次。是一种很弱的覆盖标准。
(2)判定覆盖。分支覆盖,判定表达式至少获得一次真、 假值。判定覆盖比语句覆
盖强。
(3)条件覆盖。每个判定语句中的每个逻辑条件的各种可能值至少满足一次。
(4)路径覆盖。覆盖所有可能的路径。
(5)判定/条件覆盖。每个条件所有可能的值(真/假) 至少出现一次,且每个判定
)本身的判定结果(真/假) 也至少出现次。
(6)条件组合覆盖。每个判定中条件的各种可能值的组合都至少出现-次。
- 尽早并不断的进行测试,测试应贯穿在开发的各个阶段,尽早纠正错误,消除隐患
- 测试工作应该避免由原开发系统软件的人或小组承担,这样才可以更加彻底地进行测试
- 设计测试方案的时候,不仅要确定输入数据,而且要根据系统功能确定预期的输出结果
- 在设计测试用例时,不仅要设计有效合理的输入条件,也要包含不合理、失效的输入条件
- 在测试程序时,不仅要检验程序是否做了该做的事,还要检验程序是否做了不该做的事
- 严格按照测试计划来进行,避免测试的随意性
- 妥善保存测试计划、测试用例,作为系统软件文档的组成部分,为维护提供方便
- 测试用例都是精心设计出来的,可以为重新测试或追加测试提供方便
- 发现错误较多的模块,在纠正错误后,遗留的错误也较多
- 测试的目的主要是为了发现错误,而不是验证程序没有错误
- 通过软件测试不可能完全消除错误,完全测试是不可能的
- 错误不可能全部被发现,不可能保证程序100%没有问题
- 测试工作是由开发方负责的,软件需求阶段开始提出
- 开发时应注重将质量构建进产品,而不是在产品出来后再测试
- 测试人员应与开发人员密切合作,推动后续开发和测试规范化
- 软件测试的目的不仅要找出缺陷,还要随时提供质量相关信息,
考点:软件测试的类型
黑盒测试不能发现( )问题。
A、不正确或遗漏的功能
B、初始化或终止性错误
C、内部数据结构无效
D、性能不满足要求
答案:C
考点:测试原则和注意事项
以下关于软件测试的叙述中,正确的是( )。
A、软件测试的目的是为了证明软件是正确的
B、软件测试是为了发现软件中的错误
C、软件测试在软件实现之后开始, 在软件交付之前完成
D、如果对软件进行了充分的测试,那么交付时软件就不存在问题了
答案:B
可维护性因素决定:
- 可理解性
- 可测试性
- 可修改性
软件维护
软件维护一般包括四种类型:
➢正确性维护,是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误;
(17%~21%)
➢适应性维护,是指使应用软件适应新技术变化和管理需求变化而进行的修改;
(18%~25%)
➢完善性维护,是指为扩充功能和改善性能而进行的修改,主要是指对已有的软件
系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征; (50%~60%)
➢预防性维护,是指为了改进应用软件的可靠性和可维护性,为了适应未来的软硬
件环境的变化,主动增加预防性的功能,以使应用系统适应各类变化而不被淘汰。
(4%)
考点:软件维护的含义
当一个企业的信息系统建成并正式投入运行后,该企业信息系统管理工作的主要
任务是()。
A、对该系统进行运行管理和维护
B、修改完善该系统的功能
C、继续研制还没有完成前功能
D、对该系统提出新的业务需求和功能需求
答案:A
考点:软件维护的类型
某系统交付运行之后,发现无法处理四十个汉字的地址信息,因此需对系统进行
修改。此行为属于( )维护。
A、改正性
B、适应性
C、完善性
D、预防性
答案:A