软件工程概论
一章节软件工程概论

一.软件生存周期的概念 1.在软件项目开发过程中一般要面临如下的问题: (1) 提出问题? (2) 有无解决问题的办法? (3) 达到的标准? (4) 问题如何解决? (5) 解决问题的具体方法? (6) 如何实现? (7) 产品的检验? (8) 产品的使用和维护等。 2.软件生存周期:从软件定义、开发、使用、维护到淘汰的全过 程。
确和正确的要求往往是不实际的。
7
1.4 软件开发的方法和技术(2)
二.渐增型 1.渐增型方法是从问题的部分需求出发,先建立一个不完全的系 统,通过测试运行该系统取得经验和信息反馈,加深对软件需 求的理解,进一步使系统扩充和完善。如此反复,直至软件人 员和用户对所设计完成的软件系统满意为止。 2.在渐增型开发下的软件是随软件开发的过程而逐渐形成的。 3.渐增型开发方法适合于知识型软件的开发,设计系统时对用户 需求的认识开始不是很清楚的,需要在开发过程中不断认识、 不断获得新的知识去丰富和完善系统。多数研究性质的试验软 件,一般采用此方法。 开发过程图解如下所示:
具” 等。
五.软件工程环境 方法与工具的结合,加上配套的软、硬件支持称为软件工程 环境。
它能支持开发者按照软件工程的方法,全面完成生存周期中的各项任 务。
如UNIX环境、Ada环境以及各种工作站。 六.软件工程管理
1.按照进度及预算完成软件计划,实现预期的经济和社会效益。 17 2.软件管理可以借助计算机来实现。
开发阶段流程图
定义软件结构 与数据结构, 确定模块功能、 调用关系接口
评审
修改
接受
确定每个 模块算法
编写程序
修改 静态检查
通过 单元测试, 集成测试, 验收测试。
源程序 清单
软件工程概论知识点汇总

软件工程概论知识点汇总软件工程概论知识点汇总第一章软件工程概述1. 软件工程定义及概念2. 软件工程的历史发展3. 软件开发生命周期模型a. 瀑布模型b. 迭代模型c. 增量模型d. 螺旋模型e. 敏捷开发模型第二章需求分析与管理1. 需求工程的基本概念2. 需求获取与分析方法3. 需求规格说明书4. 需求变更与配置管理第三章软件设计与架构1. 结构化设计方法2. 面向对象设计方法3. 设计模式及应用4. 软件架构设计与选择第四章软件编码与测试1. 编码规范与风格2. 测试方法与策略3. 单元测试与集成测试4. 软件质量保证与评估第五章软件项目管理1. 软件项目组织与人力资源管理2. 软件项目计划与进度管理3. 风险管理与配置管理4. 软件项目质量管理第六章软件维护与演化1. 软件维护的类型与阶段2. 软件维护的过程与方法3. 软件重构与演化第七章软件工程的理论与方法1. 软件需求建模方法2. 软件设计原则与方法3. 软件度量与评估方法4. 软件工程的形式化方法第八章软件工程的伦理与职业道德1. 软件工程的伦理问题2. 软件工程师的职业道德要求3. 软件工程师的专业素养与发展本文档涉及附件:________本文所涉及的法律名词及注释:________1.著作权法:________保护软件的著作权,禁止未经授权的复制、修改、发布等行为。
2.商标法:________保护软件的商标权,禁止他人未经授权使用相同或相似的商标。
3.专利法:________保护软件的发明专利权,禁止他人未经授权使用相同或相似的发明。
4.合同法:________规定软件开发过程中的合同签订与履行等事项。
软件工程概论

