软件工程-期末复习题

第1章软件工程概述
1、软件的概念及特点
概念:
计算机软件是由专业人员开发并长期维护的软件产品。完整的软件产品包括了在各种不同容量和体系结构计算机上的可执行的程序,运行过程中产生的各种结果,以及以硬复制和电子表格等多种方式存在的软件文档
特点:
1)具有抽象性2)无明显的制造过程
3)存在退化问题4)对计算机系统有着不同程度的依赖性
5)尚未完全摆脱人工的开发方式6)软件本身是复杂的
7)成本相当昂贵8)相当多的软件工作涉及社会因素
2、软件的分类
在这里插入图片描述
3、软件危机的表现与原因
在软件开发的过程中,会经常出现一些不能按时完成任务、产品质量得不到保证、工作效率低下和开发经费严重超支等现象。计算机软件的开发、维护和应用过程中普遍出现的这一些严重的问题便是软件危机
人们对软件产品认识的不足以及对软件开发的内在规律理解的偏差是软件危机出现的本质原因。
4、软件工程的概念
IEEE对软件工程的定义为:
1)将系统化、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件
2)对1)中所述方法的研究
具体说来,软件工程是以借鉴传统工程的原则、方法,以提高质量,降低成本为目的指导计算机软件开发和维护的工程学科。它是一种层次化的技术
5、软件工程层次图
在这里插入图片描述

6、软件工程要达到的基本目标包括:
达到要求的软件功能、取得较好的软件性能
开发出高质量的软件、付出较低的开发成本
需要较低的维护费用、能按时完成开发工作,及时交付使用
7、软件工程的7条基本原则
用分阶段的生命周期计划进行严格的管理、坚持进行阶段评审
实行严格的产品控制、采用现代程序设计技术
软件工程结果应能清楚地审查、开发小组的人员应该少而精
承认不断改进软件工程实践的必要性
8、软件开发方法
软件开发方法是一种使用定义好的技术集及符号表示组织软件生产的过程,它的目标是在规定的时间和成本内,开发出符合用户需求的高质量的软件。
常见的软件开发方法包括:

  1. 结构化方法2) 面向数据结构方法
  2. 面向对象方法4) 形式化方法
    此外,软件开发方法还有问题分析法、可视化开发方法等。
    9、软件工程工具
    软件工程的工具对软件工程中的过程和方法提供自动的或半自动的支持。可以帮助软件开发人员方便、简捷、高效地进行软件的分析、设计、开发、测试、维护和管理等工作。有效地利用工具软件可以提高软件开发的质量,减少成本,缩短工期,方便软件项目的管理。
    软件工程工具通常有3种分类标准:按照功能划分、按照支持的过程划分、按照支持的范围划分

第2章软件过程
1、软件过程概述
软件的诞生和生命周期是一个过程,我们总体上称这个过程为软件过程。软件过程是为了开发出软件产品,或者是为了完成软件工程项目而需要完成的有关软件工程的活动,每一项活动又可以分为一系列的工程任务。任何一个软件开发组织,都可以规定自己的软件过程,所有这些过程共同构成了软件过程
过程定义了运用方法的顺序,应该交付的文档资料,为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。通常,使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分为哪些阶段及各个阶段的执行顺序,因此也称为过程模型
2、软件生命周期的概念
软件产品的生命周期是指从设计该产品的构想开始,到软件需求的确定、软件设计、软件实现、产品测试与验收、投入使用以及产品版本的不断更新,到最终该产品被市场淘汰的全过程。
软件生命周期这个概念从时间的角度将软件的开发和维护的复杂过程分解为了若干个阶段,每个阶段都完成特定的相对独立的任务。
3、传统软件生命周期的各个阶段
在传统的软件工程中,软件产品的生命周期一般可以划分为6个阶段,如图所示。
在这里插入图片描述
4、软件过程模型
在软件工程中,人们通过建立抽象的软件开发模型,把软件生命周期中的各个活动或步骤安排到一个框架中,将软件开发的全过程清晰且直观地表达出来。
常见的软件开发模型有很多种,这里主要介绍瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、基于组件的开发模型、统一软件开发过程模型以及敏捷模型与极限编程。
5、瀑布模型
瀑布模型是一种线性的开发模型,具有不可回溯性。开发人员必须等前一阶段的任务完成后,才能开始进行后一阶段的工作,并且前一阶段的输出往往就是后一阶段的输入。由于其不可回溯性,如果在软件生命周期的后期发现并要改正前期的错误,那么需要付出很高的代价。传统的瀑布模型是文档驱动的。如图所示。
在这里插入图片描述
6、快速原型模型
快速原型模型适用于具有以下特征的软件开发项目。
1)已有产品或产品的原型(样品),只需客户化的工程项目
2)简单而熟悉的行业或领域
3)有快速原型开发工具4)进行产品移植或升级
7、增量模型
增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。
在这里插入图片描述
增量模型适用于具有以下特征的软件开发项目。
软件产品可以分批次地进行交付、待开发的软件系统能够被模块化
软件开发人员对应用领域不熟悉,难以一次性地进行系统开发
项目管理人员把握全局的水平较高
8、螺旋模型
螺旋模型是一种用于风险较大的大型软件项目开发的过程模型。该模型将瀑布模型与快速原型模型结合起来,并且加入了这两种模型忽略了的风险分析。它把开发过程分为制定计划、风险分析、实施工程和客户评估4种活动。
螺旋模型适应于风险较大的大型软件项目的开发。它的优点是将风险分析扩展到各个阶段中,大幅度降低了软件开发的风险。但是这种模型的控制和管理较为复杂,可操作性不强,对项目管理人员的要求较高。
9、喷泉模型
喷泉模型是一种过程模型,同时也支持面向对象开发。在面向对象的方法中,分析模型和设计模型采用相同的符号标示体系,各阶段之间没有明显的界限,而且常常重复、迭代地进行。
“喷泉”一词体现了面向对象方法的迭代和无间隙性。迭代是指各阶段需要多次重复,例如,分析和设计阶段常常需要多次、重复进行,以更好的实现需求。无间隙性是指各个阶段之间没有明显的界限,并常常在时间上互相交叉,并行进行。
喷泉模型主要用于面向对象的软件项目,软件的某个部分通常被重复多次,相关对象在每次迭代中随之加入渐进的软件成分。
在这里插入图片描述
10、基于组件的开发模型
基于组件的开发模型使用现有的组件以及系统框架进行产品开发。在确定需求之后,开发人员开始从现有的组件库中筛选合适的组件,并对组件功能进行分析。在对组件分析之后,开发人员可能适当修改需求来适应现有组件,也可能修改组件或寻找新的组件。组件筛选完成之后,开发人员需要根据需求设计或使用现有的成熟开发框架复用这些组件,一些无法利用现有组件的地方,则需要进行单独的开发,新开发的组件在经历时间考验之后也会加入到组件库中。最后将所有组件集成在一起,进行系统测试。
基于组件的开发模型充分的体现了软件复用的思想,降低了开发成本和风险,并加快了产品开发。
在这里插入图片描述

