软件工程复习整理

2021年10月4日 26点热度 0条评论 来源: qq_29796271

软件工程复习整理

第一章:软件工程概述

软件:是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合

软件危机:

       对软件开发成本和进度的估计常常不准确

       用户对“已完成的”软件系统不满意的现象常常发生

       软件产品的质量往往靠不住

       软件通常没有适当的文档资料

       软件成本在计算机系统总成本中所占的比例逐年上升

       软件开发生产率提高的速度跟不上软件普及速度

产生软件危机的原因:

       软件规模越来越大,结构越来越复杂

       软件开发管理困难而复杂

       软件开发费用不断增加

       软件开发技术落后

       开发工具落后,生产率提高缓慢

什么是软件工程:采用工程的概念、原理、技术和方法来指导软件开发和维护的工程学科,以工程化的原理和方法来解决软件问题。

软件工程的特征:

       软件工程关注于大型程序的构造

       软件工程的中心是控制复杂性

       软件经常变化

       开发软件的效率非常重要

       和谐得合作是开发软件的关键

       软件必须有效地支持它的用户

       在软件工程领域中通常由具有一种文化背景的人替代另一种文化背景的人创造产品。

软件工程基本原理:

       用分阶段的生命周期计划严格管理

       坚持进行阶段评审

       实行严格的产品控制

       采用现代程序设计技术

       结果应能清楚地审查

       开发小组人员应当少而精

       承认不断改进软件工程实践的必要性

软件工程方法学:

       把软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称范型

传统方法学(也称为生命周期方法学或结构化范型。)和面向对象方法学

软件过程:为了获得高质量软件所需完成的一系列任务的框架,规定了完成各项任务的工作步骤

软件生命周期:

       软件定义(问题定义、可行性研究、需求分析)软件开发(总体设计、详细设计、编码、单元测试、综合测试)、运行维护

软件生命周期模型:也称为过程模型,描述了软件过程,规定了把软件的生命周期划分成哪些阶段和各阶段的执行顺序。

瀑布模型

       阶段间具有顺序性和依赖性

       推迟实现的观点

       质量保证的观点

 

瀑布模型的优点:

可强迫开发人员采用规范的方法;

严格规定了每个阶段必须提交的文档;

要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。

 

瀑布模型的缺点:

在软件开发初期,指明用户全部需求是困难的

需求确定后,经过一段时间才得到软件最初版本;

完全依赖规格说明,导致不能满足用户需求。

适用中小型项目。

快速原型模型

       快速建立起来可在计算机上运行的程序,用户试用提出意见并修改。用户确认原型内容后,开发人员据此书写规格说明文档,并据此开发

快速原型模型的优点:

满足用户需求程度高;

用户的参与面广;

返工现象少

快速原型模型的缺点:不适用大型软件的开发

适用于小型项目。

增量模型

       把软件产品作为一系列增量结构来设计、编码、集成和测试。每个构建由相互作用的模块构成,

增量模型的优点:

短期内可以交付满足部分用户需求的功能产品;

逐步增加功能可以让用户去适应新产品;

开放式的软件可维护性比较好;

开始第一构件前,已经完成需求说明。

增量模型的缺点:

对现有产品功能造成破坏;

意义上的矛盾

适用于中型软件的开发

螺旋模型

       使用原型及其他方法来降低风险。可视为在每个阶段之前都增加了风险分析过程的快速原型模型。

螺旋模型的优点:

集成了瀑布模型、快速原型模型、增量模型的优点;

支持用户需求动态变化;

需求分析与软件实现紧密联系相互依赖;

原型作为刑式的可执行的需求规格说明,即利用用户和开发人员共同理解,又可作为后续开发的基础;

为用户参与决策提供方便;

提高目标软件的适应能力;

降低风险;

在大型软件开发过程中充分发挥优势。

螺旋模型的缺点:

迭代次数影响开发成本,延迟提价时间;

找不到关键改进点,人才、物力、财力时间引起无谓消耗;

成于风险分析,败于风险分析。

适用于内部开发的大规模软件项目。

喷泉模型

       面向对象软件开发过程迭代和无缝的特征

       因为使用面向对象方法学开发软件时,各个阶段都使用统一的概念和表示符号,因此,整个开发过程都是吻合一致的,或者说是无缝连接的,这自然就很容易实现各个开发步骤的反复多次迭代,达到认识的逐步深化,而喷泉模型的则很好的体现了面向对象软件开发过程迭代和无缝的特性。

Rational统一过程 “最佳实践”

       迭代式开发

       管理需求

       使用基于构件的体系结构

       可视化建模

       验证软件质量

       控制软件变更

适用于:·大型的需求不断变化的复杂软件系统项目