软件工程概论软件工程是一个涉及软件开发、维护和管理的学科,它强调系统化的方法和标准化的过程,旨在提高软件的质量和效率。
本文将介绍软件工程的基本概念、重要原则和发展趋势,以及软件工程师的职责和技能要求。
一、软件工程的概念与意义软件工程是一门应用科学,它研究如何以系统化、规范化和可重复的方式开发和维护软件。
与传统的工程学科一样,软件工程通过运用各种工程原则和方法,使软件开发生命周期中的每个阶段都能得到有效管理和控制。
软件工程的意义在于提高软件质量和效率,减少开发成本和时间投入,同时满足用户需求,并保证软件的可靠性和安全性。
二、软件工程的原则与方法1. 需求分析:软件工程过程的第一步是准确理解和规范用户需求。
通过与用户的交流和分析,软件工程师能够明确软件的功能和特性,为后续开发阶段提供有力的指导。
2. 设计与建模:设计是软件工程的核心环节,它包括系统架构设计、模块设计和数据库设计等。
通过合理的设计和建模,软件工程师能够确保软件的可扩展性、灵活性和可维护性。
3. 编码与测试:编码是将设计的结果转化为可执行的程序代码,测试则是验证程序的正确性和稳定性。
软件工程师应该遵循规范的编程实践和测试方法,确保代码的质量和可靠性。
4. 配置管理:配置管理是软件工程中的重要过程,它涉及到对软件配置项的标识、控制和变更管理等。
通过配置管理,软件工程师能够管理软件的版本、变更和发布,确保软件的可追溯性和一致性。
5. 迭代与持续改进:软件工程是一个不断迭代和改进的过程。
软件工程师应该通过持续的监控和评估,发现软件开发过程中存在的问题和改进的空间,并及时调整和优化。
三、软件工程的发展趋势1. 敏捷开发:敏捷开发是一种反传统的软件开发方法,强调团队合作、迭代开发和快速反馈。
相比传统的瀑布模型,敏捷开发更加注重灵活性和快速交付,适应了快速变化的市场需求。
2. 云计算与大数据:随着云计算和大数据技术的发展,软件工程也面临着新的挑战和机遇。
软件工程概论PPT课件

集成测试
总结词
集成测试是在单元测试的基础上,将多个模块或组件组合在一起进行测试,以验证它们之间的集成是否正常工作。
详细描述
在软件开发过程中,当多个模块或组件完成单元测试后,需要进行集成测试来验证它们之间的交互和集成是否正 常。集成测试的目的是发现模块之间的接口问题和集成后的性能问题,以确保软件的整体功能和性能达到要求。
编码
选择编程语言
根据项目需求和团队技术能力,选择适合的 编程语言进行编码。
编码规范
制定编码规范,确保代码的可读性、可维护 性和可扩展性。
编码实现
按照设计文档和编码规范,编写代码实现各 个模块的功能。
代码审查
对编写的代码进行审查,确保其符合规范和 设计要求,并进行必要的重构和优化。
测试
单元测试
对每个模块进行单元测试,确保其功能正常、符合设计要求。
界面风格与一致性
界面设计应保持一致的风格,以提高用户对软件系统的认知和熟悉 度。
模块设计与划分
模块设计与划分概述
模块设计与划分是指将软件系统划分为一系列相互独立、可复用 的模块。
模块化设计的好处
模块化设计可以提高软件系统的可维护性、可扩展性和可重用性。
模块间的通信与协作
模块间的通信和协作是模块化设计的关键,应确保模块间的松耦 合和低耦合。
05 软件测试工程
单元测试
总结词
单元测试是对软件中的最小可测试单元进行检查和验证,通常以函数或方法为 单位进行测试。
详细描述
单元测试是软件开发过程中的一种测试方法,旨在验证软件的最小单元是否符 合设计要求和功能规范。它通常在编码阶段同步进行,以确保代码的正确性和 可靠性。单元测试的方法包括白盒测试和黑盒测试。
第一章软件工程概论

