软件工程概述
什么是软件/strong>
- 软件=计算机程序+数据+有关的文档资料。
软件危机
软件危机/strong>
- 在计算机软件的开发和维护过程中所遇到的一系列严重问题。
产生软件危机的原因/strong>
- 与软件本身的特点有关。
- 软件开发与维护的方法不正确有关。
- …
软件工程
概念:
软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
软件工程层次图:
- 方法: 完成软件开发的各项任务的技术方法。
- 工具: 为运用方法而提供的自动的或半自动的软件工程支撑环境。
-
各个阶段之间具有顺序性和依赖性.
-
推迟实现的观点。
- 瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,仅考虑目标系统的逻辑模型,不涉及软件的物理实现
-
质量保证的观点。
- 规定了每个阶段都必须完成规定且合格的文档。
- 每个阶段结束前需要对完成的文档进行评审。
- 可强迫开发人员采用规范的方法(例如,结构化技术)
- 严格地规定了每个阶段必须提交的文档
- 每个阶段交出的所有产品都必须经过质量保证小组的仔细验证
- 是 规范的,文档驱动的方法。
- 过于理想化,导致最终开发出的软件产品可能不是用户真正需要的。
- 仅适用于 需求非常明确的项目开发,如:二次开发。
- 不适用于大型软件系统,大型软件系统的需求往往难以在前期确定。
- V模型是瀑布模型的一个变体。
- 该模型强调 开发过程中测试贯穿始终。
- 快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。
- 快速原型模型是为了克服瀑布模型的缺点,其快速构建起一个可在计算机上运行的原型系统,让用户使用原型并收集用户反馈意见的方法,主要用于获取用户的真实需求。
- 适用于用户需求不清,需求经常变化的情况,可以帮助导出系统需求并验证需求的有效性。
-
三种原型实现模型:
- 抛弃式原型开发。
- 演化式原型开发。
- 增量式原型开发。
- 增量模型也称为渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。
- 每个构件由多个相互作用的模块构成,并且能够完成特定的功能。
- 使用增量模型时,一般是尽快构造出可运行的产品,然后在该产品的基础上再增加需要的新的构建,使产品趋于完善。
- 是一种非整体开发的模型,该模型具有较大的灵活性,适用于软件需求不明确的一种模型。
- 整体上按照 瀑布模型的流程实施项目开发,以方便项目管理。软件的实际创建中,则将软件的功能分解为许多增量构件,并以构件为单位逐个地创建与交付,直到全部增量构件创建完毕。
- 如: 快速应用开发模型(Rapid Application Development,RAD) ,快速应用开发是一个增量型的软件开发过程模型,强调极短的开发周期和构件开发! 即 快速+构件!
- 要求软件具有开放的结构。
- 如何进行模块的划分。
- 如果没有对用户的需求变更进行规划,那么产生的初始增量可能会造成后续增量的不稳定。
- 一开始需求不清晰,会影响开发进度。
- 使用原型及其他方法来尽量降低风险。
- 结合了瀑布模型和快速原型模型的迭代开发模型(!!!强调了其他模型忽略的风险分析)
- 适用于内部开发的大型软件项目。
- 要求开发人员具有风险分析和排除风险的经验和知识。
- “喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。
- 以用户需求为动力,以对象为驱动,最核心的特点是迭代。
- 工作阶段
- 初始阶段: 建立业务模型,定义最终产品视图,确定项目的范围。
- 里程碑:生命周期目标。
- 精化阶段: 设计并确定系统体系结构,制定项目计划,确定资源需求
- 里程碑:生命周期架构。
- 构建阶段: 开发出所有构件和应用程序,集成为客户需要的产 品,并且详尽地测试所有功能。
- 里程碑:初始运作功能。
- 移交阶段: 把开发出的产品提交给用户使用。
- 里程碑:产品发布。
- 个体和交互胜过过程和工具
- 可以工作的软件胜过面面俱到的文档
- 客户合作胜过合同谈判
- 响应变化胜过遵循计划
- 极限编程法。(四大价值观,五大原则)
- 水晶法。(强调经常交付,认为不同的项目需要不同的策略和方法)
- 并列争球法。(核心是迭代,增量交付,按照30天进行迭代开发和交付)
- 自适应软件开发方法。(核心是三个阶段: 猜测,合作,学习)
- 客户作为开发团队的成员。
- 使用用户素材。
- 短交付周期。
- 验收测试。
- 结队编程。
- 测试驱动开发。(测试先行,再编写程序)
- 集体代码所有制
- 持续集成 (可以按日甚至按小时为客户提供可运行的版本)
- 每周工作40小时。
- 开放的工作空间
- 及时调整计划
- 简单的设计**(只处理当前的需求,使设计保持简单)**
- 重构
- 使用隐喻 (找到合适的比喻传达信息)
- …
- 能够较好的适应有限资源和有限开发时间的约束。
- 可以视为对RUP的补充和完善。
- 主要解决代码质量低的问题,编码速度不能改变。
- 远不如RUP全面和完善。
- 规划阶段
- 设计阶段
- 开发阶段
- 稳定阶段
- 可以把微软过程视为RUP的一个精简配置版本。
- 可以把微软过程视作敏捷过程的一个扩充版本,其扩充了每个生命周期内的各个阶段的具体工作流程。
优点:
缺点:
V模型
快速原型模型
增量模型
困难:
螺旋模型
面向对象软件过程模型
喷泉模型
RUP把软件生命周期划分成4个连续的阶段。每个阶段的目标通过一次或多次迭代来完成。每个阶段达到 某个里程碑时结束。
敏捷过程与极限编程
敏捷过程为了使软件开发团队具有高效工作和快速响应变化的能力。
敏捷软件开发由下述4个简单的价值观声明组成。
根据上述4个价值观提出的软件过程统称为敏捷过程。
敏捷开发是以人为核心,迭代,循序渐进的开发方法
常见的敏捷开发方法有:
极限编程(eXtreme Programming,XP)是敏捷过程中最富盛名的一个,其名称中“极限”二字的含义是指把好的开发实践运用到极致。
极限编程已经成为一种典型的开发方法,广泛应用于*需求模糊且经常改变的场合*。
极限编程的有效实践:
优点:
缺点:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!