商品详情
书名:需求驱动的可信软件过程
定价:108.0
ISBN:9787030534385
作者:张璇,王旭
版次:1
出版时间:2017-11
内容提要:
本书主要介绍需求驱动的可信软件过程建模及管理方法。首先,系统地论述可信软件与软件过程领域的相关研究与实践背景,分析可信软件与软件过程的关系。在通过可信软件需求获取过程策略的基础上,提出面向方面的可信软件过程建模,建模的主要目的是建立可信软件过程的抽象模型,通过对该抽象模型的分析有助于更好地理解正在实施或者将要实施的可信软件过程,同时,可执行的可信软件过程模型可以直接指导实际可信软件生产活动,进而规范软件开发行为,保证可信软件的可信性得以满足。*后,从过程模型切入,进一步关注过程绩效,建立“认识过程,建立过程,运作过程,优化过程”的体系,对可信软件过程提出管理方法,解决过程可信性度量、过程改进、过程运行实例动态可信演化以及可信风险管理问题,力图全面地给出一个需求驱动、面向软件过程的可信软件开发及演化解决方案。同时,全书系统地介绍可信软件需求与可信软件过程领域研究的经典理论和*新进展,也为软件工业界了解本领域相关方法学提供参考。
目录:
目录
前言
第1章 可信软件与软件过程 1
1.1 软件的可信需求 1
1.1.1 可信软件 2
1.1.2 可信软件需求 3
1.2 可信软件与软件过程 4
1.2.1 软件过程 4
1.2.2 可信软件与软件过程 6
1.3 本书结构 8
参考文献 9
第2章 可信软件需求获取与建模 12
2.1 软件需求工程 13
2.1.1 软件需求工程过程 14
2.1.2 软件需求建模 15
2.2 可信软件分领域需求 18
2.2.1 可信软件需求领域统计方法 18
2.2.2 可信软件需求领域统计结果 19
2.3 可信软件需求定义与获取 35
2.3.1 可信软件需求定义 35
2.3.2 可信软件非功能需求获取 40
2.4 可信软件早期需求建模 50
2.4.1 可信软件需求元模型 51
2.4.2 非功能需求本体知识库 55
2.5 案例研究 63
2.5.1 可信第三方认证中心软件SIS 63
2.5.2 航天软件 65
2.6 小结 69
参考文献 69
第3章 可信软件需求推理与权衡 73
3.1 可信软件非功能需求交互关系 74
3.1.1 软件非功能需求的交互 74
3.1.2 非功能需求推理与权衡 76
3.2 可信软件早期需求推理 78
3.2.1 可信软件需求的可满足性问题 78
3.2.2 可信软件需求的SAT 公式 83
3.2.3 推理的可靠性和完备性 86
3.2.4 可信软件需求的可满足性问题求解 88
3.3 非功能需求冲突权衡 92
3.3.1 非功能需求权衡 92
3.3.2 权衡代价分析 93
3.4 案例研究 100
3.4.1 SIS软件需求推理 100
3.4.2 SIS软件需求权衡 104
3.5 小结 108
参考文献 109
第4章 面向方面可信软件过程建模框架 113
4.1 可信软件过程建模基础 115
4.1.1 Petri网 115
4.1.2 软件演化过程建模方法 117
4.1.3 面向方面建模 121
4.2 面向方面扩展软件过程建模方法 124
4.3 可信软件过程元模型 128
4.4 可信软件过程建模框架 133
4.5 可信方面编织冲突分析 136
4.5.1 可信方面间编织冲突分析 136
4.5.2 可信方面织入基本模型冲突分析 137
4.6 可信方面编织冲突控制 138
4.6.1 可信方面间编织冲突控制 138
4.6.2 可信方面织入基本过程冲突控制 139
4.7 可信过程方面织入冲突检测 145
4.7.1 面向方面的冲突检测方法 146
4.7.2 冲突检测方面 147
4.8 小结 150
参考文献 150
第5章 可信方面编织方法 153
5.1 可信方面间融合 154
5.1.1 可信过程方面间融合 154
5.1.2 可信任务方面间融合 160
5.2 可信过程方面织入 162
5.2.1 条件织入 162
5.2.2 活动织入 164
5.2.3 弧织入 170
5.3 结构保持性 172
5.4 性质保持性 175
5.5 行为一致性 183
5.6 可信任务方面织入 187
5.7 可信方面间编织完整性及正确性 189
5.8 小结 194
参考文献 194
第6章 可信软件过程建模 195
6.1 面向方面可信软件过程建模 196
6.1.1 活动层建模 197
6.1.2 任务层和过程层建模 198
6.1.3 全局层建模 201
6.2 可信方面追踪 202
6.2.1 可信方面追踪原则 202
6.2.2 可信方面织入一致性追踪 203
6.3 案例研究 206
6.3.1 可信第三方认证中心软件SIS 207
6.3.2 航天软件 211
6.3.3 面向方面业务过程建模 217
6.4 小结 227
参考文献 228
第7章 可信软件过程管理 229
7.1 软件过程可信性度量 230
7.1.1 可靠性度量 234
7.1.2 安全性度量 246
7.1.3 易用性度量 257
7.2 软件过程改进 269
7.2.1 面向方面过程改进方法 271
7.2.2 软件过程改进案例 272
7.3 软件过程动态可信演化 274
7.3.1 过程运行实例的动态可信演化 278
7.3.2 可信过程片段迁移 281
7.3.3 演化异常处理 283
7.3.4 软件过程动态演化案例 286
7.4 可信风险评估与控制 288
7.4.1 风险管理基础 289
7.4.2 可信软件过程风险评估 290
7.4.3 可信软件过程风险控制 295
7.5 小结 298
参考文献 299
在线试读:
第1章 可信软件与软件过程
本章内容:
(1)介绍可信软件
(2)提出可信软件过程的概念
(3)介绍本书组织结构
软件的“可信”是指软件系统的行为及其结果总是符合人们的预期,在受到干扰时仍能提供连续的服务,这里的“可信”强调行为和结果的可预测性与可控制性,而“干扰”包括操作错误、环境影响和外部攻击等(刘克等,2008)。
可信软件,本质上就是其可信需求可以得到满足的软件;而软件的可信很大程度上依赖于软件开发和演化时所使用的过程。因此,理解软件的可信性,从软件过程的方法和技术角度保证软件的可信需求都得到可信的实现是解决问题、迎接挑战的一个有效途径。着眼于这个关键点,本书从软件过程的角度出发,对可信软件需求给软件开发与演化带来的一系列问题以及面向过程的可信软件开发、演化与管理方法进行系统而深入的介绍。
1.1 软件的可信需求
软件是信息基础设施的核心组成部分。如今,以高速通信、海量存储和高性能计算为核心的信息基础设施已经广泛深入地渗透到政治、经济、军事、文化和社会生活的各个层面,成为现代生产力发展和人类文明进步不可或缺的强大工具。在众多应用背景的推动下,软件的复杂度和规模都在以前所未有的速度不断延伸,在国防、金融、政府和通信等关键领域的各种复杂应用需求背景下,软件是否可信已经成为衡量软件系统的重要指标,但是这个领域存在着巨大的挑战,国际上由于软件缺陷而导致的重大灾难、事故和严重损失屡见不鲜:1996年,欧洲阿丽亚娜5型火箭的首次发射中,由于惯性参考系统软件的数据转换错误致使火箭在发射40秒后爆炸,造成25亿美元的经济损失;2003年,俄罗斯联盟TMA-1载人飞船由于计算机软件设计错误在返回时偏离预定降落地点约470千米;同年,美国东北部因其电力检测与控制管理系统失效造成大面积停电,损失超过60亿美元;2004年,美国洛杉矶机场400余架飞机与机场指挥系统一度失去联系,对几万名旅客的生命安全造成威胁;2005年,日本东京证券交易所由于软件升级故障导致股市停摆(刘克等,2008);2007年,美国洛杉矶国际机场的海关与边境保护系统发生故障,导致60个航班的2 万名旅客无法入关。在我国,2006年中航信离港系统发生3次软件系统故障,造成近百个机场登机系统瘫痪;同年,中国银联跨行交易系统出现故障,使整个交易系统瘫痪约8小时(刘克等,2008);2011年,中国海关软件发生技术故障,导致200多辆卡车滞留在中俄边界的满洲里口岸;2012年澳门电信因软件故障造成其3G及互联网服务瘫痪6小时。根据美国国家标准技术局(National Institute of Standards and Technology,NIST)的统计,仅2011年在各种商业软件产品中新发现的漏洞多达4465个,受到这些安全漏洞影响的组织和用户数量庞大,损失难以统计。从这些事实可见,可信软件的研究意义重大,存在巨大的应用背景需求,机遇与挑战并存。
可信软件作为计算机软件研究领域*具价值和*具挑战性的核心课题之一,引起了国内外政府组织、科学界和工业界的高度重视,纷纷提出有针对性的相关研究计划。2004年,美国信息技术协会(Information Technology Association of America,ITAA)、系统与软件联合会(The Systems and Software Consortium,SSCI)、北弗吉尼亚技术委员会(The Northern Virginia Technology Council,NVTC)、IEEE(Institute of Electrical and Electronic Engineers)可靠性分会以及其他机构共同组织召开了第二届国家软件高层会议(2nd National Software Summit,NSS2),提出为保证美国工业的竞争力开发可信软件产品和系统;2005年,美国国家软件研究中心(Center for National Software Studies,CNSS)发布了《软件2015》(Software 2015)的报告,报告中指出:未来软件研究*重要的焦点之一在于软件的可信性(CNSS,2005);2006年,欧洲启动了名为“开放式可信计算”(open trusted computing)的研究计划,已有23个科研机构和工业组织参与。“十一五”期间,可信计算被列入中国国家发展和改革委员会的信息安全专项,863计划启动了可信计算专项,国家自然科学基金设立了“可信软件”重大研究计划。
1.1.1 可信软件
随着社会的高速发展,信息爆炸的时代已经到来,计算机技术已深度应用到各行各业中。由于各行业的差距,软件需求也朝着特色鲜明的方向发展,这样的发展趋势使得软件应用多样化、开放化,但是多样化与开放化势必带来一个严重的问题—客户需要的软件必然更加精确、更加可靠、更加安全、更加易用。换句话说,客户需要的是能够以他们期望的方式或者说可以信任的方式长期稳定工作的软件。但是,软件从需求分析阶段开始就会潜伏着一系列不可避免的或者没有预知到的问题,这些潜在的问题对软件以一种客户所信任的方式长期稳定工作造成了极大的威胁。另外,软件正同时朝着两个方向迅速发展,其一是软件规模快速增大,其二是互联网广泛应用,使得软件面临着更加复杂的环境挑战,这一复杂环境又可以进一步细划为两类:一类是随着软件渗透到人们生活、文化、政治、经济、娱乐等各方面,软件就需要有更加强大的交互性,这势必带来软件漏洞和缺陷的爆发式增长;另一类是随着互联网的用户急速增加以及互联网应用的更加日常化、开放化,黑客软件和教程的获取变得更加容易,这势必导致软件面临更加严峻的挑战。以上这些问题正是可信软件研究的核心问题,也是软件可信性被提出来的根本原因,随着可信软件概念的提出,软件设计开发人员希望从需求分析阶段就尽可能避免软件中将会存在的问题,或者缩小问题范围,降低问题严重性。
“可信”一词源于社会学,原本表述的是一种主体和主体之间或者主体和客体之间的相互信任关系,这一信任关系表现在主体与主体之间是双向性的,而表现在主体与客体之间则是单向性的,即客体不具有客观意识。可信概念应用到软件工程领域,*早可以追溯到Laprie(1985)提出的可信赖计算。之后,学术界和工业界开展了大量的研究工作,从不同的角度对可信的概念进行了分析和总结。可信计算组织对于可信的定义为:系统可信是指系统能够完全按照其预先指定的程序运行,并且出现背离设计者意图行为的可能性很低(TCG,2007)。在ISO/IEC 15408中对可信的定义为:一个软件可信,是指对该软件的操作在任何条件下都是可预测的,而且该软件能抵抗外来的干扰和破坏(ISO/IEC,2005)。微软提出可信软件是向人们提供一种可靠的环境,在此基础上提出可信软件的几个基本需求:可靠性(reliability)、安全性(security)、保密性(privacy)和商业诚信(business integrity)。美国科学与技术委员会(National Science And Technology Council,NSTC)则认为,系统的可信是对系统行为是否符合预想的一种测量,同时他们认为一个可信的系统应该具有功能正确性、防危性、容错性、实时性和安全性等特征(NSTC,1997)。其他关于软件可信性的定义还有很多,具体内容请参阅本书第2章的2.3节。
总之,针对可信软件,满足特定的可信需求是其区别于普通软件的重要特征,特定可信需求的满足是可信软件获得用户信任、其行为能实现预期目标的客观依据。因此,针对可信软件我们首先研究可信软件需求。
1.1.2 可信软件需求
软件需求是软件能否被用户接受的衡量基准,即当软件交付给用户使用时,用户判断软件是否满足其使用目标的*一基准是软件的需求,与软件设计、实现所应用的技术无关(Holt et al.,2012)。而软件的“可信”定义为软件的动态行为及其结果总是符合人们的预期(刘克等,2008),即软件是否“可信”也是用需求作为其衡量标准的。因此,理解可信软件的可信需求是可信软件研究的重要环节。
“可信软件需求”这一概念出现至今已有三十多年,但是尚无被各领域所广泛接纳的统一性定义,因为人们对软件可信性的认识存在较大的分歧。*初人们在软件领域对可信需求的定义是“dependability”,在这一定义背景下,人们的研究主要集中于可靠性(reliability)需求,这是一种单方向的从主体到客体的价值判断。随着计算机网络的飞速发展,以及诸如身份验证等行为的出现,可信软件需求不再是单向性的,同时包括计算机向人的互动行为。美国国家计算机安全中心倡议的可信计算机系统评价标准(trusted computer system evaluation criteria,TCSEC)中仅将软件可信需求定位在安全性这个*一的非功能需求上(DoD,1985),导致许多程序员、工程师和管理者习惯于对可信的认知仅仅局限于安全方面。Pamas 等(1990)把可信需求定义为“safety”,并应用到不同的方法当中,他们关注在软件开发和维护周期中为了尽可能地减少错误使用的软件工程技术的程度,如增强测试(enhance testing)、评审(reviews)和审查(inspection)。由美国多家政府和商业组织参与的TSM(trusted software methodology)项目于1994年将软件可信性扩展定义为“软件满足既定需求的信任度”(Amoroso et al.,1994),该定义进一步阐述了可信性对管理决策、技术决策以及既定需求集合的高度依赖性。美国陆军研究院的Barnes 等提出了信息系统的“可生存性”概念,所谓的“可生存性”是指系统在人为或自然灾害破坏下表现出的可靠性,其本质上也是系统可信性(Knight & Sullivan,2000),这一表述主要侧重于当系统面对突发故障或者故意攻击时,仍能保持稳定工作或者具备从灾难中快速恢复的能力。
总之,软件可信性是一个综合复杂的概念,基于软件的不同应用场景,其可信需求具有统一性和相似性,同时表现出显著的差异性,它可以由一系列具体的可信需求通过集合的形式来具体描述,但在不同应用场景下,集合元素的组成、含义、优先级以及相关关系都可能不同。因此,为区别于非功能需求,人们谈及可信软件需求时,用到的词变为了“trusted”、“trustiness”或者“trustworthy”。
1.2 可信软件与软件过程
软件工程研究如何以系统性的、规范化的、可定量的过程化方法开发和维护软件,以及如何将经过时间考验而证明有效的管理技术与*好的技术方法结合起来,*终产生并持续维护符合用户需要的软件产品。
提高软件质量和软件生产效率,一直是软件工程学所研究的内容和软件开发活动中所追求的两个主要目标。围绕这两个目标,软件工程经历了从20世纪60年代由于软件危机爆发而诞生的工程化软件开发概念、理论与方法的起始阶段,进入到20世纪80年代以软件过程为核心的软件工程阶段,*终发展为从20世纪90年代开始至今的持续软件过程改进的软件工程阶段。
1.2.1 软件过程
软件工程以软件过程和管理为核心,是研究和应用如何以系统性的、规范化的、可定量的过程化方法开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的*好的技术方法结合起来的学科。
20世纪60年代发生的软件危机,促使软件业将注意力集中到软件过程中所使用的方法、技术、工具和环境等问题上。于是,从20世纪70年代开始,各种软件过程模型相继被提出,软件项目管理逐渐得到重视。软件项目团队开始注重需求分析、概要设计、详细设计、编码、测试、质量保证、配置管理、维护等若干活动步骤。这样的思维方式和以这种思维方式为基础的软件开发活动和软件项目管理,把软件的开发和维护纳入了工程化的轨道,有效地缓解了软件危机造成的被动局面。
进入20世纪80年代后,随着Internet技术的飞速发展,计算机应用全球化的步伐日趋加快,软件业时刻面临着新的挑战。面对越来越多的应用领域和规模越来越大的软件项目,当时已有的各种软件过程模型逐渐显露出其过于抽象的局限性:很多重要的支持软件过程的活动细节,如管理、控制、人员、通信、合作和技巧等,无法一一顾及,这种局面无疑使软件的开发与维护再一次受到了严重的制约。因此,以“软件过程”为基本概念的一种新的软件工程概念框架在1984年10月召开的第*届国际软件过程讨论会上被正式提出,它促使人们把注意力转向那些对软件项目的成功起着关键作用的过程与管理细节的研究,这一飞跃标志着“软件过程”时代的到来。
从20世纪90年代开始,软件从小规模、作坊式的生产方式开始向规模化、工业化生产方式转变。软件企业使用传统的软件工程技术时暴露出其能力弱,常常导致软件项目处于混乱状态,难以发挥软件新技术、新工具优势的问题,软件过程与管理的不适应成为制约提高软件产品质量和生产效率的瓶颈。人们认识到在现代化的软件生产方式下,要高效率、高质量和低成本地开发软件,必须改善软件过程与管理。从此软件生产转向以改善过程、提升软件项目管理为中心的软件工程时代,软件过程与管理成为软件工程学科的一个重要研究方向。
当前世界上多数国家都在实施信息化带动工业化的发展战略,软件业在全球经济中占据越来越重要的地位。面对全球软件需求的迅猛增加,许多国家都把软件业作为国民经济的支柱产业。软件过程与管理对于软件企业提高软件质量和生产效率,促进软件产业的良性发展具有极其重要的意义。
上述软件工程的发展历程说明软件工程以软件过程和管理为核心,软件过程是提高软件质量和改善软件开发及演化的重要工具(Osterweil,1987;1997a;1997b)。软件过程建模是软件项目组成员相互理解和交互的基础,是支持软件开发及演化的指导,并且有利于过程的管理、改进及自动执行。具体来说,软件过程建模的优势如下(Curtis et al.,1992)。
(1)统一的软件过程模型有利于软件团队的高效合作,不仅为整个团队,还可以为其中的每一个个体提供执行软件过程的充足信息,包括:辅助软件过程中相关技和工具的选择,识别高效软件开发和维护所必需的组件。
(2)在软件投入开发前估计软件过程改变会带来的影响,以制定合理的软件开发计划。
(3)为特殊软件项目制定特定的软件过程,创建可重用过程库,为将来的项目提供可重用的软件过程。
2006年,Boehm(2006)在其文章《软件过程的未来》中提到,正因为对可信软件不断增长的需求,软件过程将在未来二十年继续被研究和改进。
1.2.2 可信软件与软件过程
软件的质量在很大程度上依赖于软件开发时所使用的过程,而开发可信软件,实现软件可信演化,其本质是在开发软件以及演化软件的过程中满足软件的可信质量,这必然依赖于软件过程。在软件生命周期全过程中引入“可信”的概念,不仅可以在成本更低、效率更高的基础上生产出可信软件,还可以有效地控制软件在使用后期才发现的问题或者新软件无法检测出的问题。
随着工业界和学术界对可信软件研究的深入发展,大量的研究实践表明从软件生命周期的早期阶段开始,贯穿项目始终,通过流程化和规范化的过程来强化软件的可信性是实现可信软件的有效方法。软件开发与演化是以过程为中心的,软件过程是保证软件质量的关键因素,而软件可信需求的满足就应该通过严格的过程来实现,一个管理好的可信软件过程可以支持可信软件的生产,如果可信软件过程能够支持演化则可以支持软件的可信演化。
过去三十年,为提高软件可信性,不同学者提出了不同的面向过程的方法,总结归纳这些方法,将它们分为三类,即过程改进模型、特定阶段软件开发方法和过程质量保证方法,这些方法都被证明有效地使软件过程生产出来的软件提升了可信性。
1.过程评估与改进模型
过程评估与改进模型的典型代表是能力成熟度模型。能力成熟度模型集成(capability maturity model integration,CMMI)是其中*为成功而被广泛采用的模型,CMMI本质上是通过控制软件过程来提升软件组织生产软件的质量。虽然可信软件必然有其质量需求,但是满足质量需求的软件并非就是可信软件,可信软件有其指定的特殊需求。正因为此,基于安全工程,扩展能力成熟度模型(capability maturity model,CMM)后,系统安全工程能力成熟度模型(system security engineering capability maturity model,SSE-CMM)(CMU,2003)被提出来专门用于解决安全问题,但是安全性只是可信性的一个方面。
2.特定阶段软件开发方法
为提升软件的质量,特定阶段软件开发方法是在软件开发生命周期过程中在特定阶段指定执行一些有助于提升软件质量的活动。这种方法按照特定活动的覆盖范围分为两类,第*类是软件生命周期的所有阶段或者大部分阶段都指定了特定活动;另一类是只在软件生命周期的开始阶段指定特定的活动。
Boehm和In(1996)在解决非功能性需求冲突中给出了实现相应软件质量属性(包括保障性、互操作性、易用性、性能、演化性、可移植性、成本、时间和可重用性)
定价:108.0
ISBN:9787030534385
作者:张璇,王旭
版次:1
出版时间:2017-11
内容提要:
本书主要介绍需求驱动的可信软件过程建模及管理方法。首先,系统地论述可信软件与软件过程领域的相关研究与实践背景,分析可信软件与软件过程的关系。在通过可信软件需求获取过程策略的基础上,提出面向方面的可信软件过程建模,建模的主要目的是建立可信软件过程的抽象模型,通过对该抽象模型的分析有助于更好地理解正在实施或者将要实施的可信软件过程,同时,可执行的可信软件过程模型可以直接指导实际可信软件生产活动,进而规范软件开发行为,保证可信软件的可信性得以满足。*后,从过程模型切入,进一步关注过程绩效,建立“认识过程,建立过程,运作过程,优化过程”的体系,对可信软件过程提出管理方法,解决过程可信性度量、过程改进、过程运行实例动态可信演化以及可信风险管理问题,力图全面地给出一个需求驱动、面向软件过程的可信软件开发及演化解决方案。同时,全书系统地介绍可信软件需求与可信软件过程领域研究的经典理论和*新进展,也为软件工业界了解本领域相关方法学提供参考。
目录:
目录
前言
第1章 可信软件与软件过程 1
1.1 软件的可信需求 1
1.1.1 可信软件 2
1.1.2 可信软件需求 3
1.2 可信软件与软件过程 4
1.2.1 软件过程 4
1.2.2 可信软件与软件过程 6
1.3 本书结构 8
参考文献 9
第2章 可信软件需求获取与建模 12
2.1 软件需求工程 13
2.1.1 软件需求工程过程 14
2.1.2 软件需求建模 15
2.2 可信软件分领域需求 18
2.2.1 可信软件需求领域统计方法 18
2.2.2 可信软件需求领域统计结果 19
2.3 可信软件需求定义与获取 35
2.3.1 可信软件需求定义 35
2.3.2 可信软件非功能需求获取 40
2.4 可信软件早期需求建模 50
2.4.1 可信软件需求元模型 51
2.4.2 非功能需求本体知识库 55
2.5 案例研究 63
2.5.1 可信第三方认证中心软件SIS 63
2.5.2 航天软件 65
2.6 小结 69
参考文献 69
第3章 可信软件需求推理与权衡 73
3.1 可信软件非功能需求交互关系 74
3.1.1 软件非功能需求的交互 74
3.1.2 非功能需求推理与权衡 76
3.2 可信软件早期需求推理 78
3.2.1 可信软件需求的可满足性问题 78
3.2.2 可信软件需求的SAT 公式 83
3.2.3 推理的可靠性和完备性 86
3.2.4 可信软件需求的可满足性问题求解 88
3.3 非功能需求冲突权衡 92
3.3.1 非功能需求权衡 92
3.3.2 权衡代价分析 93
3.4 案例研究 100
3.4.1 SIS软件需求推理 100
3.4.2 SIS软件需求权衡 104
3.5 小结 108
参考文献 109
第4章 面向方面可信软件过程建模框架 113
4.1 可信软件过程建模基础 115
4.1.1 Petri网 115
4.1.2 软件演化过程建模方法 117
4.1.3 面向方面建模 121
4.2 面向方面扩展软件过程建模方法 124
4.3 可信软件过程元模型 128
4.4 可信软件过程建模框架 133
4.5 可信方面编织冲突分析 136
4.5.1 可信方面间编织冲突分析 136
4.5.2 可信方面织入基本模型冲突分析 137
4.6 可信方面编织冲突控制 138
4.6.1 可信方面间编织冲突控制 138
4.6.2 可信方面织入基本过程冲突控制 139
4.7 可信过程方面织入冲突检测 145
4.7.1 面向方面的冲突检测方法 146
4.7.2 冲突检测方面 147
4.8 小结 150
参考文献 150
第5章 可信方面编织方法 153
5.1 可信方面间融合 154
5.1.1 可信过程方面间融合 154
5.1.2 可信任务方面间融合 160
5.2 可信过程方面织入 162
5.2.1 条件织入 162
5.2.2 活动织入 164
5.2.3 弧织入 170
5.3 结构保持性 172
5.4 性质保持性 175
5.5 行为一致性 183
5.6 可信任务方面织入 187
5.7 可信方面间编织完整性及正确性 189
5.8 小结 194
参考文献 194
第6章 可信软件过程建模 195
6.1 面向方面可信软件过程建模 196
6.1.1 活动层建模 197
6.1.2 任务层和过程层建模 198
6.1.3 全局层建模 201
6.2 可信方面追踪 202
6.2.1 可信方面追踪原则 202
6.2.2 可信方面织入一致性追踪 203
6.3 案例研究 206
6.3.1 可信第三方认证中心软件SIS 207
6.3.2 航天软件 211
6.3.3 面向方面业务过程建模 217
6.4 小结 227
参考文献 228
第7章 可信软件过程管理 229
7.1 软件过程可信性度量 230
7.1.1 可靠性度量 234
7.1.2 安全性度量 246
7.1.3 易用性度量 257
7.2 软件过程改进 269
7.2.1 面向方面过程改进方法 271
7.2.2 软件过程改进案例 272
7.3 软件过程动态可信演化 274
7.3.1 过程运行实例的动态可信演化 278
7.3.2 可信过程片段迁移 281
7.3.3 演化异常处理 283
7.3.4 软件过程动态演化案例 286
7.4 可信风险评估与控制 288
7.4.1 风险管理基础 289
7.4.2 可信软件过程风险评估 290
7.4.3 可信软件过程风险控制 295
7.5 小结 298
参考文献 299
在线试读:
第1章 可信软件与软件过程
本章内容:
(1)介绍可信软件
(2)提出可信软件过程的概念
(3)介绍本书组织结构
软件的“可信”是指软件系统的行为及其结果总是符合人们的预期,在受到干扰时仍能提供连续的服务,这里的“可信”强调行为和结果的可预测性与可控制性,而“干扰”包括操作错误、环境影响和外部攻击等(刘克等,2008)。
可信软件,本质上就是其可信需求可以得到满足的软件;而软件的可信很大程度上依赖于软件开发和演化时所使用的过程。因此,理解软件的可信性,从软件过程的方法和技术角度保证软件的可信需求都得到可信的实现是解决问题、迎接挑战的一个有效途径。着眼于这个关键点,本书从软件过程的角度出发,对可信软件需求给软件开发与演化带来的一系列问题以及面向过程的可信软件开发、演化与管理方法进行系统而深入的介绍。
1.1 软件的可信需求
软件是信息基础设施的核心组成部分。如今,以高速通信、海量存储和高性能计算为核心的信息基础设施已经广泛深入地渗透到政治、经济、军事、文化和社会生活的各个层面,成为现代生产力发展和人类文明进步不可或缺的强大工具。在众多应用背景的推动下,软件的复杂度和规模都在以前所未有的速度不断延伸,在国防、金融、政府和通信等关键领域的各种复杂应用需求背景下,软件是否可信已经成为衡量软件系统的重要指标,但是这个领域存在着巨大的挑战,国际上由于软件缺陷而导致的重大灾难、事故和严重损失屡见不鲜:1996年,欧洲阿丽亚娜5型火箭的首次发射中,由于惯性参考系统软件的数据转换错误致使火箭在发射40秒后爆炸,造成25亿美元的经济损失;2003年,俄罗斯联盟TMA-1载人飞船由于计算机软件设计错误在返回时偏离预定降落地点约470千米;同年,美国东北部因其电力检测与控制管理系统失效造成大面积停电,损失超过60亿美元;2004年,美国洛杉矶机场400余架飞机与机场指挥系统一度失去联系,对几万名旅客的生命安全造成威胁;2005年,日本东京证券交易所由于软件升级故障导致股市停摆(刘克等,2008);2007年,美国洛杉矶国际机场的海关与边境保护系统发生故障,导致60个航班的2 万名旅客无法入关。在我国,2006年中航信离港系统发生3次软件系统故障,造成近百个机场登机系统瘫痪;同年,中国银联跨行交易系统出现故障,使整个交易系统瘫痪约8小时(刘克等,2008);2011年,中国海关软件发生技术故障,导致200多辆卡车滞留在中俄边界的满洲里口岸;2012年澳门电信因软件故障造成其3G及互联网服务瘫痪6小时。根据美国国家标准技术局(National Institute of Standards and Technology,NIST)的统计,仅2011年在各种商业软件产品中新发现的漏洞多达4465个,受到这些安全漏洞影响的组织和用户数量庞大,损失难以统计。从这些事实可见,可信软件的研究意义重大,存在巨大的应用背景需求,机遇与挑战并存。
可信软件作为计算机软件研究领域*具价值和*具挑战性的核心课题之一,引起了国内外政府组织、科学界和工业界的高度重视,纷纷提出有针对性的相关研究计划。2004年,美国信息技术协会(Information Technology Association of America,ITAA)、系统与软件联合会(The Systems and Software Consortium,SSCI)、北弗吉尼亚技术委员会(The Northern Virginia Technology Council,NVTC)、IEEE(Institute of Electrical and Electronic Engineers)可靠性分会以及其他机构共同组织召开了第二届国家软件高层会议(2nd National Software Summit,NSS2),提出为保证美国工业的竞争力开发可信软件产品和系统;2005年,美国国家软件研究中心(Center for National Software Studies,CNSS)发布了《软件2015》(Software 2015)的报告,报告中指出:未来软件研究*重要的焦点之一在于软件的可信性(CNSS,2005);2006年,欧洲启动了名为“开放式可信计算”(open trusted computing)的研究计划,已有23个科研机构和工业组织参与。“十一五”期间,可信计算被列入中国国家发展和改革委员会的信息安全专项,863计划启动了可信计算专项,国家自然科学基金设立了“可信软件”重大研究计划。
1.1.1 可信软件
随着社会的高速发展,信息爆炸的时代已经到来,计算机技术已深度应用到各行各业中。由于各行业的差距,软件需求也朝着特色鲜明的方向发展,这样的发展趋势使得软件应用多样化、开放化,但是多样化与开放化势必带来一个严重的问题—客户需要的软件必然更加精确、更加可靠、更加安全、更加易用。换句话说,客户需要的是能够以他们期望的方式或者说可以信任的方式长期稳定工作的软件。但是,软件从需求分析阶段开始就会潜伏着一系列不可避免的或者没有预知到的问题,这些潜在的问题对软件以一种客户所信任的方式长期稳定工作造成了极大的威胁。另外,软件正同时朝着两个方向迅速发展,其一是软件规模快速增大,其二是互联网广泛应用,使得软件面临着更加复杂的环境挑战,这一复杂环境又可以进一步细划为两类:一类是随着软件渗透到人们生活、文化、政治、经济、娱乐等各方面,软件就需要有更加强大的交互性,这势必带来软件漏洞和缺陷的爆发式增长;另一类是随着互联网的用户急速增加以及互联网应用的更加日常化、开放化,黑客软件和教程的获取变得更加容易,这势必导致软件面临更加严峻的挑战。以上这些问题正是可信软件研究的核心问题,也是软件可信性被提出来的根本原因,随着可信软件概念的提出,软件设计开发人员希望从需求分析阶段就尽可能避免软件中将会存在的问题,或者缩小问题范围,降低问题严重性。
“可信”一词源于社会学,原本表述的是一种主体和主体之间或者主体和客体之间的相互信任关系,这一信任关系表现在主体与主体之间是双向性的,而表现在主体与客体之间则是单向性的,即客体不具有客观意识。可信概念应用到软件工程领域,*早可以追溯到Laprie(1985)提出的可信赖计算。之后,学术界和工业界开展了大量的研究工作,从不同的角度对可信的概念进行了分析和总结。可信计算组织对于可信的定义为:系统可信是指系统能够完全按照其预先指定的程序运行,并且出现背离设计者意图行为的可能性很低(TCG,2007)。在ISO/IEC 15408中对可信的定义为:一个软件可信,是指对该软件的操作在任何条件下都是可预测的,而且该软件能抵抗外来的干扰和破坏(ISO/IEC,2005)。微软提出可信软件是向人们提供一种可靠的环境,在此基础上提出可信软件的几个基本需求:可靠性(reliability)、安全性(security)、保密性(privacy)和商业诚信(business integrity)。美国科学与技术委员会(National Science And Technology Council,NSTC)则认为,系统的可信是对系统行为是否符合预想的一种测量,同时他们认为一个可信的系统应该具有功能正确性、防危性、容错性、实时性和安全性等特征(NSTC,1997)。其他关于软件可信性的定义还有很多,具体内容请参阅本书第2章的2.3节。
总之,针对可信软件,满足特定的可信需求是其区别于普通软件的重要特征,特定可信需求的满足是可信软件获得用户信任、其行为能实现预期目标的客观依据。因此,针对可信软件我们首先研究可信软件需求。
1.1.2 可信软件需求
软件需求是软件能否被用户接受的衡量基准,即当软件交付给用户使用时,用户判断软件是否满足其使用目标的*一基准是软件的需求,与软件设计、实现所应用的技术无关(Holt et al.,2012)。而软件的“可信”定义为软件的动态行为及其结果总是符合人们的预期(刘克等,2008),即软件是否“可信”也是用需求作为其衡量标准的。因此,理解可信软件的可信需求是可信软件研究的重要环节。
“可信软件需求”这一概念出现至今已有三十多年,但是尚无被各领域所广泛接纳的统一性定义,因为人们对软件可信性的认识存在较大的分歧。*初人们在软件领域对可信需求的定义是“dependability”,在这一定义背景下,人们的研究主要集中于可靠性(reliability)需求,这是一种单方向的从主体到客体的价值判断。随着计算机网络的飞速发展,以及诸如身份验证等行为的出现,可信软件需求不再是单向性的,同时包括计算机向人的互动行为。美国国家计算机安全中心倡议的可信计算机系统评价标准(trusted computer system evaluation criteria,TCSEC)中仅将软件可信需求定位在安全性这个*一的非功能需求上(DoD,1985),导致许多程序员、工程师和管理者习惯于对可信的认知仅仅局限于安全方面。Pamas 等(1990)把可信需求定义为“safety”,并应用到不同的方法当中,他们关注在软件开发和维护周期中为了尽可能地减少错误使用的软件工程技术的程度,如增强测试(enhance testing)、评审(reviews)和审查(inspection)。由美国多家政府和商业组织参与的TSM(trusted software methodology)项目于1994年将软件可信性扩展定义为“软件满足既定需求的信任度”(Amoroso et al.,1994),该定义进一步阐述了可信性对管理决策、技术决策以及既定需求集合的高度依赖性。美国陆军研究院的Barnes 等提出了信息系统的“可生存性”概念,所谓的“可生存性”是指系统在人为或自然灾害破坏下表现出的可靠性,其本质上也是系统可信性(Knight & Sullivan,2000),这一表述主要侧重于当系统面对突发故障或者故意攻击时,仍能保持稳定工作或者具备从灾难中快速恢复的能力。
总之,软件可信性是一个综合复杂的概念,基于软件的不同应用场景,其可信需求具有统一性和相似性,同时表现出显著的差异性,它可以由一系列具体的可信需求通过集合的形式来具体描述,但在不同应用场景下,集合元素的组成、含义、优先级以及相关关系都可能不同。因此,为区别于非功能需求,人们谈及可信软件需求时,用到的词变为了“trusted”、“trustiness”或者“trustworthy”。
1.2 可信软件与软件过程
软件工程研究如何以系统性的、规范化的、可定量的过程化方法开发和维护软件,以及如何将经过时间考验而证明有效的管理技术与*好的技术方法结合起来,*终产生并持续维护符合用户需要的软件产品。
提高软件质量和软件生产效率,一直是软件工程学所研究的内容和软件开发活动中所追求的两个主要目标。围绕这两个目标,软件工程经历了从20世纪60年代由于软件危机爆发而诞生的工程化软件开发概念、理论与方法的起始阶段,进入到20世纪80年代以软件过程为核心的软件工程阶段,*终发展为从20世纪90年代开始至今的持续软件过程改进的软件工程阶段。
1.2.1 软件过程
软件工程以软件过程和管理为核心,是研究和应用如何以系统性的、规范化的、可定量的过程化方法开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的*好的技术方法结合起来的学科。
20世纪60年代发生的软件危机,促使软件业将注意力集中到软件过程中所使用的方法、技术、工具和环境等问题上。于是,从20世纪70年代开始,各种软件过程模型相继被提出,软件项目管理逐渐得到重视。软件项目团队开始注重需求分析、概要设计、详细设计、编码、测试、质量保证、配置管理、维护等若干活动步骤。这样的思维方式和以这种思维方式为基础的软件开发活动和软件项目管理,把软件的开发和维护纳入了工程化的轨道,有效地缓解了软件危机造成的被动局面。
进入20世纪80年代后,随着Internet技术的飞速发展,计算机应用全球化的步伐日趋加快,软件业时刻面临着新的挑战。面对越来越多的应用领域和规模越来越大的软件项目,当时已有的各种软件过程模型逐渐显露出其过于抽象的局限性:很多重要的支持软件过程的活动细节,如管理、控制、人员、通信、合作和技巧等,无法一一顾及,这种局面无疑使软件的开发与维护再一次受到了严重的制约。因此,以“软件过程”为基本概念的一种新的软件工程概念框架在1984年10月召开的第*届国际软件过程讨论会上被正式提出,它促使人们把注意力转向那些对软件项目的成功起着关键作用的过程与管理细节的研究,这一飞跃标志着“软件过程”时代的到来。
从20世纪90年代开始,软件从小规模、作坊式的生产方式开始向规模化、工业化生产方式转变。软件企业使用传统的软件工程技术时暴露出其能力弱,常常导致软件项目处于混乱状态,难以发挥软件新技术、新工具优势的问题,软件过程与管理的不适应成为制约提高软件产品质量和生产效率的瓶颈。人们认识到在现代化的软件生产方式下,要高效率、高质量和低成本地开发软件,必须改善软件过程与管理。从此软件生产转向以改善过程、提升软件项目管理为中心的软件工程时代,软件过程与管理成为软件工程学科的一个重要研究方向。
当前世界上多数国家都在实施信息化带动工业化的发展战略,软件业在全球经济中占据越来越重要的地位。面对全球软件需求的迅猛增加,许多国家都把软件业作为国民经济的支柱产业。软件过程与管理对于软件企业提高软件质量和生产效率,促进软件产业的良性发展具有极其重要的意义。
上述软件工程的发展历程说明软件工程以软件过程和管理为核心,软件过程是提高软件质量和改善软件开发及演化的重要工具(Osterweil,1987;1997a;1997b)。软件过程建模是软件项目组成员相互理解和交互的基础,是支持软件开发及演化的指导,并且有利于过程的管理、改进及自动执行。具体来说,软件过程建模的优势如下(Curtis et al.,1992)。
(1)统一的软件过程模型有利于软件团队的高效合作,不仅为整个团队,还可以为其中的每一个个体提供执行软件过程的充足信息,包括:辅助软件过程中相关技和工具的选择,识别高效软件开发和维护所必需的组件。
(2)在软件投入开发前估计软件过程改变会带来的影响,以制定合理的软件开发计划。
(3)为特殊软件项目制定特定的软件过程,创建可重用过程库,为将来的项目提供可重用的软件过程。
2006年,Boehm(2006)在其文章《软件过程的未来》中提到,正因为对可信软件不断增长的需求,软件过程将在未来二十年继续被研究和改进。
1.2.2 可信软件与软件过程
软件的质量在很大程度上依赖于软件开发时所使用的过程,而开发可信软件,实现软件可信演化,其本质是在开发软件以及演化软件的过程中满足软件的可信质量,这必然依赖于软件过程。在软件生命周期全过程中引入“可信”的概念,不仅可以在成本更低、效率更高的基础上生产出可信软件,还可以有效地控制软件在使用后期才发现的问题或者新软件无法检测出的问题。
随着工业界和学术界对可信软件研究的深入发展,大量的研究实践表明从软件生命周期的早期阶段开始,贯穿项目始终,通过流程化和规范化的过程来强化软件的可信性是实现可信软件的有效方法。软件开发与演化是以过程为中心的,软件过程是保证软件质量的关键因素,而软件可信需求的满足就应该通过严格的过程来实现,一个管理好的可信软件过程可以支持可信软件的生产,如果可信软件过程能够支持演化则可以支持软件的可信演化。
过去三十年,为提高软件可信性,不同学者提出了不同的面向过程的方法,总结归纳这些方法,将它们分为三类,即过程改进模型、特定阶段软件开发方法和过程质量保证方法,这些方法都被证明有效地使软件过程生产出来的软件提升了可信性。
1.过程评估与改进模型
过程评估与改进模型的典型代表是能力成熟度模型。能力成熟度模型集成(capability maturity model integration,CMMI)是其中*为成功而被广泛采用的模型,CMMI本质上是通过控制软件过程来提升软件组织生产软件的质量。虽然可信软件必然有其质量需求,但是满足质量需求的软件并非就是可信软件,可信软件有其指定的特殊需求。正因为此,基于安全工程,扩展能力成熟度模型(capability maturity model,CMM)后,系统安全工程能力成熟度模型(system security engineering capability maturity model,SSE-CMM)(CMU,2003)被提出来专门用于解决安全问题,但是安全性只是可信性的一个方面。
2.特定阶段软件开发方法
为提升软件的质量,特定阶段软件开发方法是在软件开发生命周期过程中在特定阶段指定执行一些有助于提升软件质量的活动。这种方法按照特定活动的覆盖范围分为两类,第*类是软件生命周期的所有阶段或者大部分阶段都指定了特定活动;另一类是只在软件生命周期的开始阶段指定特定的活动。
Boehm和In(1996)在解决非功能性需求冲突中给出了实现相应软件质量属性(包括保障性、互操作性、易用性、性能、演化性、可移植性、成本、时间和可重用性)