第⼀章软件⼯程概论第⼀章⼀、体系结构的发展(1)主机结构(2)F/S结构(⽂件-服务器结构)(3)C/S结构(客户-服务器结构)(4)B/S结构(浏览器结构)⼆、开发环境(1)单⾏命令式调式器(如DEBUG)(2)多⾏代码编辑器(如EDIT编辑器)(3)集成开发环境三、软件的概念软件是计算机系统中与硬件相互依存的另⼀部份,它是包括程序、数据及其相关⽂档的完整集合。
可以理解为:软件=程序+数据+⽂档四、软件的特点1.软件具有抽象特征2.软件具有⽆明显制造过程的特征3.软件⽆备件的特征4.⼿⼯制作特征5.成本⾼昂特征五、软件的分类(1)按软件功能进⾏划分:1系统软件 2⽀撑软件 3应⽤软件2.按软件规模进⾏划分六、软件危机指什么在软件开发和维护中所产⽣的⼀系列严重的问题。
⼀是如何开发软件,满⾜⽤户对软件的需求;⼆是如何维护数量众多的已有软件。
七、解决软件危机的途径(1)加强软件开发过程的管理(2)推⼴使⽤开发软件的成功技术与⽅法(3)开发和使⽤好的软件⼯具,建⽴良好的软件⼯程⽀持环境。
⼋、软件⼯程的⽬标1.付出较低的开发成本2.实现要求的功能3.取得较好的软件性能4.开发的软件易于移植5.需要的维护费⽤较低6.能按时完成开发⼯作,及时交付使⽤。
九、软件⽣存周期及其⼯作任务软件从定义、开发、使⽤和维护,直到最终被废弃,要经历⼀个漫长的时期,通过称为软件⽣命(⽣存)周期。
⼯作任务1.计划时期:主要任务是调查和分析:调查⽤户需求,分析新系统的主要⽬标,分析开发该系统的可⾏性。
细分为问题定义和可⾏性研究两个阶段。
可⾏性研究分为技术可⾏性和经济可⾏性。
2.开发时期:完成设计和实现两⼤任务,设计包括需求分析和软件设计,实现阶段包括编码和测试。
从重要性和⼯作量上看,设计要重于实现。
分为四个阶段:(1)需求分析(2)软件设计(3)编码(4)测试3.运⾏维护阶段:发现错误、⼯作变化、增加功能等需要的软件升级⼯作。
⼗、软件开发模型分类1.瀑布模型传统的⽣命周期⽅法学通常被命名为“瀑布模型”,包括:问题定义、可⾏性研究、需求分析、总体设计、详细设计、编码和单元测试、综合测试、软件维护。
软件工程概论

软件工程概论软件工程概论随着信息技术的不断发展,软件在我们的生活中扮演着越来越重要的角色。
同时,软件行业也成为了当今世界最具活力的产业之一,具有无限的发展前景。
为了能够更好的利用信息技术及其应用,软件工程应运而生。
软件工程是一门关于软件开发及其维护的学科,旨在建立一组标准化的方法,规范软件的生产过程,以确保软件的质量、可靠性、有效性和安全性。
本文将介绍软件工程的概念、软件生命周期、流程模型、软件开发方法以及软件工程中的人员角色。
一、软件工程的概念软件工程是一种系统化、规范化、可量化的软件开发方法。
它是应用工程的思想、方法、技术和经验,以满足用户需求为核心,从软件的开发到维护全过程的管理学科。
软件工程的主要任务是:掌握软件开发中必要的知识、方法和技能,理解软件开发中的困难和问题并寻求合理的解决方案。
软件工程要求软件开发人员从纯技术的视角上,向管理、计划和控制等方面发展,以满足软件市场日益增长的需求。
二、软件生命周期软件生命周期指软件开发从提出需求到废止使用的整个过程。
它包括五个基本阶段:计划阶段、需求分析阶段、设计阶段、编码阶段和测试阶段。
其中,计划阶段包括项目开始前的准备活动,需求分析阶段主要是明确用户对软件的需求,设计阶段则是将需求转化为软件模型,编码阶段是根据设计方案编写程序代码,测试阶段则是对软件进行系统测试以确保质量。
三、流程模型为了更好的管理和控制软件开发过程,人们提出了软件开发流程模型。
软件开发的游程模型是指软件建设过程中不断实施的各个阶段和活动的组合,基本上可以分为瀑布模型、原型模型、迭代模型、螺旋模型、敏捷模型等。
(1)瀑布模型瀑布模型是一种经典的、线性的软件开发流程模型。
它是按照顺序完成各个阶段的,即只有当上一个阶段完成后才能进入下一个阶段。
这种模型的优点是开发流程清晰明确,整个过程非常可控,但是也有缺点,即在后期发现问题,需要回到前一个阶段进行修改,费用和时间成本较高。
(2)原型模型原型模型的主要特点是在软件开发的初期,开发人员会根据用户的需求和建议,开发出一个草图性质的产品原型。
软件工程概论

