初识软件工程

初识软件工程

1.1 软件无处不在
软件是软件工程的研究对象,也是软件工程的产品形态与客观存在。
工程是将理论和知识应用于实践的科学,其目的是经济有效的解决实际问题。
1、 软件的定义
软件=程序 + 数据 +文档
.程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能。
.数据:使得程序能够适当地操作信息的数据结构。
.文档:描述程序的研制过程、方法和使用的图文资料。
1.2 软件的本质特征
软件具有复杂性、一致性、可变性和不可见性等固有的内在特性,这是造成软件开发困难的根本原因。

  1. 一致性
    .软件不能独立存在,需要依附于一定的环境(如硬件、网络、以及其他软件)
    .软件必须遵从人为的惯例并适应已有的技术和系统
    .软件需要随接口不同而改变,随时间推移而变化,而这些变化是不同人设计的结果
  2. 可变性
    .人们总是认为软件是容易修改的,但忽视了修改所带来的副作用。
    .不断的修改最终导致软件的退化,从而结束其生命周期。
  3. 不可见性
    .软件是一种“看不见,摸不着”的逻辑实体,不具有空间的形体特征
    .开发人员可以直接看到程序代码,但是源代码并不是软件本身
    .软件是以机器代码的形式运行,但是开发人员无法看到源代码是如何执行的
    1.3 软件工程的基本概念
  4. 工程的定义
    工程是将理论和知识应用于实践的科学,以便经济有效地解决问题。
    .大规模的设计与建造
    .复杂问题与目标分解
    .团队协作与过程控制
  5. 什么是软件工程?
    软件工程是 将系统性的、规范化的、可定量的方法应用于软件的开发,运行和维护,即工程化应用到软件上;以及对上述方法的研究。

软件工程的目标:——创造“足够好”的软件
什么是足够好的软件:
1) 较低的开发成本
2) 按时完成开发任务并及时交付
3) 实现客户要求的功能
4) 具有良好性能、可靠性、可扩展性、可移植性等
5) 软件维护费用低
3. 软件工程的基本要素
过程:支持软件开发各个环节的控制和管理
方法:完成软件开发任务的技术手段
工具:为软件开发方法提供自动或半自动的软件支撑环境
三者共同构建高质量的软件!
4. 软件工程方法
 面向服务
在应用表现层次上将软件构建化,即应用业务过程由服务组成,而服务由构建组装而成。
 面向构件
寻求比类的粒度更大的且易于复用的构件,期望实现软件的再工程。
 面向对象
以类为基本程序单元,对象是类的实例化,对象之间以消息传递为基本手段。
 面向过程
以算法作为基本构造单元,强调自顶向下的功能分解,将功能和数据进行一定程度的分离
5. 软件开发基本策略
 软件复用
.构造一个新的系统不必从零做起,直接复用已有的构建进行组装
.构件是经过反复使用验证的,由其组成的新系统具有较高的质量

软件复用是利用将已有的软件制品,直接组装或者合理修改形成新的软件系统,从而提高开发效率和产品质量,降低维护成本。
软件复用不仅仅是代码复用
•库函数、类库
•模板(文档、网页等)
•设计模式
•组件
•框架
 分而治之
.将一个复杂的问题分解成若干个简单的问题,然后逐个解决
.来源于人们生活与工作的经验,完全适合于技术领域

软件工程是一项解决问题的工程活动,通过对问题进行研究分析,将一个复杂问题分解成可以理解并能够处理的若干小问题,然后再逐个解决。
 逐步演讲
.软件开发是自底向上逐步有序的生长过程
.小步快跑:每走完一步再调整并为下一步确定方向,直到终点

软件更像一个活着的植物,其生长是一个逐步有序的过程,软件开发应该遵循软件的客观规律,不断进行迭代式增量开发,最终交付符合客户价值的产品。
 优化折中
.优化:优化软件的各个质量特性,如运行速度、资源利用、用户体验
.折中:通过协调各个质量特性,实现整体质量的最优

