软件工程第一章概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章:概述
目标:
什么是软件工程,为什么它很重要;
开发不同类型的软件系统可能需要不同的软件工程方法;
道德和职业问题对于软件工程的重要性;
介绍3个不同类型的软件系统,这3个系统将作为贯穿全书的例子;
1.1专业化软件开发
一.对于软件工程的一些常见问题
1.什么是软件?
计算机程序和相关文档。软件产品可针对特定客户开发或为通用市场开发。
2.什么是优良软件的特点?
好的软件应具有用户所需的功能与性能,而且应该可维护,可靠,可用。
3.什么是软件工程?
软件工程师关于软件生产的各个方面的工程学科。
4.什么是基本的软件工程活动?
软件描述,软件开发,软件验证以及软件进化。
5.软件工程和计算机科学有何区别?
计算机科学侧重理论和基础,而软件工程则侧重于软件开发和交付的实际活动。
6.软件工程和系统工程有何区别?
系统工程侧重基于计算机系统的开发的所有方面,包括硬件,软件和过程工程。
7.软件工程面临的主要挑战是什么?
不断增长的多样性,减少交付时间以及开发可靠的软件的要求。
8.什么是软件工程的成本?
软件开发成本约占总成本的60%,测试成本占40%。对于定制软件而言,进化成本常常高于开发成本。
9.什么才是最好的软件工程技术和方法?
由于所有的软件项目都必须进行专业化的管理和开发,所以不同的技术应适用于不同类型的系统。例如,游戏开发需要一系列原型,而安全要求极高的控制系统开发需要一个完整的和可分析的描述。因此,你不能单纯的评判一种方法比另一种方法更好。
10.Web给软件工程带来了哪些不同?
Web带来了软件服务的可用性,以及开发高品质的基于服务的分布式系统的可能性。基于Web的系统开发极大地促进了编程语言和软件复用的发展。
二.软件产品有以下两类
1.通用软件产品
2.定制软件产品
这两类产品的一个重要区别在于:在通用软件产品中,软件描述由开发者自己完成,而定制软件产品,其软件描述通常是由客户给出,开发者必须按客户要求进行开发。
三.软件除了提供相应的功能外,作为一个产品它还有一系列相关的反映质量的属性。这些属性不直接涉及软件的功能,而是反映软件在执行时的行为以及源程序的结构,组织及相关
的文档。软件对用户查询的响应时间和程序代码的可理解性就属于这类属性(有时也称为非功能性属性)。
四.软件系统在具体应用中,用户可能会要求其具有特殊的属性。这些属性也是专业化软件系统应具备的基本属性。
1.可维护性
软件必须能够不断进化以满足客户的需求变化,这是软件产品最根本的特性,因为工作环境是不断变化的,软件也必然要跟着变化。
2.可依赖性和安全性
软件课依赖性还包括一些特性:可靠性,保密性,安全性。可靠的软件在系统失败的情况下,也不会导致物理性损害和经济损失。有恶意的人员不得访问或破坏系统。
3.有效性
软件不要浪费内存和处理器等系统资源,因而有效性应包括响应时间,处理时间和内存利用率等方面。
4.可用性
软件必须简单易用,容易被用户接受。这就意味着,它必须是容易理解的,易用的并且和其他系统是兼容的。
1.1.1软件工程
一.软件工程的定义
软件工程是一门工程学科,涉及软件生产的各个方面,从最初的系统描述一直到投入使用后的系统维护,都属于其科学范畴。在软件工程的定义中有两个关键词:
1.工程科学:干什么事情都离不开工程人员,他们既拥有一定的理论,方法和工具,又能有选择地利用它们,即使在没有可用的理论和方法的情况下,也能够力求找出解决问题的方法。同时他们也认识到必须在机构或财政状况所允许的限度内工作,即在此限度内寻找解决办法。
2.软件生产的各个方面:软件工程不仅涉及软件开发的技术过程,也涉及诸如软件项目管理以及对那些支持软件生产的工具,方法和理论的开发等活动。
二.软件工程之所以重要有两方面的原因:
1.个人和社会越来越多的依赖于先进的软件系统。这就需要我们能够既经济又快速地生产出可依赖和值得信赖的系统。
2.从长远来看,运用软件工程方法和技术去开发软件系统比单纯为个人程序项目写程序更加便宜。对于大多数类型的系统来说,绝大多数的钱都花费在软件投入使用后对软件的变更上。
三.软件过程包含的4项基本活动
软件工程中系统化的方法有时候也叫软件过程,软件过程是指制作软件产品的一组活动及其结果。这些活动主要由软件工程人员完成。所有的软件过程都包含4项基本的活动,它们是:1.软件描述
客户和工程师定义所要生产的软件以及对其操作的一些约束。
2.软件开发
软件得以设计和编程实现
3.软件有效性验证
软件经过检查以保证它就是客户所需要的。
4.软件进化
软件随不同的客户和变化的市场需求而进行修改。
四.影响大多数类型软件的3个方面
1.异质性
人们越来越要求系统像基于网络的分布式系统一样运行,而网络中包含不同类型的计算机和移动设备。除了在通用的计算机上运行之外,有些软件可能还需要在手机上运行。又是必须将新软件集成到遗留系统中,这些遗留系统可能使用其他语言写成的。这样带来的挑战是:必须开发新技术,制作可靠的软件,从而足以灵活应对这种多样性。
2.业务和社会的变革
随着新经济成长和新技术的不断涌现,业务和社会正在发生着前所未有的快速变革。这对现存软件的变更和快速地开发出新软件提出新需求。很多传统的软件工程技术是费时的,新系统的交付往往滞后于预先的计划。因此技术必须进化,在不损及系统质量的前提下,缩短大型,复杂系统的交付时间。
3.安全和可信
软件和我们生活的方方面面息息相关,最关键的一点事软件要让人们信得过。这对于那些通过网页或Web服务界面访问的远程软件系统来说尤为重要。我们必须确保有恶意的人员不能攻击软件,不会危及信息安全。
1.1.2软件工程的多样性
一.不同类型的应用
也许决定使用哪种软件工程方法和技术主要取决于要开发的应用的类型。这里有许多不同类型的应用:
1.独立的应用
2.以交易为基础的交互式应用
3.嵌入式控制系统
4.批处理系统
5.娱乐系统
6.建模和仿真系统
7.数据采集系统
8.集成的系统
二.适用于所有类型的软件系统的软件工程基本方法
1.应使用有管理的和理解了的开发过程进行开发。软件开发机构应规划它们的开发过程,并清楚地知道应产出什么以及什么时候完工。当然,对于不同类型的软件使用不同的开发过程。
2.可依赖性和性能对所有类型的系统来说都很重要。软件应该如所期待的那样表现,没有失败且在用户需要的时候是可用的。它应该是操作安全的,只要可能,它应该是信息安全的,能抵御来自外部的攻击。系统应是高效的且不会浪费资源。
3.理解和管理系统描述和需求(系统应该做的是什么)是很重要的。你必须知道不同的客户和用户的期望是什么,然后你必须管理这些期望以便在预算范围内按期交付一个有用的系统。
4.你应该尽可能高效地使用当前存在的资源。这就意味着,你应该在适当的地方复用已开发的软件,而不是重新写一个新软件。
1.1.3软件工程和Web
一.软件组织的显著变化导致了以网络为基础的系统设计的变化