功能性语言 functional language
功能性语言用来书写软件功能规约(functional specification)
软件功能规约是软件功能的严格而完整的陈述。 通常它只刻画软件系统“做什么”的外部功能, 而不涉及系统“如何做”的内部算法。
典型的功能性语言有广谱语言、Z语言。
• 软件生存周期大体可分为如下几个活动:计算机系统 工程、需求分析、设计、编码、测试、运行和维护
36/151
• 计算机系统工程
➢ 计算机系统包括计算机硬件、软件、使用计算机 系统的人、数据库、文档、规程等系统元素。
➢ 计算机系统工程的任务:
❖确定待开发软件的总体要求和范围,以及它与其它计 算机系统元素之间的关系
➢ 硬件向巨型机和微型机二个方向发展,出现了计算机网络, 软件方面提出了软件工程,出现了“计算机辅助软件工程” (CASE)
➢ 计算机的应用领域渗透到各个业务领域,出现了嵌入式应用, 其特点是受制于它所嵌入的宿主系统
➢ 开发方式逐步由个体合作方式转向工程方式 ➢ 软件工程方面的研究主要包括软件开发模型、软件开发方法
• 按用户要求分:过程式语言和非过程式语言 过程式语言(procedural language)是通过指明一列可
执行的运算及运算次序来描述计算过程的程序设计语言。 如FORTRAN、COBOL、C等。
非过程式语言(nonprocedural language )是不显式 指明处理过程细节的程序设计语言。在这种语言中尽量引 进各种抽象度较高的非过程性描述手段,以期做到在程序 中增加“做什么”的描述成分,减少“如何做”的细节描 述。如第四代语言(4GL)、函数式语言、逻辑式语言。
需求定义语言 功能性语言 设计性语言 实现性语言(即程序设计语言) 文档语言
软件工程概论

