第1章 软件工程概述
软件=程序+数据+文档
软件的特点:抽象性、可复制性、不会磨损、依赖性、开发效率低、开发费用高
软件工程=管理+技术
软件工程的目标:
初级目标——在预算内如期完成
高级目标——良好的结构,较好的可维护性、扩展性、重用性
软件工程专家B.W.Boehm于1983年提出了为确保软件产品质量和开发效率的7条基本原理:
(1) 用分阶段的生命周期计划严格管理。
(2) 坚持进行阶段评审。
(3) 实行严格的产品控制。
(4) 采用现代程序设计技术。
(5) 结果应能清楚德审查。
(6) 开发小组的人员应该少而精。
(7) 不断改进软件工程实践的经验和技术。
可行性研究的主要任务是:了解客户的要求及现实环境,从技术、经济和社会因素三方面研究并论证本软件项目的可行性,编写可行性研究报告,制定初步的项目开发计划。
具体步骤如下:
(1) 确定项目规模和目标。
(2) 研究正在运行的系统。
(3) 建立新系统的高层逻辑模型。
(4) 导出和评价各种方案。
(5) 推荐可行的方案。
(6) 编写可行性研究报告。
需求分析阶段的两个任务是捕获需求和分析整理需求。
总体设计的基本任务是:
(1) 设计出实现目标系统的几种可能的方案。此外,还应该制定出实现最佳方案的详细计划。
(2) 设计软件体系结构。通常指划分模块,确定模块的功能及其相互之间的调用关系,确定模块间的接口等。
(3) 数据库设计。
(4) 编写概要设计文档。
软件生命周期模型也称为软件过程模型,反映软件生存周期各个阶段的工作如何组织、衔接。
1. 瀑布模型
瀑布模型是软件工程的基础模型。其核心思想是阶段性的评审和验证,每一阶段结束时都要给出完整的文档。缺点是该模型缺乏灵活性,后一阶段出现的问题需要通过前一阶段的重新确认来解决。
2. 原型模型
快速设计软件中对用户可见部分的表示,构造原型,由用户评估,逐步调整原型,使之满足用户的需要。
其优点是开发者和用户可以充分沟通,开发过程也是学习过程,可以低风险开发柔性较大的计算机系统。
3. 螺旋模型
把软件开发过程组织成为一个逐步细化的螺旋周期,每经历一个周期,系统就得到进一步的细化和完善;整个模型紧密围绕开发中的风险分析,推动软件设计向深层扩展和求精。该模型要求开发人员与用户能经常直接进行交流,通常用来指导内部发行的大型软件项目的开发。
4. 增量模型
增量模型是一种渐进式的模型,它把软件产品作为一系列的增量构件来设计、编码、集成和测试,每个构件由多个相互作用的模块构成。使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能,在此基础上再开发其他功能构件。
其优点是能在较短的时间内,向用户提交可完成部分工作的产品;逐步增加产品功能,可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
最好在系统的架构设计完成后再开始进行增量设计,这样可以更好地保证整个系统的健壮性和可扩展性。
5. 迭代模型
迭代模型也是一种渐进式的模型。
就对风险的消除上,增量和迭代模型都能够较好地控制前期的风险,但迭代模型在这方面更有优势。迭代模型可以更多地从总体方面思考系统问题,一开始就给出相对完善的框架或原型,后期的每次迭代都是针对上次迭代的逐步精化。
6. 快速原型模型
快速原型是快速建立起可以在计算机上运行的程序,它所完成的功能往往是最终产品功能的一个子集。通过让用户试用,收集反馈意见,从而获取精确的需求。
这是一种很好的启发式方法,可以快速地挖掘用户需求并达成需求理解上的一致。当用户没有信息系统的使用经验或系统分析员没有过多的需求分析和挖掘经验的时候,这种方法将非常有效。
7. 喷泉模型
在面向对象方法中,提出了与瀑布模型相对应的喷泉模型,该模型的主要特点是认为软件生命周期的各个阶段是相互重叠和多次反复的。整个开发过程中都使用统一的概念“对象”进行分析,使用统一的概念和符号是分析设计过程,各阶段间没有明显的边界,即“无缝”衔接,因此各开发步骤可以多次反复迭代,逐步深化。
8. MSF过程模型
MSF(Microsoft Solution Framework)过程模型,即基于微软解决方案框架的软件过程模型,它是瀑布模型和螺旋模型的组合,吸收了瀑布模型的里程碑和螺旋模型的反复迭代的思想。MSF过程模型将软件开发过程划分为5个阶段,每一阶段结束时都有明确的交付成果,通过文档驱动、需求驱动、风险驱动完成整个开发过程,每次迭代由一个新版本的发布来实现。
生命周期模型的应用
(1) 总体上说,面向对象的程序设计采用的是喷泉模型,但局部可以结合其他模型。
(2) 在前期需求明确、资料完整的情况下尽量采用瀑布模型。
(3) 在用户无信息系统使用经验、需求分析人员技能不足的情况下要借助原型。
(4) 在不确定性因素很多、很多东西前面无法计划的情况下尽量采用增量模型和螺旋模型。
(5) 在需求不稳定的情况下尽量采用增量迭代模型。
(6) 在资金和成本无法一次到位的情况下可以采用增量模型,将产品分多个版本进行发布。
(7) 增量、迭代和原型可以综合使用,但每一次增量或迭代都必须有明确的交付内容。
软件工程方法学也称程序设计方法学或软件开发方法。它是软件工程中的一个重要内容,主要研究如何通过分解和抽象,将复杂问题转化成一系列可以理解和实现的简单问题。软件工程方法学的三个要素是:方法、工具和过程。其中,方法是完成软件开发各项任务的技术方法;工具为方法的运用提供自动的或半自动的软件支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
目前主要的软件开发方法有:面向过程的方法(结构化方法)、面向对象的方法、面向构件的方法、形式化方法等。它们的特点是:
l 面向过程的程序=算法+数据结构
l 面向对象的程序=对象+类+继承+消息通信
l 面向构件的程序=构件+架构
形式化方法时建立在严格的数学基础上,以逻辑推理为出发点,具有精确数学语义的开发方法。