RUP软件开发生命周期

       二维生命周期模型,核心工作流和时间

敏捷过程与极限编程

       适用于:适用于商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束。

微软过程

       规划阶段、设计阶段、开发阶段、稳定阶段、发布阶段

适用于:商业环境下具有有限资源和有限开发时间约束的项目的软件过程模式。

微软过程模型:

       每一个生命周期发布一个递进的软件版本,各个生命周期持续、快速地迭代循环

 

第二章:可行性研究

可行性研究的目的:用最小的代价在尽可能短的时间内确定问题是否能够解决

可行性研究的三个方面:技术、经济、操作

可行性研究过程:1、复查系统的规模和目标· 2、研究目前正在使用的系统 3、导出新系统的高层逻辑模型4、进一步定义问题5、导出和评价可供选择的解法6、推荐行动方针7、草拟开发计划8、书写文档提交审查

数据字典的作用:在软件分析和设计的过程中给人们提供关于数据的描述信息

数据定义的内容:名字、别名、描述、定义、位置

“定义”:表明数据元素组成数据的方式 =等价于,+和,[ ]或,{ }重复,( )可选。例:7{字符}8 表示这一项由7个或8个字符组成

成本估计:代码行技术、任务分解技术

成本/效益分析的方法:1、货币的时间价值2、投资回收期3、纯收入4、投资回收率

  北京某高校可用的电话号码有以下几类:校内电话号码由4位数字组成,第一位数字不是0.校外电话又分为本市电话和外地电话两类。

拨校外电话需要先拨0,若是本市电话则接着拨8位数字(第一位不是0),若是外地电话则拨3位区码后再拨8位电话号码(第一位不是0)。

  答:

  电话号码=[校内电话号码|校外电话号码]

  校内电话号码=非零数字+3位数字

  校外电话号码=[本市号码|外地号码]

  本市号码=数字零+8位数字

  外地号码=数字零+3位数字+8位数字

  非零数字=[1|2|3|4|5|6|7|8|9]

  数字零=0

  3位数字=3{数字}3

  8位数字=非零数字+7位数字

  7位数字=7{数字}7

  数字=[0|1|2|3|4|5|6|7|8|9]

  其中,[ ]意思是或,从校内电话号码或校外电话号码中选择一个;{ }表示重复,两边的数字表示重复次数的下限和上限;=意思是定义为;+意思是和,连接两个分量。  

第三章 需求分析

为什么要进行需求分析:开发出真正满足用户需求的软件产品

需求分析的任务:确定对系统的综合要求,包括:1、功能要求2、性能要求3、可靠性和可用性需求4、出错处理需求5、接口需求6、约束7、逆向需求(就是明确哪些是不用做的)8、将来可能提出的要求。(以上八点可以用来回答通常对软件有哪些需求)分析系统的数据要求。导出系统的逻辑模型。修正系统的开发计划

与用户沟通获取需求的方法:访谈(正式访谈和非正式,正式访谈系统分析员事先准备具体问题,非正式访谈开放式问题,鼓励被访谈者说出真实想法)、面向数据流自顶向下求精、简易的应用规格说明技术、快速建立软件原型

分析建模于规格说明:用ER图建立数据模型,描述数据对象及数据对象之间的关系。数据流图,描绘当数据在软件系统中移动时被变换的逻辑过程,建立功能模型的基础。状态转换图:指明作为外部事件结果的系统行为。

第一范式:每个属性值都是原子值

第二范式:每个非关键字属性仅由关键字确定

第三范式:一个非关键字属性值不依赖于另一个非关键字属性值

层次方框图:用一系列多层次的矩形描绘数据的层次结构

Warnier图:用大括号表示

IPO图:inàprocessàout 三个框,分别表示输入、处理和输出。三个框里面写内容,三个框之间用箭头连接

验证软件需求:一致性、完整性、现实性、有效性

 

第五章:总体设计

两个阶段:系统设计阶段、结构设计阶段

总体设计的步骤:1、设想供选择的方案2、选取合理方案3、推荐最佳方案4、功能分解5、设计软件结构6、设计数据库7、制定测试计划8、书写文档9、审查和复审

总体设计最终文档需要包含的内容:1、系统说明2、用户手册3、测试计划4、详细的实现计划5、数据库设计结果

总体设计的设计原理:模块化、抽象、逐步求精

信息隐藏和局部化

模块独立:耦合:(数据耦合<控制耦合<特征耦合<公共环境耦合<内容耦合)

内聚:(功能内聚<顺序内聚<通信内聚<过程内聚<时间内聚<逻辑内聚<偶然内聚)