软件演化策略与方法
组件化演化
将软件拆分为独立可复用的组件进行演 化。
VS
服务化演化
将软件功能以服务的形式提供,实现灵活 组合和扩展。
软件演化策略与方法
重构
改进软件内部结构而不改变其外部行为。
代码优化
提高代码质量和性能。
软件演化策略与方法
模块化设计
将软件划分为独立的功能模块,便于维护和 扩展。
自动化测试
04
自动化测试工具介绍
Selenium
用于Web应用的自动化测试工具,支 持多种浏览器和操作系统。
JUnit
用于Java程序的单元测试工具,可以 与其他测试框架集成使用。
Appium
用于移动应用的自动化测试工具,支 持iOS和Android平台。
TestNG
一个功能强大的Java测试框架,支持 多种测试类型(如单元测试、集成测 试、端到端测试等)。
手工测试与自动化测试
手工测试是由测试人员手动执行测试用例;自动化测试则是使用自 动化工具来执行测试用例。
黑盒测试技术
等价类划分
将输入数据划分为若干个等价类,每个等价类中的数据在 程序中的处理方式是相同的,从而减少测试用例的数量。
边界值分析
针对输入或输出的边界条件进行测试,因为边界条件往往 是容易出现错误的地方。
软件质量不达标,存在缺陷和错误。
软件危机表现 软件开发成本超出预算。 软件维护困难,难以适应需求变化。
软件工程目标与方法
软件工程目标 实现软件的工业化生产,提高软件生产率。 降低软件开发和维护成本,提高软件质量。
软件工程目标与方法
提高软件开发过程的可见性和可控性。
软件工程方法
瀑布模型:按照需求分析、设计、编码、测试和维护的顺序逐步进行软件开发,每个阶段都有明确的输 入和输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第13章软件重用技术13.1 典型问题分析和解答【例1】实施软件重用的目的是要使软件开发工作进行得( A )。
软件重用的实际效益除了( B )之外,在企业的经营管理方面也渴望达到理想的效益。
新的应用软件开发技术和工具是以( C )作为关键,重用大粒度的( D ),为的是快速开发应用软件。
这些新技术包括微软的( E )、( F )、(G ),SUN公司的Java,OMG公司的CORBA、IDL等。
供选择的答案:A. ①更简捷②更方便③更快、更好、更省④更丰富B. ①重用率②功能扩充③效率④空间利用率C, D. ①软件②固件③构件④属性⑤对象⑥事物⑦数据⑧代码E~G. ①office ②Visual Basic ③Active X ④Photoshop⑤OLE ⑥Fortran ⑦COBOL ⑧Delphi答案:A. ③, B. ①, C. ③, D. ⑤, E. ②, F. ③, G. ⑤。
其中,E、F、G的答案顺序可互换。
分析:实施软件重用的目的是要使软件开发工作进行得是更快、更好、更省。
“更快”是指在市场竞争环境中,软件开发工作能满足市场上时间方面的要求(即在提供软件产品的时间方面能赛过竞争对手);“更好”是指开发出来的软件在未来的运行中失效可能性小;“更省”是指在开发和维护期间所花费的开销少。
日美一些大公司的资料表明,软件重用率最高可望达到90 %,而且软件重用使得企业在及时满足市场、软件质量、软件开发和维护费用等方面都得到显著的改进。
除了重用率之外,在企业的经营管理方面也可望达到理想的效益。
例如,上市时间可缩短2 ~ 5倍;软件产品的缺陷密度可减少5 ~ 10倍;软件产品的维护费用可减少5 ~ 10倍;软件开发总费用可减少15% ~ 75%,其中,75%是针对长期项目,包括开发可重用构件及支持重用的负担。
新的应用软件开发技术和工具是以“构件”作为关键,重用大粒度的“对象”,为的是快速开发应用软件。
这些新技术包括微软的Visual Basic、Active X、OLE(对象链接与嵌入),SUN公司的Java,OMG公司的CORBA(公用对象请求代理程序体系结构)、IDL(接口定义语言)等。
非面向对象语言(如COBOL和Fortran)在重用实践中已经相当的成功。
这些非面向对象程序设计语言构件技术的成功实践说明了实现软件重用并不限于面向对象语言构件或类库。
【例2】以往的软件工程技术不能满足重用的需要,体现在工程、( A )、( B )、经营业务等4个方面。
“工程”指软件开发工程,表现在缺乏( C )手段,缺乏( D )构件,缺乏对潜在可重用的( E ),缺乏实施重用的工具。
供选择的答案:A, B. ①需求②过程③环境④组织管理C ~ E. ①重用②可靠性③灵活性④界定⑤工具⑥互连性答案:A. ②, B. ④, C. ④, D. ①, E. ③。
其中,A、B的答案的顺序可互换。
分析:以往的软件工程技术不能满足重用的需要,体现在工程、过程、组织管理、经营业务等4个方面。
这里所说的“工程”是指软件开发工程,其技术和方法面对重用的需要已显得低效,主要表现在:▪缺乏界定手段:为了软件重用,需要循软件开发流程的各个阶段,通过分析它们的描述模型,明确界定出潜在可重用的部分,被界定出的部分,可能是可被重用的部分,也可能是可被可重用构件代用的部分。
而以往的软件工程缺乏这种界定手段。
▪缺乏可重用的构件:这反映在许多方面。
例如,不能有效地挑选出可重用构件并对它们进行强化;缺乏对构件打包、文档化、分类、界定的技术;缺乏有效方法进行(构件)库的设计和实现;缺乏良好的构件库存取方法。
▪缺乏对潜在可重用构件的灵活性:如果一个构件很死板,那么它被重用的机会就很少。
而过去的软件工程方法在设计灵活的、分层的软件体系结构方面一直没有成熟的办法。
过去的方法是对构件进行调节使之满足新的需求,或者使对新的体系结构进行限制。
▪缺乏实施重用的工具:为了实施重用,需要一系列新的工具,并把它们集成到面向重用的软件工程环境中去。
而过去的工程缺乏这方面的工具。
【例3】论域工程过程要在选定的应用论域中界定出( A )和( B ),要为多个应用和构件定义一个( C ),并开发一系列可适度扩展的( D )。
创建可重用构件既困难又昂贵。
所以,应当帮助软件人员进行界定工作,以及按重要性对各项( E )进行优先性排队。
在一定程度上,这项工作要依赖于( F )。
供选择的答案:A, B, E, F:①共性②特性③可变性④属性⑤灵活性⑥可靠性⑦健壮性⑧适用性C, D:①固件②构件③体系结构④组件⑤总体框图⑥数据结构答案:A. ①, B. ③, C. ③, D. ②, E. ②, F. ⑥。
其中,A、B的答案顺序可互换。
分析:论域工程过程要在选定的应用论域中界定出共性和可变性,要为多个应用和构件定义一个体系结构,并开发一系列可适度扩展的构件。
创建可重用构件既困难又昂贵。
所以,应当帮助软件人员进行界定工作,以及按重要性对各项“特性”进行优先性排队。
在一定程度上,这项工作要依赖于预测的可靠性(预测需要哪些应用层的可靠性和构件层的可靠性),这也关系到我们要冒多大的风险。
【例4】软件体系设计的一个中心问题是能否( A ),以及采用何种软件体系结构风格。
有原则地使用体系结构风格可带来一些实际的好处:(1)它促进了对设计的( B );(2)它可以带来显著的( C )(体系结构风格的不变部分使它们可以共享同一个实现代码);(3)只要系统是使用常用的、规范的方法组织起来的,就可以让其它设计者很容易地理解软件的体系结构;(4) 对标准或规范风格的使用也支持了( D ),例如像CORBA这样的面向对象的架构和基于事件机制的工具的集成;(5)在限制了设计空间的情况下体系结构风格通常允许进行特殊的与风格有关的分析;(6)通常可以对特定的风格提供( E )手段。
供选择的答案:A C. ①使用特定的体系模式②使用重复的体系模式③重用④专用⑤代码重用⑥结构重用D ~ E. ①可视化②构件③互操作性④可移植性⑤可调度性⑥框架答案:A. ②, B. ③, C. ⑤, D. ③, E. ①。
分析:软件体系设计的一个中心问题是能否使用重复的体系模式,以及采用何种软件体系结构风格。
例如可以采用通用的基于层次或数据流的系统体系结构,或者采用特殊的系统组织(如经典的编译器分解方式),OSI七层协议,MVC用户界面语义图等。
有原则地使用体系结构风格可带来一系列实际的好处。
(1)它促进了对设计的重用。
一些经过实践证实的解决方案可以拿来可靠地解决新问题。
(2)它可以带来显著的代码重用。
体系结构风格的不变部分使它们可以共享同一个实现代码。
(3)只要系统是使用常用的、规范的方法组织起来的,就可以让其它设计者很容易地理解软件的体系结构。
例如,如果某人把系统描述为“客户机∕服务器”模式,则不必给出细节,人们立刻就会明白它们是如何一部分一部分地组织起来,并在脑海中清晰地得到这个图像。
(4) 对标准或规范风格的使用也支持了互操作性,例如像CORBA这样的面向对象的架构和基于事件机制的工具的集成;(5)在限制了设计空间的情况下,体系结构风格通常允许进行特殊的与风格有关的分析。
例如,分析管道过滤器系统的可调度性(吞吐量、延时、死锁的解决)是可行的,但对于任意的、或用其它方法构造的架构来说,这种分析可能毫无意义。
(6) 通常可以对特定的风格提供可视化的手段。
例如,可以对与客户的专业领域有关的设计作出图解或文字说明。
对于应用软件体系结构风格来说,由于视点的不同,软件人员有很大的选择空间。
要为系统选择或设计某一个体系结构风格,必须根据特定项目的具体特点,进行分析比较后再确定。
体系结构风格的使用几乎完全是特化的。
【例5】分层系统采用层次化的组织方法,每一层向其( A )提供服务,并利用( B )的服务。
在一些分层系统中,( C )全部被隐藏起来,只有( D )和一部分精心选择的功能可以被系统外部看到。
在这种系统中,( E )是实现在层次结构中的一些虚拟机,( F )是层次与层次之间交互的协议,(G )包括对层次之间交互的限制。
分层系统中有许多可取的属性。
首先,它支持( H )的系统设计,这使得设计者可以把一个复杂的系统按递增的步骤分解开来;其次,它支持(I ),像管道结构的系统一样,因为每一层至多和相邻的上下层交互,因此,功能的改变最多只影响相邻的上下层。
另外,它能支持(J ),和抽象数据类型一样,只要提供的服务接口定义不变,同一层的不同实现可以交换使用。
供选择的答案:A ~ D. ①下层②内部层次③外部层次④上层⑤中间件⑥接口E ~ G. ①接口定义②软件部件③连接④拓扑约束⑤规范定义⑥推理机制⑦系统结构H ~ J. ①基于抽象程度递增②基于具体细节递增③重用④可视化⑤互操作⑥功能增强⑦效率提高⑧结构化答案:A. ④, B. ①, C. ②, D. ③, E. ②, F. ③, G. ④, H. ①, I. ⑥, J. ③。
r t L L t r L L R )C /C 1(1C r n n --t t E L n nE L R )C /C (1C r n n -t r n n L )E /E (1E -分析:对于分层系统:(1) 基本结构:分层系统采用层次化的组织方法,每一层向其上层提供服务,并利用其下层的服务。
在一些分层系统中,内部层次全部被隐藏起来,只有外部层次及一部分精心选择的功能可以被系统外部所见。
在这种系统中,软件部件是实现在层次结构中的一些虚拟机,连接是层次与层次之间交互的协议,拓扑约束包括对层次之间交互的限制。
如图所示。
(2) 应用:这种系统最广泛的应用是分层通信协议。
在这一应用论域中,每一层提供一级抽象的功能,作为上层通信的基础。
较低的层次定义低层的交互,最低层通常只定义硬件物理连接。
其它应用论域有数据库系统、操作系统等。
(3) 分层系统中有许多可取的属性。
首先,它支持基于抽象程度递增的系统设计,这使得设计者可以把一个复杂的系统按递增的步骤分解开来;其次,它支持功能增强,像管道结构的系统一样,因为每一层至多和相邻的上下层交互,因此,功能的改变最多只影响相邻的上下层。
另外,它能支持重用,和抽象数据类型一样,只要提供的服务接口定义不变,同一层的不同实现可以交换使用。
这样,就可以定义一组标准的接口,并允许有各种不同的实现方法(典型的例子是ISO OSI 参考模型和某些Windows 的系统协议)。
【例6】软件重用可分为以下三个层次:( A ),例如软件工程知识的重用。
( B ),例如面向对象方法或国家制定的软件开发规范的重用。
软件成分的重用。
软件成分的重用又可进一步划分为( C ),如剪贴;( D ),如重用设计模型;( E ),更高级别重用。