软件工程师应当把优化当成一种责任,不断改进和提升软件质量;但是优化是一个多目标的最优决策,在不可能使所有目标都得到优化时,需要进行折中实现整体最优。
•在编写C程序代码时,对文件的访问是影响程序速度的一个重要因素,那么如何提高文件的访问速度呢?使用内存缓存区方法。
6. 软件工程学科发展
(软件工程的Wasserman规范)
抽象-软件建模方法、用户界面原型化-软件体系结构-
软件过程-软件复用、度量-工具与集成环境
1.4 软件质量实现
•用户(功能质量)
软件符合指定要求
软件几乎没有缺陷
软件性能正常
软件容易上手,操作方便

•开发人员(结构质量)
代码可测试性
代码可维护性
代码可读性
代码效率:高效管理资源
代码安全:可预防常见威胁

•投资者
软件按时交付
软件满足预算
可复用的开发过程,确保交付质量

  1. 什么是好的软件
    质量就是软件产品对于某个(或某些)人的价值。 ——杰拉尔德•温伯格

正确的软件:一个软件要能够满足用户的需求,为用户创造价值。这里的价值可以体现在两个方面,即为用户创造利润和减少成本。
软件运行正确:软件没有或者有很少缺陷,具有很强的扩展性、良好的性能以及较高的易用性等。

高质量的软件产品:
•做了用户想要它做的事情
•正确有效地使用计算机资源
•易于学习和使用
•设计良好、代码良好且易于测试和维护
2.产品质量维度
•David Garvin质量维度:
性能
特色
可靠性
符合性
耐久性
可服务性
审美
感知
•ISO9126质量模型
外部和内部质量
功能性 可靠性 易用性 效率/性能 可维护性 可移植性
适合性
准确性
互操作性
安全性 成熟性
容错性
可恢复性 易理解性
易学性
易操作性
吸引性
时间特性
资源利用 易分析性
易改变性
稳定性
易测试性 适应性
易安装性
共存性
替换性
在这里插入图片描述
适合性:当软件在指定条件下使用,其满足明确和隐含要求功能的能力。
准确性:软件提供给用户功能的精确度是否符合标准。
互操作性:软件与其它系统进行交互的能力
安全性:软件保护信息和数据的安全能力。

成熟性:软件产品避免因软件中错误发生而导致失效的能力。
容错性:软件防止外部接口错误扩散而导致系统失效的能力。
可恢复性:系统失效后,重新恢复原有的功能和性能的能力。

易理解性:软件显示的信息要清晰、准确且易懂,使用户能够快速理解软件。
易学习性:软件使用户能学习其应用的能力。
易操作性:软件产品使用户能易于操作和控制它的能力。
吸引性:软件具有的某些独特的、能让用户眼前一亮的属性。

时间特性:在规定的条件下,软件产品执行其功能时能够提供适当的响应时间处和理时间
以及吞吐率的能力。
资源利用:软件系统在完成用户指定的业务请求所消耗的系统资源,诸如CPU占有率、
内存占有率、网络带宽占有率等。

易分析性:软件提供辅助手段帮助开发人员定位缺陷原因并判断出修改之处。
易改变性:软件产品使得指定的修改容易实现的能力。
稳定性:软件产品避免由于软件修改而造成意外结果的能力。
易测试性:软件提供辅助性手段帮助测试人员实现其测试意图。

适应性:软件产品无需做任何相应变动就能适应不同运行环境的能力。
易安装性:在平台变化后,成功安装软件的难易程度。
共存性:软件产品在公共环境与其共享资源的其他系统共存的能力。
替换性:软件系统的升级能力,包括在线升级、打补丁升级等。
2. 实现软件质量
•质量不是被测出来的,而是在开发过程中逐渐构建起来的
•虽然质量不是测出来的,但是未经测试也不可能开发出高质量的软件
•质量是开发过程的问题,测试是开发过程中不可缺少的重要环节

		高质量软件开发之道:
			高质量的设计
			规范的编码
			有效的测试
  1. 商业环境下的软件质量
    商业目标决定质量目标:
    •商业目标决定质量目标,不应该把质量目标凌驾于商业目标之上
    •质量是有成本的,不可能为了追求完美的质量而不惜一切代价
    •理想的质量目标不是“零缺陷”,而是恰好让广大用户满意
    1.5 业界人士谈软件工程
    每一个软件的工作人员,都要有极强的责任心,责任感和对整个软件产业的敬畏之心;要以满腔的热情投入到书写代码的工作,测试的工作中去,要从自己的开发过程中自我反省,自我提升;要具有职业道德(代码品质的保证,整个公司秘密的保护);具有协同的能力。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值