11、统一软件开发过程模型
统一软件开发过程(Rational Unified Process,RUP)模型是基于UML(统一建模语言)的一种面向对象软件开发模型。它解决了螺旋模型的可操作性问题,采用迭代和增量递进的开发策略,并以用例驱动为特点,集中了多个软件开发模型的优点。RUP模型是迭代模型的一种。RUP模型的示意图如图所示。
在这里插入图片描述

12、敏捷过程概述
随着计算机技术的迅猛发展和全球化进程的加快,软件需求常常发生变化,强烈的市场竞争要求更快速的开发软件,同时软件也能够以更快的速度更新。传统的方法在开发时效上时常面临挑战,因此,强调快捷、小文档、轻量级的敏捷开发方法开始流行。敏捷方法是一种轻量级的软件工程方法,相对于传统的软件工程方法,它更强调软件开发过程中各种变化的必然性,通过团队成员之间充分的交流与沟通以及合理的机制来有效地响应变化。
13、极限编程
敏捷模型包括多种实践方法,比如
极限编程(eXtreme Programming,XP)
自适应软件开发(Adaptive Software Development,ASD)
动态系统开发方法(Dynamic System Development Method,DSDM)、Scrum、Cyrstal
特征驱动开发(Feature Driven Development,FDD)等
14、几种模型之间的关系
1)瀑布模型与RUP(统一软件开发过程)模型之间的关系
在宏观上,瀑布模型是静态模型,RUP模型是动态模型。RUP模型的每一次迭代,实际上都需要执行一次瀑布模型,都要经历先启、细化、构建、产品化这4个阶段,完成瀑布模型的整个过程。
在微观上,瀑布模型与RUP模型都是动态模型。瀑布模型与RUP模型在每一个开发阶段(先启、细化、构建、产品化)的内部,都需要有一个小小的迭代过程,只有进行这样的迭代,开发阶段才能做得更好。
瀑布模型中有RUP模型,反过来,RUP模型中也有瀑布模型。
在这里插入图片描述

1)瀑布模型与增量模型之间的关系
增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,一个模块接着一个模块地进行开发,直到开发完所有的模块。
在开发每个模块时,通常都是采用瀑布模型,从分析、设计、编码和测试这几个阶段进行开发。所以,增量模型中有瀑布模型,即宏观上是增量模型,微观上是瀑布模型。
增量模型也体现了迭代思想,每增加一个模块,就进行一次迭代,执行一次瀑布模型,所以,增量模型本质上是迭代的。
2)瀑布模型与快速原型模型之间的关系
快速原型的基本思想是快速建立一个能反映用户主要需求的原型系统,在此基础上之后的每一次迭代,都可能会用到瀑布模型。
快速原型模型中不但包含了迭代模型的思想,而且包含了瀑布模型的思想。
3)瀑布模型与螺旋模型之间的关系
螺旋模型是瀑布模型和快速原型模型的结合,快速原型模型是原型模型的简化,原型模型又是迭代模型和瀑布模型的组合,这些模型之间是相互依存的、彼此有关的。
螺旋模型每一次顺时针方向旋转,相当于顺时针方向迭代一次,都是走完一次瀑布模型,这就是瀑布模型与螺旋模型之间的关系。实际上,瀑布模型与喷泉模型也有关系。
15、选择软件过程模型
各种软件过程模型反映了软件生命周期表现形式的多样性。在生命周期的不同阶段也可采用不同的软件过程模型。在具体的软件开发过程中,可以选择某种软件过程模型,按照某种开发方法,使用相应的工具进行软件开发。
1.在选择软件过程模型时需要考虑以下几点。符合软件自身的特性,如规模、成本和复杂性等
2.满足软件开发进度的要求
3.对软件开发的风险进行预防和控制
4.具有计算机辅助工具的支持
5.与用户和软件开发人员的知识和技能相匹配
6.有利于软件开发的管理和控制
16、总结
一般来说,结构化方法和面向数据结构方法可采用瀑布模型或增量模型进行软件开发;而面向对象方法可采用快速原型模型、喷泉模型或RUP模型进行软件开发。
在实际的软件开发过程中,选择软件过程模型并非是一成不变的,有时还需要针对具体的目标要求进行裁剪、修改等,从而构成完全适合开发目标要求的软件过程模型。
现实中的软件系统有各种各样,软件开发方式也千差万别。对同一个问题,不同的开发组织可能选择不同的开发模型(过程模型)去解决,开发出的软件系统也不可能完全一样,但是其基本目标都是一致的,即应该满足用户的基本功能需求,否则,再好的软件系统也是没有意义的。

第3章 可行性研究及需求分析
1、项目立项概述
任何一个完整的软件工程项目都是从项目立项开始的。
经过项目发起、项目论证、项目审核和项目立项四个过程后,一个软件工程项目就正式启动了。
2、可行性研究的内容
战略可行性、操作可行性、计划可行性、技术可行性、社会可行性、市场可行性、经济可行性、风险可行性
3、可行性研究的步骤
在这里插入图片描述

进行可行性研究的步骤不是固化的,而是根据项目的性质、特点以及开发团队的能力有所区别。
4、软件需求规格说明书
特点:清晰性、一致性、准确性
5、需求分析的步骤
只有采取了合理的需求分析的步骤,开发人员才能更有效地获取需求。
在这里插入图片描述

6、需求分析的常用方法
(1)功能分解方法
功能分解方法是将一个系统看成是由若干功能模块组成的,每个功能又可分解为若干子功能及接口,子功能再继续分解,即功能、子功能和功能接口成为了功能分解方法的3个要素。
例:图书管理需求如何分解?
(2)结构化分析方法
一种面向数据流的需求分析方法。它主要适用于数据处理领域问题。第4章将详细介绍这种方法。
(3)信息建模方法
模型就是对现实的简化。建立模型的过程,称为建模。
信息建模方法常用的基本工具是E-R图(基本要素?)
(4)面向对象的分析方法
面向对象的分析方法的关键是识别问题域内的对象,分析它们之间的关系,并建立3类模型:
描述系统静态结构的对象模型;描述系统控制结构的动态模型;描述系统计算结构的功能模型

第4章 结构化分析
1、结构化分析方法
结构化分析实质上是一种创建模型的活动。
此模型的核心是“数据字典”:
“数据流图”用于功能建模;“实体-关系图”(E-R图)用于数据建模;“状态转换图”用于行为建模
在这里插入图片描述

(1)功能建模
功能建模的思想就是用抽象模型的概念,按照软件内部数据传递和变换的关系,自顶向下逐层分解。功能模型用数据流图来描述。
(2)数据流图原则:
1:自顶向下、逐层分解2:主要输入和输出应该被仔细标记3:不同层级转移时要保持信息流连续性
(3)数据字典
如前所述,分析模型包括功能模型、数据模型和行为模型。数据字典定义在分析模型中出现的数据对象及控制信息的特性。

