1.1 软件无处不在
软件是软件工程的研究对象,也是软件工程的产品形态于客观存在。
工程是理论知识应用于实践的科学,其目的是经济有效地解决实际问题。
→软件工程是为了解决开发成本效益和软件质量的问题而产生的,倡导以工程的原理、原则和方法进行软件的开发,用系统的、可控的和有效的方式构建高质量的软件产品。
1.2 软件的本质特性
1.2.1 软件的定义
软件 = 程序 + 数据 + 文档
程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能。
数据:使得程序能够适当地操作信息的数据结构。
文档:描述程序的研制过程、方法和使用的图文资料。
1.2.2 软件的本质特性
软件更像是嵌入式的数字化知识,这种知识载体的特征带来一些怎样的影响呢?
软件具有复杂性、一致性、可变性和不可见性等固有的内在特征(软件开发困难的根本原因)
- 复杂性

这种复杂性会给软件开发管理和质量保证带来很多困难。
-
一致性
1.软件不能独立存在,需要依附于一定的环境(如硬件、网络以及其他软件)
2.软件必须遵从人为的惯例并适应已有的技术和系统。
3.软件需要随接口不同而改变,随时间推移而变化,而这些变化是不同人设计的结果。

- 可变性

软件只要是在使用,就会一直在变,而这个改变是随需而变。

虽然由于修改软件会造成失效率的提高,但是,修改会给软件本身带来了生命力。成功的软件都是会发生演化的。
-
不可见性
1.软件是一种“看不见、摸不着”的逻辑实体,不具有空间的形体特征。
2.开发人员可以直接看到程序代码,但是源代码并不是软件本身。
3.软件是以机器代码的形式运行,但是开发人员无法看到源代码是任何人运行。
1.3 软件工程的产生与发展(软件开发面临的问题)
错误多、性能低、不可靠、不安全等质量问题
1.3.1软件开发失败的案例
-
1.ARIANE 5 火箭

-
2.Window Vista 系统

-
12306网络购票系统

1.3.2 软件开发面临的挑战
-
客户不满意
1.交付的许多功能不是客户需要的
2.交付的日期没有保障3.
3.客户使用时发现许多Bug -
项目过程失控
1.客户需求变化频繁,无力应对
2.无法预见软件的交付质量
3.对流程盲目遵从,忽视客户业务价值 -
风险与成本问题
1.开发团队专注技术,忽视风险
2.无能力预测成本,导致预算超支 -
无力管理团队
1.无法评估开发人员能力及工作进度
2.困扰于如何提升团队的能力与效率
1.4 软件工程的基本概念和内涵
1.4.1工程的含义
工程是将理论和知识应用于实践的科学,以便经济有效地解决问题。
1.4.2 软件工程的含义及目标
软件工程是
- 将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即工程化应用到软件上;
- 对1.中所述的方法的研究
软件工程的目标——创造“足够好”的软件。
1.较低的开发成本
2.按时完成开发任务并及时交付
3.实现客户要求的功能
4.具有良好性能、可靠性、可扩展性、可移植性等
5.软件维护费用低
1.4.3 软件工程的基本要素
-
过程:
支持软件开发各个环节的控制和管理

-
方法:
完成软件开发任务的技术手段

-
工具:

1.4.4 软件开发的基本策略
- 软件复用(不只是代码复用)
构造一个新的系统不必从零做起,直接复用已有的构件进行组装
构件是经过反复使用验证的,由其组成的新系统具有较高的质量 - 分而治之
将一个复杂的问题分解成若干个简单的问题,如何逐个解决
来源于人们生活与工作的经验,完全适合于技术领域 - 逐步演进
软件开发是自底向上逐步有序的生长过程
小步快跑:每走完一步再调整并为下一步确定方向,直到终点 - 优化折中
优化:优化软件的各个质量特性,如运行速度、资源利用、用户体验
折中:通过协调各个质量特性,实现整体质量的最优
1.4.5软件工程学科发展

1.5 软件质量实现(工程化的原则)
暂无
1.6 业界人士谈软件工程
1.6.1 软件工程在企业中的实际应用
1.6.2 优秀工程师应该具备的素质和能力
- 代码阅读和理解以及书写代码的能力
- 一个极强的责任心和对整个软件产业的敬畏之心
- 职业的道德
- 协同的能力
软件工程关注于以工程化方法解决软件开发中的复杂性、一致性和可变性问题。它强调软件是程序、数据和文档的结合,并探讨了软件的不可见性。软件开发面临质量、成本和客户满意度的挑战,因此需要过程管理、合适的方法和工具。软件工程的目标是创建高效、可靠且易于维护的软件。它提倡软件复用、分而治之的策略以及逐步演进的开发模式。此外,良好的软件工程实践包括对团队管理、风险控制和成本估算的关注。
3509

被折叠的 条评论
为什么被折叠?