启发规则:1、改进软件结构提高软件独立性2、模块规模应该适中3、深度、宽度、扇出和扇入都应该适当4、模块的作用域应该子啊控制域之内5、力争降低模块接口的复杂程度6、设计单入口和单出口的模块7、模块功能应该可以预测

描述软件结构的图形工具:层次图和HIPO图结构图 HIPO就是层次图加上输入/处理/输出图

面向数据流的设计方法概念:把信息流映射成软件结构,信息流的类型决定了映射的方法。有两种类型:变换流和事务流

变换流:信息以“外部世界”的方式进入软件系统,经过处理后再以“外部世界”的方式离开系统

事务流:接受输入的数据(输入数据又称为事务),分析每个事务以确定它的类型,根据事务的类型选取一条活动的通路

变换分析:把具有变换流特点的数据流图按预先确定的模式映射成软件结构

变换分析的步骤:1、复查基本系统模型2、复查并精化数据流图3、确定数据流图具有变换特性还是事务特性(一般都是变换流)4、确定输入流和输出流的边界,孤立出变换中心5、完成“第一级分解”。最顶层控制模块Cm,下面三个模块Ca输入信息控制模块,Ct变换中心控制模块,Ce输出信息控制模块。6、完成“第二级分解”把数据流图中的每个处理映射为软件结构中的一个模块7、进一步精化

事务分析:将数据流图分区为接收分支和发送分支,两个分支连接在总控的下面。其中接收分支由一个“调度“模块统领

设计优化:P113

 

第六章:详细设计

结构程序设计:仅通过顺序、选择、循环三种基本结构进行连接,每个代码块只有一个入口和一个出口,尽可能少使用GOTO语句,

人机界面设计需要考虑的问题:1、系统相应时间2、用户帮助设施3、出错信息处理4、命令交互

人机界面设计指南:一般交互、数据显示、数据输入

盒图 PAD图 判定表(选哪一个功能是用x表示的) 判定树 过程设计语言PDL

面向数据结构的设计方法:改进的Jackson图(I表重复,S表选择)

程序复杂度的定量度量:McCabe方法,用流图计算环形复杂度

第七章 实现

编码风格:程序内部的文档 数据说明 语句构造 输入输出 效率

软件测试的目标和定义:1、测试是为了发现程序中的错误而执行程序的功能 2、好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案 3、成功的测试是发现了至今为止尚未发现错误的测试

软件测试准则:追溯到用户需求、在测试之前制定测试计划、Pareto原理(80%错误是由20%的模块造成的,寻找可疑模块)、从小规模测试开始、穷举测试是不可能的、第三方从事测试工作

测试方法:黑盒 白盒

测试步骤:模块测试、子系统测试、验收测试、平行运行

单元测试

集成测试

确认测试:Alpha和Beta测试:Alpha测试由用户在开发者的场所进行,在开发者对用户的指导下进行测试(受控环境)

Beta测试由软件的最终用户们在一个或多个客户场所进行。Beta测试是软件在开发者不能控制的环境中的“真实”应用。用户记录问题并报告给开发者。

白盒测试:语句覆盖 判定覆盖 条件覆盖(判定表达式中每个条件都取到两个不同的结果) 判定/条件覆盖(同时满足判定和条件覆盖) 条件组合覆盖(每个判定表达式中条件的组合都至少出现一次) 点覆盖(程序的执行路径至少经过流图的每个点一次) 边覆盖 路径覆盖

基本路径测试:1、画出流图 2、计算流图的环形复杂度 3、确定线性独立路径的基本集合 4、设计可强制执行基本集合中每条路径的测试用例

黑盒测试:等价划分 边界值分析 错误推测

调试途径:蛮干法 回溯法 原因排除法

软件可靠性:程序在给定时间间隔内,按照规格说明书规定成功地运行的概率

软件可用性:程序在给定时间点,按照规格说明书规定成功地运行的概率

第八章:维护

软件维护的定义:

改正性维护 用户发现并报告程序错误,维护人员诊断和改正错误。

      适应性维护 为了使软件的活动和环境适当地配合而进行的修改软件的活动

完善性维护 满足用户增加新功能或修改已有功能或提出一般性的改进意见而进行的维护

预防性维护 改进未来的可维护性或可靠性

软件维护分为结构化维护(有完整的软件配置)和非结构化维护(软件配置的唯一成分使程序代码)。

软件维护的过程:1、维护组织2、维护报告3、维护的事件流4、保存的维护记录5、评价维护活动

决定软件可维护性的因素:1、可理解性2、可测试性3、可修改性4、可移植性5、可重用性

文档:分为用户文档和系统文档。文档需要满足的要求:1、描述如何使用这个系统2、描述怎样安装和管理这个系统3、描述系统的需求和设计4、描述系统的实现和测试,以便使系统成为可维护的

