第一篇:软件工程知识点
第一章
软件工程概述
一、软件的定义和特性
(P2—P3)定义:软件=程序+数据+文档
程序:按照事先设计的功能和性能要求执行的指令或语句序列
数据:程序能正常操纵信息的数据结构
文档:描述程序操作和使用的文档 特性:
(1)软件是一种逻辑实体,具有抽象性,不是一般的物理实体;
(2)软件的成产与硬件存在某些相同点,但有根本上的不同,软件开发是人的智力的高度发挥,而不是传统意义上的制造,它更依赖于开发人员的素质,智力,人员和组合,合作和管理;
(3)软件维护与硬件维修有着本质的差别,软件维护没有硬件维护那样有可替换的标准零件;(4)软件在运行和使用期间没有硬件那样的机械磨损,老化问题,但存在退化问题;
(5)基于构件的开发方法由于其自身的特点越来越受到人们的重视,这些技术可以减少开发时间、提高质量,并提高复用水平。
* 掌握P4图1-2(b)软件失效率曲线
二、计算机软件的发展经历了几个阶段?各有何特征?(P1—P2)
共经历了四个阶段
特征:第一阶段——程序规模小且主要采用个体工作方式,开发的系统大多采用批处理技术
第二阶段——引入人机交互的概念,实时系统出现,产生了第一代数据库管理系统,程序编制采用了合作的工作方式,出现了早期的软件危机
第三阶段——分布式系统出现,嵌入式系统得到广泛应用,低成本硬件
第四阶段——强大的桌面系统和计算机网络迅速发展时期,面向对象技术得到广泛应用,人工智能技术和专家系统开始应用于软件。
三、什么是软件危机?其产生的原因是什么?
定义:软件危机是指由于落后的软件生产方式无法满足迅速增长的计算机软件应用需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。(P4)原因:(P5)
(1)用户对软件需求的描述不准确、不全面,甚至有错误,以及在开发过程中,不断提出或者修改需求;(2)用户和开发人员对软件需求的理解存在差异,导致所开发的软件产品和用户需求不一致;
(3)大型软件项目需要组织一定的人力共同完成,各类人员的信息交流不及时、不准确,有时还可能产生误解,软件开发人员对大型软件缺少开发经验,管理人员缺少相应的管理经验;
(4)软件开发人员不能有、独立自主的处理大型软件的全部关系和各个分支,因此容易产生疏漏和错误;
(5)开发技术落后,缺乏有效的方法学和工具方面的支持,过分依赖程序设计人员在软件开发过程中的技巧和创造性,加剧软件产品的个性化
(6)软件产品的特殊性和人类智力的局限性,导致人们无法处理“复杂问题”,因为软件是逻辑产品,软件开发进展情况较难衡量、软件开发质量难以评价、管理和控制软件开发过程相当困难。
四、什么是软件工程?它的目标和内容是什么?
定义:将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中,并对方法的研究。(P6)
目标:在给定的成本和进度前提下,开发出具有可修改性、可理解性、可维护性、有效性、可靠性、可适用性、可重用性、可移植性、可跟踪性和互操作性并且满足用户需求的软件产品。(P7)
内容:主要内容包括软件开发技术和软件工程管理两方面。(P6)
要素:方法,工具,过程
五、什么是软件生存周期?它有哪几个活动?
定义:(software life cycle)把软件产品从形成概念开始,经过定义、开发、使用和维护直到最后退役的全过程。
活动:软件定义、软件开发、软件使用维护和退役(P9)
六、什么是软件生存周期模型?它有哪些主要模型?
定义:又称为软件开发模型,软件过程模型,它清晰直观地反映了软件开发的全部过程、所涉及的活动和任务结构框架,并指出了开发了开发各阶段的关系、开发活动的衔接情况。
主要模型:瀑布模型(waterfall model),原型(prototype)模型,螺旋(the spiral)模型,增量(incremental)模型,喷泉(fountain)模型,迭代(iterative)模型
七、简述有哪些主要的软件开发方法?(P22)
结构化方法:也称为生命周期方法或传统方法,由结构化分析(structured analysis)、结构化设计(SD)、结构化编程(SP)三部分有机组合而成。其基本思想是自顶向下,逐步求精,基本原则是抽象和分解。
面向对象方法(Object—Oriented Method):把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO。包括面相对象分析(OOA)、面向对象设计(OOD)、面向对象的程序设计(OOP)等过程。
八、软件生命期各阶段的任务是什么?(P10)
软件定义:问题定义,系统的可行性研究,需求分析
软件开发:概要设计,详细设计,编码实践,软件测试
软件使用维护和退役:软件发布与实施,软件维护,版本更新或退役
九、简述瀑布模型(P12)、原型模型特点。
瀑布模型:软件开发的各项活动严格按照线性方式进行,各阶段之间具有顺序性和依赖性,且为了保证软件的开发质量进行阶段性评审。缺点是逆转性差,若在评审中发现缺陷或错误往回追溯修正时要付出一定的代价。适合在软件需求明确且很少发生变化、开发技术比较成熟、工程管理比较严格地场合使用。
原型模型:有助于用户和软件分析员双方相互学习对方领域知识,使得用户和开发人员统一对软件需求的认识,理解,有助于需求的定义评审,从而有助于提高开发速度。缺点是用户对原型没有正确认识,会催促开发人员尽早交付软件,同时也在一定程度上限制了软件开发人员的创新。(P14)
第二章
软件需求基础
一、试述软件需求、需求分析、需求建模概念的含义及区别。
软件需求:指用户对目标软件系统在功能、性能、行为、涉及约束等方面的期望,这种期望可能是原始的、笼统的,也可能是抽象的太细节化的。(P26)
需求分析:通过对应用问题及其环境的分析与理解,采用一系列的分析方法和技术,将用户的需求逐步精确化、完全化、一致化,最终形成需求规格说明文档的过程。(P26)
需求建模:需求建模是为了更好的理解用户所描述的需求所作出的一种抽象,是用符号语言对事务无歧义的书面描述。模型主要包括数据模型,功能模型和行为模型。(P38)
二、可行性研究的任务是什么?(P31)
用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发。
三、成本—效益分析可用哪些指标进行度量?(P32)
成本效益分析是衡量经济可行性的。
指标:(1)货币的时间价值。(2)投资回收期(3)纯收入
四、需求分析阶段的基本任务是什么?(P27)
任务:深入描述软件的功能和性能,确定软件设计的限制和软件同其他系统元素的接口细节,定义软件的其他有效性需求。
五、简述需求分析阶段的过程。(P36)
1.问题识别
2.分析与综合3.编制需求分析阶段的文档
4.需求验证
六、常用的初步软件需求获取的方法有哪些?为什么要用这些方法来进行需求获取?(P33)
方法: 1.访谈与会议
2.观察用户工作流程
3.建立联合小组
4.其他获取方法:快速原型法,基于本体的需求获取方法
原因:分析人员和用户的共同知识领域可能不多,致使分析人员对问题往往知之不多,而用户对目标软件的要求及对要求的描述常常是零乱而模糊地,从而会造成相互交流和互相理解上的困难。
七、在软件需求分析时,应首先建立当前系统的物理模型,在根据物理模型尽力当前系统的逻辑模型。试问:什么是当前系统?当前系统的物理模型与逻辑模型有什么差别?(P28)
当前系统:可能是需要改进的某个已在计算机运行的数据处理系统,也可能是一个人工的数据处理过程。
物理模型是确定待开发软件系统的系统元素,并将功能和数据结构分配到这些系统元素中,它是软件实现的基础。逻辑模型忽视实现机制与细节,只描述系统要完成的功能和要处理的数据。
逻辑模型是在物理模型的基础上去掉一些非本质因素形成的,它反应的是系统的本质。
第三章
软件设计基础
一、什么是软件概要设计?该阶段的基本任务是什么?
定义:设计人员依据软件需求规格说明文档,确定软件的体系结构,建立软件模块间的关系,定义个功能模块的接口,设计全局数据库或数据结构,规定设计约束,指定组装测试计划。
任务:将软件需求转化为软件的系统结构和数据结构(P49)
*力争做到功能模块之间有比较低的耦合度而功能模块内部有较高的内聚度。
二、详细设计的基本任务是什么?有哪几种描述方法?
任务:通过对软件结构细化,得到软件的详细的算法和数据结构。(P49)
描述方法:(过程设计)程序流程图
盒图(N-S图)
问题分析图(PAD图)
判定表和判定树
过程设计语言(PDL)(P77)
三、软件设计的基本原理包括哪些内容?(P51)
抽象与逐步求精、模块化、信息隐蔽、模块独立
四、衡量模块独立性的两个标准时什么?各表示什么含义?
标准:内聚和耦合
含义:内聚(cohesion)——衡量一个模块内部各个元素彼此结合的紧密程度
耦合(coupling)——衡量不同模块之间的相对独立性(互相连接的紧密程度)
五、模块的耦合性有哪几种?各表示什么含义?
种类:非直接耦合——两个模块之间没有直接关系,他们中任何一个都不依赖于另一个而能独立工作
数据耦合——一模块访问另一模块,相互传递的信息已参数形式给出,并且传递的参数完全是简单数据元素,而不是控制元素、公共数据结构和外部变量。
标记耦合——两模块之间都要使用同一数据结构的一部分,不是采用全程公共数据区共享,而是通过模块接口界面传递数据结构的一部分。
控制耦合——一模块传递给另一模块的参数中包含了控制信息(开关,标记,名字等),该控制信息勇于控制接收模块中的执行逻辑。
外部耦合——一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量信息。
公共耦合——一组模块都访问同一个公共数据环境
内容耦合——一模块直接访问另一模块的内部数据;一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重迭(只出现在汇编程序中);一个模块有多个入口。
*从上到下耦合性从低到高,独立性从高到底
六、模块的内聚有哪几种?各表示什么含义?
种类:巧合内聚(偶然内聚)——将几个模块中没有明确表现出独立功能的相同程序代码段独立出来建立的模块
逻辑内聚——完成一组在逻辑上相关的任务的模块间具有逻辑内聚
时间内聚(经典内聚)——完成几个必须在同一时间内进行的任务的模块间具有时间内聚
过程内聚——一个模块完成多个任务,这些任务必须按指定的过程执行。把流程图中的某一部分划出组成模块就得到过程内聚模块
通信内聚——一个模块内所有成分都使用同一输入数据或产生同一输出数据,即一个模块内所有处理元素都集中在某个数据结构的一块区域中的模块具有通信内聚
信息内聚——一个模块内完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点
七、结构化程序设计的基本要点是什么?
结构化程序设计是尽可能少用GOTO语句的程序设计方法。最好仅在检测出错误时才使用GOTO语句,而且应该总是使用前句GOTO语句。
第四章 结构化分析与设计
一、什么是结构化分析方法?该方法使用什么描述工具?(P85—P86)
定义:结构化分析方法是一种利用自顶向下逐层分解、由粗到细、由复杂到简单技术的求解方法。
工具:数据流图(DFD 实体—关系图(E-R)数据字典(DD)描述基本加工小说明(Process SPECification)
二、什么是数据流图?其作用是什么?其中的基本符号各表示什么含义?(P87)
定义:数据流图是描述数据加工处理过程的有效工具。它标识了一个系统的逻辑输入和逻辑输出,以及把逻辑输入转换逻辑输出所需的加工处理。
作用:主要描述系统的功能,即当前系统主要完成哪些功能。
基本符号:箭头——数据流
圆或椭圆——加工(变换)
双杠或单杠——数据
矩形框——外部实体
三、什么是数据字典?其作用是什么?共有哪些条目?(P94)
定义:数据字典是对所有与系统相关的数据元素的一个有组织的列表,以及精确地、严格地定义了每一个与系统相关的数据元素,并以字典式顺序将它们组织起来,使得用户和分析员对所有的输入、输出、存储成分和中间计算有共同的理解。
作用:对系统所有的数据进行描述和解释并进行管理。条目:数据项条目、数据流条目、数据库文件条目(P96)
四、简述如何画分层数据流图,对分层数据流图的审查由哪些审查要点?(P88 P92)
画法:首先,把整个系统看成一个加工作为顶层数据流图(0层);然后,逐层对大的加工进行分解,分解为更小的自加工;最后,直到所有的加工都成为基本加工(不需要再分解,足够简单可以直接解决的加工)为止。
审查:
1、数据流图和程序流程图的混淆
2、父图和子图的平衡问题
3、局部文件问题
4、分解的深度与层次
五、什么样是“事物流”?什么事“变换流”?试将相应形式的数据流图转换为软件结构图。(P104)
事物流——数据沿传入路径到系统,由外部形式变换为内部形式后到达事务中心(完成分派任务),事务中心根据数据项计值结果从若干动作路径中选定一条继续执行。(事务中心)
变换流——信息以“外部世界”所具有的形式进入系统,经处理后又以这种形式离开系统。包括传入路径,变换中心,传出路径三部分。(变换中心)步骤:(1)对结构化分析阶段产生的DFD图进行复审;
(2)确定数据流图的类型
(3)按照SD方法所规定的一组映射规则,把DFD图转换为初始SC图
六、试述“变换分析”、“事务分析”设计步骤。(P106—P108)
变换分析:第一步——划分DFD图的边界,也就是将DFD图划分为三个基本的组成部分,不同的设计人员可能产生不同的划分结果;
第二步——完成第一级分解,建立初始SC图的框架;
第三步——完成第二级分解,细化SC图的每个分支,得到初始SC图。
事务分析:首先确定事务中心,即几条动作路径的公共源头;其次划定接收路径和发送路径;然后分解和细化每个接收分支和发送分支,完成初始的SC图。
七、简述有哪些启发式设计策略可以帮助软件设计人员改善软件质量,优化软件结构。(P108—P110)
(1)模块的高独立性和规模适中
(2)保持高扇入和低扇出
(3)模块的作用域应在控制域之内
(4)降低模块接口的复杂度
第五章
面向对象的分析与设计
一、说明对象、类、类结构、消息的基本概念(P113)
对象:是封装了数据结构及可以施加在这些数据结构上的操作的封装体。
类:对具有相同属性和操作的一组对象的抽象性描述,它描述了属于该对象类型的所有对象的性质,包括外部特性和内部实现两个方面。类结构:(实例)
消息:是用来请求对象执行某一处理或回答某一要求的信息。
二、试述面向对象方法学的优点。(P112)
1、开发的软件比较容易理解
2、稳定性好
3、可重用性好
4、较易开发大型软件产品
5、可维护性好
三、什么是UML?为什么使用UML?(P118)
定义:UML(Unified Modeling Language)是一个通用的、可视化标准建模语言。
使用原因:统一的标准
面向对象
可视化、表示能力强
独立于过程
易掌握、易用
四、在UML中用例图的作用是什么?其包括哪些符号?简述各符号的含义。(P122)
作用:捕获系统中用户的需求
符号:人形(stickman)——活动者
椭圆——用例
实线——关系
五、简述用例建模的步骤。
步骤:识别参与者——识别用例——识别关系——建模——用例规约
六、什么是用例规约?其包括哪些基本内容?什么是基本流和备选流?
定义:用例的补充说明,包括简要说明,事件流,用例场景,特殊需求,前置条件,后置条件 基本流: 备选流:
七、在UML中的状态图,活动图,时序图在系统分析中各起到了什么作用?
状态图——描述对象在生命周期内处于哪些状态,每一种状态的行为以及什么样的事件引起对象状态发生改变,展示了系统的动态视图。P144 活动图——描述动作及对象状态改变的结果,描述采取何种动作似的对象的状态改变,动作的序列是什么及在何处发生。P148 时序图——详细表示对象之间以及对象与系统外部的参与者之间动态联系的图形文档,它详细而直观地表现了一组相互协作的对象在执行一个(或少量几个)用例时的行为依赖关系,以及操作和消息的时序关系。P139
八、简述类图中关联和依赖关系的区别。
关联表示两个类的对象之间存在某种语义上的联系。(组合/聚合关联)如:学生选课,学生与课程间
依赖是类与类之间最弱的关系,它是两个模型元素(类、用例等)之间的语义连接关系,其中一个模型元素是独立,另一模型元素依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。如教师与粉笔。
九、类图中类与类之间的关系有哪几种?
类与类之间的静态关系:关联,泛化,依赖,细化
第六章
人机界面设计
一、简述人机界面的设计过程。(P168)
1、确定任务的目标和含义;
2、将每个目标或含义映射为一系列特定的动作;
3、说明这些动作将来在界面上执行的顺序;
4、指明系统状态,及上述各动作序列中每个动作在界面上执行时界面呈现的形式;
5、定义控制机制,即用户可用的改变系统状态的设备和动作;
6、说明控制机制怎样作用于系统状态;
7、指明用户如何根据界面上反映出的信息,解释系统的状态。
二、简述人机界面设计过程中应考虑哪些一般问题?(P168)
系统响应时间
用户帮助设施
出错信息处理
命令交互
三、如何理解界面设计中“人的因素”(P162)
人对感知过程的认识
用户的技能和用户间的差异
第八章
软件测试
一、什么是白盒测试法?有哪些覆盖标准?P205
定义:(结构测试或逻辑驱动测试)测试时,把程序看做一个打开的盒子,它是知道产品内部工作过程,而不顾他的功能。
覆盖标准:语句覆盖
判定覆盖
条件覆盖
判定/条件覆盖
条件组合覆盖
路径覆盖
二、什么是黑盒测试法?采用黑盒技术测试用例有哪几种方法?(P199)
定义:(功能测试或数据驱动测试)它是在已知产品所应具有功能的基础上,通过测试来检测每个功能是否都能正常使用。
方法:等价类划分
边界值分析
错误推测
因果图
比较测试
三、软件测试要经过哪些步骤?这些测试与软件开发各阶段之间有什么关系?
步骤:单元测试——集成测试——确认测试——系统测试
关系:单元测试(模块测试)——是最小单位的测试,其依据是详细设计说明书。测试者(程序员)根据详细设计说明书和源程序清单了解模块的I/O条件和模块的逻辑结构。
集成测试(组装测试、联合测试、子系统测试、部件测试)——是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统进行测试。
确认测试(有效性测试)——检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准(用户参与)。
系统测试——针对整个产品系统进行的测试,验证系统是否满足了需求规格的定义,找出与需求规格不相复合或与之矛盾的地方。
四、单元测试有哪些内容?
模块接口
局部数据结构测试
路径测试
错误处理测试
边界测试
五、什么是集成测试?非渐增式测试与渐增式测试有什么区别?渐增式测试如何组装模块?
定义:集成测试(组装测试、联合测试、子系统测试、部件测试)是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统进行测试。
区别:P216自己看
组装:
六、什么是回归测试?(P218)
发生修改之后重新测试先前的测试以保证修改的正确性。目的在于检验以前出现过的但已修复好的缺陷不再出现。
七、什么是测试用例?(P194)
测试用例由测试输入数据和预期输出结果组成。
八、软件测试和软件调试有何区别?
第九章
软件维护
一、软件维护有哪些内容?(P229)
改正性维护
适应性维护
完善性维护
预防性维护
二、何为非结构化维护和结构化维护?(P231)
结构化维护——采用软件工程的方法进行软件的开发,则每一个阶段都有相应的文档,且文档与程序代码互相匹配,因此维护容易进行。
非结构化维护——没有采用软件工程的方法进行软件的开发,开发出的软件只有程序没有文档,或者仅有一些片段的说明性文档。给维护工作带来很大的困难,耗时耗力且代价高。
三、软件维护的流程是什么?(P233)
提交维护申请报告——生成软件修改报告——软件修改——主要流程
四、软件维护的副作用有哪些?(P240)
修改编码的副作用 修改数据结构的副作用 修改文档的副作用
第二篇:软件工程知识点
1.什么是软件危机,它有哪些典型表现?答:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
软件危机典型表现:对软件开发成本和进度的估计常常很不准确。用户对“已完成的”软件系统不满意的现象经常发生。软件产品的质量往往靠不住。软件常常是不可维护的。软件通常没有适当的文档资料。软件成本在计算机系统总成本中所占的比例逐年上升。软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势.产生软件危机的原因:一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。管理和控制软件开发过程相当困难。软件是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。目前相当多的软件专业人员对软件开发和维护还有不省糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这是使软件问题发展成软件危机的主要原因.2.简述产生软件危机的原因和解决的思路:答:软件危机产生的原因一方面与软件本身的特点有关,另一方面,是与已有软件开发、维护的方法不正确有密切关系.解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。即采用工程化的原则和方法组织软件开发是摆脱软件危机的一个主要出路.3.什么是软件工程?它有哪些本质特性?答:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它.软件工程本质特性:
1、软件工程关注于大型程序的构造;
2、软件工程的中心课题是控制复杂性;
3、软件经常变化;
4、开发软件的效率非常重要;
5、和谐地合作是开发软件的关键;
6、软件必须有效地支持它的用户;
7、在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品.4.软件工程是如何用来消除软件危机的?软件工程是从技术和管理两个方面来研究如何更好地开发和维护计算机软件,从源头上消除软件危机.5.软件工程的目的是什么?为高质量的软件开发提供一个科学的体系框架.6.什么是软件工程方法学?软件工程是一种什么样的技术?包括哪三大要素?分为哪三个分支?软件工程方法学就是指在软件生命周期全过程中使用的一整套管理和开发技术方法的集合。目前,使用最广泛的软件工程方法学分别是传统方法学和面向对象方法学.软件工程作为一种层次化的技术,有方法、工具和过程三大要素,并由于其涉及学科内容的极为广泛,而分为三个分支:软件开发技术、软件项目管理技术、软件质量管理技术.7.什么是软件生命周期?什么是软件生命周期模型?软件如同自然界任何事物一样,都有其孕育、诞生、成长、成熟、衰亡的生存过程。软件的这一过程,称为软件生命周期.软件生命周期模型也称软件开发过程模型,是为了解决产业环境中的实际问题,而提出的开发策略。是反映整个软件生命期中,系统开发、运行、维护等实施活动的一种结构框架.8.试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明它们各自的适用范围.1.瀑布模型:瀑布模型广为人知和历史悠久,其优势是规范及文档驱动的方法。但问题是,往往不能够真正满足用户的需求..适用于传统软件工程领域的结构化开发..2.原型模型:是为了克服瀑布模型的缺点而提出来的。通过快速构建一个在机器上可运行的原型系统,让用户试用原型,并收集反馈意见的办法,来获取用户真实的需求..3.螺旋模型:螺旋模型适用于大型软件项目,比起之前的其它模型而言,有其一定的优越性,但这些优越性并不是绝对的。主要体现在对开发人员的风险评估经验和专门知识的要求较高。如果项目风险较大,而开发人员的水平较低,不能准确的识别和分析风险,则势必造成重大损失..4.增量模型:具有在软件开发早期阶段使投资获得明显回报和交易维护的优点,但是要求软件具有开放的结构.9.软件过程(Software Procedure)是指软件生存周期所涉及的一系列相关过程.10.软件测试用例就是指导你对软件执行操作,帮助你证明软件功能或发现软件缺陷的一种说明.11.单元测试——是最小粒度的测试,以测试某个功能或代码块.单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试.12.人机界面设计的三条“黄金规则”:1.置用户于控制之下.2.减少用户记忆负担.3.保持界面一致.13.jackson图:jackson结构化程序设计使用的图。什么是HIPO图:它是表示软件系统结构的工具。HIPO图以模块分解的层次性以及模块内部输入、处理、输出三大基本部分为基础建立的.它既可以描述软件总的模块层次结构--H图(层次图),又可以描述每个模块输入/输出数据、处理功能及模块调用的详细情况--IPO图.14.试说明Jackson方法是一种怎么样的程序设计方法。它有哪些工作步骤:Jackson方法是以数据结构(data structure)为基础设计每个模块的处理过程,将数据结构转化成程序结构。具体工作步骤有:第1步:用Jackson图描述 IO 的数据结构;第2步:在两个图中指出有直接因果关系、可以同时处理的单元;第3步:将数据结构映射到程序结构;第4步:列出所有操作条件,并分配到上幅程序结构图中;第5步:用Pseudocode 表示程序.15.简述结构化设计的特点:1.自顶向下、逐步求精.2.具有单入、单出的控制结构.
第三篇:软件工程知识点总结
软件工程知识点总结
软件工程知识点总结
1.软件危机:指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
2.软件危机产生的原因:1.软件本身的复杂性、难衡量的特点;2.软件开发与维护的方法不正确。
3.软件的定义:计算机程序、方法、规则、相关文档资料以及在计算机上运行程序时所必需的数据
4.软件不是程序,软件是程序、数据以及相关文档的完整集合。
5.程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。
6.软件生命周期:一个软件从定义、开发、使用和维护,直到最终被废弃所经历的一个漫长时期。
7.软件开发的过程:
①问题定义:确定要求解决的问题是什么
②可行性研究:决定该问题是否存在一个可行的解决办法
③需求分析:深入了解用户的要求,在要开发的目标系统必须做什么问题和用户取得完全一致的看法。④概要设计:概括回答怎样实现目标系统。概要设计又叫逻辑设计、总体设计、高层设计。
⑤详细设计:把解法具体化,设计出程序的详细规格说明。详细设计也叫模块设计、底层设计。⑥编码和单元测试:编写程序的工作量只占软件开发全部工作量的10%-20%。
⑦综合测试:软件测试的工作量通常占软件开发全部工作量的40%-50%。
⑧软件维护:软件维护的费用通常占软件总费用的55%-70%。
①②③为软件定义时期,④⑤⑥⑦为软件开发阶段。④⑤为系统设计,⑥⑦为系统实现。
中国国家标准《计算机软件开发规范》将软件生命周期分为:可行性研究与计划,需求分析,概要设计,详细设计,实现,组装测试,确认测试,使用和维护8个阶段。
8.软件工程:是指导计算机软件开发和维护的工程学科。软件工程采用工程的概念、原理、技术和方法来开发和维护软件,结合正确的管理技术和先进可靠的技术方法,经济地开发出高质量的软件,并有效地维护它。
9.软件工程方法学:方法、工具和过程。普遍使用的是传统方法学和面向对象方法学。
10.瀑布模型:唯一被广泛采用的模型,各阶段间具有顺序性和依赖性:前阶段完成才能进行下一阶段。文档驱动。
原型模型:快速建立一个能反映用户主要需求的原型系统让用户试用,并根据用户意见修改原型。原型的用途是获知用户真正需求,一旦需求确定,原型将被抛弃。当用户对系统的目标不是很清楚,难以定义需求,可用此法。
增量模型:也叫渐增模型。整个软件被分解成许多各增量构件,设计人员分批地逐步向用户提交产品,每次用户都得到一个满足部分需求的可运行产品。优点:能在短时间内向用户提交可完成部分工作的有用产品,易于维护。
螺旋模型:使用原型及其他方法来尽量降低风险。它类似于原型法,不过在每个阶段之前都增加了风险分析过程。
螺旋模型适用于内部开发的大规模软件项目。螺旋模型的优势在于它是风险驱动的。
V型模型:从需求分析就开始编写测试计划一直到系统交付。需求分析对应于验收测试,概要设计对应于系统测试,详细设计对应于集成测试,编码对应于单元测试,这样先产生计划再执行测试,在测试的每个阶段都进行审查.喷泉模型:是一种典型的适合于面向对象范型的过程模型,支持开发过程中的迭代。
瀑布模型注重冻结需求的理念、Up模型注重增量迭代/用例驱动、V型模型讲究质量保证理念、Xp模型讲究沟通。
11.实体-关系图(E-R图),用于建立数据模型,其中包含了实体、关系、属性。
12.数据流图(DFD):描绘信息流和数据输入输出的移动过程。是结构化分析过程中使用的主要建模工具。功能建模。
13.状态转换图:通过描述系统的状态及引起系统状态转换的事件,表示系统的行为,提供了行为建模的机制。
3/29/2013 1
软件工程知识点总结
14.数据字典:描述在数据模型、功能模型和行为模型中出现的数据对象和控制信息的特征,给出这些对象的精确定义。数据字典是分析模型的核心,通常使用CASE工具来创建和维护数据字典。
15.结构化设计的几个阶段:数据设计、体系结构设计、接口设计、过程设计(是详细设计阶段的主要任务)。
结构设计属于概要设计阶段。接口设计(包括I/O设计)和过程设计属于详细设计阶段。人机界面设计属接口设计。
16.基本设计原理:模块化、抽象、逐步求精、信息隐藏、模块独立(功能独立,和其它模块没有过多相互作用)。
模块独立的好处:易开发、易测试、易维护。模块独立程度的衡量标准:内聚和耦合。
17.内聚衡量模块内各元素之间结合的紧密程度。耦合衡量不同模块之间连接的紧密程度。
数据耦合→控制耦合→公共环境耦合→内容耦合(高)
(低内聚)偶然内聚→逻辑内聚→时间内聚→(中内聚)过程内聚→通信内聚→(高内聚)顺序内聚→功能内聚
模块独立性设计原则:提高内聚,降低耦合18.表示软件结构:层次图、HIPO图、结构图。过程设计:程序流程图、盒图(N-S图)、PAD图、判定表、判定树。
19.软件测试分:单元测试和综合测试。软件项目管理从项目计划开始,第一项计划活动是估算。
白盒测试:也称结构测试,逻辑驱动测试,基于代码的测试,测试程序内部的逻辑结构和过程性细节,前期使用。
黑盒测试:即功能测试,在程序接口进行测试,测试后期使用。具体办法:等价划分、边界值分析、错误推测。
20.IEEE 1058.1给出软件项目管理计划的框架;ISO9000-3标准适用于软件的开发、供应、维护;
ISO/IEC12207是指导软件过程实施的标准;ISO/IEC TR 15504是软件过程评估标准。软件质量保证-SQA。
21.软件重用是降低软件整体成本、提高软件质量和开发生产率的合理有效途径。
可重用的软件成分:软件的技术表示(结构模型、设计和代码)、文档、测试数据、与过程相关的任务(如审查)。
22.软件可移植性:指软件从某一环境移植到另一环境下的难易程度。为方便移植,要尽量采用通用的程序设计语言。
3/29/2013 2
第四篇:软件工程知识点总结
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。是一门指导软件系统开发的工程学科,它以计算机理论及其他学科为指导,采用工程化的概念、原理、技术和方法进行软件的开发和维护,把经实践证明的学科的管理措施与最先进的技术方法结合起来,目标是以较少的投资获取高质量的软件。内容:方法与技术、工具与环境、管理技术、标准与规范。领域:软件需求分析、软件设计、软件构造、测试和维护。难题 1.复杂性 2.不可见性 3.易变性 4.服从性 5.非连续性
计算机科学中与实践相关的部分,都和数据以及其他学科发生关系。软件工程和人的行为、现实社会的需求息息相关。
发展史:1.生产作坊方式2.面向对象的方法3.软件过程工程4.软件复用和基于构件的开发 学生做到:1.研发出符合客户需求的软件 2.通过一定的软件流程,在预计的时间内发布足够好的软件 3.通过数据和其他方式展现所开发的软件是可以维护和继续发展。
单元测试(好标准):1.在最基本的功能/参数上验证程序正确性;2.由最熟悉代码的人写;3.测试后,机器状态保持不变;4.要快;5.产生可重复、一致的结果;6.独立性;7.覆盖所有代码路径;8.集成到自动测试的框架中;9.和产品代码一起保存和维护。
回归测试:模块出现退步,从正常退化到不正常状态,为了验证新改进的代码的正确性。个人开发:计划:估计时间(开发):.需求分析.生成设计文档.设计复审.代码规范.具体设计.具体编码.代码复审.测试;记录用时;测试报告;计算工作量;事后总结;提出改进计划 个人在团队中:1.通过交流实验等方法理解问题、需求或任务2.提出多种解决办法3.与相关角色交流解决问题的提案,决定一个可行方案4.执行5.和其他角色合作,测试实现方案,修复缺陷6.对结果负责
代码规范:代码风格规范:1.缩进2.行宽3.括号4.断行与空白行5.分行6.命名7.下划线8.大小写9.注释
代码设计规范:1.函数2.goto3.错误处理4.处理C++中的类 代码复审目的:1.找出错误代码2.发现逻辑错误3.发现算法错误4.发现潜在错误5.发现可能需要改进的地方6.传授经验
代码复审步骤:1.代码成功编译2.程序员必须测试过代码3.程序与提出新的代码,差异分析4.可选择面对面复审,独立复审5.面对面复审中,开发者控制流程,讲述修改的前因后果,复审者有权打断叙述提出自己意见7.开发者负责所有问题得到满意解答8.达成一致意见 复审后:1.改正明显的错误2.对无法解决的错误,记录下来3.把所有错误记在“我常犯的错误”表中,作为以后自我复审的第一步
结对编程好处:1.在开发层次,提供更好的设计质量和代码质量,解决问题能力强2.对开发人员,结对更有信心3.在企业管理层上,更有效的交流相互学习传递经验,高投入产出比 如何结对编程:1.驾驶员:写设计文档,进行编码和单元测试2.领航员:审阅文档、编码;考虑单元测试的覆盖率;思考是否需要重构;帮解决技术问题3.不断轮换角色,不连续一小时,领航员控制时间4.主动参与5.只有水平差距,没有级别差距6.设置好结对编程环境 团队模式:1.主治医师2.明星3.社区4.业余剧团5.秘密团队6.特工7.交响乐团8.爵士乐 开发方法: 统一流程(RUP)业务建模.需求.分析和设计.实现.测试.部署.配置和变更管理.项目管理.环境.敏捷开发原则:1.尽早并持续交付有价值的软件满足需求2.欢迎需求的变化3.经常发布可用软件,间隔较短4.业务员与开发人员共同工作5.以有进取心的人为核心6.面对面交流7.可用软件是衡量项目进展的主要指标8.可持续发展9.不断关注技术和设计10.保持简明 敏捷流程:1.找出完成产品所需要做的事2.决定当前冲刺需要解决的事3.冲刺 软件需求:1.获取和引导需求2.分析和定义需求3.验证需求4.在软件产品的生命周期中管理需求(功能性需求.开发过程需求.非功能性需求.综合需求)需求获取方法:用户调查1.焦点小组2.深入面谈3.卡片分类4.调查问卷5.用户日志研究6.人类学调查7.眼动跟踪研究8.快速原型调研9.a/b测试
利益相关者:用户:直接使用软件的人;客户:购买软件的人;市场分析师:代表典型用户的需求;监管机构:符合行业和政策规定;软件工程师:需求阶段重要角色
项目经理PM:对项目流程负责,正确的协调团队内部外部,调配各部门资源和时间,有效进行风险管理,保证一个项目按计划结项。管事也管人,不一定做具体工作。应对风险:1.进一步研究2.接受3.规避4.转移5.降低6.制定应急计划
PM能力:1.观察、理解和快速学习2.分析管理能力3.专业能力4.自省能力
典型用户:名字.年龄.收入.代表的用户在市场上的比例和重要性.典型场景.环境.生活情况.知识层次/能力.偏好
功能说明书 1.定义好相关概念2.规范好一些假设3.避免误解,界定边界条件4.描述主流用户5.一些好的功能会有副作用6.服务质量说明 功能驱动设计:1.构造总体模型2.构造功能列表3.制定开发计划4.功能设计阶段5.实现具体功能
用户体验:1.用户第一印象2.从用户角度考虑问题3.软件服务始终要记住用户的选择4.短期刺激和长期影响5.不让用户犯简单错误6.用户体验和质量7.情感设计 评价标准:1.尽快提供可感触的反馈2.系统界面符合用户的现实惯例3.用户有控制权4.一致性和标准化5.适合各种类型的用户6.帮助用户识别、诊断并修复错误7.有提示和帮助文档 测试方法:1.单元测试2.代码覆盖率测试3.构建验证测试4.验收测试5.探索式测试6.回归测试7.场景/集成/系统测试8.伙伴测试9.效能测试10.压力测试11.内/外部公开测试
黑箱:把软件系统当作一个黑箱,无法了解或使用系统的内部结构及知识。从软件的行为而不是从内部结构出发来设计测试。白箱:设计者可以看到软件系统的内部结构,并使用软件的内部结构和知识来选择测试数据及具体的测试方法。
软件质量:1.程序的质量2.软件工程的质量(开发过程可见性、风险控制、软件内部模块、开发成本控制、内部质量指标完成情况)
如何衡量:CMMI理论:一级初始级(企业项目目标实现),二级管理级(对项目流程审查,保证成功),三明确级(对管理体系制度化保障完成),四量化管理级(数字化管理,流程的稳定性),五级优化级(充分利用信息资料,主动改善流程)
如何衡量:1.软件CC后DCR的数量2.用户的好评3.在CC后发现bug的数量4.文档完整性和准确性5.修复bug平均时间6.单位开发量出现最大bug数量7.测试用例的覆盖率8.模块的复杂程度9.代码的行数10.文档的数量和复杂程度11.有多少代码重复12.平均每天构建失败的次数13.实现了多少功能点14.软件能运行多久,平均初次错误时间,无故障时间 会诊:1.开发者提交参加会诊的bug和修改方案2.会议决定是否同意修改方案3.执行
IT创新:1.灵光一闪,创新及随其后2.大家都喜欢创新3.好的想法会赢4.创新者都是一马当先5.要成为领域的专家6.技术是创新的关键7.成功的团队更能创新
团队合作阶段:1.萌芽阶段2.磨合阶段3.规范阶段4.创造阶段5.团队的效能曲线和假团队 职业道德:1.行为与公众利益一致2.以客户和雇主利益最大化的方式做事3.确保自己的产品以及修改满足专业标准4.具备完整独立的专业判断5.软件项目的经理和领导人应提倡并亲自采用复合道德规范的方法来管理软件的开发和维护6.保证职业的诚信和荣誉7.公平对待同侪,并予以支持和帮助。
需求分析:四方面:对问题的识别、分析与综合、制定规格说明书、评审;三原则:必须能够表达和理解问题的数据域和功能域;必须按自顶向下、逐步分解的方式对问题进行分解和不断细化;要给出系统的逻辑视图和物理视图。
第五篇:软件工程知识点总结
第二章软件生命周期和过程模型
2.1软件生命周期是什么?分为哪几个阶段?每个阶段干什么?
2.2.1瀑布模型
1、软件生命周期是指软件产品从考虑其概念开始到交付使用,直至最终退役为止的整个过程。软件生命周期可以划分为软件定义、软件开发和运行维护三个时期。
2、软件生命周期各个阶段的任务:
时期阶段任务
软件定义确定待开发的软件系统要做什么
问题定义确定解决什么问题
可行性研究确定“上一个阶段所确定的问题是否有行得通的解决方法”需求分析确定“目标系统必须做什么”这个问题
软件开发具体设计和实现软件
概要设计确定“怎样实现目标系统”
详细设计在概要设计阶段只是以一种比较抽象概括的方式给出解
决问题的办法。在详细设计阶段,需要将解法具体化,确
定“应该怎样具体实现这个系统”
编码和单元测试 在前面阶段的基础上,写出正确的、易理解、易维护的程
序。
综合测试通过各种类型的测试及调试,发现功能、逻辑和实现上可
能存在的缺陷,使软件达到预定的要求。(其中最基本的测试是集成测试和验收测试)
运行和维护根据软件运行中的问题,对其进行各种修改,使系统能持
久地满足用户的需要。
3、瀑布模型
瀑布模型包含了各项软件工程活动,即(概念阶段)制订开发计划、进行需求分析、(开发阶段)软件设计、程序编码、测试、(维护阶段)运行维护。通常情况下,运 行维护活动是一个具有最长生命周期的阶段。
4.原型模型
原型一般是指对某种产品进行模拟的初始版本或原始模型。在使用原型时,可以采取两种不同的策略:废弃策略、追加策略。
5、螺旋模型
基本思想:使用原型及其他方法来降低风险。包含4种活动:制定计划、风险分析、实施工程、客户评价。
6、喷泉模型(迭代模型)
喷泉模型认为软件开发具有的两个固有属性:迭代性、无间隙性。他认为软件开发过程的各个阶段是相互重叠,多次反复的,就像喷泉一样,水喷上去又可以落下来,既可以落在中间,又可以落到底部。
7、增量模型(渐增模型)
主要面向市场开发
第三章 可行性研究
1、可行性研究考虑哪几方面的研究?(4)
a)技术可行性;b)经济可行性;c)操作可行性;d)社会可行性
第四章 需求工程
1、需求工程经过哪4步?P63小结
需求开发过程可以按照需求获取、分析建模、编写规格说明书、需求评审。
2、需求分析阶段要完成的任务就是最终形成一份经开发方和用户认可或达成共识的软件需求规格说明书。
第五章 结构化方法
数据流图 结构图
第六章 面向对象基础
1、类和对象的区别面向对象和面向过程区别
第七章 面向对象分析
时序图 用例模型
第八章 软件设计基础
第九章 结构化设计方法
第十章 面向对象的设计
1、面向对象的设计,各设计原则是什么?及各原则是干什么的?
a)单一职责原则(SRP):单一职责就是要求系统中一个具体设计元素(类)只完成某一
类功能(职责),尽可能避免出现一个“复合”功能的类----在同
一个类中完成多个不同的功能。关键词:提高内聚性
b)开放—封闭原则(OCP):基本思想是:“不用修改原有类就能扩展一个类的行为”。
关键词: 抽象封装多态
c)Liskov替换原则(LSP):子类应当可以替换父类并出现在父类能够出现的任何地方。d)接口隔离原则(ISP):采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口更好。
e)依赖倒置原则(DIP):是指应用系统中的高层模块不应依赖于底层模块,两者都应该依赖于抽象:抽象不应依赖于细节实现,实现细节应该依赖与抽象。
第十一章 用户界面设计
1、用户界面设计原则:
a)置用户于控制之下;b)减少用户的记忆负担;c)保持界面一致
第十二章 软件实现
12.3软件编码规范(要求:会修改代码)
注释一般遵守以下原则:1)注释的缩进要与相应代码一致;2)每行注释用至少一个空行分开;3)对于所有的常量、变量、数据结构声明,在声明时都必须加以注释,说明其含义。
4)头文件、源文件的头部都应进行注释。
命名规范:类名,类型名,方法名大小写混用,首字母大写,分个字母大写枚举类型,常量名,宏名全部大写
指针变量p
全局变量g
静态变量s
第十三章软件测试
1、黑盒测试:又称为功能性测试或行为测试,完全不考虑程序的内部结构和处理过程。
2、白盒测试:又称透明测试,已知产品内部工作过程,通过测试检验产品内部动作是否按
照产品规格说明的规定正常进行。
3、动态测试:指通常意义上的测试,即使用和运行软件。
4、静态测试:指测试不运行的部分,只是静态检查和审核。
5、静态黑盒测试:测试产品说明书属于静态黑盒测试。(产品说明书是书面文档,而不是
可执行程序,因此是静态的。可利用书面文档进行黑盒测试认真查找其中的缺陷)。
6、动态黑盒测试:不深入代码细节测试软件的方法。(它是动态的,因为程序在运行,同
时它是黑盒的。)
7、静态白盒测试:是在不执行软件的条件下有条理地仔细检查软件设计、体系结构和代码,从而找出软件缺陷的过程,有时称为结构化分析。(这是在程序员编码完成后立马完成的,由程序员做的)。
8、动态白盒测试:是指利用查看代码功能和实现方法得到的信息,来确定哪些需要测试、哪些不需要测试、如何展开测试。它也称为结构化检测。(有软件测试员设计和执行)。
9、软件测试的一般过程?各过程测试哪个方面?
单元测试:(白盒测试,一般有程序员实施)
也称模块测试,是针对软件设计的最小单元程序模块进行测试的工作。目的是发现模块内部的软件缺陷,修改这些缺陷使其代码能够正确运行。
集成测试:(只能是黑盒测试)
也称组装测试,它的任务是按照一定的策略对单元测试的模块进行组装,并在组装过程中进行模块接口与系统功功能测试。
确认测试:(Alpha测试和Beta测试)
也称有效性测试,目的是验证软件的有效性,即验证软件的功能和性能及其他
特性是否符合用户要求。
系统测试:主要任务:测试软件系统是否能与硬件协调工作,测试与其他软件协调运行的情况。
第十四章 软件维护
1、软件维护的一般类型?(4类,最重要的是:完善性维护)
软件维护的分类:纠错性维护、适应性维护、完善性维护和预防性维护
第十五章软件项目管理
1、软件配置管理和基线的概念。
软件过程的输出信息可以分为3个主要类别:计算机程序,描述计算机程序的文档,数据。这些项包含了所有在软件过程中产生的信息,总称为软件配置。
基线:是一个软件配置管理的概念,帮助我们在不严重阻碍合理变化的情况下来控制变化。定义:已经通过正式复审和批准的某规约或产品,它因此可以作为进一步开发的基础,并且只能通过正式的变化控制过程的改变。
软件配置管理(SCM):是一套管理软件开发和软件维护以及各种中间软件产品的方法和规则。可被视为应用于整个软件过程的软件质量保证活动。