资源描述
软件工程期末复习第一章 软件工程概述一、 一、重点掌握的内容: 软件和软件工程的基本概念二、 二、 一般掌握内容: 软件生存周期及软件开发的各种模型。三、 三、主要知识点:软件:软件定义由以下三部分组成:(1) (1) 在运行中能提供所希望的功能和性能的指令集(即程序);(2) (2) 使程序能够正确运行的数据结构;(3) (3) 描述程序研制过程、方法所用的文挡。软件是一种产品,同时又是开发和运行产品的载体。作为一种产品,它表达了由计算机硬件体现的计算潜能。作为开发运行产品的载体,软件是计算机工作的基础、信息通信的基础,也是创建和控制其他程序的基础。软件的特点: 软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。 软件是通过人们的智力活动,把知识与技术转化成信息的一种产品,是在研制、开发中被创造出来的。在软件的运行和使用期间,没有硬件那样的机械磨损、老化问题。软件的开发和运行经常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。软件的开发至今尚未完全摆脱手工的开发方式。软件的开发费用越来越高,成本相当昂贵。软件的分类:软件依据不同的标准,可划分为不同的分类。软件工程:是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。软件工程准则可以概括为六条基本原理:(1)用分阶段的生存周期计划严格管理;(2)坚持进行阶段评审;(3)实行严格的产品控制;(4)采用现代程序设计技术;(5)应能清楚地审查结果;(6)合理安排软件开发小组的人员。软件危机:指的是软件开发和维护过程中遇到的一系列严重问题。软件工程的基本内容:软件工程学的内容可包括理论、结构、方法、工具、环境、管理、规范等。软件生存期也可以分为三个大的阶段:计划阶段。开发阶段和维护阶段。软件开发模型:软件开发模型是跨越整个软件生存周期的系统开发、运作、维护所实施的全部工作和任务的结构框架。瀑布模型即生存周期模型,由B.M.Boehm提出,是软件工程的基础模型。其核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作。采用结构化的分析与设计方法,将逻辑实现与物理实现分开。此外,还有螺旋模型、第四代技术模型、原型模型、构件组装模型、混合模型等软件开发模型。第二章 可行性研究系统流程图:系统流程图是描绘物理系统的传统工具。它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件(程序,文件,数据库,表格,人工过程等等)。系统流程图表达的是部件的信息流程,而不表示对信息进行加工处理的控制过程。系统流程图的功能:1制作系统流程图的过程是系统分析员全面了解系统业务处理概况的过程,它是系统分析员作进一步分析的依据。2系统流程图是系统分析员、管理人员、业务操作人员相互交流的工具。3系统分析员可直接利用系统流程图画出可以实现计算机处理的部分。4可利用系统流程图来分析业务流程的合理性。可行性研究的任务:是用最小的代价在尽可能短的时间内确定问题是否能够解决。一般说来,应从经济可行性、技术可行性、运行可行性、法律可行性和开发方案等方面研究可行性。可行性研究的步骤:可行性研究的步骤分为九个步骤。成本效益分析:成本效益分析的目的是要从经济角度分析开发一个特定的新系统是否可行,从而帮助使用部门负责人正确地做出是否投资于这项开发工程的决定。几种度量效益的方法:1.货币的时间价值;2投资回收期;3纯收入。第三章 需求分析需求分析的方法:需求分析方法由对软件的数据域和功能域的系统分析过程及其表示方法组成,它定义了表示系统逻辑视图和物理视图的方式,大多数的需求分析方法是由数据驱动的,也就是说,这些方法提供了一种表示数据域的机制,分析员根据这种表示,确定软件功能及其他特性,最终建立一个待开发软件的抽象模型,即目标系统的逻辑模型。面向数据流的需求分析方法:结构化分析方法是面向数据流进行需求分析的方法。结构化分析方法使用数据流图DFD与数据字典DD来描述,面向数据流问题的需求分析适合于数据处理类型软件的需求描述。其核心思想是分解化简问题,将物理与逻辑表示分开,对系统进行数据与逻辑的抽象。具体来说,结构化分析方法就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止。重点掌握结合实例画数据流图和定义数据字典。需求分析的任务:它的基本任务是准确地回答“系统必须做什么?”这个问题。需求分析所要做的工作是深入描述软件的功能和性能,确定软件设计的限制和软件同其它系统元素的接口细节,定义软件的其它有效性需求。需求分析的任务不是确定系统如何完成它的工作,而是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。一般说来,需求分析阶段的任务包括下述几方面:确定对系统的综合需求对系统的综合需求主要有:系统功能需求、系统性能需求、运行需求、将来可能提出的需求。分析系统的数据需求导出系统的逻辑模型就是在理解当前系统“怎样做”的基础上,抽取其“做什么”的本质,明确目标系统要“做什么”,可以导出系统的详细的逻辑模型。具体做法是:首先确定目标系统与当前系统的逻辑差别;然后将变化部分看作是新的处理步骤,对功能图(一般为数据流图)及对象图进行调整;最后由外及里对变化的部分进行分析,推断其结构,获得目标系统的逻辑模型。通常用数据流图、数据字典和主要的处理算法描述这个逻辑模型。修正系统开发计划在经过需求分析阶段的工作,分析员对目标系统有了更深入更具体的认识,因此可以对系统的成本和进度做出更准确的估计,在此基础上应该对开发计划进行修正。开发原型系统使用原型系统的主要目的是,使用户通过实践获得关于未来的系统将怎样为他们工作的更直接更具体的概念,从而可以更准确地提出和确定他们的要求。需求分析的步骤:1.调查研究;2分析与综合;3书写文档;4需求分析评审需求分析的原则:其基本原则可概括为: (1)必须能够表达和理解问题的数据域和功能域;(2)按自顶向下、逐层分解问题;(3)要给出系统的逻辑视图和物理视图。第四章 概要设计概要设计任务:系统分析员审查软件计划、软件需求分析提供的文档,提出最佳推荐方案,用系统流程图,组成系统物理元素清单,成本效益分析,系统的进度计划,供专家审定,审定后进入设计。确定模块结构,划分功能模块,将软件功能需求分配给所划分的最小单元模块。确定模块间的联系,确定数据结构、文件结构、数据库模式,确定测试方法与策略。 编写概要设计说明书,用户手册,测试计划,选用相关的软件工具来描述软件结构,结构图是经常使用的软件描述工具。选择分解功能与划分模块的设计原则,例如模块划分独立性原则,信息隐蔽原则等。概要设计过程:概要设计要先进行系统设计,复审系统计划与需求分析,确定系统具体的实施方案;然后进行结构设计,确定软件结构。 软件设计的概念与原则:将软件划分成若干独立成分的依据。如何表示不同的成分内的功能细节和数据结构。如何统一衡量软件设计的技术质量。 其中有几个概念:1.模块化:就是把程序划分成若干个模块,每个模块具有一个子功能,把这些模块集总起来组成一个整体,可以完成指定的功能,实现问题的要求。2. 抽象:就是抽出事物的本质特性而暂时不考虑它们的细节。3. 信息隐蔽:模块中所包括的信息不允许其它不需要这些信息的模块调用。4. 信息局部化:是指把一些关系密切的软件元素物理地放得彼此靠近。5. 模块独立性:是软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中其他的模块接口是简单的。模块独立的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果。6. 耦合:是对一个软件结构内各个模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,调用模块的方式,以及通过接口的信息。7. 内聚:标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。概要设计的方法:面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。面向数据流的设计要解决的任务,就是上述需求分析的基础上,将DFD图映射为软件系统的结构。换句话说,这类设计方法允许把用DFD图表示的系统逻辑模型方便地转换成对于软件结构的初始设计描述。理解基本概念:信息流(包括变换流和事务流)、抽象与逐步求精;模块化与信息隐藏;软件总体结构、数据结构与软件过程。面向数据结构的分析设计方法:Jackson系统开发方法(JSD): Jackson系统开发方法(JSD,Jackson System Development)是一种典型的面向数据结构的分析设计方法,它是以信息驱动的,是将信息转换成软件的程序结构。 Warnier方法 :Warnier程序设计方法是由法国人J.D.Warnier提出的另一种面向数据结构的设计方法,又称为逻辑构造程序的方法,简称LCP(Logical Construction of Programs)方法。Warnier方法的原理和Jackson方法类似,也是从数据结构出发设计程序,但是这种方法的逻辑更严格。第五章 详细设计详细设计的任务:详细设计就是要在概要设计的结果的基础上,考虑“怎样实现”这个软件系统,直到对系统中的每个模块给出足够详细的过程性描述。主要任务如下:为每个模块确定采用的算法,选择某种适当的工具表达算法的过程,写出模块的详细过程性描述;确定每一模块使用的数据结构;确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其它模块的接口,以及模块输入数据、输出数据及局部数据的全部细节。要为每一个模块设计出一组测试用例,以便在编码阶段对模块代码(即程序)进行预定的测试,模块的测试用例是软件测试计划的重要组成部分,通常应包括输入数据,期望输出等内容。详细设计的方法:程序流程图、N-S图、PAD图、HIPO图程序流程图:程序流程图又称之为程序框图,它是软件开发者最熟悉的一种算法表达工具。它独立于任何一种程序设计语言,比较直观和清晰地描述过程的控制流程,易于学习掌握。在流程图中只能使用下述的五种基本控制结构。顺序型;选择型; while型循环; until型循环; 多情况型选择。N-S图:Nassi和Shneiderman提出了一种符合结构化程序设计原则的图形描述工具,称为盒图,又称为N-S图。在N-S图中,为了表示五种基本控制结构,规定了五种图形构件。顺序型; 选择型; WHILE重复型; UNTIL重复型; 多分支选择型。PAD图:它是用结构化程序设计思想表现程序逻辑结构的图形工具。PAD也设置了五种基本控制结构的图示,并允许递归使用。HIPO图:HIPO图是由一组IPO图加一张HC图组成。它是美国IBM公司在软件设计中使用的主要表达工具。HC图是层次图(Hierarchy chart)的英文缩写,用于表示软件的分层结构。HC图中的每一个模块,均可用一张IPO图来描述。IPO 图由输入、处理和输出三个框组成,需要时还可以增加一个数据文件框,这种图形的优点,是能够直观地显示输入处理输出三者之间的联系。详细设计的原则:原则是过程描述是否易于理解、复审和维护,进而过程描述能够自然地转换成代码,并保证详细设计与代码完全一致。详细设计规格与评审:详细设计说明书的框架及评审。第六章 面向对象的分析和设计方法面向对象的基本概念: 面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,以什么观点来研究问题并进行求解,以及如何进行系统构造的软件方法学。而面向对象方法是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。面向对象方法的基本思想是,从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式。面向对象的几个重要概念:对象、消息、方法性、继承性、封装性等。面向对象方法的基本特征: 从问题域中客观存在的事物出发来构造软件系统,用对象作为对这些事物的抽象表示,并以此作为系统的基本构成单位。事物的静态特征(即可以用一些数据来表达的特征)用对象的属性表示,事物的动态特征(即事物的行为)用对象的服务(或操作)表示。对象的属性与服务结合为一体,成为一个独立的实体,对外屏蔽其内部细节(称作封装)。对事物进行分类。把具有相同属性和相同服务的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。通过在不同程度上运用抽象的原则(较多或较少地忽略事物之间的差异),可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与服务,面向对象方法支持对这种继承关系的描述与实现,从而简化系统的构造过程及其文档。复杂的对象可以用简单的对象作为其构成部分,称作聚合。对象之间通过消息进行通信,以实现对象之间的动态联系。通过关联表达对象之间的静态关系。面向对象分析方法:目前出现有OOA与OOD方法。面向对象设计方法:OOA与OOD的职责划分是:OOA针对问题域运用OO方法,建立一个反映问题域的OOA模型,不考虑与系统的具体实现有关的因素(例如采用什么编程语言、图形用户界面、数据库等等),从而使OOA模型独立于具体的实现。OOD则是针对系统的一个具体的实现运用OO方法。其中包括两方面的工作,一是把OOA模型直接搬到OOD(不经过转换,仅作某些必要的修改和调整),作为OOD的一个部分;二是针对具体实现中的人机界面、数据存储、任务管理等因素补充一些与实现有关的部分。这些部分与OOA采用相同的表示法和模型结构。第七章 编码程序设计语言的特点: 程序设计语言是人与计算机交流的媒介。软件工程师应该了解程序设计语言各方面的特点,以及这些特点对软件质量的影响,以便在需要为一个特定的开发项目选择语言时,能作出合理的技术抉择。其特点表现为九个方面:名字说明;类型说明;初始化;程序对象的局部性;程序模块;循环控制结构;分支控制结构; 异常处理;独立编译。编程风格:编码风格又称程序设计风格或编程风格,实际上指编程的原则。表现为四个方面:源程序文档化,数据说明的方法,语句结构和输入输出方法。源程序文档化:源程序文档化又可从四个方面来阐述,符号名的命名;程序的注释;标准的书写格式;数据说明:数据说明的次序应当规范化。使数据属性容易查找,也有利于测试,排错和维护。语句结构:语句构造力求简单、直接,不能为了片面追求效率而使语句复杂化。可从以下几方面注意:1使用标准的控制结构;2尽可能使用库函数;3程序编写首先应当考虑清晰性;4注意使用GOTO语句;输入输出方法:输入输出的方式和格式应当尽量作到对用户友善(User Friendly),尽可能方便用户的使用。程序效率:程序效率是指程序的执行速度及程序占用的存储空间。影响程序效率的因素是多方面的。编程安全:提高软件质量和可靠性的技术大致可分为两类,一类是避开错误技术,即在开发的过程中不让差错潜入软件的技术;另一类是容错技术,即对某些无法避开的差错,使其影响减至最小的技术;避开错误技术是进行质量管理,实现产品应有质量所必不可少的技术,也就是软件工程中所讨论的先进的软件分析和开发技术和管理技术。但是,无论使用多么高明的避开错误技术,也无法做到完美无缺和绝无错误,这就需要采用容错技术。实现容错的主要手段是冗余和防错程序设计。面向对象程序设计步骤:面向对象的设计方法一般适用于软件设计和实现阶段。其基本步骤是:建立软件系统的动态模型;建立软件系统的静态模型;实现。 第八章 软件质量与质量保证软件质量:软件质量是各种特性的复杂组合。软件质量反映了以下三方面的问题:(1)软件需求是度量软件质量的基础。不符合需求的软件就不具备质量。(2)在各种标准中定义了一些开发准则,用来指导软件人员用工程化的方法来开发软件。如果不遵守这些开发准则,软件质量就得不到保证。(3)往往会有一些隐含的需求没有明确地提出来。例如,软件应具备良好的可维护性。如果软件只满足那些精确定义了的需求而没有满足这些隐含的需求,软件质量也不能保证。软件质量保证策略:为了在软件开发过程中保证软件的质量,主要采取下述措施:审查;复查和管理复审;测试。结构化的软件测试:软件测试在程序员对每一个模块的编码之后先做程序测试,再做单元测试,然后再进行集成(综合或组装)测试,系统测试,验收(确认)测试,平行测试,人工测试,其中单元测试的一部分己在编码阶段就开始了。测试:就是用已知的输入在已知环境中动态地执行系统(或系统的“部件”)。如果测试结果和预期结果不一致,则很可能是发现了系统中的错误。软件测试:软件测试是对软件计划、软件设计、软件编码进行查错和纠错的活动(包括代码执行活动与人工活动)。程序测试:是对编码阶段的语法错、语义错、运行错进行查找的代码执行活动。找出编码中错误的代码执行活动称程序测试。纠正编码中的错误的执行活动称程序调试。程序测试的目的是查找编码错与纠正编码错,保证算法的正确实现。测试的原则:(1)测试前要认定被测试软件有错,不要认为软件没有错。(2)要预先确定被测试软件的测试结果。(3)要尽量避免测试自己编写的程序。(4)测试要兼顾合理输入与不合理输入数据。(5)测试要以软件需求规格说明书为标准。(6)要明确找到的新错与已找到的旧错成正比。(7)测试是相对的,不能穷尽所有的测试,要据人力物力安排测试,并选择好测试用例与测试方法。(8)测试用例留作测试报告与以后的反复测试用,重新验证纠错的程序是否有错。测试方法:按照测试过程是否在实际应用环境中来分,有静态分析与动态测试。测试方法有分析方法(包括静态分析法与白盒法)与非分析方法(称黑盒法)。静态分析技术:不执行被测软件,可对需求分析说明书、软件设计说明书、源程序做结构检查、流程分析、符号执行来找出软件错误。动态测试技术:当把程序作为一个函数,输入的全体称为函数的定义域,输出的全体称为函数的值域,函数则描述了输入的定义域与输出值域的关系。这样动态测试的算法可归纳为:选取定义域中的有效值,或定义域外无效值。对已选取值决定预期的结果。用选取值执行程序。观察程序行为,记录执行结果。将的结果与的结果相比较,不吻合则程序有错。动态测试既可以采用白盒法对模块进行逻辑结构的测试,又可以用黑盒法做功能结枸的测试、接口的测试,都是以执行程序并分析执行结果来查错的。白盒法:是通过分析程序内部的逻辑与执行路线来设计测试用例,进行测试的方法,白盒法也称逻辑驱动方法。白盒法的具体设计程序测试用例的方法有:语句覆盖、分支(判定)覆盖、条件覆盖、路径覆盖(或条件组合覆盖),主要目的是提高测试的覆盖率。黑盒法:是功能驱动方法,仅根据I/O数据条件来设计测试用例,而不管程序的内部结构与路径如何。黑盒法的具体设计程序测试用例的方法有:等价类划分法,边界值分析法,错误推测法,主要目的是设法以最少测试数据子集来尽可能多的测试软件程序的错误。设计测试方案: 测试方案包括预定要测试的功能,应该输入的测试数据和预期的结果,其中最困难的问题是设计测试用的输入数据(即测试用例)。通常的做法是,用黑盒法设计基本的测试方案,再用白盒法补充一些方案。软件测试的步骤: 单元测试:单元测试也称模块测试、逻辑测试、结构测试,测试的方法一般采用白盒法,以路径覆盖为最佳测试准则。集成测试:单元测试之后便进入组装测试。尽管模拟了驱动模块和存根模块进行单元测试,由于测试不能穷尽,单元测试又会引入新错误,单元测试后肯定会有隐藏错误,组装不可能一次成功,必须经测试后才能成功。集成测试分为增式组装测试和非增式组装测试,所谓非增式组装,按照结构图一次性将各单元模块组装起来。所谓增式组装是指按照结构图自顶向下或自底向上逐渐安装。确认测试:确认测试也称合格测试或称验收测试。组装后己成为完整的软件包,消除了接口的错误。确认测试主要由使用用户参加测试,检验软件规格说明的技术标准的符合程度,是保证软件质量的最后关键环节。系统测试:一般的系统除了确认测试外还要做如下几个方面的系统测试恢复测试通过系统的修复能力,检测重新初始化,数据恢复,重新启动,检验点设置机构是否正确,以及人工干预的平均恢复时间是否在允许范围内。安全测试设计测试用例,突破软件安全保护的机构安全保密措施,检验系统是否安全保密的漏洞。强度测试设计测试用例,检验系统的能力最高能达到什么实际的限度,让系统处于资源的异常数量、异常频率、异常批量的条件下运行测试系统的承受能力。一般取比平常限度高5一10倍的限度做测试用例。性能测试设计测试用例测试并记录软件运行性能,与性能要求比较,看是否达到性能要求规格。这项测试常常与强度测试相结合进行。软件维护:软件运行/维护阶段对软件产品所进行的修改就是维护。维护的问题:软件维护存在的绝大多数问题,都是由于软件定义和软件开发的方法有问题。在软件生命周期的头两个时期没有严格而又科学的管理和规划,几乎必然会导致在最后阶段出现问题。软件维护步骤及组织:为了正确、有效地修改,需要经历以下三个步骤:1.分析和理解程序;2.修改程序;3.重新验证程序;4.维护组织。第九章 项目计划与管理软件项目特点: 软件产品与其他任何产品不同,它是无形的,完全没有物理属性。其特点表现为:智力密集,可见性差;单件生产:在特定机型上,利用特定硬件配置,由特定的系统软件或支撑软件的支持,形成了特定的开发环境;劳动密集,自动化程度低:使用方法繁琐,维护困难;软件工作渗透了人的因素。软件管理的功能:软件管理的主要功能包括:制定计划:规定待完成的任务、要求、资源、人力和进度等;建立组织项目:为实施计划,保证任务的完成,需要建立分工明确的责任机构;配备人员:任用各种层次的技术人员和管理人员;指导:鼓励和动员软件人员完成所分配的情况。软件配置管理的过程:软件配置管理SCM除了负担控制变化之外,它还要担负标识单个的SCI和软件各种版本、审查软件配置以保证开发得以正常进行,以及报告所有加在配置上的变化等任务。关于SCM需要考虑这样一些问题:(1) (1)采用什么方式标识和管理许多已存在的程序的各种版本?使得变化能够有效地实现。(2) (2)在软件交付用户之前和之后,如何控制变化?(3) (3)谁有权批准和对变化安排优先级?(4) (4)如何保证变化得以正确地实施?(5) (5)利用什么办法估计变化可能引起的其它问题?名词解释1 软件:完成特定功能的程序+数据结构+文档2 软件危机:指计算机软件的开发和维护过程中所遇到的一系列严重问题3 软件工程:指导计算机软件开发和维护的一门工程学4 软件生命周期:一个软件从定义、开发、使用和维护直至最终被废弃,要经历的漫长时期5 模块独立:每个模块完成一个相对独立的特定子功能,并且和其他模块关系简单6 耦合:是对一个软件结构内不同模块间互联程度的度量7 内聚:标志着一个模块内各个元素彼此之间互联程度的度量8 编码:就是把软件设计结果翻译成用某种程序设计语言书写的程序9 编码风格:指不影响程序正确性和效率的前提下,有效编排和合理组织程序的基本原则10 白盒法:按照程序内部的逻辑测试程序,检测程序中重要执行通路是否都按预定要求正确工作(结构测试)11 黑盒法:是在程序接口进行的测试,它只检查程序功能是否按规格说明书的规定正常使用,程序是否能适当的接收输入信息并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性(功能测试)12 软件的可靠性:是程序在给定的时间间隔内,按照规格说明书规定成功地运行概率13 软件可用性:是程序在给定的时间点,按照规格说明书规定成功地运行概率14 软件维护:是软件已经交付使用后,为了改正错误或满足新的需要而修改的软件的过程15 对象:由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体16 类:是对具有相同属性和行为的一个或多个对象的描述17 实例:由某个特定的类所描述的一个具体对象18 消息:要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明19 方法:就是对象所能执行的操作,也就是类中所定义的服务20 属性:就是类中所定义的数据,它是对客观世界实体所具有的性质抽象21 继承:广义的说是指能够直接获得已有的性质和特征,而不必重复定义它们狭义的说是子类自动地共享基类中定义的数据和方法的机制22 面向对象分析:抽取和整理用户需求并建立问题域精确模型过程23 软件设计:从抽象概括到具体实践过程24 抽象:抽出事物的本质特征而暂时不考虑它们细节包含了对象(object)、类(class)、继承(inheritance)、消息(message)等核心概念UML: 统一建模语言(unifed modeling language),是一种基于面向对象的可视化建模语言,它提供丰富的以图形符号表示的模型元素,这些标准的图形符号隐含了UML 的语法,而由这些图形符号组成的各种模型则给出了UML 的语义。SRS :软件需求规格说明书(software requirement specification),是软件开发人员在分析阶段需要完成的用于描述需求的文档。黑盒测试:根据被测试程序功能来进行测试,是在程序接口进行的测试,它只检查程序功能是否按规格说明书的规定正常使用,程序是否能适当的接收输入信息并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性,又叫做功能测试白盒测试:以程序的结构为依据,按照程序内部的逻辑测试程序,检测程序中重要执行通路是否都按预定要求正确工作,又叫做结构测试SE2 :软件工程环境(software engineering environment)内聚:是从功能的角度对模块内部聚合能力的量度耦合:是对软件内部块间联系的度量模块:是一个拥有明确定义的输入、输出和特性的程序实体模块化:把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能模块化设计:按照规定的原则把大型软件划分为一个个较小的、相对独立但相互关联的模块IDE:集成开发环境Ant:是一种基于Java 的build 工具。JIRA:是目前比较流行的基于Java 架构的过程管理系统,CVS:是一个C/S 系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS 版本控制系统是一种GNU 软件包,主要用于在多人开发环境下的源码的维护。SVN:是一款版本管理工具,是cvs 的接班人。目前,绝大多数开源软件都使用svn 作为代码版本管理软件。MVC:模型-视图-控制架构(Model-View-Control)传统软件过程瀑布模型将整个软件过程严格地划分阶段,是一种基于软件生存周期的线性开发模型,前一阶段的工作完成之后,后一阶段才能开始,每一阶段必须完成规定的文档,并对完成的文档进行复审,以便尽早发现问题,消除隐患。特点:阶段的顺序性和依赖性推迟实现的观点质量保证的观点优点提供了按阶段划分的检查点可以在迭代模型中应用瀑布模型缺点不适合需求模糊的系统开发初始阶段很难彻底弄清软件需求按照瀑布模型的阶段划分,可将软件测试分为单元测试,集成测试,系统测试。快速原型模型先建立一个能反应用户主要需求的原型,原型只包括未来系统的主要功能及系统的重要接口。以便判断哪些功能是符合需要的,哪些还需要改进。原型系统往往采用能缩短开发周期的语言或工具。应将原型废弃不用,仅把建立原型的过程当作帮助定义软件需求的一种手段。特点“逼真”的原型可以使用户迅速作出反馈循环回溯和迭代非线性模型使用快速开发工具种类渐进型:对原型补充和修改获得最终系统抛弃型:原型废弃不用应防止的偏向舍不得抛弃,从而影响软件质量优点克服瀑布模型的缺点,减少由于软件需求不明确带来的风险缺点用户不舍得废弃原型开发者不愿推倒重来,或限制了开发人员的创新软件演化模型增量模型融合了瀑布模型的顺序特征和快速原型法的迭代特征。采用随时间进展而交错的线性序列,每一个线性序列产生软件一个可发布的“增量”,开发的各次迭代中,每次完成其中的一个增量。第一个增量通常是软件的核心部分。增量小而可用的软件第一个增量通常是软件的核心特点在前面增量的基础上开发后面的增量每个增量的开发可用瀑布或快速原型模型每个增量开发的顺序性和总体的迭代性相结合螺旋模型将瀑布模型和快速原型模型结合起来,并强调了其他模型所忽视的风险分析,适合大型复杂系统。每轮螺旋包含了一下4 种活动:1、计划:确定目标,选择方案,选定完成目标的策略2、风险分析:从风险角度分析该策略3、开发:启动一个开发活动4、用户评审:评价前一步的结果,计划下一轮的工作特点瀑布模型(顺序性、边开发边复审)+ 快速原型(迭代性)风险分析 发现、控制风险第一章1.软件危机的概念:软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题。概括地说,软件危机包含两方面问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。1. 软件危机产生的原因?原因一:软件本身的特点软件是逻辑产品;软件规模庞大原因二:软件专业人员本身的素质所决定的:软件专业人员对软件开发和维护存在糊涂的观念,在实践过程中采用了错误的方法和技术忽视用户需求分析或分析不足;对软件生存周期这一过程认识不明确;对完整的软件配置认识不准确;忽略了软件维护的重要性;2. 消除软件危机的途径(1)对计算机软件应当有一个正确的认识;(2)应当有组织、有计划、通过严格的管理手段进行软件的开发;(3)及时总结软件开发的成功技术和方法并加以推广;(4)开发和使用更好的软件工具; 总之,为了解决软件危机,既要有技术措施,又要有必要的组织管理措施。3. 什么是软件工程?软件工程是研究软件生产的一门学科。它采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以达到经济地开发出高质量的软件并有效的维护它的目的。5软件生命周期分为哪几个阶段,各阶段的任务是什么? 软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分为若干个阶段。软件定义时期的任务是:确定软件开发工程必须完成的总目标;确定工程的可行性;到处实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并制定工程进度表。这一时期可划分为三个阶段:问题定义、可行性研究、需求分析。软件开发时期的任务是:具体设计和实现在前一个时期定义的软件。这一时期由四阶段组成:总体设计、详细设计、编码和单元测试、综合测试。软件维护时期的任务是:当软件在使用过程中发现错误时加以改正;当环境改变时修改软件以适应新的环境;当用户有新要求时及时改进软件以满足用户的新需要。问题定义阶段要回答的关键问题是“要解决的问题是什么?”通过对客户的访问调查,系统分析员扼要的写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后,这份报告还应该得到客户的确认。可行性研究本阶段的任务是根据用户提出的工程项目的性质、目标和规模,进一步了解用户的要求及现有的环境及条件,从技术、经济和社会等多方面研究并论证该项目的可行性。即该项目是否值得去解决,是否存在可行的解决办法。此时,系统分析人员应在用户的配合下对用户的要求和现有的环境进行深入调查并写出调研报告。进而进行可行性论证。可行性论证包括经济可行性、技术可行性、操作可行性、法律可行性等。在此基础上还要制定初步的项目计划,包括需要的软硬件资源、定义任务、风险分析、成本/效益分析以及进度安排等。可行性研究的结果将是使用部门负责人做出是否继续进行该项目决定的重要依据需求分析的任务是确定待开发的软件系统“做什么”。软件系统需求一般由用户提出。系统分析员和开发人员在需求分析阶段必须与用户反复讨论、协商,充分交流信息,并用某种方法和工具构建软件系统的逻辑模型。总体设计阶段必须回答的关键问题是:“概括地说,应该怎样实现目标系统?”这一阶段对需求规格说明中提供的软件系统逻辑模型进行进一步的分解,从而建立软件系统的总体结构和各子系统之间、各模块之间的关系,定义各子系统接口界面和各功能模块的接口,设计全局数据库或数据结构,规定设计约束,制定组装测试计划,进而给出每个功能模块的功能描述、全局数据定义和外部文件定义等。总体设计阶段的主要成果有概要设计说明书、 数据库或数据结构说明书、组装测试计划等文档详细设计是将概要设计产生的功能模块进一步细化,形成可编程的程序模块,然后设计程序模块的内部细节,包括算法、数据结构以及各程序模块间的接口信息,并设计模块的单元测试计划。可以采用结构化的设计方法,采用结构化的程序流程图、N-S图、过程设计语言(PDL,Procedure Design Language)等工具进行描述,也可以采用面向对象的设计方法等等。详细设计阶段的主要成果是“详细设计规格说明”(或称“模块开发卷宗”)和单元测试计划等详细设计文档。编码和单元测试编码的主要任务是根据详细设计规格说明,用某种选定的程序设计语言把详细设计的结果转化为机器可运行的源程序模块,这是一个编程和调试程序的过程。编码阶段应注意遵循编程标准、养成良好的编程风格,以便编写出正确的便于理解、调试和维护的程序模块。单元测试:每编写出一个程序模块的源程序,调试通过后,即对该模块进行测试,这称为单元测试。这一阶段结束时应提供按一定规则存在盘上的通过单元测试的各功能模块的集合、详细的单元测试报告等文档。综合测试这个阶段的关键任务是通过各种类型的测试和调试使软件达到预定的要求。最基本的测试是集成测试和验收测试。集成测试是根据概要设计提供的软件结构、各功能模块的说明和集成测试计划,把经过单元测试检验的模块按照某种选定的策略逐步进行装配和测试。验收测试是按照验收测试计划和准则对软件系统进行测试,看其是否达到了需求规格说明中定义的全部功能和性能等方面的需求。这一阶段应将测试计划、详细测试方案和实际测试结果保存为相应的文档,作为软件配置的一个组成部分。软件维护软件维护的任务是通过各种维护活动使软件系统持久地满足用户的需求。每项维护活动实质上都是一次压缩和简化了的软件定义和软件开发过程。都要经历提出维护要求、分析维护要求、提出维护方案、审批维护方案、确定维护计划、修改软件设计、修改程序、测试程序、评审、验收等步骤。通常有四类维护活动:改正性维护、适应性维护、完善性维护和预防性维护。每一项维护活动都应该准确记录下来,作为正式的文档资料加以保管。4. 瀑布模型的优缺点:瀑布模型的优点可以强迫开发人员采用规范的方法;严格规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。瀑布模型的缺点在软件开发的初期阶段就要求做出正确、全面、完整的需求分析对许多应用软件来说是极其困难的。在需求分析阶段,当需求确定后,无法及时验证需求是否正确、完整。作为整体开发的瀑布模型,由于不支持产品的演化,缺乏灵活性,对开发过程中很难发现的错误,只有在最终产品运行时才能暴露出来,从而使软件产品难以维护。瀑布模型适用的场合瀑布模型一般适用于功能、性能明确、完整、无重大变化的软件系统的开发。例如操作系统、编译系统、数据库管理系统等系统软件的开发。应用有一定的局限性。8.快速原型模型适用的场合原型模型比瀑布模型更符合人们认识事物的过程和规律,是一种较实用的开发框架。它适合于那些不能预先确切定义需求的软件系统的开发,更适合于那些项目组成员(包括分析员、设计员、程序员和用户)不能很好交流或通信有困难的情况。9.增量模型的优点能在较短时间内向用户提交可完成部分工作的产品。逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。增量模型的缺点在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计的便于按照这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,这就意味着需要更精心的设计。10.螺旋模型的优点对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。减少了过多测试或测试不足所带来的风险。在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。螺旋模型的缺点如果每次迭代的效率不高,致使迭代次数过多,将会增加成本并推迟提交时间。使用该模型需要有相当丰富的风险评估经验和专门知识,要求开发队伍水平较高。螺旋模型适用的场合支持需求不明确、特别是大型软件系统的开发,并支持面向规格说明、面向过程、面向对象等多种软件开发方法,是一种具有广阔前景的模型。11.1、喷泉模型的优点 喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。 2、喷泉模型的缺点 由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。 第二章1. 可行性研究的任务可行性研究的目的:用最小的代价,在尽可能短的时间内确定问题是否能够解决。可行性研究的实质:进行一次大大压缩简化了的系统分析和设计的过程。可行性研究,首先需要进一步分析和澄清问题定义;在澄清了问题定义之后,系统分析员应该导出系统的逻辑模型;然后从系统逻辑模型出发,探索若干种可供选择的主要解法(即系统实现方案);之后再对每种解法仔细研究它的可行性。 一般说来,需要着重从以下五方面研究每种解法的可行性:技术可行性:使用现有的技术能否实现这个系统。经济可行性:这个系统的经济效益能否超过它的开发成本。运行可行性:为系统规定的运行方式是否可行。操作可行性:系统的操作方式在这个用户组织内是否行得通。法律可行性:系统的开发是否会侵犯他人、集体或国家的利益,是否违反了国家的法律,并由此而承担法律责任。可行性研究最根本的任务是对以后的行动方针提出建议。如果问题没有可行的解,系统分析员应该建议停止这项开发工程,以避免时间、资源、人力和金钱的浪费。如果问题值得解,系统分析员应该推荐一个较好的解决方案,并且为工程制定一个初步的计划。可行性研究需要的时间长短取决于工程的规模。一般说来,可行性研究的成本是预期的工程总成本的5%10%。第五章1. 总体设计的任务是什么?总体设计又称为概要设计或初步设计,总体设计的基本目的就是回答“概括地说,系统应该如何实现?”这个问题。这个阶段的两个重要任务:划分出组成系统的物理元素;设计软件的结构,也就是确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。第七章1. 测试步骤:2.软件可靠性:是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。软件可用性: 是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。可靠性和可用性之间的主要差别是:可靠性意味着在0到t这段时间间隔内系统没有失效,而可用性只意味着在时刻t,系统是正常运行的。一般说来,对于任何其故障是可以修复的系统,都应该同时使用可靠性和可用性衡量它的优劣程度。第八章软件维护:指在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。软件维护通常包括4类活动:改正性维护、适应性维护、完善性维护、预防性维护。注意,4类维护活动都必须应用于整个软件配置,维护软件文档和维护软件的可执行代码同样重要。改正性维护:为了纠正在使用过程中暴露出来的程序错误而进行的维护活动。改正性维护的工作量大约占软件维护总工作量的17%-21%。适应性维护:为了适应外部环境的变化而进行的维护活动。适应性维护的工作量大约占软件维护总工作量的18%-25%。完善性维护:为了根据用户需要改进原有软件而进行的维护活动。完善性维护的工作量大约占软件维护总工作量的50%-66%。预防性维护:为了改进软件将来的可维护性和可靠性而进行的维护活动。预防性维护的工作量大约占软件维护总工作量的4%。
展开阅读全文