第5章 面向对象方法与UML
1、面向对象的软件工程方法
(1)面向对象的软件工程方法的特征与优势
特征:
把数据和操作封装在一起,形成对象。把特征相似的对象抽象为类。
类之间可以存在继承或被继承的关系。对象之间通过发送消息进行通信。
优势:
(1) 符合人类的思维习惯(2) 稳定性好(3) 可复用性(4) 可维护性
(2)面向对象的实施步骤
(1)面向对象分析(2)面向对象设计(UML)
(3)面向对象实现(4)面向对象测试:对面向对象实现的程序进行测试,包括模型测试、类测试、交互测试、系统(子系统)测试、验收测试等。
2、UML简述
统一建模语言(Unified Modeling Language,UML)是一种通用的可视化建模语言。可用于对系统的理解、设计、浏览、配置、维护以及控制系统的信息。
3、UML的特点
统一标准、面向对象
可视化,表达能力强大
独立于过程、容易掌握使用
4、UML的应用范围
系统开发的各个阶段均可使用
需求分析阶段:用例图
分析和设计阶段:UML通过类和对象及其关系建立静态模型,对类、用例等概念之间的协作进行动态建模。
开发阶段:将设计的模型转化为编程语言的实际代码。
测试阶段:可以用UML图作为测试依据。用类图指导单元测试,用构件图和协作图指导集成测试,用用例图指导系统测试等。
5、 UML的图
UML主要用图来表达模型的内容,分类:
用例图、静态图、类图、对象图、包图、行为图(状态图)、交互图、顺序图、协作图、实现图、构件图、部署图
6、UML图之间的关系:
在这里插入图片描述

包含关系:把几个用例的公共步骤分离出来,成为一个单独的被包含用例
在这里插入图片描述

扩展关系:在不能改变已有用例的情况下扩展用例的功能
在这里插入图片描述

第7章 软件设计
1、软件设计的基本概念
需求分析——软件系统能“做什么”;软件设计——“怎么做”才能实现软件系统
可以把设计阶段的任务理解为把软件系统能“做什么”的逻辑模型转换为“怎么做”的物理模型。
2、软件总体设计过程
在这里插入图片描述

3、软件设计的原则
1) 模块化
模块:数据说明、可执行语句等程序对象的集合,是构成程序的基本构件,可以被单独命名并通过名字来访问。在面向过程的设计中,过程、函数、子程序、宏都可以作为模块。
2) 抽象
抽象在软件开发过程中起着非常重要的作用。一个庞大、复杂的系统可以先用一些宏观的概念构造和理解,然后再逐层地用一些较微观的概念去解释上层的宏观概念,直到最底层的元素。
3)逐步求精
求精就是细化,与抽象互补
在这里插入图片描述

4.)信息隐藏
信息隐藏提高了模块的独立性,有利于软件的测试和维护工作。
通常,模块的信息隐藏可以通过接口来实现。模块通过接口与外部进行通信,而把模块的具体实现细节(如数据结构、算法等内部信息)隐藏起来。
4、数据库结构设计
概念结构是系统中各种数据模型的基础,它描述最基础的数据结构,独立于特定的数据库系统
逻辑结构提供比较接近数据库内部构造的逻辑描述,为数据库物理结构的创建提供便利
物理结构是指数据库的物理数据模型,包括数据库服务器物理空间上的表、存储过程、字段、视图、触发器、索引等
在这里插入图片描述

通常,数据库的概念结构用E-R图来表示。
在设计数据库的逻辑结构的过程中,首先要将概念结构中的实体、属性、关系映射为数据表结构。形成初始的数据表后,要对其进行规范。一个好的关系模式应当不会发生插入异常、更新异常、删除异常,数据冗余尽可能少。
得到数据库的逻辑结构之后,可将模型进一步表现为物理空间上的表、字段、索引、存储过程、触发器及相应的数据字典。
5、用户界面设计
用户界面的设计质量,直接影响用户对软件产品的评价,从而影响软件产品的竞争力和寿命。
设计活动是基于一定的目的与流程的,它明确设计活动的最终方向,并保证设计活动的正确性和高效率。
第8章 软件体系结构与设计模式
1、什么是软件体系结构
软件体系结构是系统的一个或多个结构,它包括:

  1. 软件的组成元素(组件);2) 这些(组件)元素的外部可见特性;3) 这些元素(组件)之间的相互关系。
    2、软件体系结构建模
    软件体系结构的模型分为结构模型、框架模型、动态模型、过程模型和功能模型5种。
    1)结构模型
    这是一个最直观、最普遍的建模方法。这种方法以体系结构的构件、连接件和其他概念来刻画结构,并力图通过结构来反映系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格、性质。
    2)框架模型
    框架模型与结构模型类似,但它不太侧重描述结构的细节而更侧重于整体的结构。框架模型主要以一些特殊的问题为目标建立只针对和适应该问题的结构。
    3)动态模型
    动态模型是对结构模型或框架模型的补充,研究系统的"大颗粒"的行为性质。例如,描述系统的重新配置或演化。动态可能指系统总体结构的配置、建立或拆除通信通道或计算的过程。
    4)过程模型
    过程模型研究构造系统的步骤和过程,因此结构是遵循某些过程脚本的结果。
    5)功能模型
    该模型认为体系结构是由一组功能构件按层次组成,下层向上层提供服务。它可以看作是一种特殊的框架模型。
    3、软件体系结构的作用
    设计软件的体系结构在设计阶段非常重要。软件体系结构在软件开发过程中的作用如下:
    1)规范软件开发的基本架构2)便于开发人员与用户的沟通3)模块化、层次化设计,有利于减少返工,提高效率4)便于系统开发前、后期的筹备与服务
    4、软件质量属性
    软件质量属性是指软件系统在其生存周期过程中所表现出的各种特征。质量属性既和软件体系结构有关,也和具体实现有关。质量属性可以分为3类:系统属性、商业属性和构架属性。
    在这里插入图片描述

系统属性按运行时是否可见又分为:
运行时可观察到的:包括性能、安全性、可用性、易用性;
运行时不可观察的:包括可修改性、可移植性、可测试性、可集成性、可重用性。
商业属性包括投放市场时间、成本和预计的系统生命周期长短。
构架属性包括软件体系结构本身的概念完整性、正确性和可构建性。
我们在软件体系结构设计时除了考虑到系统要实现的功能外,还应充分考虑到系统所要求的各类质量属性。
5、体系结构框架
模型-视图-控制器:MVC(Model-View-Controller)模型强调将用户的输入、数据模型和数据表示方式分开设计,一个交互式应用系统由模型、视图、控制器3部分组成,分别对应内部数据、数据表示和输入/输出控制部分。
6、软件系统的设计模式
所谓模式,就是指解决某一类相似问题的方法论。某个模式描述了一个在我们的日常生活中不断出现的问题及该问题解决方案的核心。每种设计模式都包含4个要素:
问题描述了模式的使用场景,即模式可以解决的某种设计问题。
解决方案描述了针对特定的设计问题,可以采用怎样的设计方法,包括设计的组成成分、各成分的职责和协作方式以及各成分之间的相互关系。
效果描述了特定模式的应用对系统灵活性、扩展性、可移植性等各种特性的影响,它对评价设计选择以及对模式的理解非常有益。
第10章 面向对象设计
1、面向对象设计的过程
(1)建立软件体系结构环境图
使用软件体系结构环境图对环境进行建模,描述系统的出入信息流、用户界面和相关的支持处理。一旦建立了软件体系结构的环境图,描述出所有的外部软件接口,软件架构师就可以通过定义实现软件体系结构的构件。这个过程可一直迭代,直到获得一个完善的软件体系结构。
在这里插入图片描述

