软件工程复习纲要
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章软件工程复习纲要
第二章、概述
1、软件危机的概念及主要原因
(1)软件危机是指在计算机软件开发和维护时所遇到的一系列问题。
(2)软件危机产生的原因:软件规模、方法、技术、软件开发人员;客观:规模,环境,需求变化;主观:开发技术,管理。
软件产品规模庞大,开发和维护带来客观困难
软件使用同期相对较长,期间可能出现开发没料到的问题,需要及时维护
软件开发技术落后,生产方式和开发工具落后
软件开发人员忽视软件需求分析的重要性,轻视软件维护
2、软件、软件工程、软件工程学的概念
(1)软件是指计算机程序及其有关的数据和文档。
(2)软件工程(softwareengineering)是计算机软件开发、运行、维护和隐退的系统方法;是指导计算机软件开发和维护的工程学科;软件工程的目标是在规定的时间、开发费用内,开发满足用户需求的高质量的软件。
(3)软件工程学的主要内容是软件开发技术(包含软件工程方法学、软件工具和软件开发环境)和软件工程管理(包含软件工程经济学和软件管理学)。
更多内容请见P.4;
3、软件生命周期及生命周期各阶段的任务
(1)软件生命周期指从设计软件产品开始到产品不能使用为止的时间周期。
包括:定义,开发,使用,维护,淘汰。
(2)软件生命周期各阶段的任务
软件计划、软件开发和软件运行维护三个时期。
软件计划时期:问题定义、可行性研究、需求分析
软件开发时期:软件概要设计、软件详细设计、软件实现、综合测试等阶段。
软件运行维护时期:需要不断地进行维护,使软件持久满足用户需要
4、软件开发模型的几种模型及各模型的特征
(1)瀑布模型(WaterfallModel):(规范的、文档驱动方法。
开发阶段按顺序进行,适合需求分析较明确、开发技术较成熟的情况。
)特点:阶段间具有顺序性和依赖性;推迟实现编码;质量保证。
(2)快速原型模型:(快速原型系统让用户试用并收集用户意见。
获取用户真实需求。
)特点:软件产品的开发基本上是线性顺序进行的;能减少软件的总成本,缩短开发周期。
(3)增量模型:(优点是能在早期向用户提交部分产品和易于维护,缺点是软件的体系结构必须是开放的。
)特点:开发过程中自始自终都有用户参与
(4)喷泉模型:开发过程有分析、系统设计、软件设计和实现4个阶段,各阶段相互重叠,反映软件过程并行性;以分析为基础,反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗;强调增量开发,整个过程是一个迭代的逐步提炼的过程。
(适合面向对象方法)(5)螺旋模型:适用于大规模内部开发项目,分析风险和排除风险。
第二章统一过程:适用于面向对象方法,使用统一建模语言UML。
采取用例驱动和架构优
先策略。
迭代增量的建造方法。
第三章、软件计划(SA)
1、可行性研究的内容和目的
可行性研究内容包括:技术可行性、经济可行性、社会因素方面的可行性,目的是通过对用户详细的调查研究,确定所开发软件的系统功能、性能、目标、规模,该系统同其他系统或其他软件之间的相互关系。
2、需求分析的任务,及其要完成三个模型
(1)需求分析的基本任务是研究用户对系统的确切要求,是理解、分析和表达“系统必须做什么”的过程。
(2)需求分析具体任务包括:确定目标系统的具体要求、建立目标系统的逻辑模型、书写“软件需求规格说明”、修正系统的开发计划、制定初步的系统测试计划、编写初步的用户手册、编写数据要求说明书。
(3)三个模型:数据模型、功能模型和行为模型。
3、数据流图(DFD)的画法(P.30),及数据字典(DD)的使用(P.36)。
(1)数据流图的基本符号
数据字典符号
状态图
总结需求分析的图形工具:实体-关系图、数据流图、状态转换图、数据字典、层次图,Warnier 图,PO图。
4、课后作业一(某房地产经营管理系统)
(1)DFD图
房地产经营管理系统DFD图
(2)数据字典:
房产信息={房产编号+地址+楼房名称+楼房总数+总房间数}
客户基本情况={客户号+姓名+身份证号}
房间租(售)信息={房产编号+楼房名称+房间号+房间层次+朝向+规格+面积+出租单价+出售单价+租售情况+客户号}
房产租(售)资金回收情况={房产编号+楼房名称+房间号+客户号+[租|售]+金额+日期}
记录存储规则:该文件按两种方法排序,一按客户号排序,二按”房产编号+楼房名称+房间号”。
课后作业2(火车订票系统)
火车订票
系统DFD图
数据字典:
列车运行目录={车次号+始发站+终点站+1{途经站}+软卧车厢数+硬卧车厢数+一个软卧车
厢数+发车日期}
列车铺位信息={车次号+车厢号+铺位号+[上铺|中铺|下铺]+价格+[1=已售|0=未售]}
旅客订票信息={旅客号+定票日期+预定车票日期+[0=票未取|1=票已取]+车次号+车厢号+铺
位号+[上铺|中铺|下铺]+价格}
第三章、结构化设计(SD)
1、概要设计的任务
概要设计的主要任务是确定设计方案、软件结构设计、数据文件设计、制定测试计划、书写概要设计文档和复审。
2、模块、模块化的概念,模块设计启发规则、评价模块风割好坏的标准
(1)模块:又称构件,是能够单独命名并独立地完成一定功能,独立地设计、编制、调试、查错、修改和维护的程序语句的集合。
(2)模块化:把系统按照一定的规则分割成分割成能完成独立功能的模块,明确规定各模块及其输入输出规格,使模块的界面不会产生混乱。
(3)模块设计启发规则:
✧尽力提高模块独立性:高内聚、低耦合
✧注意模块的可靠性、通用性、可维护性、简单性
✧模块的大小应适中规模
✧模块的深度、宽度、扇出和扇入应适当,通常设计得较好的软件结构,顶层扇出高,中间扇出较少,下层调用公用模块。
✧模块接口要简单、清晰
(4)评价模块风割好坏的标准:模块的大小、模块之间的联系程度(耦合性)、模块内元素联系程度(内聚性)、模块信息的隐蔽程度。
3、耦合的几种定义
✧耦合(Coupling)是模块之间依赖程度的度量。
✧数据耦合:模块间通过参数传递基本类型的数据。
✧控制耦合(中等程度耦合):两个模块之间传递的信息中有控制信息。
✧特征耦合:被调用模块可以使用数据多于实际需要的数据。
✧公共耦合:两个或多个模块都能够存取同一公共数据环境,包括变量、公共内存缓冲区、物理设备。
✧内容耦合:下列情况之一会产生内容耦合
➢某个模块直接访问另一模块的内部数据
➢两个模块有相同的程序段
➢一个模块直接进入另一模块的内部;
➢一个模块有多个入口,即模块有多个功能
4.内聚的几种定义
✧内聚(cohesion):一个模块内各个元素彼此结合的紧密程度。
✧偶然内聚(concidentalcohesion):一个模块完成多个完全不相关的功能。
✧逻辑内聚(logicalcohesion):一个模块完成的任务在逻辑上属于相同或相似的一类任务。
✧时间内聚(temporalcohesion):一个模块完成多个具有时间相关性的功能,需要同时执行。
✧过程内聚:处理元素是相关,必须以特定次序执行。
✧通信内聚(communicationalcohesion):一个模块内包含需多个功能,并且这些功能的完成都依赖于相同的公用数据,即同一数据文件。
各个成分合用同一个数据,或者产生同一个输出数据。
✧顺序内聚(sequentialcohesion):各成分顺序执行,前一个成分的输出是后一个成分的输入。
✧功能内聚(functionalcohesion):所有成分共同完成一个单一的功能。
5、系统结构图(SC)的画法,及与交换型、事务性之间的转换,深度、宽度、扇入、扇出的概念
✧结构图符号(P.55)
✧交换型数据流图、事务型数据流图的画法(P..57)
✧深度:指软件结构中模块的层数。
✧宽度:指软件结构内同一层次的模块数的最大值。
✧扇出:指一个模块所调用的模块数。
✧扇入:指有多少上级模块调用它
6、详细设计的基本任务
✧数据结构设计和数据库设计
✧接口设计
✧过程设计
✧代码设计、输入输出设计、网络设计等
✧编写详细设计说明书、编写软件系统的操作手册等文档
✧复审
7.详细设计的工具的使用
8、流程图、N-S图、问题分析图(PAD图)、判定树、判定表、过程设计语言(PDL)
9、
10、Jacks on方法(P.74)
✧面向数据结构的设计方法有两种:Jackson方法和Warnier方法。
JACKSON方法中数据结构通常表示为树型结构,有顺序、选择和循环三种基本结构
第四章、软件编码和软件测试
1、设计语言:哪些属于/不属于面向对象的语言,设计语言的选择。
✧面向对象语言
➢C++、Smalltalk、Eiffel、Actor、Ada是面向对象型语言
➢ObjectPascal、Objective-C是混合型面向对象语言
➢Java在网络上广泛使用
✧如何选择设计语言
➢主要考虑项目应用领域、软件开发环境、用户的知识以及程序员的知识等
2、程序的注释
✧程序的注释分为两种:序言性注释和功能性注释。
●序言性注释通常安排在每个程序模块的起始部分,它是对程序的整体说明,对于理解程序本身具有引导作用。
●功能性注释嵌入在源程序体内,用以描述其后的语句或程序段的处理功能。
3、测试目标、测试关键问题、测试原则
✧测试目标
➢精心设计测试方案,力争尽可能少的次数,测出尽可能多的错误.
➢程序测试是为了发现错误而执行程序的过程.
➢好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
➢成功的测试是发现了至今为止尚未发现的错误的测试。
✧测试关键问题(查无资料)
✧测试原则
●测试工作不能由设计和编码人员进行;
●测试用例既要有输入数据,也得有对应预期结果
●既有合理数据,也得有不合理数据的处理能力
●检查是否处理了多余的工作
●精心设计测试方案,尽量把测试出软件的错误
●Pareto原理:80%错误可能由程序20%的模块造成
●需求分析阶段,应制定测试计划,甚至测试用例
●长期保存测试用例,直至程序废弃
4、集成测试,存根模块、驱动模块
✧集成测试(IntegrationTesting)也称为联合测试或组装测试,有组装和检验两重意义。
测试者:独立的测试小组;测试策略:测试方法以黑盒法为主。
✧驱动模块
驱动模块(driver):模拟主程序或者调用模块的功能,用于向被测模块传递数据,接收、打印从被测模块返回的数据。
一般只设计一个驱动模块。
✧存根模块
用于模拟那些由被测模块所调用的下属模块的功能。
可以设计一个或者多个模块。
5、黑盒测试,等价类划分法、边界值分析法。
✧黑盒测试。
又称功能测试、数据驱动测试、基于规格说明书的测试,不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。
✧等价类划分方法。
等价类划分属于黑盒测试,根据输入数据和输出数据的特点,将程序输入域划分成若干个部分,即子集,每个子集中的一个典型值在测试中的作用与这一类中所有其他值的作用相同。
因此从每个子集中选取具有代表性的数据作为代表进行测试来发现程序中的错误。
➢有效等价类:符合需求规格及软件设计规定的数据子集。
➢无效等价类:不符合需求规格及软件设计规定的数据子集。
✧边界值分析法
边界值分析也属于黑盒测试,边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件;边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。
6、白盒测试,逻辑覆盖法、因果图法。
✧白盒测试
又称结构测试,其测试用例根据程序内部的逻辑结构和执行路劲来设计的。
✧逻辑覆盖法
逻辑覆盖是以程序的内部逻辑结构为基础的测试用例设计技术,属于白盒测试。
①语句覆盖:设计足够的测试用例,使得程序中的每个语句至少执行一次。
②判定覆盖:设计足够的测试用例,使得程序中每个判定的取“真”分支和取“假”分支至少都执行一次,判定覆盖又称分支覆盖。
③条件覆盖:设计足够的测试用例,使得程序判定中的每个条件能获得各种可能的结果。
④判定/条件覆盖:设计足够的测试用例,使得判定中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。
⑤条件组合覆盖:设计足够的测试用例,使得每个判定中的条件的各种可能组合都至少出现一次。
✧因果图法
因果图适合于描述对于多种输入条件的组合,相应产生多个动作的形式来设计测试用例。
因果图方法最终生成的是判定表。
➢用因果图法生成测试用例的步骤
(1)分析哪些是原因,哪些是结果,给每个原因、结果一个标识。
(2)分析语义,找出原因与结果、原因与原因之间的关系,画出因果图。
(3)在因果图上标明约束或限制条件。
(4)把因果图转化为判定表。
(5)根据判定表每一列设计测试用例。
因果图的基本符号
因
果图的约束符号
第五章、软件维护
1、软件维护和软件可维护性
✧软件维护就是在软件已经交付使用以后对其进行修改,以纠正错误或改进性能和其他属性,使产品适应改变了的环境。
✧软件可维护性是指维护人员对该软件进行维护的难易程度,具体包括理解、改正、改动和改进软件的难易程度。
2、软件维护的种类
✧完善性维护:扩充原有系统的功能,提高系统的性能,提高软件运行的效率,满足用户的实际需要而进行的维护活动。
✧纠错性维护:对在测试阶段未能发现的,在软件投入使用后才逐渐暴露出来的错误的测试、诊断、定位、纠错以及验证、修改的回归测试过程,称为纠错性维护。
✧适应性维护:计算机的软、硬件环境,数据环境在不断的变化,使运行的软件能适应运行环境或者数据的变动而修改软件的过程称为适应性维护。
预防性维护:为了进一步改善软件的可靠性和易维护性,或者为预见的将来软件运行和维护
打下更好的基础而对软件进行修改。
第六和第七章、面向对象方法学与UML及UML的应用
1、面向对象语言的特征
封装、继承、多态
2、面向对象方法的基本概念
✧对象:一个对象代表了一个现实的或虚构的实体,定义一些属性和方法。
✧类:具有相同数据和相同操作的一组相似对象的定义。
✧类与类之间的关系:关联关系、继承关系、依赖关系、细化关系
✧类的关联关系:
✧
类的一般-特殊关系:
✧
类的依赖关系:依赖关系描述的是两个模型元素(类、用例等)之间的语义上的连接关系.
✧类细化关系:是对同一事物不同抽象级别的两种描述。
若元素B是对元素A的更详细的描述,则称元素B细化了元素A,或称元素A细化成元素B。
✧消息:消息,就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。
通常,一个消息由下述三部分组成:接收消息的对象;消息标识符(也称为消息名);输入信息和回答信息。
✧封装:封装就是把对象的属性和方法结合成一个独立的单位,尽可能隐藏对象的内部细节。
✧继承:某些类之间具有结构和行为特征的共性,广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。
✧多态:在父类中定义的属性和服务为其子类继承后,可以具有相同的消息表现出不同的行为。
3、UML建模图(P.127)
✧注释(a)/消息(b)
✧五类九
种图:
●用例图:用于表示系统的功能,并指出各功能的操作者
●静态图:包括类图、对象图及包,表示系统的静态结构
●行为图:包括状态图和活动图,用于描述系统的动态行为和对象之间的交互关系
●交互图:包括顺序图和合作图,用于描述系统的对象之间的动态合作关系
●实现图:包括构件图和配置图,用于描述系统的物理实现
用例图:用例从外部参与者(用户)的角度描述系统的功能,主要元素有用例、执行者和通信联系,用例是一个类,代表一类功能,不是一个功能具体实现;执行者也是一个类
类图和包:类的图标由类名、类的属性、类的操作三部分组成。
类图就是由这些类框和表明类之间关联的连线所组成。
✧对象图:对象是类的一个实例,是具有具体值和行为的一个具体事物。
对象有三种表示方式:对象名:类名;:类名;对象名。
状态图:状态图(StateDiagram)用来描述一个特定对象(通常指某一子系统)的所有可能状态及引起其状态转移的事件。
✧顺序图:用来描述在一个运行的系统中对象之间动态交互情况,并且这些交互要经历一定的时间。
✧活动图:活动图是状态图的一种特殊情况。
不需指明任何事件,只要动作被执行,活动图中的状态就自动开始转换。
✧协作图:协作图用于描述系统中相互协作的对象之间的交互关系和关联链接关系。
✧构件图:描述软件构件之间的相互依赖关系,它表达的是系统代码本身的结构。
✧部署
图:配置图用来描述计算机和设备,展示它们之间的连接,以及驻留在每台机器中的软件。
✓用部署图描述使用金龙卡的饮食销售系统。
✓画出短信系统的以下用例的的顺序图和基本类图
✓用例脚本:
1.发送短信用例:用户输入或读入发送内容;用户选择一个或多个发送人员;系统将明文短消息编码转换成格式化的短消息串;系统以串口方式将短信串传入无线移动终端
2.接收短信用例的场景描述:用户向串口发送指令从无线移动终端读取一组短消息串;系统将一组短信串分别解码转化成明文的短消息;系统将短消息写入数据库并显示给用户;
3.人员维护的用例场景描述:用户添加一个新成员;用户更新一个成员信息;用户删除一个成员
✓ 4.系统设置用例的场景描述:用户修改系统信息,如客服中心号码、端口号、延时;系统保存设置信息
✓
✓
发送短信
✓
接收短信
✓
基本类图
✓
4、面向对象分析的目的、原则、完成模型
✧面向对象分析的目的:是对客观世界的系统建立对象模型、动态模型和功能模型
➢对象模型:描述系统组成。
➢动态模型:描述系统控制结构。
➢功能模型:描述系统功能的。
✧面向对象分析的原则:
●定义有实际意义的对象
●强调实体的本质、忽略无关的属性,模型的描述要规范、准确
●共享性
●封装性
5、面向对象设计的内容、完成模型
✧面向对象设计的内容:面向对象设计是把分析阶段得到的需求,转变成符合成本和质量要求的、抽象的系统实现方案。
分为进行系统设计(总体设计)和对象设计(详细设计)。
➢系统设计将系统分成几个子系统,建立系统的基本框架,每个子系统使用与面向对象分析一致的表示方法建立模型,可以说总体设计是逐渐扩充面向对象分析模型的过程;
➢对象设计则针对每个子系统中的每个类的作用、类的内部构成(属性和服务)以及类之间关系进行清晰、具体的描述,使得在实现阶段程序员根据该描述能很容易地转化成程序。
6、面向对象的实现工作:编码与测试
✧面向对象测试的目标与结构化软件测试的目标相同,都是为了找出软件开发中的错误,提高软件的质量。
面向对象软件测试策略也是从组成系统的最小单元—对象开始测试,然后对组成子系统的各个对象之间的协同关系进行测试,最后是整个系统的测试。
7、软件重用的概念
软件重用就是指在软件开发过程中重复利用已经存在的软件制品,包括代码、设计结构、模块实现、变换过程、规格说明、文档,用于构造新的软件系统。
第九章、软件工程管理
1、软件工程管理的概念及内容
✧软件工程管理是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。
包括软件工程经济学和软件管理学。
✧软件工程管理的内容:软件开发成本、控制、开发人员、组织机构、用户、软件开发文档、软件质量等方面的管理。
软件开发成本估算主要是软件规模->时间、人员和经费。
控制包括进度控制、人员控制、经费控制和质量控制。
2、进度计划
✧甘特(Gantt)图(P.190)
➢优点:
(1)任务分解成子任务
(2)每个任务的开始时间
(3)子任务之间的并行和串行
➢缺点:
(1)不能显式地描绘各项作业彼此间的依赖关系;
(2)进度计划的关键部分不明确,难于判定哪些部分应当是主攻和主控的对象;
✧工程网络图(P.191)
3、软件质量的概念及衡量标准
✧软件质量的定义:软件与明确地和隐含地定义的需求相一致的程度。
✧衡量标准:功能性、可靠性、效率、易使用性、可维护性、可移植性
4、软件配置的概念及任务
✧软件配置:软件开发和运行过程中产生的的全部信息。
分为三类:程序、文档、数据
✧任务:标识变更、控制变更、配置审计、配置状态报
5、软件工程标准化的概念及意义
✧软件工程标准化:就是对软件生存期内所有开发、维护和管理工作都逐步建立起标准。
可分为国际标准(ISO)、国家标准(GB)、行业标准(IEEE)、企业规范及项目规范五个等级。
✧意义:
●提高软件的可靠性、可维护性和可移植性,因而可提高软件产品的质量
●提高软件生产率
●提高软件工作人员的技术水平
●改善软件开发人员之间的通信效率,较少差错
●有利于软件工程的管理
有利于降低软件成本和缩短软件开发周期
不开口,没有人知道你想要什么;不去做,任何想法都只在脑海里游泳;不迈出脚步,永远找不到你前进的方向。
其实你很强,只是懒惰帮了你倒忙。