侧边栏壁纸
博主头像
iffyoO

一时的选择

  • 累计撰写 9 篇文章
  • 累计创建 7 个标签
  • 累计收到 1 条评论

软件设计师—软件工程基础知识

iffyoO
2024-01-27 / 0 评论 / 0 点赞 / 342 阅读 / 6,731 字
温馨提示:
本文最后更新于 2024-01-27,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

软件工程基础知识

软件生存周期

  同任何事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程,我们称其为计算机软件的生存周期。通常,软件生存周期包括可行性分析、项目开发计划、需求分析、设计(概要设计和详细设计)、编码、测试、维护等活动。

 (1)可行性分析:由软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。

 (2)需求分析:在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。主要解决“做什么”的问题。

 (3)概要设计:主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等。

 (4)详细设计:是对每个模块完成的功能进行具体描述,要把功能转变为精确的、结构化的过程

 (5)程序编码:将软件设计的结果转换成计算机可运行的程序代码。在程序编码时,必须要制定统一、符合标准的编写规范,以保证程序的可读性、易维护性,提高程序的运行效率。

 (6)软件测试:在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正

 (7)维护:在软件开发完成并投入使用后,由于各种原因,软件会不能继续适应用户的要求。延续软件的使用寿命,就要对软件进行维护,包括纠错性维护和改进性维护两个方面。

能力成熟度模型(CMM)

  软件能力成熟度模型(CMM)将软件组织的过程能力分成5个成熟度级别:初始级、可重复级、已定义级、已管理级和优化级。按照成熟度级别由低到高,软件开发生产精度越来越高,每单位工程的生产周期越来越短

 (1)初始级:软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。

 (2) 可重复级:建立了基本的项目管理过程来跟踪费用、进度和功能特性,制定了必要的过程纪律,能重复早先类似应用项目取得的成功

 (3)已定义级:已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件。

 (4)已管理级:收集对软件过程和产品质量的详细度量,对软件过程和产品都有定量的理解和控制

 (5)优化级:过程的量化反馈和先进的新思想、新技术促使过程不断改进。

能力成熟度模型(CMMI)

1、阶段式模型:结构类似于CMM,它关注组织的成熟度。有5个成熟度等级。

  初始的:过程不可预测且缺乏控制。

  已管理的:过程为项目服务。

  已定义的:过程为组织服务。

  定量管理的:过程已度量和控制。

  优化的:集中于过程改进。