如图所示,与目标系统(即开发软件体系结构的系统)交互的系统可以表示为:
1)上级系统:将目标系统作为某些处理方案的一部分。
2)下级系统:被目标系统所使用,并且为完成目标系统的功能提供必要的数据和处理。
3)同级系统:在对等的基础上相互作用(例如,信息要么由目标系统和同级系统产生,要么被目标系统和同级系统使用)。
4)参与者:指通过产生和使用所需的信息,实现与目标系统交互的实体(人、设备)。每个外部实体都通过某一接口(带阴影的小矩形)与目标系统进行通信。
(2)软件体系结构设计
软件体系结构环境图建立之后,而且对所有的外部软件接口进行了描述,就可以进行软件体系结构设计。软件体系结构设计可以自底向上进行,先为系统中最底层细节编程,然后逐步在更高层累计细节直至最终满足系统需求,如将关系紧密的对象组织成子系统或层;也可以自顶向下进行,通过分解功能来解决问题,尤其是使用设计模式时,会从子系统的划分入手;还可以自中向上下进行,先开始做系统中看来容易做的,再向相应的高层或底层扩展。
需要强调的是,软件体系结构设计这个过程可一直迭代,直到获得一个完善的软件体系结构。
(3)对各个子系统进行设计
大多数系统的面向对象设计模型,在逻辑上都由4大部分组成。这4大部分对应于组成目标系统的4个子系统,它们分别是
问题域子系统、人机交互子系统、任务管理子系统、数据管理子系统
(4)对象设计及优化
对象设计是细化原有的分析对象,确定一些新的对象、对每一个子系统接口和类进行准确详细的说明。系统的各项质量指标并不是同等重要的,设计人员必须确定各项质量指标的相对重要性(即确定优先级),以便在优化对象设计时制定折衷方案。常见的对象优化设计方法有提高效率的技术和建立良好的继承结构。
2、面向对象设计的原则
面向对象的设计原则基本遵循传统软件设计应该遵循的原理,同时还要考虑面向对象的特点。设计原则具体如下。
模块化、抽象化、信息隐藏、低耦合、高内聚、复用性
3、面向对象设计的启发规则
面向对象设计的启发规则是人们在长期的基于面向对象思想的软件开发实践中总结出来的经验,有利于提高开发人员进行软件设计的质量。启发规则具体如下。
设计结果应该清晰易懂、类等级深度应该适当、要尽量设计简单的类、使用简单的协议、使用简单的操作、把设计的变动减至最小
4、对象设计
对象设计以问题域的对象设计为核心,其结果是一个详细的对象模型。设计过程包括标识新的解决方案对象、调整购买到的商业化构件、对每个子系统接口的精确说明和类的详细说明。
面向对象设计是扩充、完善和细化面向对象分析模型的过程,设计类中的服务、实现服务的算法是面向对象设计的重要任务,还要设计类的关联、接口形式以及设计的优化。对象设计的内容包括:
对象中对属性和操作的详细描述、对象之间发送消息的协议、类之间的各种关系的定义、对象之间的动态交互行为等。
第11章 软件编程
1、编程语言
编码的过程就是把软件设计阶段得到的解决方案转化为可以在计算机上运行的软件产品的过程。
选择合适的编程语言是编码过程的关键。可以说,编程语言是人与计算机交互的基本工具,它定义了一组计算机的语法规则,通过这些语法规则可以把人的意图、思想等转化为计算机可以理解的指令,进而让计算机帮助人类完成某些任务。软件开发人员通过使用编程语言来实现目标系统的功能。
2、选择编程语言需考虑的因素
进行软件开发时,应该根据待开发软件的特征及开发团队的情况考虑使用合适的编程语言。
(1) 待开发系统的应用领域,即项目的应用范围(2) 用户的要求
(3) 将使用何种工具进行软件开发(4) 软件开发人员的喜好和能力
(5) 软件的可移植性要求(6) 算法和数据结构的复杂性(7) 平台支持
3、编程风格
要做到按照良好的编程风格进行编程,可以从以下几点入手。
1.版权和版本声明。 应该在每个代码文件的开头对代码的版权和版本进行声明,主要内容有:版权信息。文件名称,标识符,摘要。当前版本号,作者/修改者,完成日期。版本历史信息。
版权和版本声明是对代码文件的一个简要介绍,包括了文件的主要功能、编写者、完成和修改时间等信息。添加版权和版本声明使得代码更加容易阅读和管理。
2. 程序版式
在程序编写过程中应该注意代码的版式,使代码更加清晰易读。对空行、空格的使用及对代码缩进的控制与程序的视觉效果密切相关。
3. 注释
注释阐述了程序的细节,是软件开发人员之间以及开发人员和用户之间进行交流的重要途径。做好注释工作有利于日后的软件维护。注释也需要遵循一定的规则,比如注释需要提供哪些方面的信息、注释的格式、注释的位置等。
4. 命名规则
事实上,没有一种命名规则可以让所有的编程人员都赞同,在不同的编程语言、不同的操作系统、不同的集成开发环境中,使用的命名规则可能不尽相同。因此,软件开发中仅需要制定一种令大多数项目成员满意的命名规则,并在项目中贯彻实施。
5.数据说明
数据说明应遵循一些简单的原则:
数据说明的次序应该标准化;当一个说明语句说明多个变量时,最好按字典顺序排列
如果设计时使用了一个复杂的数据结构,则应加注解说明用程序设计语言实现这个数据结构的方法和特点
6.语句构造
不要为了节省存储空间把多个语句写在同一行。尽量避免复杂的条件测试,尤其是减少对“非”条件的测试。避免大量使用循环嵌套语句和条件嵌套语句。利用圆括号使逻辑表达式或算术表达式的运算次序清晰直观。变量说明不要遗漏,变量的类型、长度、存储及初始化要正确。心理换位:“如果我不是编码人,我能看懂它吗”?
7. 输入输出
对所有输入数据都要进行校验;检查输入项重要组合的合法性;保持简单的输入格式;输入一批数据时,使用数据或文件结束标志,不要用计数来控制;人机交互式输入时,要详细说明可用的选择范围和边界值;当程序设计语言对输入/输出格式有严格要求时,应保持输入格式与输入语句的要求一致;输出报表的设计要符合用户要求,输出数据尽量表格化、图形化;给所有的输出数据加标志,并加以必要的注解
8. 效率
效率是对计算机资源利用率的度量,它主要是指程序的运行时间和存储器容量两个方面。
第12章 软件测试概述
1、软件测试的原则
软件测试是为了发现错误而执行程序的过程,它并不可能找出所有的错误,但是却可以减少潜在的错误或缺陷。人们在长期进行软件测试实践的过程中,不断地总结出一些软件测试的经验或原则,可供我们参考。
(1) 完全测试是不可能的。(2) 测试中存在风险。(3) 软件测试只能表明缺陷的存在,而不能证明软件产品已经没有缺陷。(4) 软件产品中潜在的错误数与已发现的错误数成正比。
(5) 让不同的测试人员参与到测试工作中。(6) 让开发小组和测试小组分立,开发工作和测试工作不能由同一部分人来完成。(7) 尽早并不断地进行测试,使测试工作贯穿于整个软件开发的过程中。(8) 在设计测试用例时,应包括输入数据和预期的输出结果两个部分,并且,输入数据不仅应该包括合法的情况,还应该包括非法的输入情况。(9) 要集中测试容易出错或错误较多的模块。(10) 应该长期保留所有的测试用例。
2、V模型
V模型是最具代表意义的测试模型,它是软件开发中瀑布模型的变种。V模型的重要意义在于它非常明确地表明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程的各阶段的对应关系。
不难发现,在V模型中,测试工作在编码之后才能进行,所以在软件开发早期各个阶段引入的错误不能及时被发现。尤其是需求阶段的错误只有等到最后的验收测试才能被识别。对分析、设计阶段产生的错误不能及时发现并改正的缺点会对后期的修复工作带来诸多不便,造成更多资源的浪费和时间的延迟。
在这里插入图片描述

