【细说软件工程】《软件工程》Software Engineering

《软件工程》60’

一.、软件过程

1、软件过程的概念

答:

1)**软件过程描述为为了开发出客户需要的软件,什么人、在什么时候、做什么事以及怎么做这些事以实现某一种的具体目标。**ISO9000把过程定义为:“使用资源将输入转化为输出的活动所构成的系统”。(《软件工程导论》p14)

2)过程定义了运用方法的顺序应该交付的文档资料为保证软件质量和协调变化所需要采取的管理措施以及标志软件开发各个阶段任务完成的里程碑。(《软件工程导论》p14)

3)软件过程是软件生成周期中的一系列相关的过程。过程是活动的集合,活动是任务的集合。(《复旦大学软工PPT》)

软件过程有三层含义:

个体含义:

即指软件产品或系统在生存周期中的某一类活动的集合,如软件开发过程,软件管理过程等;

整体含义:

即指软件产品或系统在所有上述含义下的软件过程的总体;

工程含义:

即指解决软件过程的工程,它应用软件工程的原则、方法来构造软件过程模型,并结合软件产品的具体要求进行实例化,以及用户环境下的运作,以此进一步提高软件生产率,降低成本。

2、经典软件过程模型特点(瀑布模型、增量模型、演化模型、统一过程模型)

答:

瀑布模型

  • 瀑布模型将软件生命周期划分为需求分析规格说明设计程序编写软件测试运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。

  • 瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。

  • 瀑布模型模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,主要问题是:

    1.各个阶段的划分完全固定,阶段之间生成大量的文档,极大地增加了工作量;

    2.由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;

    3.早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。

增量模型

与建造大厦相同,软件也是一步一步建造起来的。

在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。

  • 增量模型在各个阶段并不交付一个可运行的完整产品,而是满足客户需求的一个子集的可运行产品。
  • 增量模型侧重于每个增量都提交一个可以运行的产品。
  • 整个产品被分解成若干个构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险

image-20201124155011590

RUP把软件的生命周期划分成4个连续的阶段。每个阶段都有明确的目标,并且定义了用来评估是否达到这些目标的里程碑。每个阶段的目标通过一次或多次迭代来完成。

4个阶段的工作目标包括:初始阶段精华阶段构建阶段移交阶段

RUP模型采用迭代开发,通过多次执行不同的开发工作流,逐步确定一部分需求分析和风险,在设计、实现并确认这部分后,再去做下一部分的需求分析、设计、实现和确认工作,依次进行下去,直到整个项目完成,这样能够在逐步集成中更好地理解需求,构建一个健壮的体系结构。

3、过程评估与CMM/CMMI的基本概念

答:

1)CMM(Capability Maturity Model)即能力成熟度模型,是美国卡耐基梅隆大学软件工程研究所(SEI)在美国国防部资助下于二十世纪八十年代末建立的,用于评价软件机构的软件过程能力成熟度的模型。此模型在建立和发展之初,主要目的在于提供一种评价软件承接方能力的方法,为大型软件项目的招投标活动提供一种全面而客观的评审依据。而发展到后来,又同时被软件组织用于改进其软件过程。(《复旦大学软件工程ppt》)

CMM提供了一个成熟度等级框架:

  • 1级-初始级
  • 2级-可重复级
  • 3级-已定义级
  • 4级-已管理级
  • 5级-优化级

image-20201202140233031

活动图:

活动图是状态图的一种特殊情况。用于简化描述一个过程或者操作的工作步骤。活动用圆角矩形表示-比状态图更窄,更接近椭圆。一个活动中的处理一旦完成,则自动引起下一个活动的发生。箭头表示从一个活动转移到下一个活动。和状态图类似,活动图中的起点用一个实心圆表示,终点用一个同心圆(内圆是实心圆)表示。在活动图中可以带判定点,即一组条件引发一条执行路径,另一组条件则引发另一条执行路径,并且这两条执行路径时互斥的。判定点常用小的菱形图标表示,同时在相关路径的附近指明引起这条路径被执行的条件,条件用方括号括起来。请用活动图描述打电话过程。

image-20201202142408417

顺序图:

顺序图是强调消息时间的交互图,其描述了对象之间传送消息的时间顺序,用来表示用例中的行为顺序。在该二维图中,对象由左至右排列,消息则沿着纵轴由时间顺序排列。在构筑改图时,应布局简洁。

示意图,购买小车简图。

image-20201202150918016

在类的构成中还应当包含类的职责(Resopnsibility)、类的约束(Constraint)和类的注释(Note)等信息。

6、行为模型建模及其UML表达(状态机图)

答:

状态机图是用来为对象的状态及造成状态改变的事件建模。UML的状态机图主要用于建立对象类或对象的动态行为模型,表现一个对象所经历的状态序列,引起状态或活动转移的事件,以及因状态或活动转移而伴随的动作。状态机图也可用于描述Use Case,以及全系统的动态行为。

image-20201210104320458

具体含义及其画法(看网站一学就会)https://blog.csdn.net/monkey_d_meng/article/details/6005764(博客 )

4)构件图

构件图显示代码的静态结构、是用代码组件来显示代码物理结构的。

image-20201210131328790