2、连续式模型:关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级。CMMI中包括6个过程域能力等级,等级号为0~5。

  CL0 (未完成的):过程域未执行或未得到CL1中定义的所有目标。

  CL1(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。

  CL2 (已管理的):其共性目标集中于已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都被监控、控制和评审。

  CL3 (已定义级的):其共性目标集中于已定义的过程的制度化。过程是按照组织的剪裁指南从组织的标准过程集中剪裁得到的,还必须收集过程资产和过程的度量,并用于将来对过程的改进。

  CL4 (定量管理的):其共性目标集中于可定量管理的过程的制度化。使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的定量目标作为管理准则。

  CL5 (优化的):使用量化(统计学)手段改变和优化过程域,以满足客户要求的改变和持续改进计划中的过程域的功效。

统一过程模型

  统一过程(UP)模型:是一种“用例和风险驱动,以架构为中心,迭代并且增量”的开发过程,由UML方法和工具支持。迭代的意思是将整个软件开发项目划分为许多个小的“袖珍项目”,每个“袖珍项目”都包含正常软件项目的所有元素:计划、分析和设计、构造、集成和测试,以及内部和外部发布。

  统一过程包括4个阶段:初始阶段、精化阶段、构建阶段、移交阶段。

 (1)初始阶段一生命周期目标。

 (2)精化阶段一生命周期架构。

 (3)构建阶段一初始运作功能。

 (4)移交阶段一产品发布。

瀑布模型

  瀑布模型是将软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型,包括需求分析、设计、编码、测试、运行与维护。它规定了由前至后、相互衔接的固定次序,如同瀑布流水逐级下落。

  瀑布模型以文档作为驱动,适合于软件需求很明确的软件项目的模型!!!

演化模型

  在获取一组基本的需求后,通过快速分析构造出该软件的一个初始可运行版本,这个初始的软件通常称为原型,然后根据用户在使用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本。重复这一过程,最终可得到令用户满意的软件产品。

增量模型

  增量模型融合了瀑布模型的基本成分和原型实现的迭代特征,它假设可以将需求分段为一系列增量产品,每一增量可以分别开发。当使用增量模型时,第1个增量往往是核心产品,客户对每个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。

螺旋模型

  螺旋模型将瀑布模型和原型模型结合起来,加入了两种模型均忽略的风险分析,弥补了这两种模型的不足。螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,从而做出应有的反应。同时,该模型特别适合用于庞大、复杂并且具有高风险的系统。(也适用于用户需求不清、需求经常变化的情况

V模型

  V模型是瀑布模型的一个变体,描述了质量保证活动和沟通、建模相关活动以及早期构建相关的活动之间的关系。

喷泉模型

  喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于采用对象技术的软件开发过程,具有迭代和无间隙特性。迭代意味着模型中的开发活动常常需要重复多次,在迭代中不断完善软件系统。无间隙是指在开发活动之间不存在明显的边界,允许开发活动交叉、迭代地进行。

基于构件的开发模型

   基于构件的开发模型:是指利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品软件构件。基于构件的开发模型本质上是演化模型,需要以迭代方式构件软件,不同之处在于采用预先打包的软件构件开发应用系统。

软件开发方法

 (1)结构化方法:由结构化分析、结构化设计、结构化程序设计构成,它是一种面向数据流的开发方法。总的指导思想是自顶向下、逐层分解,基本原则是功能的分解与抽象。特别适合于数据处理领域的问题,但是不适合解决大规模、特别复杂的项目,且难以适应需求的变化。

 (2)Jackson方法:这是一种面向数据结构的开发方法。以数据结构为驱动,适合于小规模的项目。当输入数据结构与输出数据结构之间没有对应关系时,难以应用此方法。

 (3)原型化方法:比较适合于用户需求不清、业务理论不确定、需求经常变化的情况。当系统规模不是很大也不太复杂时,采用该方法是比较好的。

 (4)面向对象开发方法:包括面向对象分析、面向对象设计和面向对象实现,采用统一建模语言(UML)。

敏捷开发方法

  敏捷开发的总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。敏捷过程的典型方法很多,主要有极限编程、水晶法、并列争球法、自适应软件开发几种。

 (1)极限编程(XP):XP是一种轻量级(敏捷)、高级、低风险、柔性、可预测的、科学的软件开发方式。主要就是由下图中的4大价值观、5大原则、12个最佳实践组成。

 (2)水晶法(Crystal):水晶法认为每一个不同的项目都需要一套不同的策略、约定和方法论,认为人对软件质量有重要的影响,因此随着项目质量和开发人员素质的提高,项目和过程的质量也随之提高。

 (3)并列争球法(Scrum):使用迭代的方法,其中,把每30天一次的迭代称为一个“冲刺”,并按需求的优先级别来实现产品。

第25页-14

软件需求分析

20200830091241950

 (1)功能需求:考虑系统要做什么,在何时做,在何时如何修改或升级。

 (2)性能需求:考虑软件开发的技术性目标。例如:存储容量限制、执行速度、响应时间及吞吐量。

 (3)用户或人的因素:考虑用户的类型。

 (4)环境需求:考虑未来软件应用的环境,包括硬件和软件。对硬件设备的需求包括:机型、外设、接口、地点、分布、湿度、磁场干扰等。对软件设备的需求包括:操作系统、数据库、网络等。

 (5)界面需求:考虑来自其他系统的输入,到其他系统的输出,对数据格式的特殊规定,对数据存储介质的规定。

 (6)文档需求:考虑需要哪些文档,文档针对哪些读者。

 (7)数据需求:考虑输入输出数据的格式,接收、发送数据的频率,数据的准确性和精度,数据流量,数据需保持的时间。

 (8)资源使用需求:考虑软件运行时所需要的数据、其他软件、内存空间等资源;软件开发、维护所需的人力、支撑软件、开发设备等。

 (9)安全保密需求:考虑是否需要对访问系统或系统信息加以控制,隔离用户数据的方法,用户程序如何与其他程序和操作系统隔离以及系统备份要求等。

 (10)可靠性需求:考虑系统的可靠性要求,系统是否必须检测和隔离错误;出错后,重启系统允许的时间等。

RUP

  RUP应用了角色、活动、制品和工作流4种重要的模型元素,其中

 (1)角色表述“谁做”

 (2)制品表述“做什么”

 (3)活动表述“怎么做”

 (4)工作流表述“什么时候做”。

COCOMO

  COCOMO用3个不同层次的模型来反映不同程度的复杂性,它们分别为:
 (1)基本模型 (Basic Model) : 是一个静态单变量模型,它用一个以已估算出来的源代码行数 (LOC)为自变量的函数来计算软件开发工作量。
 (2)中级模型 (Intermediate Model) : 则在用LOC为自变量的函数计算软件开发工作量的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算。
 (3)详细模型 (Detailed Model) : 包括中级COCOMO型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对软件工程过程中分析、设计等各步骤的影响。

软件设计

  高内聚、低耦合、提高模块的独立性

  1、内聚

第30页-19

 (1)功能内聚:这是最强的内聚,指模块内的所有元素共同作用完成一个功能,缺一不可。

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

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

 (4)过程内聚:指一个模块完成多个任务,这些任务必须按指定的次序执行。

 (5)瞬时内聚(时间内聚):把需要同时执行的动作组合在一起形成的模块,所包含的任务必须在同一时间间隔内执行。

 (6)逻辑内聚:指模块内执行若干个逻辑上相似的功能。

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

内聚性:功能内聚>顺序内聚>通信内聚>过程内聚>时间内聚>逻辑内聚>偶然内聚(内聚性越高,模块独立性越强)

模块独立性:功能内聚>顺序内聚>通信内聚>过程内聚>时间内聚>逻辑内聚>偶然内聚

  2、耦合

  第31页-20

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

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

 (3)标记耦合:指两个模块之间传递的是数据结构。

 (4)控制耦合:指一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择地执行模块内的某一功能。

 (5)外部耦合:模块间通过软件之外的环境联结(如I/O将模块耦合到特定的设备、格式、通信协议上)。

 (6)公共耦合:指多个模块都访问同一个公共数据环境。

 (7)内容耦合:当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部的耦合。

耦合性:无直接耦合<数据耦合<标记耦合<控制耦合<外部耦合<公共耦合<内容耦合(耦合性越低,模块独立性越强)

模块独立性:无直接耦合>数据耦合>标记耦合>控制耦合>外部耦合>公共耦合>内容耦合

软件测试

  1、测试原则与类型

  20200830095302398

  2、测试用例设计

  20200830100359453

  3、测试阶段

  20200830100359453

McCabe复杂度

  McCabe复杂性度量又称为环路度量,它认为程序的复杂性很大程度上取决于控制的复杂性。单一的顺序程序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。根据图论,在一个强连通的有向图G中,环的个数V(G)由以下公式给出:

V(G)=mn+2V(G) = m - n + 2

  V(G)为有向图G中的环路数, m为图G中弧的个数, n为图G中的节点数。

20200830102853378

软件维护

  20200830103526580

 (1)改正性维护:改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。

 (2)适应性维护:使应用软件适应信息技术变化和管理需求变化而进行的修改。

 (3)完善性维护:为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。

 (4)预防性维护:为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。

时间管理(Gantt图、PERT图)

 (1)Gantt图:能够清晰地描述每个任务从何时开始、到何时结束,任务的进展情况以及各个任务之间的并行性。但是它不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也不能反映计划中有潜力的部分。

 (2)PERT图:不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了人物之间的依赖关系,即哪些任务完成后才能开始另外一些任务,以及如期完成整个工程的关键路径。但是它不能反映任务之间的并行关系。

  20200830112312464

时间/事件 1 2 3 4 5 6 7 8 9
最早开始时间 0 2 2 0 4 4 9 9 15
最晚开始时间 0 2 9 6 4 10 9 11 15

由上图分析,以及Gantt图和PERT图的相关概念,可知,第一空选D,第二空选C。

软件质量特性

  软件质量模型由3个层次组成:第一层是质量特性,第二层是质量子特性,第三层是度量指标。该模型的质量特性和质量子特性的含义如下。

 1、功能性:与一组功能及其指定的性质有关的一组属性。这里的功能是指满足明确或隐含需求的那些功能。

 (1)适合性:与规定任务能否提供-一组功能以及这组功能的适合程度有关的软件属性。

 (2)准确性:与能否得到正确的或相符的结果或效果有关的软件属性。

 (3)互用性:与同其他指定系统进行交互操作的能力有关的软件属性。

 (4)依从性:使软件服从有关的标准、约定、法规及类似规定的软件属性。

 (5)安全性:与避免对程序及数据的非授权的故意或意外访问的能力有关的软件属性。

 2、可靠性:与在规定的一段时间内和规定的条件下,软件维持其性能水平的能力有关的一组属性。

 (1)成熟性:与由软件故障引起失效的频度有关的软件属性。

 (2)容错性:与在软件错误或违反指定接口情况下,维持指定的性能水平的能有关的软件属性。

 (3)易恢复性:与在故障发生后重新建立其性能水平并恢复直接受影响数据的能力,以及为达此目的所需的时间有关的软件属性。

 3、易使用性:与为使用所需的努力和由一组规定的或隐含的用户对这样的使用所做的个别评价有关的一组属性。

 (1)易理解性:与用户为理解逻辑概念及其应用范围所需努力有关的软件属性。

 (2)易学性:与用户为学习软件应用所需努力有关的软件属性。

 (3)易操作性:与用户为进行操作或控制所需努力有关的软件属性。

 4、效率:与在规定条件下,软件的性能水平与所用资源量之间的关系有关的一组属性。

 (1)时间特性:与软件执行其功能时的响应和处理时间以及吞吐量有关的软件属性。

 (2)资源特性:与软件执行其功能时所使用的资源量以及使用资源的持续时间有关的软件属性。

 5、可维护性:与进行规定的修改所需努力有关的一组属性。

 (1)易分析性:与为诊断缺陷或失效原因,或为判定待修改的部分所需努力有关的软件属性。

 (2)易改变性:与进行修改、调试或适应环境变化所需努力有关的软件属性。

 (3)稳定性:与修改造成的未预料后果的风险有关的软件属性。

 (4)易测试性:与为 确认经修改软件所需努力有关的软件属性。

 6、可移植性:与软件从一种环境转移到另一种环境的能力有关的一组属性。

 (1)适应性:与软件无须采用有别于为该软件准备的处理和手段就能适应规定的环境有关的软件属性。

 (2)易安装性:与在指定环境下安装软件所需努力有关的软件属性。

 (3)一致性:使软件服从与可移植性有关的标准或约定的软件属性。

 (4)易替换性:与软件在该软件环境中用来替代指定的其他软件的可能和努力有关的软件属性。

0

评论区