1983年IEEE给出的定义是:软件工程是开发、运行、维护和修复软件的系统方法
软件工程的主要环节
: 人员管理、项目管理、可行性与需求分析、系统设计、程序设计、测试维护等。
软件工程的目标:提高软件的质量与生产率,最终实现软件的工业化生产
软件工程
⑴ 可修改性(modifiability):允许对系统进行修改而不增加原系统的复杂性
⑵ 有效性(efficiency): 软件系统能最有效地利用计算机的时间资源和空间资源
⑶ 可靠性(reliability): 能防止因概念、设计和结构等方面的不完善造成的软件系统失效,具有挽回因不当造成软件系统失效的能力
⑷ 可理解性(understandability): 系统具有清晰的结构,能直接反映问题的需求
⑸ 可维护性(maintainability):软件产品交付用户使用后,能够对它进行修改,以便改正错误,改进性能和其他属性,使软件产品适应环境的变化等。
⑹ 可重用性(reusebility):可重用性包括应用项目的重用、规约说明的重用、设计的重用、概念和方法的重用等。
⑺ 可适应性(adaptability):软件在不同的系统约束条件下,使用户需求得到满足的难易程度
⑻ 可移植性(portability):软件从一个计算机系统或环境搬到另一个计算机系统或环境的难易程度
⑼ 可追踪性(traceability):根据软件需求对软件设计、程序进行正向追踪,或根据程序、软件设计对需求进行逆向追踪的能力
⑽ 可互操作性(interoperability):多个软件元素相互通信并协同完成任务的能力
软件开发生命周期模型
大爆炸模型
:大爆炸模式是最简单的软件开发模式,计划、进度安排和正规开发过程都几乎没有,所有精力都花在开发软件和编写代码上
边写边改模型
: 无计划文档,简单设计就开始漫长的编写测试
瀑布模型
:强调产品的定义,周密的计划,一环套一环
螺旋模型
:开始不必详细定义所有细节,从小开始,定义重要功能,努力实现这些功能,接收客户反馈,然后进入下一阶段,重复上述过程,直至得到最终产品
敏捷开发
:敏捷开发的核心思想是"以人为本,适应变化
"
敏捷宣言
个体交互 重于 过程和工具
可用的软件 重于 完备的文档
客户协作 重于 合同谈判
响应变化 重于 遵循计划
敏捷式软件开发的目的
使用有效的IDE工具进行快速开发、迭代
过程中完善的文档,达到项目组之间的交流作用
为了达到与客户进行紧密的交流与协作,让软件的客户与软件开发团队紧密地工作在一起尽量提供反馈
制作出近期两周的详细计划,长期两个月的大概计划
软件开发生命周期的模型
开发流程分类 | 优点 | 缺点 |
---|---|---|
大爆炸模型 | 简单,不用学习就会 | 产品质量无法保证,尽量避免使用 |
边写边改模型 | 快速得到可运行的版本 | 计划有些缺乏,导致版本前后变化较大。 |
瀑布模型 | 计划周密,专业,按部就班实现 | 难以做到快速开发,抢占市场。 |
螺旋模型 | 计划变化同时考虑 | 可选择的模型之一 |
V模型——软件测试过程模型
"V"的左端表示传统的瀑布开发模型,而"V"的右端表明相应的测试阶段
W模型——软件测试过程模型
H模型——软件测试过程模型:将测试活动完全独立出来,形成一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来
X模型——软件测试过程模型
X模型提出针对单独的程序片段进行相互分离的编码和测试,此后通过频繁的交接,通过集成最终合成为可执行的程序