软件工程是软件开发的指导思想、方法体系,这属于软件设计师需要掌握的核心内容。
(1)软件工程知识:软件生存周期与软件生存周期模型、软件开发方法、软件开发项目管理、 软件开发工具与软件开发环境。
(2)系统分析基础知识:系统分析的主要步骤、机构化分析方法。
(3)系统设计基础知识:概要设计与详细设计的基本任务、系统设计的基本原理、系统模块结 构设计、结构化设计方法、面向数据结构的设计方法、系统详细设计。
(4)系统实施基础知识:系统实施的基本内容、程序设计方法、程序设计的基本模块、系统测试、系统转换。
(5)系统运行和维护基础知识:系统可维护性的概念、系统维护的类型、系统评价的概念和类型
(6)软件质量管理基础知识:软件质量特性(ISO/IEC 9126软件质量模型)、软件质量保证、软件复杂性的概念及度量方法(McCabe度量法)、软件评审(设计质量评审、程序质量评审)、软件容错技术。
(7)软件过程改进基础知识:软件能力成熟度模型CMM、统一过程(UP)与极限编程(XP)的基本概念。
本章的考点主要集中以下方面:
在软件生命周期与开发模型中,主要考查UP(统一过程)、XP(敏捷方法)以及传统软件开发模型的特点。
在系统开发方法论中,主要考查数据流图绘制原则、内聚与耦合。
在软件测试中,主要考查测试的阶段、白盒测试、黑盒测试、McCabe环路复杂度。
在软件质量保证中,主要考查软件质量特性。
在软件过程改进中,主要考查CMM每个阶段的特点及关键过程域。
在项目管理中,主要考查项目管理相关基本概念、Pert图、风险管理。
目录
一、软件工程知识
1.开发生命周期模型
系统开发的生命周期是指一个系统历经计划、分析、设计、编程、测试、维护直至淘汰的整个过程。生命周期阶段的划分通常可以采用以下三种方法:
Boehm划分法:计划(问题定义、可行性研究)、开发(需求分析、总体设计、详细设计、编码、测试)、运行(维护)三大阶段。
国标(GB8566-1988)划分法:可行性研究与计划、需求分析、概念设计、详细设计、实现、组装测试、确认测试、使用和维护。并在《GB/T8566-1995信息技术——软件生存期过程》中定义了获取过程、供应过程、开发过程、运行过程、维护过程、管理过程、支持过程七个部分。
RUP划分法:分为初始、细化、构造、移交四个主要阶段。为了指导软件的开发,可以用不同的方式将软件生命周期中的所有开发活动组织起来,从而形 成不同的软件开发模型。
2.开发模型
软件开发模型是几乎每次考试都会考查的重要知识点,现在主要掌握各种开发模型的特点与其应用场合。
瀑布模型:严格遵循软件生命周期各阶段的固定顺序,一个阶段完成再进入另一个阶段。其优 点是:可以使过程比较规范化,有利于评审;缺点在于:过于理想,缺乏灵活性,容易产生需求偏 差。所以瀑布模型的应用场合为:需求明确的项目、二次开发项目以及与原型法配合使用。
快速原型模型:采用了一种动态定义需求的方法,通过快速地建立一个能够反映用户主要需求 的软件原型,让用户在计算机上使用它,了解其概要,再根据反馈的结果进行修改,因此能够充分 体现用户的参与和决策。原型化人员对原型的实施很重要,衡量他们的重要标准是能否从用户的模 糊描述中快速地获取实际的需求。所以快速原型模型很好的弥补了瀑布模型的缺陷,它适合于需求不够明确的目。
演化模型:也是一种原型化开发,但与快速原型不同的是,快速原型模型在获得真实需求时, 就将抛弃原型。而演化模型则不然,它将从初始的模型中逐渐演化为最终软件产品,是一种“渐进 式”原型法。其应用场合也是需求不明确的项目。
增量模型:它采用的是一种“递增式”模型,它将软件产品划分成为一系列的增量构件,分别进行设计、编码、集成和测试。相对于原型法而言,这种模型其实是从系统开发的另一个方面看待问题,原型法关注点是“制作一个原型”,而增量模型的关注点是“系统的功能模块不是一次完成的,而是一块一块开发,以增加的方式进行的”。在现实开发中,我们会发现,一个项目开发过程既用了原型模型也用了增量模型。所以增量模型仍有利于进行需求不明确的项目开发。
螺旋模型:结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。
喷泉模型:主要用于描述面向对象的开发过程,最核心的特点是迭代。所有的开发活动没有明显的边界,允许各种开发活动交叉进行。
UP:既是一个统一的软件开发过程,是一个通用过程框架,可以应付种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。UP是基于构件的,这意味着利用它开发的软件系统是由构件构成的,构件之间通过定义良好的接口相互联系。在准备软件系统所有蓝图的时候,UP使用的是统一建模语言UML。与其他软件过程相比,UP具有三个显著的特点:用例驱动、以基本架构为中心、迭代和增量。
UP中的软件过程在时间上被分解为四个顺序的阶段,分别是初始阶段、细化阶段、构建阶段和交付阶段。每个阶段结束时都要安排一次技术评审,以确定这个阶段的目标是否已经满足。如果评审结果令人满意,就可以允许项目进入下一个阶段。
UP一般用于大型软件的开发。
敏捷开发:从敏捷开发一词的敏捷可以看出,该方法是一种轻量级的开发方法。这种开发方法 的主要思想是:传统的软件工程方法文档量太“重”了,现在需要进行减负,所以将不必要的文档都去掉,这就形成了敏捷开发。具体一点讲,敏捷方法包括:XP(极限编程)、自适应开发、水晶方法、特性驱动开发等。这些方法中,最著名的是XP方法(当然,XP方法最著名,并非因为方法本 身很好,而是提出该方法的人,是个牛人)。在XP方法中,提出了四大价值观:沟通、简单、反馈、勇气。五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。十二个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准。
二、系统开发方法论
系统开发方法包括:结构化方法、原型法、面向对象方法。其中原型法仅用于需求分析阶段。
1. 结构化方法
结构化方法是一种传统的软件开发方法,它是由结构化分析、结构化设计和结构化程序设计三 部分有机组合而成的。它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自 顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。
(1)结构化分析基础
结构化分析即我们平时所说的需求分析阶段,该阶段的主要任务是:解决“做什么”的问题。结构化分析方法是以自顶向下,逐步求精为基点,以一系列经过实践的考验被认为是正确的原以理论和技术为支撑,以数据流图,数据字典,结构化语言,判定表,判定树等图形表达为主要手段,强调开发方法的结构合理性和系统的结构合理性的软件分析方法。
(2)结构化设计基础
结构化设计是以结构化分析阶段所产生的成果为基础,进一步自顶而下、逐步求精和模块化的 过程。其主要工作内容是进行概要设计与详细设计(注:在结构化方法诞生时,架构设计还未提出,所以在此没有架构设计相关内容)。
概要设计的主要任务是把需求分析得到的数据流图转换为软件结构和数据结构。设计软件结构 的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块 间的接口及人机界面等。数据结构设计包括数据特征的描述、确定数据的结构特性、以及数据库的 设计。显然,概要设计建立的是目标系统的逻辑模型,与计算机无关。在概要设计过程中常常会使 用结构图(包括模块、调用、数据)、层次图、HIPO(层次图加输入/处理/输出图)来描述程序的结构。
详细设计是对概要设计的一个细化,就是详细设计每个模块实现算法,所需的局部结构。经常 使用的工具包括程序流程图、盒图、PAD图(问题分析图)、PDL(伪码)。
(3)模块设计原则
使用结构化设计方法进行设计时,需要遵循一定的原则,总结起来主要是两个方面:信息隐蔽 与模块独立</