一、软件
1983年IEEE对软件所下定义为:软件= 程序 + 数据 + 文档
软件的分类:
- 基于功能划分
系统软件、支撑软件、应用软件
- 基于规模划分
微型、小型、中型、大型…
软件的发展:
个体化(50-60年代中期)—> 作坊式(60-70中期) —> 工程化(70-80中期) —> 产业化(80-现在)
二、软件危机
软件危机是指在计算机软件开发和维护过程中所遇到的一系列严重问题。
软件危机的典型表现:
- 对软件开发成本和进度的估计常常很不不准确
- 用户对“已完成的”软件系统不满意
- 软件产品的质量往往靠不住
- 软件常常是不可维护的
- 软件通常没有适当的文档资料
- 软件成本在计算机系统总成本中所占比例逐年上升
- 软件开发生产率提高的速度远远跟不上计算机应用迅速普及及深入趋势
产生软件危机的原因:
- 客观原因:软件本身的特点,软件不同于硬件,它是计算机系统中的逻辑部件;软件不同于一般程序,它规模庞大。
- 主观原因:错误的认识和做法,忽视软件需求分析的重要性;认为软件开发就是编写程序并使之运行;轻视软件维护。
为了消除软件危机,我们意识到既要有技术措施(方法和工具),有要有必要的组织管理措施,因此我们提出了软件工程。
三、软件工程
(1)概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。
🟡定义(1993由IEEE给出的更全面更具体的定义):软件工程就是把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;并研究是何种途径。
(2)❗️软件工程的基本原理
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实行严格的产品控制
- 采用现程序设计技术
- 结果应能清除地审查
- 开发小组人员应该少而精
- 承认不断改进软件工程实践的必要性
(3)软件工程方法学(把软件生命周期全过程中使用的一整套技术方法的集合)
软件工程方法学包含三个要素:1⃣️方法2⃣️工具3⃣️过程
目前使用最广泛的软件工程方法学:传统方法学和面向对象方法学
(4)❗️软件生命周期
八个阶段:
- 问题定义——“要解决的问题是什么”
- 可行性研究——“这个问题是否值得去解决,是否有可行的解决办法”
- 需求分析——“解决这个问题系统必须做什么”
- 总体设计——“应该怎样实现目标系统”
- 详细设计——“怎样具体实现这个系统”
- 编码
- 测试
- 软件维护
四、软件过程
who when what how 以实现某个具体目标
通常使用生命周期模型简洁地描述软件过程
1⃣️瀑布模型(传统的)
✅适用场合:需求明确且稳定、技术成熟且工程管理较严格的大型系统。(航空航天,医疗,军事军工)
特点:
- 阶段间具有顺序性和依赖性
- 推迟实现的观点(在分析与设计阶段主要考虑目标系统逻辑模型不涉及软件物理实现)
- 质量保证的观点(每个阶段都必须完成规定文档📄;每个阶段结束都要对完成的文档进行评审)
缺点:
- 缺乏灵活性
- 束缚了创造性(完全由文档驱动
- 变更代价大
- 周期长
优点:
- 提高了软件质量
- 降低了维护成本
- 缓解了软件危机
2⃣️快速原型模型(又称原型模型、原型化模型
✅适用场合:图书借阅系统的主要界面…
特点:
- 快速!
- 基本上做到了顺序开发
- 做到了与用户沟通以明确需求
缺点:
- 采用的技术和工具不一定主流
- 快速建立起来的系统加上连续的修改可能导致原型质量低
- 客户意识不到一些质量问题
优点:
- 减少了需求不明确带来的风险
3⃣️增量模型(也称渐增模型
每创建一个增量就发布,最后一个增量创建完毕发布就得到了最终产品
✅适用场合:软件开发过程中需求可能发生变化,希望尽早进入市场的项目
缺点:
- 每个新的增量构建集成到现有软件体系结构中时必须不破坏原来已开发出来的产品,这可能存在一定困难
- 软件开发必须具备开放式体系
优点:
- 能在较短时间内向用户提交可完成部分工作的产品
- 逐步增加产品功能可以使用户具有较充裕的时间学习和适应新产品,从而减少了全新软件带给客户的冲击
4⃣️螺旋模型(结合了瀑布模型和原型模型的特点
与增量模型相比,增量模型引入了风险,螺旋模型便应运而生加入了风险分析
✅适用场合:需求不明确或需求可能发生变化的大型复杂软件系统
缺点:
- 迭代次数过多,增加了成本,推迟了交付时间
- 要求开发团队水平较高
优点:
- 支持用户需求的动态变化
- 为用户参与决策提供了便利
- 为项目管理人员及时调整管理决策提供了方便进而降低了风险
5⃣️喷泉模型
✅适用场合:主要适用于面向对象开发的软件开发过程
特点:无缝
缺点:
- 可能随时增加各种信息、需求与资料,审核难度加大
优点:
- “无缝”的特性使得每次反复都会增加或明确一些目标系统的性质,但不是对先前工作结果的本质性改动,减少了不一致性降低了出错的可能
6⃣️Rational统一过程
7⃣️敏捷过程与极限编程
敏捷过程是 基本原理 与 开发准则 的结合。
基本原理:强调客户满意度;强调较早交付软件增量
开发准则:强调分析和设计的交付;强调开发者和客户间的交流
极限编程(XP),是敏捷过程中最富盛名的一个。具有对变化和不确定性的更快速、更敏捷的反应特性;
✅适用场合:XP适用于商业竞争下对小型项目提出的有限资源和有限开发时间的环境
8⃣️微软过程
微软过程的每一个生命周期发布一个递进的软件版本,各个生命周期持续、快速地迭代循环