软件工程
1. 软件工程基础
- 软件危机:随着软件复杂度提升,开发成本、软件质量、生产效率等问题。
- 软件工程:以工程学思路进行软件开发,消除软件危机。
软件工程的三要素:
- 方法:完成软件工程项目的技术手段
- 工具:支持软件的开发、管理、文档生成
- 过程:支持软件开发的各个环节控制 、管理
信息系统生命周期模型
五阶模型:系统规划——系统分析——系统设计——系统实施——运行维护
四阶模型:立项——开发——运维——消亡
系统规划:确定信息系统的发展战略,研究建设新系统的必要性和可能性、给出拟建系统的备选方案并进行可行性研究。
系统分析:进行详细调查、描述业务流程、指出局限性和不足、确定逻辑模型。
系统设计:概要设计(设计软件的结构、组成模块和模块间调用关键和每个模块的功能)和详细设计物理模型。
系统实施:计算机等设备的配置、安装和调试、程序的编写和调试、人员培训、数据文件转换、系统调试与转换。
运行维护:记录系统运行情况、进行必要的修改、评价系统的工作质量和经济效益。
软件生命周期
软件产品从考虑其概念到产品交付使用,直至最终退役为止的整个过程。
- 计划阶段:确定待开发系统的总体目标和范围,可行性研究和预算、进度估算
- 分析阶段:分析、整理和提炼用户需求,编写需求规格说明书和初步用户手册。
- 设计阶段:根据需求规格说明书,确定软件体系结构,确定每个模块的实现算法、数据结构和接口,编写设计说明书,并组织评审。
- 实现阶段:将设计的各个模块编写成计算机可接受的程序代码和相关文档。
- 测试阶段:测试各个功能模块,然后将各个模块集成起来,进行功能需求测试。
- 运行维护阶段:后期运维,增删改。
2. 软件开发模型
典型软件生命周期模型
- 瀑布模型
- 螺旋模型
- 迭代模型
- V模型
- 原型化模型
- 敏捷方法
瀑布模型
瀑布模型是一个经典的软件生命周期模型,一般将软件开发分为:可行性分析(计划)、需求分析、软件设计(概要设计、详细设计)、编码(含单元测试)、测试、运行维护等几个阶段。
瀑布模型中,上一项活动的输出作为当前活动的输入完成当前活动后,进行评审,通过则进下一项,否则返回之前。
特点:也称为生命周期法、预测型、计划驱动,是结构化方法中最常用的开发模 型,本质是“一次通过”。适用范围是需求明确或很少变更的项目,或开发团队比较弱、有厚实的行业实践基础、整批一次性交付有利于干系人。
螺旋模型
螺旋模型是一个演化软件过程模型,在瀑布模型和原型化模型的基础上的演进而来的。每一次迭代都包含了四个步骤:制订计划、风险分析、实施工程、客户评估。
在螺旋模型中,软件开发是一系列的增量发布。
螺旋模型在每一次迭代中增加了风险分析。
迭代模型
迭代模型中,每个阶段都执行一次传统的、完整的串行过程串,执行一次过程串就是一次迭代。每次迭代涉及的过程都包括不同比例的所有活动。(多次交付)
RUP软件统一过程就是迭代模型的一种。RUP中被分解为4个顺序的阶段:初始阶段(Inception)、细化阶段(Elaboration)、构建阶段(Construction)和交付阶段(Transition),这4个阶段的顺序执行就形成了一个周期。
V模型
V模型从整体上看起来,就是一个V字型的结构 ,由左右两边组成。
- 左边的下划线分别代表了用户需求、需求分析、概要设计、详细设计。
- 右边的上划线代表了单元测试、集成测试、系统测试和验收测试。
特点:细化了瀑布模型中的测试部分、开发阶段清楚、便于控制开发。适用于需求明确、需求变更不频繁的情况。
V模型特点:
- 单元测试的主要目的是针对编码过程中可能存在的各种错误。
- 集成测试的主要目的是针对详细设计中可能存在的问题。
- 系统测试主要针对概要设计,检查系统作为一个整体是否有效地得到运行。
- 验收测试通常由业务专家或者用户进行,以确认产品能真正符合用户业务上的需要。
- V模型用于需求明确和需求变更不频繁的情形。
原型化模型
原型化模型第一步就是创建一个快速原型,能够满足项目干系人与未来的用户可以与原型进行交互,再通过与相关干系人进行充分的讨论和分析,最终弄清楚当前系统的需求,进行了充分的了解之后,在原型的基础上开发出用户满意的产品。
原型特点:
- 实际可行
- 具有最终系统的基本特征
- 构造方便、快速,造价低
原型分类:
- 抛弃型原型:原型在系统真正实现以后就放弃不用了
- 进化型原型:通过修改和追加功能的过程逐渐丰富,演化成最终系统。
敏捷开发模型
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,相对于传统软件开发方法的“非敏捷”,更强调程序员团队和业务专家之间的紧密写作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、奏而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织的方法,也更注重软件开发中人的作用。Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。
特点:较小增量、快速迭代(2-4周)、变更驱动、每次交付最有价值成果、 适用:小型或中型软件开发团队,并且客户的需求模糊或多变。
常见的敏捷开发方法有:
- 极限编程(XP)
- Scrum
- 自适应软件开发
- 水晶方法
- 特性驱动开发
3. 软件开发方法
信息系统开发方法
常用开发方法:结构化方法、面向对象方法、原型化方法、面向服务的方法。
结构化方法由结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)组成。
精髓:自顶向下、逐步求精和模块化设计。
结构化方法主要特点:
- 开发目标清晰化
- 开发工作阶段化
- 开发文档规范化
- 设计方法结构化
结构化方法的缺点:
- 开发周期长
- 难以适应需求变化
- 很少考虑数据结构
结构化方法特别适合于数据处理领域的问题,但不适应于规模较大、比较复杂的系统开发。
面向对象开发方法
面向对象(OO)方法:认为客观世界是由各种对象组成的,任何事物都是对象,与结构化方法类似,OO方法也划分阶段,但其中的系统分析 、系统设计和系统实现三个阶段之间已经没有“缝隙”,也就说,这三个阶段的界限变得不明确。
面向对象的方法(OO)构建在类和对象之上,随后发展起来的建模技术将相关对象按照业务功能进行分组,就形成了构件(Component)的概念。
大型信息系统的开发,通常是将结构化方法和OO方法结合起来。首先,使用结构化方法进行自顶向下的整体划分;然后,自底向上地采用OO方法进行开发。
优点:具有更好的复用性,有利于用户和开发人员沟通,缩短开发时间。
面向对象三大特征:封装性、继承性和多态性。
原型化方法
原型化方法也称为快速原型法(简称为原型法)。根据用户初步需求,利用系统开发工具,快速地建立一个系统模型展示给用户,在此基础上与用户交流,最终实现用户需求的信息系统快速开发。
水平原型
通常只是功能的导航,但并未真实实现功能,主要用在界面上。
垂直原型
也称为结构化原型,实现了一部分功能,垂直原型主要用在复杂的算法实现上。
抛弃式原型
探索式原型,指的是达到预期的目的之后,原型本身被抛弃。