基础概念
信息系统生命周期
-
软件系统基本原理:用分阶段的生命周期计划严格管理、坚持进行阶段评审、实现严格的产品控制、采用现代化程序设计技术、结果应能清楚的审查、开发小组的人员应该少而精、承认不断改进软件工程实践的必要性。
-
软件工程的基本要素:方法、工具、过程
-
软件生命周期周期: 可行性分析和项目开发计划、需求分析、概要设计(选择系统解决方案、规划子系统)、详细设计(设计子系统内部具体实现)、编码、测试、维护
-
信息系统的生命周期: 系统规划(可行性分析和项目开发计划)、系统分析(需求分析)、系统设计(概要设计、详细设计)、系统实施(编码、测试)、系统运行与维护(维护);可以借用软件生命周期表示信息系统的生命周期。
-
为了便于项目管理,信息系统的生命周期还可以划分为立项、开发、维护、消亡四个阶段。
系统规划阶段
任务是对组织的环境、目标及现行系统的状况进行初步调查,根据组织目标和发展战略确定信息系统的发展战略,对建设新系统的需求做出分析和预测,同时考虑建设新系统所受的各种约束,研究建设新系统的必要性和可行性。根据需要和可能,给出制建系统的备选方案
输出:可行性分析报告、系统设计任务书
系统分析阶段
任务是根据系统设计任务书所确定的范围,对现行系统进行详细调查,描述现行系统的业务流程,指出现行系统的的局限 性和不足之处,确定新系统的基本目标和逻辑功能要求,即提出新系统的逻辑模型。需求分析阶段又称为逻辑设计阶段。这个阶段是整个系统建设的关键阶段,也是信息系统建设与一般工程项目的重要区别之一。
输出:系统说明书
系统设计阶段
系统分析阶段的任务是回答系统“做什么”的问题,而系统设计阶段要回答的问题是“怎么做”。该阶段的任务是根据系统说明书中规定的功能要求,具体设计实现逻辑模型的技术方案,也就是设计新系统的物理模型。这个阶段又称为物理设计阶段。可分为总体设计(概要设计)、详细设计两个子阶段。
输出:系统设计说明书(概要设计、详细设计说明书)
系统实施阶段
是将设计的系统付诸实施的阶段。这一阶段的任务包括计算机等设备的购置、安装和调试、程序的编写和调试、人员培训、数据文件转换、系统调试与转换等。这个阶段的特点是几个互相联系、互相制约的任务同时展开,必须精心安排、合理组织。系统实施是按实施计 划分阶段完成的,每个阶段写出实施进展报告。系统测试之后写出系统测试分析报告。
输出:实施进展报告、系统测试分析报告
系统运行和维护阶段
系统投入运行后,需要经常进行维护和评价,记录系统运行的情况,根据一定的规则对系统进行必要的修改,评价系统的工作质量和经济效益。
能力成熟度模型
能力成熟度模型用来衡量组织的能力成熟度。一般做软件项目的公司都会去申请这个认证。
能力成熟度模型CMM
| 能力等级 | 特点 | 关键过程区域 |
|---|---|---|
| 初始级(Initial) | 软件过程的特点是杂乱无章, 有时甚至很混乱,几乎没有明确定义的步骤, 项目的成功完全依赖个人的努力和英雄式核心人物的作用 | |
| 可重复级(Repeatable) | 建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性, 有必要的过程准则来重复以前在同类项目中的成功 | 软件配置管理、软件质量保证、软件子合同管理、软件项目跟踪和监督、软件项目策划、软件需求管理 |
| 已定义级(Defined) | 管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程。 所有项目都采用根据实际情况修改后得到的标准软件过程来开发和维护软件 | 同行评审、组间评审、软件产品工程、集成软件管理、培训大纲、组织过程定义、组织过程集点 |
| 已管理级(Managed) | 制定了软件过程和软件质量的详细度量标准。对软件过程和产品质量有定量的理解和控制 | 软件质量管理和定量过程管理 |
| 优化级(Optimized) | 加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进 | 过程更加管理、技术改革管理和缺陷预防 |
能力成熟度模型CMMI
是若干过程模型的综合和改进,不仅仅软件,而是支持多个工程学科和领域的、系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率。
CMMI 有两种表示方法
- 阶段表示法:类似 CMM ,它关注组织的成熟度,五个成熟度模型如下:
| 能力等级 | 特点 | 关键过程区域 |
|---|---|---|
| 初始级 | 过程不可预测且缺乏控制 | |
| 已管理级 | 过程为项目服务 | 需求管理、项目计划、配置管理、项目监督与控制、供应商合同管理、质量和分析、过程和产品质量保证 |
| 已定义级 | 过程为组织服务 | 需求开发、技术解决方案、产品集成、验证、确认组织过程集点、组织级过程定义、组织级培训、集成项目管理、风险管理、集成化的团队、决策分析和解决方案、组织级集成环境 |
| 定量管理 | 过程已度量和控制 | 组织过程性能、定量项目管理 |
| 优化级 | 集中过程改进和优化 | 组织改革与实施、因果分析和解决方案 |
- 连续式模型:关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级。
软件过程模型
瀑布模型
瀑布模型(SDLC):瀑布模型是一个经典的软件生命周期模型,一般将软件开发分为:可行性分析(计划)、需求分析、设计(概要设计、详细设计)、编码(含单元测试)、测试、运行维护等几个阶段
瀑布模型有下列几个特点
- 从上一项开发活动接受该项活动的工作对象作为输入。
- 利用这一输入,实施该项活动应完成的工作内容。
- 给出该项活动的工作成果,作为输入传给下一项开发活动。
- 对该项活动的实施工作成果进行评审, 若其工作成果得到确认,则继续进行下一项开发活动;否则返回前一项,甚至更前项的活动,尽量较少多个阶段间的反复。以相对来说较小的费用来开发软件。
螺旋模型
螺旋模型是一个演化软件过程模型,将原型实现的迭代特征与线性顺序(瀑布)模型中控制的和系统化的方面结合起来。在螺旋模型中,软件开发是一系列的增量发布。
开发过程具有周期性重复的螺旋线状。四个象限标志每个周期所划分的四个阶段:制定计划、风险分析、实施工程和客户评估。螺旋模型强调了风险分析,特别适用于庞大而复杂度的,高风险的系统。
瀑布模型不适合于需求不明确的情况,螺旋模型就是专门解决瀑布模型这个缺点的。
兼有原型模型的特征,循环往复。
V模型
V 模型从整体上看起来,就是一个 V 字型的结构,由左右两边组成。左边的下划线分别代表了需求分析、概要设计、详细设计、编码。右边的上划线代表了单元测试、集成测试、系统测试与验收测试。
- 单元测试的主要目的是针对编码过程中可能存在的各种错误。
- 集成测试的主要目的是针对详细设计过程中可能存在的问题。
- 系统测试主要针对概要设计,检查系统作为一个整体是否有效地得到运行
- 验收测试通常由业务专家或者用户进行,以确认产品能真正符合用户业务上的需要。
- V 模型用于需求明确和需求变更不频繁的情形。
计划要在实施之前完成,所以编码阶段进行单元测试,依据是详细设计说明书;详细设计阶段进行集成测试,依据是概要设计说明书,依次类推。
原型化模型
原型化模型的第一步就是创建一个快速原型,能够满足项目干系人与未来的用户可以与原型进行交互,再通过与相关干系人进行充分的讨论和分析, 最终弄清楚当前系统的需求,进行充分的了解之后,在原型的基础上开发出用户满意的产品。
原型法认为在很难一下子全面准确地提出用户需求的情况下,原型应当具备的特点如下:
- 实际可行
- 具有最终系统的基本特征
- 构造方便、快速、造价低。原型法的特点在于原型法对用户的需求是动态响应、逐步纳入的。
增量模型
- 增量模型:首先开发核心模块功能,而后与用户确认,之后再开发次核心模块的功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发,优先级最高的服务最先交付。
- 特点:由于并不是从系统整体角度规划各个模块,因此不利于模块划分。难点在于如何将客户需求划分为多个增量。与原型不同的是增量模型的每一次增量版本都可以作为独立可操作的作品,而原型的构造一般是为了演示。
其它模型
- 喷泉模型:是一种以用户需求为动力,以对象作为驱动的模型,适合面向对象的开发方法。使开发过程具有迭代性和无间隙性。
- 基于构件的开发模型 CBSD:利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品软件构件;特点是增强了复用性,在系统开发过程中,会构建一个构件库,供其它系统复用,因此可以提高可靠性,节省时间和成本。
- 形式化方法模型:建立在严格数学基础上的一种软件开发方法,主要活动是生成计算机软件形式 化的数学规格说明。
软件产品线
- 软件产品线是一个产品集合,这些产品共享一个公共的、可管理的特征集,这个特征集能满足特定领域的特定需求。软件产品线是一个十分适合专业的开发组织的软件开发方法,能有效地提高软件生产率和质量,缩短开发时间,降低总开发成本。
- 核心资源:包括所有产品所公用的软件架构,通用的构件、文档等。
- 产品集合:产品线中的各种产品。
| 维度 | 演化方式 | 革命方式 |
|---|---|---|
| 基于现有产品 | 基于现有产品架构设计产品线的架构,经演化现有构件,开发产品线构件 | 核心资源的开发基于现有产品集的需求和可预测的、将来需求的超集 |
| 全新产品线 | 产品线核心资源随产品新成员的需求而演化 | 开发满足所有预期产品线成员的需求的核心资源 |
逆向工程
软件复用是 将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括 领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。
逆向工程:软件的逆向工程是 分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。逆向工程的四个级别:
- 实现级:包括程序的抽象语法树、符号树、过程的设计表示
- 结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图、程序和数据结构。
- 功能级:包括反映程序段功能及程序段之间关系的信息,例如数据和控制流模型。
- 领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息,例如 E-R 模型。
其中,领域级抽象级别最高,完备性最低,实现级抽象级别最低,完备性最高。
与逆向工程相关的概念有 重构、设 计恢复、再工程和正向工程
- 重构是指在同一抽象级别上转换系统描述形式
- 设计恢复是指借助工具从已有程序中抽象出有关的数据设计、总体结构设计和过程设计等方面的信息。
- 再工程是指 在逆向工程所获得信息的基础上,修改或重构已有的系统,产生系统的一个新版本。再工程是对 现有系统的重新开发过程,包括逆向工程、新需求的考虑过程和正向工程三个步骤。它不仅能从已存在的程序中重新获得设计信息,而且还能使用这些信息来重构现有系统,以改进它的综合质量。再利用再工程重构现有系统的同时,一般会增加新的需求,包括增加新的功能和改善系统的性能。
- 正向工程是指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量。
软件系统工具
软件系统工具通常可以按软件过程活动将软件工具分为软件开发工具、软件维护工具、软件管理工具和软件支持工具。
软件开发工具:需求分析工具、设计工具、编码和排错工具。
软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具
软件管理和软件支持工具:项目管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择。