软件工程第一章概述第一章:概述目标:什么是软件工程,为什么它很重要;开发不同类型的软件系统可能需要不同的软件工程方法;道德和职业问题对于软件工程的重要性;介绍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一.软件组织的显著变化导致了以网络为基础的系统设计的变化1.软件复用已经成为构建基于Web的系统的主要技术。
当你在构造这样的系统时就需要考虑怎样从已有的软件组件和系统开始工作。
2.现在人们普遍认识到,提前制定这些系统的所有需求是不切实际的。
应逐步开发和交付这种基于Web的系统。
3.用户界面受到Web浏览器能力的约束。
1.2软件工程人员的职业道德一.软件工程人员必须坚持诚实正直的行为准则,这是不可言喻的。
他们不能用掌握的知识和技能做不诚实的事情,更不能给软件工程行业抹黑。
然而,在有些方面,某些行为没有法律加以规范,只能靠职业道德来约束,这种约束是软弱无力的。
包括:1.保密工程人员必须严格保守雇主或客户的机密,而不管是否签署了保密协议。
2.工作能力工程人员应该实事求是地表述自己的工作能力,不应有意接受超出自己能力的工作。
3.知识产权工程人员应当知晓有关专利权,著作权等知识产权的地方法律,必须谨慎行事,确保雇主和客户的知识产权收到保护。
4.计算机滥用软件工程人员不应运用自己的技能滥用他人的计算机。
滥用计算机有时对他人的影响不大(如在雇主的机器上玩游戏),但有些时候后果非常严重(传播病毒)。
二.软件工程职业道德和执业行为准则软件工程人员应当做出承诺,是软件的分析,描述,设计,开发,测试和维护等工作对社会有益且受人尊重。
基于对公众健康,安全和福利的考虑,软件工程人员应当遵守以下8条原则:1.公众感软件工程人员应始终与公众利益保持一致。
2.客户和雇主软件工程人员应当在与公众利益保持一致的前提下,保证客户和雇主的最大利益。
3.产品软件工程人员应当保证他们的产品及其相关附件达到尽可能高的行业标准。
4.判断力软件工程人员应当具备公正和独立的职业判断力。
5.管理软件工程管理者和领导者应当维护并倡导合乎道理的有关软件开发和维护的管理方法。
6.职业感软件工程人员应当弘扬职业正义感和荣誉感,尊重社会公众利益。
7.同事软件工程人员应当公平地对待和协助每一位同事8.自己软件工程人员应当毕生学习专业知识,倡导合乎职业道德的职业活动方式。
1.3案例研究一.用于案例的3种类型的系统分别是:1.嵌入式系统系统的软件控制硬件设备并嵌入在这个设备中。
嵌入式系统的典型问题包括物理尺寸,响应性,电源管理等。
本书嵌入式的例子是一个软件系统控制的医疗设备。
2.信息系统这个系统的主要目的是管理和提供对信息数据库的访问服务。
信息系统的主要问题包括信息安全性,可用性,隐私和维护数据的完整性。
信息系统的例子是一个医疗数据系统。
3.基于传感器的数据采集系统这个系统的主要目的是从多个传感器手机数据并以适当的方式处理数据。
这类系统的关键需求是可依赖性,甚至是在极端环境条件下的可靠运行,可维护性。
数据采集系统的例子是一个野外气象站。
1.3.1胰岛素泵控制系统一.胰岛素泵是一个仿真胰腺(一种体内组织)运转的医疗系统。
此系统的软件控制部分是一个嵌入式系统,它从传感器收集数据,然后控制泵输送指定剂量的胰岛素给患者。
一.糖尿病患者使用这个系统。
糖尿病是一种常见病症,是由于人体无法产生足够数量的胰岛素而引起的。
胰岛素在血液中起到促进葡萄糖新陈代谢的作用。
糖尿病的传统治疗方法是长期规律地注射人工胰岛素。
通过使用一种外部仪器测量糖尿病患者的血糖值,从而计算所需要注射的胰岛素剂量。
二.这个治疗方法存在的问题是,血液中的胰岛素浓度不仅与血液中的葡萄糖浓度相关,还与最后一次注射胰岛素的时间有关。
这样有可能导致血糖浓度太低(当胰岛素太多时),或血糖浓度太高(当胰岛素太少时)。
短时间内的低血糖是一种比较严重的情况,会导致暂时的脑功能障碍,最后失去知觉甚至死亡。
长期处于高血糖则会导致眼睛损伤,肾损伤和心脏问题。
三.目前在开发微型传感器方面取得的进步使得自动胰岛素传送系统开发成为可能。
系统监控血糖浓度,根据需要输送适当的胰岛素。
这样的胰岛素输送系统已经在临床中得到使用了。