3、W模型
W模型:最大优势在于,测试活动可以与开发活动并行进行,这样有利于及早地发现错误。在W模型中,需求、设计、编码等活动依然是依次进行的,只有上一阶段完全结束,才有可能开始下一阶段的工作。与迭代的开发模型相比,这种线性的开发模型在灵活性和对环境的适应性上有很大差距。
在这里插入图片描述

4、软件测试的分类
在这里插入图片描述

5、按照质量因素划分的软件测试分类。
功能测试关注于软件产品的功能实现,以软件产品的需求规格说明书为依据,检验最终的软件产品是否实现了需求规格说明书中的所有功能需求。
可靠性测试关注于程序输出结果的准确性,它以需求规格说明书中对系统的可靠性要求为依据,评测最终的软件产品提供准确输出结果的能力。
可用性测试用来衡量处理服务请求时,应用程序的可用频率。顾名思义,它以需求规格说明书中对系统的可用性要求为依据。
6、可用性和可靠性的区别:
可用性衡量的是一个应用程序处理服务请求并且在最短时间内从故障中恢复的能力,而可靠性衡量的是应用程序能够在多长时间内一直运行并且给出期望的结果值。

第13章 软件测试方法与过程
1、软件测试方法
审查和走查是静态测试的常用形式。审查是指通过阅读并讨论各种设计文档以及程序代码,来检查其是否有错。而走查的对象只是代码,不包括设计文档。代码走查以小组会议的形式进行,相关测试人员提供所需的测试用例,参会人员模拟计算机,跟踪程序的执行过程,对其逻辑和功能提出各种疑问,并通过讨论发现问题。总而言之,静态测试的效率比较高,而且要求测试人员具有丰富的经验。
与静态测试不同的是,动态测试需要通过实际运行被测程序来发现问题。测试人员可以输入一系列的测试用例,通过观察测试用例的输出结果是否与预期相符来检验系统内潜在的问题或缺陷。
动态测试中有两种非常流行的测试技术,即黑盒测试和白盒测试。
2、黑盒测试
在黑盒测试里,测试人员把被测试的软件系统看成是一个黑盒子,并不需要关心盒子的内部结构和内部特性,而只关注软件产品的输入数据和输出结果,从而检查软件产品是否符合它的功能说明。与黑盒测试不同,白盒测试关注软件产品的内部细节和逻辑结构,即把被测的程序看成是一个透明的盒子。
一般在软件测试的过程中,既要用到黑盒测试,又要用到白盒测试。大的功能模块采用黑盒测试,小的构件采用白盒测试。
可以说,黑盒测试和白盒测试都是基于用例的测试方法,因为它们都通过运行测试用例来发现问题。根据设计用例的方法的不同,黑盒测试包括等价类划分法、边界值分析法、错误推测法、因果图法等,而白盒测试包括逻辑覆盖测试方法和基本路径测试等方法。下面将重点对黑盒测试和白盒测试进行详细的介绍。
3、等价类划分法
等价类划分是把程序的输入域划分为若干子集,然后从每个子集中选取少数具有代表性的数据用作测试用例,所选取的输入数据对于揭露程序中的错误都是等效的。对于测试来说,某个等价类的代表值与该等价类的其他值是等价的,因此可以把所有的输入数据划分为若干等价类,在每一个等价类中取少部分数据进行测试。等价类分为有效等价类和无效等价类。
有效等价类是指对程序的规格说明是有意义的、合理的输入数据所构成的集合。
无效等价类是指对程序的规格说明是无意义的、不合理的输入数据构成的集合。
4、边界值分析法
人们从长期的测试工作经验中得知,大量的错误往往发生在输入和输出范围的边界上,而不是范围的内部。因此,针对边界情况设计测试用例,能够更有效的发现错误。
边界值分析法是一种补充等价类划分法的黑盒测试方法,它不是选择等价类中的任意元素,而是选择等价类边界的测试用例。实践证明,这些测试用例往往能取得很好的测试效果。边界值分析法不仅重视输入范围边界,也从输出范围中导出测试用例。
通常情况下,软件测试所包含的边界条件有以下几种类型:数字、字符、位置、质量、大小、速度、方位、尺寸、空间等;对应的边界值应该在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、最短/最长、空/满等情况。
5、错误推测法
错误推测法在很大程度上靠直觉和经验进行。它的基本想法是列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。
6、因果图法
等价类划分法和边界值分析法都主要考虑的是输入条件,而没有考虑输入条件的各种组合以及各个输入条件之间的相互制约关系。然而,如果在测试时考虑到输入条件的所有组合方式,可能其本身非常大甚至是个天文数字。因此,必须考虑描述多种条件的组合,相应的产生多个动作的形式来考虑设计测试用例。这就需要利用因果图法。
因果图法是一种黑盒测试方法,它从自然语言书写的程序规格说明书中寻找因果关系,即输入条件与输出和程序状态的改变,通过因果图产生判定表。它能够帮助人们按照一定的步骤高效的选择测试用例,同时还能指出程序规格说明书中存在的问题。
7、决策表法
在一些数据处理问题中,某些操作是否实施依赖于多个逻辑条件的取值。在这些逻辑条件取值的组合所构成的多种情况下,分别执行不同的操作。处理这类问题的一个非常有力的工具就是决策表。
决策表(也称判定表)是分析和表达多逻辑条件下执行不同操作的情况的工具,可以把复杂逻辑关系和多种条件组合的情况表达的比较明确。决策表通常由4部分组成,如图所示。
在这里插入图片描述