6)部署图(略,非重点)

展现系统中硬件和软件的物理机构

画法:https://blog.csdn.net/wangyongxia921/article/details/8250129

5、接口的概念;面向对象设计原则(开闭原则、Liskov替换原则、依赖转置原则、接口隔离原则)

开闭原则

类的改动是通过增加代码进行的,而不是修改源代码。

里氏代换原则

任何抽象类出现的地方都可以用他的实现类进行替换,实际就是虚拟机制,语言级别实现面向对象功能。

依赖倒转原则

依赖于抽象(接口),不要依赖具体的实现(类),也就是针对接口编程。

接口隔离原则

不应该强迫用户的程序依赖他们不需要的接口方法。一个接口应该只提供一种对外功能,不应该把所有的操作都封装到一个接口中去。

6、内聚与耦合的概念,常见的内聚和耦合类型

答:

“高内聚,低耦合”

起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准-耦合性和内聚性。

耦合性也称块间联系。指软件系统结构中各模块间互相联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。

耦合性分类(低-高):无直接耦合;数据耦合;标记耦合;控制耦合;公共耦合;内容耦合;

1)无直接耦合:两个模块之间没有直接联系,它们之间的联系完全是通过主模块的控制和调用来实现的;

2)数据耦合:指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递;

3)标记耦合:指连个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;

4)控制耦合:指一个模块调用另外一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能;

5)公共耦合:指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。

6)内容耦合:这是最高程度的耦合,也是最差的耦合。当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。

内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。

内聚性分类(低-高):偶然内聚;逻辑内聚;时间内聚;通信内聚;顺序内聚;功能内聚;

1)偶然内聚:指一个模块内的各处理元素之间没有任何联系。

2)逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一功能。

3)时间内聚:把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。

4)通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的数据数据。

5)顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一个功能元素的输入。

6)功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块耦合是最弱的。

耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块独立性,为设计高质量的软件结构奠定基础。

四、软件测试

1、软件测试及测试用例的概念;

答:

软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。

测试用例是为了某个特殊的目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。

2、单元测试、集成测试、确认测试、系统测试、回归测试的概念;

答:

单元测试:又称模块测试,着重对软件设计的最小单位(程序模块)进行验证。单元测试根据设计描述,对重要的控制路径进行测试,以发现各个模块内部的错误。单元测试通常采用白盒测试,并且多个模块并行进行测试。

集成测试:又称组装测试。、联合测试,经单元测试后,每个模块都能独立工作,但把它们放在一起往往不能正常工作。确认测试以软件需求规格说明书为依据,检查软件的功能和性能及其它特写是否与用户的需求一致,包括合同规定的全部功能和性能、文档资料(正确且合理)、其他需求(如可移植性、兼容性、错误恢复能力、可维护性等)。

系统测试:是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与其它系统成分(如硬件、外设、某些支持软件、数据和人员等)集成起来,在实际运行环境下,对计算机系统进行一系列的集成测试和确认测试。系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统定义不符合或与之矛盾的地方。

回归测试:是指修改旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产出错误。

3、调试的概念、调试与测试的关系;

答:

测试的目的是发现错误,调试(也称排错)的目的是确定错误的原因和准确位置,并加以纠正。

调试与测试的关系:测试和调试在目标、方法和思路上都有所不同,测试是一个过程,目的是显示存在的软件错误,通常由软件测试工程师实施。而调试是一种方法,一种手段,目的是发现错误原因并解决,一般来说调试时测试后的活动,通常由开发工程师实施。

4、测试覆盖度的概念

答:

测试覆盖度评估是衡量阶段性软件测试执行状态的重要手段之一,来确定测试是否达到事先设定的测试任务完成的标准。测试覆盖率则是测试覆盖度评估中一种量化的表示方法,一般通过被测试的软件产品需求、功能点、测试用例数或程序代码等来进行计算。

5、白盒测试、黑盒测试的概念

答:

白盒测试又称结构测试,这种方法把测试对象看作一个透明的盒子,测试人员根据程序内部的逻辑结构及有关信息涉及测试用例,检查程序中所有逻辑路径是否按预定的要求正确地工作。

黑盒测试又叫做功能测试,这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。

6、代码圈复杂度的计算方法

答:

圈复杂度是一种代码复杂度的衡量标准。在软件测试的概念里,圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为独立线性路径条数,即合理的预防 错误所需测试的最小路径条数,圈复杂度大说明程序代码可能质量低且难以测试和维护,根据经验,程序的可能错误和高的圈复杂度有很大关系。它的计算方法为:V(G)=e-n-2p。e表示控制流图中边的数量,n表示控制流图中节点的数量,p表示图的连接组件数目(图的组件数是相连节点的最大集合),因为控制流图都是连通的,所以p永远为1

image-20201212110442050

V(G)=R。R代表平面被控制流图划分成的区域数

【细说软件工程】《软件工程》Software Engineering 谁吃薄荷糖 【细说软件工程】《软件工程》Software Engineering 微信公众号 【细说软件工程】《软件工程》Software Engineering 努力,不一定成功;不努力,一定不成功。

来源:谁吃薄荷糖

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月11日
下一篇 2020年11月12日

相关推荐