软件工程概述
什么是软件?
- 软件=计算机程序+数据+有关的文档资料。
软件危机
软件危机?
- 在计算机软件的开发和维护过程中所遇到的一系列严重问题。
产生软件危机的原因?
- 与软件本身的特点有关。
- 软件开发与维护的方法不正确有关。
- …
软件工程
概念:
软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
软件工程层次图:
- 方法: 完成软件开发的各项任务的技术方法。
- 工具: 为运用方法而提供的自动的或半自动的软件工程支撑环境。
- 过程: 规定了完成各项任务的工作步骤。
软件工程的本质特征:
- 软件工程关注于大型程序的构造。
- 软件工程的中心课题是控制复杂性。
- 软件经常变化。
- 开发软件的效率非常重要。
- 和谐的合作是开发软件的关键。
- 软件必须有效地支持它的用户。
- 在软件工程领域通常由 具有一种文化背景的人替另一种文化背景的人创造产品。
软件工程的基本原理
- 用分阶段的生命周期计划严格管理。
- 坚持进行阶段评审。
- 实现严格的产品控制。
- 采用现代程序设计技术。
- 结果应能清楚地审查。
- 开发小组的人员应该少而精。
- 承认不断改进软件工程时间的必要性。
软件工程方法学
传统方法学
传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用
特点:
- 把软件生命周期依次划分为若干个阶段,顺序完成每个阶段的任务
- 任何两个相邻阶段,前一阶段的结束标准就是后一阶段的开始标准
- 每一个阶段结束之前都必须进行正式严格的技术审查和管理复审
- 审查的标准就是每个阶段都应该交出“最新式的”高质量的文档资料
面向对象方法学
与传统方法相反,面向对象方法把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法
面向对象方法=对象+类+继承+用消息通信
特点:
- 把对象作为融合了数据及在数据上的操作行为的统一的软件构件
- 把所有对象都划分成类(class)
- 按照父类与子类的关系,把若干个相关类组成一个层次结构的系统
- •对象彼此间仅能通过发送消息互相联系
基本原则:
尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程,降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作.
软件生命周期
软件生命周期由三个时期组成,每个时期又可划分成多个阶段。(八个阶段)
三个时期:
- 软件定义
- 软件开发
- 软件维护
八个阶段:(3+4+1)
软件定义的三个阶段:
- 问题定义。
- 可行性研究。
- 需求分析。
软件开发的四个阶段:
- 总体设计 (属于系统设计)
- 详细设计 (属于系统设计)
- 编码 (属于系统实现)
- 单元测试+综合测试 (属于系统实现)
软件维护一个阶段:
- 使软件持久的满足用户的需要。
- 通常有四类维护活动:
- 改正性维护: 诊断并改正软件运行过程中发现的错误
- 适应性维护: 修改软件以适应环境的变化
- 完善性维护: 改进或扩充软件使其更完善
- 预防性维护: 为将来的维护活动预先做准备
软件过程
-
软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
-
软件过程描述为了开发出客户需要的软件,什么人(who)、在什么时候(when)、做什么事(what)以及怎样(how)做这些事以实现某一个特定的具体目标.
-
软件过程模型规定了把软件生命周期划分成哪些阶段及各个阶段的执行顺序。
8种典形的软件过程模型
传统软件过程模型
瀑布模型
特点:
-
各个阶段之间具有顺序性和依赖性.
-
推迟实现的观点。
- 瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,仅考虑目标系统的逻辑模型,不涉及软件的物理实现
-
质量保证的观点。
- 规定了每个阶段都必须完成规定且合格的文档。
- 每个阶段结束前需要对完成的文档进行评审。
优点:
- 可强迫开发人员采用规范的方法(例如,结构化技术)
- 严格地规定了每个阶段必须提交的文档
- 每个阶段交出的所有产品都必须经过质量保证小组的仔细验证
- 是 规范的,文档驱动的方法。
缺点:
- 过于理想化,导致最终开发出的软件产品可能不是用户真正需要的。
- 仅适用于 需求非常明确的项目开发,如:二次开发。
- 不适用于大型软件系统,大型软件系统的需求往往难以在前期确定。
V模型
- V模型是瀑布模型的一个变体。
- 该模型强调 开发过程中测试贯穿始终。
快速原型模型
- 快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。
- 快速原型模型是为了克服瀑布模型的缺点,其快速构建起一个可在计算机上运行的原型系统,让用户使用原型并收集用户反馈意见的方法,主要用于获取用户的真实需求。
- 适用于用户需求不清,需求经常变化的情况,可以帮助导出系统需求并验证需求的有效性。
- 三种原型实现模型:
- 抛弃式原型开发。
- 演化式原型开发。
- 增量式原型开发。
增量模型
- 增量模型也称为渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。
- 每个构件由多个相互作用的模块构成,并且能够完成特定的功能。
- 使用增量模型时,一般是尽快构造出可运行的产品,然后在该产品的基础上再增加需要的新的构建,使产品趋于完善。
- 是一种非整体开发的模型,该模型具有较大的灵活性,适用于软件需求不明确的一种模型。
- 整体上按照 瀑布模型的流程实施项目开发,以方便项目管理。软件的实际创建中,则将软件的功能分解为许多增量构件,并以构件为单位逐个地创建与交付,直到全部增量构件创建完毕。
- 如: 快速应用开发模型(Rapid Application Development,RAD) ,快速应用开发是一个增量型的软件开发过程模型,强调极短的开发周期和构件开发! 即 快速+构件!
困难:
- 要求软件具有开放的结构。
- 如何进行模块的划分。
- 如果没有对用户的需求变更进行规划,那么产生的初始增量可能会造成后续增量的不稳定。
- 一开始需求不清晰,会影响开发进度。
螺旋模型
- 使用原型及其他方法来尽量降低风险。
- 结合了瀑布模型和快速原型模型的迭代开发模型(!!!强调了其他模型忽略的风险分析)
- 适用于内部开发的大型软件项目。
- 要求开发人员具有风险分析和排除风险的经验和知识。
面向对象软件过程模型
喷泉模型
- “喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。
- 以用户需求为动力,以对象为驱动,最核心的特点是迭代。
- 所有开发活动没有明显的边界,允许各种开发活动交叉进行。
Rational统一过程
Rational统一过程(Rational Unified Process,RUP)是由Rational软件公司推出的一种完整而且完美的软件过程。
以"用例“驱动,以"体系结构"为核心,迭代及增量的软件过程框架,以UML方法和工具支持
RUP总结了经过多年商业化验证的6条最有效的软件开发经验,这些经验被称为“最佳实践”
最佳实践:
- 迭代式开发。
- 管理需求
- 使用基于构件的体系结构。
- 可视化建模
- 验证软件质量
- 控制软件变更
RUP软件开发生命周期:
- 核心工作流:
RUP软件开发生命周期是一个二维的生命周期模型,纵轴代表核心工作流,横轴代表时间; 纵轴代表核心工作流,横轴代表时间:
RUP中有9个核心工作流,其中前6个为核心过程工作流程,后3个为核心支持工作流程。
- 工作阶段
RUP把软件生命周期划分成4个连续的阶段。每个阶段的目标通过一次或多次迭代来完成。每个阶段达到 某个里程碑时结束。
- 初始阶段: 建立业务模型,定义最终产品视图,确定项目的范围。
- 里程碑:生命周期目标。
- 精化阶段: 设计并确定系统体系结构,制定项目计划,确定资源需求
- 里程碑:生命周期架构。
- 构建阶段: 开发出所有构件和应用程序,集成为客户需要的产 品,并且详尽地测试所有功能。
- 里程碑:初始运作功能。
- 移交阶段: 把开发出的产品提交给用户使用。
- 里程碑:产品发布。
敏捷过程与极限编程
敏捷过程为了使软件开发团队具有高效工作和快速响应变化的能力。
敏捷软件开发由下述4个简单的价值观声明组成。
- 个体和交互胜过过程和工具
- 可以工作的软件胜过面面俱到的文档
- 客户合作胜过合同谈判
- 响应变化胜过遵循计划
根据上述4个价值观提出的软件过程统称为敏捷过程。
敏捷开发是以人为核心,迭代,循序渐进的开发方法
常见的敏捷开发方法有:
- 极限编程法。(四大价值观,五大原则)
- 水晶法。(强调经常交付,认为不同的项目需要不同的策略和方法)
- 并列争球法。(核心是迭代,增量交付,按照30天进行迭代开发和交付)
- 自适应软件开发方法。(核心是三个阶段: 猜测,合作,学习)
极限编程(eXtreme Programming,XP)是敏捷过程中最富盛名的一个,其名称中“极限”二字的含义是指把好的开发实践运用到极致。
极限编程已经成为一种典型的开发方法,广泛应用于*需求模糊且经常改变的场合*。
极限编程的有效实践:
- 客户作为开发团队的成员。
- 使用用户素材。
- 短交付周期。
- 验收测试。
- 结队编程。
- 测试驱动开发。(测试先行,再编写程序)
- 集体代码所有制
- 持续集成 (可以按日甚至按小时为客户提供可运行的版本)
- 每周工作40小时。
- 开放的工作空间
- 及时调整计划
- 简单的设计**(只处理当前的需求,使设计保持简单)**
- 重构
- 使用隐喻 (找到合适的比喻传达信息)
- …
优点:
- 能够较好的适应有限资源和有限开发时间的约束。
- 可以视为对RUP的补充和完善。
- 主要解决代码质量低的问题,编码速度不能改变。
缺点:
- 远不如RUP全面和完善。
微软过程
微软过程准则:
微软软件生命周期:
- 规划阶段
- 设计阶段
- 开发阶段
- 稳定阶段
- 发布阶段
微软过程模型:
微软过程的每一个生命周期发布一个递进的软件版本,各个生命周期持续、快速地迭代循环。
- 可以把微软过程视为RUP的一个精简配置版本。
- 可以把微软过程视作敏捷过程的一个扩充版本,其扩充了每个生命周期内的各个阶段的具体工作流程。
The End!!创作不易,欢迎点赞/评论!!欢迎关注个人公众号