8、场景法
现在软件很多都是用事件触发来控制流程,事件触发时的情形变形成场景,而同一事件不同的触发顺序和处理结果就形成了事件流。这种在软件设计中的思想也可以应用到软件测试中,可生动地描绘出事件触发时的情形,有利于测试者执行测试用例,同时测试用例也更容易得到理解和执行。
用例场景是通过描述流经用例的路径来确定的过程,这个流经过程要从用例开始到结束遍历其中所有的基本流和备选流。
基本流:采用黑直线表示,是经过用例的最简单路径,表示无任何差错,程序从开始执行到结束;备选流:采用不同颜色表示,一个备选流可以从基本流开始,在某个特定条件下执行,然后重新加入基本流中,也可以起源于另一个备选流,或终止用例,不再加入到基本流中。
9、黑盒测试选择
黑盒测试的每种测试方法都有各自的优缺点,需要测试人员根据实际项目特点和需要选择合适的方法设计测试用例。以下是选择方法的几条经验:
在任何情况下都必须选择边界值分析方法。经验表明用这种方法设计出的测试用例发现程序错误的能力最强;必要时用等价类划分法补充一些测试用例;用错误推测法再追加一些测试用例;如果程序的功能说明中含有输入条件的组合情况,则可选用因果图法和决策表法。
除了上述的几条经验,还需要测试人员积累实际的测试经验,做出合适的选择。
10、白盒测试
白盒测试关注软件产品的内部细节和逻辑结构,即把被测的程序看成是一个透明的盒子。白盒测试需要对系统内部结构和工作原理有一个清楚的了解。白盒测试也有多种技术,比如:代码检查法、逻辑覆盖测试、基本路径测试等。
11、代码检查法
代码检查法包括桌面检查、代码审查和走查等。它主要检查代码和设计的一致性,代码对标准的遵循,可读性,代码逻辑表达正确性,代码结构合理性等方面;发现程序中不安全、不明确和模糊部分,找出程序中不可移植部分;发现违背程序编写风格问题。其中包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。
代码检查应该在编译和动态测试之前进行。在检查前,应准备好需求描述文档、程序设计文档、程序的源代码清单、代码编写标准和代码错误检查表等。
在实际使用中,代码检查法能快速找到缺陷,发现30%到70%的逻辑设计和编码缺陷,而且代码检查法看到的是问题本身而非征兆。但是代码检查法非常耗费时间,并且需要经验和知识的积累。
代码检查法可以使用测试软件进行自动化测试,以提高测试效率。
12、静态结构分析法
静态结构分析主要是以图的形式表现程序的内部结构,供测试人员对程序结构进行分析。程序结构形式是白盒测试的主要依据。
静态结构分析是一种对代码机械性的、程式化的特性进行分析的方法。在静态结构分析中,测试者通过使用测试工具分析程序源代码的系统结构、数据接口、内部控制逻辑等内部结构,生成函数调用关系图、模块控制流图、内部文件调用关系图、子程序表、宏和函数参数表等各类图形图表,可以清晰地标识整个软件系统的组成结构,使其便于阅读和理解,然后可以通过分析这些图表,检查软件有没有存在缺陷或错误。包括控制流分析、数据流分析、信息流分析、接口分析、表达式分析等。
13、程序插桩技术
在调试程序时,常常需要插入一些打印语句,进而在执行程序时能够打印有关信息,进一步通过这些信息来了解程序执行时的一些动态特性,比如程序的执行路径或特定变量在特定时刻的取值。这一思想发展出来的程序插桩技术在软件动态测试中,作为一种基本的测试手段,有着广泛的应用。
简单来说,程序插桩技术是借助往被测程序中插入操作来实现测试目的的方法,即向源程序中添加一些语句,实现对程序语句的执行、变量的变化等情况进行检查。例如想要了解一个程序在某次运行中所有可执行语句被覆盖的情况,或是每个语句的实际执行次数,就可以利用程序插桩技术。
14、逻辑覆盖法
逻辑覆盖法以程序内在的逻辑结构为基础,根据程序的流程图设计测试用例。根据覆盖的目标不同,又可分为语句覆盖、分支覆盖、条件覆盖等。
15、基本路径法
基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行的路径集合,从而设计测试用例的方法。在基本路径测试中,设计出的测试用例要保证在测试中程序的每条可执行语句至少执行一次。在基本路径法中,需要使用程序的控制流图进行可视化表达。
程序的控制流图是描述程序控制流的一种图示方法。其中,圆圈称为控制流图的一个结点,表示一个或多个无分支的语句或源程序语句;箭头称为边或连接,代表控制流。在将程序流程图简化成控制流图时,应注意:在选择或多分支结构中,分支的汇聚处应有一个汇聚结点;边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。
16、白盒测试方法选择
白盒测试的每种测试方法都有各自的优点和不足,需要测试人员根据实际软件特点、实际测试目标和测试阶段选择合适的方法设计测试用例,这样能有效地发现软件错误,提高测试效率和测试覆盖率。以下是选择方法的几条经验:
在测试中,可采取先静态再动态的组合方式,先进行代码检查和静态结构分析,再进行覆盖测试;利用静态分析的结果作为引导,通过代码检查和动态测试的方式对静态分析的结果做进一步确认;覆盖测试是白盒测试的重点,一般可使用基本路径测试法达到语句覆盖标准,对于软件的重点模块,应使用多种覆盖标准衡量测试的覆盖率;在不同的测试阶段测试重点不同,在单元测试阶段,以代码检查、覆盖测试为主,在集成测试阶段,需要增加静态结构分析等,在系统测试阶段,应根据黑盒测试的结果,采用相应的白盒测试方法。
17、白盒测试与黑盒测试比较
白盒测试和黑盒测试是两类软件测试方法,传统的软件测试活动基本上都可以划分到这两类测试方法中。
在这里插入图片描述
18、系统测试类型
(1)功能测试
功能测试是系统测试中最基本的测试,它不管软件内部是如何实现的,而只是根据需求规格说明书和测试需求列表,验证产品的功能是否符合需求规格。
(2)性能测试
性能测试是用来测试软件系统在实际的集成系统中运行性能的。因为在无论是单元测试,还是集成测试中,都没有将系统作为一个整体放入实际环境中运行,因此,只有在性能测试阶段,才能够真正看到系统的实际性能。
对于实时系统和嵌入式系统,提供符合功能需求但不符合性能需求的软件是不能接受的。性能测试的目的是度量系统相对于预定义目标的差距。需要的性能级别针对于实际的性能级别进行比较,并把其中的差距文档化。
(3)安装测试
安装测试用来确保软件在正常情况和异常情况的不同条件下都不丢失数据或者功能,具体测试活动包括首次安装、升级、完整安装、自定义安装、卸载等。测试对象包括测试安装代码以及安装手册。安装代码提供安装一些程序能够运行的基础数据,安装手册提供如何进行安装。
(4)可用性测试
所谓可用性测试,即是对软件“可用性”进行测试,检验其是否达到可用性标准。目前的可用性测试方法超过20种,按照参与可用性测试的人员划分,可以分为专家测试和用户测试;按照测试所处于的软件开发阶段,可以将可用性测试划分为形成性测试和总结性测试。形成性测试是指在软件开发或改进过程中,请用户对产品或原型进行测试,通过测试后收集的数据来改进产品或设计直至达到所要求的可用性目标。形成性测试的目标是发现尽可能多的可用性问题,通过修复可用性问题实现软件可用性的提高,总结性测试的目的是横向测试多个版本或者多个产品,输出测试数据进行对比。
(5)压力测试
压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。通俗地讲,压力测试是为了发现在什么条件下应用程序的性能会变得不可接受。
(6)容量测试
在进行压力测试时,如果发现了被测系统在可接受的性能范围内的极限负载,则在一定程度上完成了容量测试。
容量测试的目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在该极限值下没有出现任何软件故障或还能保持主要功能正常运行。容量测试的完成标准可以定义为:所计划的测试已全部执行,而且达到或超出指定的系统限制时没有出现任何软件故障。
(7)安全性测试
安全性测试的目的是验证系统的保护机制是否能够在实际的环境中抵御非法入侵,恶意攻击等非法行为。任何包含敏感信息或能够对个人造成不正当伤害的计算机系统都会成为被攻击的目标。入侵的内容非常广泛,包括仅仅为了练习技术而试图入侵的黑客;为了报复而试图破坏系统的内部雇员;以及为了获取非法利益而试图入侵系统的非法个人,甚至组织。
(8)健壮性测试
健壮性是指在故障存在的情况下,软件还能正常运行的能力。有些人认为健壮性测试就是容错性测试,或者认为容错性测试与恢复测试一般无二。其实容错性测试与恢复测试是有区别的,而健壮性测试包含这两种测试。健壮性有两层含义:一是容错能力,二是恢复能力。
容错性测试通常依靠输入异常数据或进行异常操作,以检验系统的保护性。如果系统的容错性好,系统只给出提示或内部消化掉,而不会导致系统出错甚至崩溃。
恢复测试通过各种手段,让软件强制性地发生故障,然后验证系统已保存的用户数据是否丢失,系统和数据是否能尽快恢复。
(9)图形用户界面测试
图形化用户接口(Graphic User Interface,GUI) 测试包含两方面内容,一是界面实现与界面设计是否吻合;二是界面功能是否正确。为了更好地进行GUI 测试,一般将界面与功能分离设计,比如分成:界面层、界面与功能接口层、功能层。这样GUI 的测试重点就可以放在前两层上。
(10)文档测试
文档的种类包括:开发文档、管理文档、用户文档。这3类文档中,一般最主要测试的是用户文档,因为用户文档中的错误可能会误导用户对软件的使用,而且如果用户在使用软件时遇到的问题没有通过用户文档中的解决方案得到解决,用户将因此对软件质量产生不信赖感,甚至厌恶使用该软件,这对软件的宣传和推广是很不利的。
思考题
1.软件危机的定义
软件危机是指在软件开发和软件维护过程中出现的一系列问题和困难,导致软件项目无法按时交付、超出预算或无法满足用户需求的情况。这些问题可能包括软件开发进度延迟、质量不达标、功能缺失、需求变更频繁、团队合作不顺畅等。软件危机的存在使得软件开发过程变得复杂困难,给企业和开发者带来了巨大的挑战和风险。
2.瀑布模型特点(其他软件过程模型)
瀑布模型是20世纪80年代之前最受推崇的软件开发模型,它是一种线性的开发模型,具有不可回溯性。由于它设计的不可回溯性,如果在软件生命周期的后期发现编码与单元测试并要改正前期的错误,则需要付出很高的代价。
瀑布模型的优点是过程模型简单,执行容易;缺点是无法适应变更。
3.软件测试的目的
软件测试是发现软件中错误和缺陷的主要手段。为了保证软件产品的质量,软件开发人员通过软件测试发现产品中存在的问题,并对其进行及时的修改。可以说,软件测试的过程就是发现并改正软件缺陷的过程。
4.解释名词-设计模式
设计模式是在软件设计中常用的一种解决问题的方法或思维模式。它是对面向对象编程中的经验和最佳实践的总结和抽象,提供了一套通用的解决方案,用于解决特定类型问题或在特定情境下的设计挑战。
设计模式由四个要素组成:问题、解决方案、效果和上下文。它们描述了在特定问题下,用特定的解决方案可以达到什么效果,并在特定的上下文中应用。
设计模式可以分为三种类型:创建型模式、结构型模式、行为型模式
5.解释名词-黑盒测试
黑盒测试是一种软件测试方法,测试人员只关注被测试软件的输入和输出,而不考虑内部实现的细节。在黑盒测试中,测试人员不需要了解被测试软件的内部结构或代码,只需要根据需求和规格来设计测试用例,以验证软件的功能是否满足预期。通过黑盒测试可以发现软件中的逻辑错误、边界问题、输入验证等问题,以提高软件的质量和可靠性。
6.解释名词-白盒测试
白盒测试,有时也称为玻璃盒测试,它关注软件产品的内部细节和逻辑结构,即把被测的程序看成是一个透明的盒子。白盒测试利用构件层设计的一部分而描述的控制结构来生成测试用例。白盒测试需要对系统内部结构和工作原理有一个清楚的了解。白盒测试也有多种技术,如代码检查法、逻辑覆盖测试和基本路径测试等。白盒测试常用于测试代码的覆盖率、代码逻辑错误、代码性能等方面,
7.搜索解释名词-软件工程
IEEE 对软件工程的定义为:①将系统化、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件。②对①中所述方法的研究。
软件工程是以借鉴传统工程的原则和方法,以提高质量、降低成本为目的指导计算机软件开发和维护的工程学科。它是一种层次化的技术。
软件工程的根基就在于对质量的关注;软件工程的基础是过程层,它定义了一组关键过程区域的框架,使得软件能够被合理和及时地开发;软件工程的方法提供了建造软件在技术上需要"做什么",它覆盖了一系列的任务,包括需求分析、设计、编程、测试和支持等;软件工程对过程和方法提供了自动的或半自动的支持。
8.解释名词-软件复用
复用也称为再用或重用,是指同一事物不做修改或稍加改动就可多次重复使用。软件复用是降低软件成本、提高软件生产率和软件质量的非常合理、有效的途径。软件复用可划分成以下3个层次:知识复用、方法和标准的复用、软件成分的复用。软件成分的复用可以划分为以下3个级别,代码复用、设计结果复用、分析结果复用
9.软件生命周期的各个阶段及主要任务?
软件生命周期是指软件从概念到退役的整个发展过程,包括以下主要阶段和任务
1.可行性分析阶段:为后续的软件开发做必要的准备工作。
2.需求分析阶段:收集、分析和明确用户和系统的需求。
3.软件设计阶段:基于需求分析的结果,设计软件系统的结构和组成部分。
4.编码阶段:在根据设计阶段的结果,将软件系统的功能实现为源代码。
5.测试阶段:验证和验证软件系统是否满足需求和规格。
6.软件维护阶段:将软件系统部署到生产环境中,并进行日常维护和支持。
10.编码风格包含什么内容及作用?
编程风格是指源程序的书写习惯,如变量的命名规则、代码的注释方法和缩进等。具有良
好编程风格的源程序具有较强的可读性和和可维护性,同时还能提高团队开发的的效率。
良好的编程风格可以从这几点入手:
1)版权和版本声明2)程序版式3)注释4)命名规则
5)数据说明6)语句构造7)输入/输出8)效率
11.黑盒测试常见方法、优缺点及使用场景
常见方法:等价类划分、边界值分析法、错误推测法、因果图法
使用场景:常用于测试用户界面、功能、性能等方面,是从用户角度出发的测试方法
优点:
1)独立性强:黑盒测试不需要了解被测试软件的内部结构和实现细节,只需关注功能和接口,因此可以由测试人员独立进行。
2)适用广泛:黑盒测试适用于各种类型的软件,无论是简单的单一功能还是复杂的系统。
3)用户导向:黑盒测试主要关注软件的功能和用户需求,可以验证软件是否按照预期的方式工作,提高用户体验。
4)发现潜在问题:黑盒测试可以发现潜在的错误、缺陷和异常情况,提高软件的质量和可靠性。
缺点:
1)无法验证内部逻辑:由于黑盒测试只关注输入和输出,无法验证软件内部的逻辑和算法,可能会遗漏一些内部的错误和缺陷。
2)测试用例设计困难:由于无法直接观察软件的内部状态,黑盒测试需要依靠需求文档、用户手册等来设计测试用例,可能存在遗漏或不准确的情况。
3)覆盖率不足:黑盒测试往往无法覆盖所有的路径和场景,可能会遗漏一些潜在的错误。
4)效率相对较低:由于无法直接访问内部结构,黑盒测试需要通过模拟输入和观察输出的方式进行测试,相对于白盒测试来说,效率较低。
12.数据库结构设计的内容
数据库结构设计包括概念结构设计、逻辑结构设计和物理结构设计。
数据库的概念结构是系统中各种数据模型的共同基础,它描述了系统最基础的数据结构,独立于特定的数据库系统。
数据库的逻辑结构提供了比较接近数据库内部构造的逻辑描述,它能够为数据库物理结构的创建提供便利。
数据库的物理结构是指数据库的物理数据模型,它包括数据库服务器物理空间上的表、存储过程、字段、视图、触发器和索引等,与特定的数据库系统密切相关。
13.总结软件项目团队开发经验(结合实际)
在软件项目团队开发过程中,以下是一些实践经验总结:

  1. 清晰的需求定义:确保项目团队对需求有清晰的理解,包括功能需求、非功能需求和用户期望等。与客户和利益相关者进行充分沟通,明确需求,避免后期的变更和返工。
  2. 团队合作与沟通:建立良好的团队合作和沟通机制,包括定期开会、使用协作工具、实时交流等。保持团队成员之间的信息流畅和互相支持,促进知识共享和问题解决。
  3. 敏捷开发方法:采用敏捷开发方法,如Scrum或Kanban,迭代开发和快速反馈,使团队能够更好地应对需求变化和项目风险。
  4. 代码管理与版本控制:使用代码管理工具(如Git)进行版本控制,确保代码的安全性和可追溯性。采用分支管理策略,合理组织代码的开发和发布流程。
  5. 编码规范与质量保证:制定统一的编码规范,提高代码的可读性和可维护性。使用代码静态分析工具、单元测试和代码评审等方式,确保代码质量和稳定性。
  6. 持续集成与自动化测试:建立持续集成环境,通过自动化测试来验证代码的正确性和功能的稳定性。使用自动化构建工具和测试框架,提高开发效率和质量。
  7. 风险管理与问题解决:及时识别和评估项目风险,制定相应的风险应对策略。建立问题追踪系统,及时解决和跟踪项目中的问题和障碍。
  8. 文档管理与知识分享:建立文档管理系统,记录项目的相关文档和知识。定期进行团队内部的知识分享和培训,提高团队的技术能力和协作能力。
  9. 持续改进与反馈机制:定期进行项目回顾和团队评估,总结经验教训,找出改进的机会。鼓励团队成员提供反馈和建议,不断优化和提升团队的工作效率和项目质量。
    14.数据字典定义?数据字典和DFD的关系
    数据字典和DFD(数据流图)之间存在密切的关系。DFD是一种图形化的表示方法,用于描述系统中的数据流动和处理过程。在DFD中,数据流代表数据在系统中的流动,而数据字典则提供了对这些数据流的详细定义和描述。
    数据字典为DFD提供了必要的数据元素和数据流的定义。它可以帮助开发人员更好地理解系统中的数据流动,确保数据在系统中的流转正确无误。同时,数据字典还可以用于确保系统中使用的数据元素和数据结构的统一性和一致性,减少开发过程中的混乱和错误。
    15.软件文档的作用?
    软件文档是用来表示对需求、过程或结果进行描述、定义、规定或认证的图示信息,它描述或规定了软件设计和实现的细节。在软件工程中,文档记录了从需求分析到产品设计,再到产品实现及测试的过程,甚至到产品交付及交付后的使用情况等各个阶段的相关信息。
    16.软件开发生命周期各阶段分别包含哪些文档?
    1.可行性分析阶段:可行性研究报告,项目开发计划
    2.需求分析阶段:需求文档、软件需求规格说明书
    3.软件设计阶段:概要设计说明书、详细设计说明书
    4.编码阶段:源代码、单元测试文档
    5.测试阶段:测试计划、测试报告
    6.软件维护阶段:用户手册、维护文档
    17.结合实际谈谈如何做好软件测试工作
    要做好软件测试工作,可以考虑以下几个方面:
  10. 确定测试目标和策略:在开始测试之前,明确测试的目标和策略非常重要。根据软件的需求和功能,确定测试的范围、测试用例的设计和选择,以及测试的优先级和时间安排等。
  11. 编写详细的测试计划:测试计划是测试工作的指导文件,它应包括测试的目标、测试环境、测试资源、测试策略和方法、测试进度和风险评估等信息。编写详细的测试计划能够帮助测试团队更好地组织和执行测试工作。
  12. 设计和执行测试用例:测试用例是测试的核心,它描述了具体的测试步骤和预期结果。在设计测试用例时,要覆盖软件的各个功能模块和边界条件,以确保测试的全面性和准确性。执行测试用例时,要仔细记录测试结果,并及时报告和解决问题。
  13. 使用多种测试方法:软件测试可以采用多种方法,如黑盒测试、白盒测试、灰盒测试等。不同的测试方法适用于不同的测试场景。因此,根据具体情况选择合适的测试方法,以提高测试的效果和覆盖率。
  14. 引入自动化测试:对于重复性较高的测试任务,可以考虑引入自动化测试工具和框架。自动化测试可以提高测试的效率和一致性,并减少人为错误的产生。但需要注意的是,自动化测试并非适用于所有测试场景,需要在合适的时机和范围内进行。
  15. 进行持续集成和持续测试:持续集成和持续测试是一种将软件开发、构建和测试过程自动化的方法。通过持续集成和持续测试,可以及时发现和修复问题,确保软件的质量和稳定性。同时,通过持续集成和持续测试,可以提高团队的工作效率和协作能力。
    除了以上的建议,还应注重与开发团队的紧密合作、及时反馈和解决问题,以及持续学习和改进测试技术和方法。软件测试是一个复杂而关键的工作,需要不断提升自己的技能和经验,才能做好测试工作。
    20.软件开发过程中编程语言选择需考虑的因素
  1. 待开发系统的应用领域,即项目的应用范围。不同的应用领域一般需要不同的语言。
    2)用户的要求。如果用户熟悉软件所使用的语言, 那么会对软件的使用及日后的维护工作带来很多方便。
  2. 将使用何种工具进行软件开发。软件开发工具可以提高软件开发的效率。
  3. 软件开发人员的喜好和能力。
  4. 软件的可移植性要求。可移植性好的语言可以使软件方便地在不同的计算机系统上运行。
    6)算法和数据结构的复杂性。
    7)平台支持。某些编程语言只在指定的部分平台上才能使用。
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值