用户文档的内容:1、功能描述2、安装文档3、使用手册4、参考手册5、操作员指南

可维护性复审

预防性维护:把今天的方法学应用到昨天的系统上,以支持明天的需求

第九章 面向对象方法学

面向对象方法学的要点:1、认为客观世界是由各种对象组成的,软件中任何元素都是对象,复杂对象是由简单对象构成的2、把所有对象划分为各种类3、按照子类和父类的关系,把若干个对象类组成一个层析节后的系统4、对象之间仅能通过传递消息互相联系

面向对象方法学的优点:1、与人类的思维方式一致2、稳定性好3、可重用性好4、较易开发大型软件产品5、可维护性好

面向对象的概念 对象的定义:对象是具有相同状态的一组操作的集合

对象的特点:1、以数据为中心2、对象是主动的3、实现了数据封装4、本质上具有并行性5、模块独立性好

面向对象建模:

对象模型:类图,用一个框表示一个类,框里面从上到下依次写(类名、属性、服务(可以不全,就写一个类名))

表示关系的符号:P218

活动模型:状态图。初始状态用黑点表示,通过“初始事件“箭头连接到其他状态。状态之间使用”事件表达式“相连,最终通过”结束事件“连接到结束状态,结束状态使用被圆圈圈起来的黑点表示。每一个状态包含“状态名”、“状态变量”、“活动表”三部分组成。

功能模型:用例图P225

第十一章 面向对象设计

OOA:面向对象分析

OOD:面向对象设计

面向对象设计的准则:模块化、抽象、信息隐藏、弱耦合、强内聚、可重用

启发规则:1、设计结果应该清晰易懂2、一般-特殊结构的深度应该适当3、设计简单的类4、使用简单的协议5、使用简单的服务6、把设计变动减至最小

软件重用

提高效率的几项技术:1、增加冗余关联以提高访问效率2、调整查询次序3、保留派生属性

为什么说类构件是目前比较理想的可重用软构建?它由哪些重用方式:

类构建具备可重用软件应有的特定:独立、可塑、接口清晰(文档详尽)

重用的方式有:实例重用、继承重用和多态重用

软件重用的意义:使用重用技术可以减少软件开发活动中大量的重复性工作,这样就能够提高软件的生产率,减低开发成本,缩短开发周期。同时,由于软部件大都经过严格的质量认证,并在实际运行环境中得到检验,因此,重用软部件有助于改善软件质量。此外,大量使用软部件,软件的灵活性和标准化程度也渴望得到提高。

第十二章 面向对象实现

面向对象语言的优点:1、一致的表示方法2、可重用性3、可维护性

面向对象语言的技术特点:1、支持类于对象概念的机制2、实现整体-部分(即聚集)结构的机制3、实现一般-特殊(即泛化)结构的机制4、实现属性和服务的机制5、类型检查6、类库7、效率8、持久保存对象9、参数化类10、开发环境

选择面向对象语言的因素:1、将来能否占主导地位2、可重用性3、类库和开发环境

提高可重用性:1、提高方法的内聚2、减小方法的规模3、保持方法的一致性4、把策略与实现分开5、全面覆盖6、尽量不使用全局信息7、利用继承机制

提高可扩充性

提高健壮性

第十三章 软件项目管理

代码行技术、功能点技术

进度计划:甘特图、工程网络(关键路径)

人员组值:民主制程序员组、主程序员组、现代程序员组

质量保证:软件质量保证措施:技术复审、走查、审查、程序正确性证明

软件配置管理:

软件配置项:计算机程序、描述计算机程序的文档、数据

基线:已经通过了正式复审的规格说明或中间产品,它可作为进一步开发的基础并且只有通过正式的变化控制过程才能改变它

软件配置管理过程:1、标识软件配置中的对象2、版本控制3、变化控制4、配置审计5、状态报告

能力成熟度模型:初始级、可重复级、已定义级、已管理级、优化级

上述模型的目的:引导软件开发机构不断识别出其软件过程的缺陷,并指出哪些应该改进,但是并不提供改进的具体措施

什么是软件质量,简述它和软件可靠性的关系:软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业的软件产品都应该具有的隐含特征一致的程度。

配置审计与技术复审有何不同:正式的技术复审关注被修改后的配置对象的技术正确性。复审者审查该对象那个以确定它与其他软件配置项的一致性,并检查是否有遗漏或副作用,软件配置审计通过评估配置对象的那些通常不在复审过程中考虑的特性,而成为对正式技术复审的补充。

 

    原文作者:qq_29796271
    原文地址: https://blog.csdn.net/qq_29796271/article/details/95034211
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。