软件工程导论资料
软件工程导论资料

1.软件的定义软件是程序、数据及相关文档的完整集合。
2.软件危机的定义、表现、原因定义:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
表现:a)对软件开发成本和进度的估计常常很不准确。
b)用户对“已完成的”软件系统不满意的现象经常发生。
c)软件产品的质量往往靠不住。
d)软件常常是不可维护的。
e)软件通常没有适当的文档资料。
f)软件成本在计算机系统总成本中所占的比例逐年上升。
g)软件开发产生率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
原因:客观:与软件本身的特点有关。
主观:和软件开发与维护的方法不正确有关a)软件缺乏“可见性”b)软件缺乏“可插拔性”c)多人管理困难d)忽视软件需求分析e)忽略文档f)轻视维护3.软件工程的定义,软件工程方法学的三个要素是什么?定义:采用工程的概念、原理、技术和方法来开发与维护软件。
三要素:方法、工具和过程4.软件工程的七大原理:a)用分段的生命周期计划严格管理b)坚持进行阶段评审c)实行严格的产品控制d)采用现代程序设计技术e)结果应能清楚的审查f)开发小组的人员应该少而精g)承认不断改进软件工程实践的必要性5.软件工程生命周期有哪三大阶段八小阶段三大阶段:软件定义、软件开发、运行维护八小阶段:问题定义、可行性研究、需求分析、总体设计、详细设计、编码和单元测试、综合测试、软件维护。
6.常见的软件开发模型有哪些?各有什么特点、优缺点?瀑布模型特点:1、阶段间具有顺序行和依赖性2、推迟实现的观点3、质量保证的观点增量模型螺旋模型快速原型模型喷泉模型7.可行性研究的基本任务是在最短的时间内以最小的代价确定问题是否能够解决。
8.可行性研究的三个角度技术可行性、经济可行性、操作可行性。
9.可行性研究结束后的文档是可行性研究报告10.系统流程图表达系统的物理模型数据流图和数据字典共同描绘系统的逻辑模型11.软件开发成本估计的三个经济指标代码行技术、软件生命周期化、自动估计成本12.经济效益分析的三个经济指标纯收入、投资回收期、投资回收率13.需求分析的基本任务是准确回答系统做什么14.需求分析结束提交的文档叫软件需求规格说明书15. 需求分析的任务有哪些?确定系统的综合要求分析系统的数据要求导出系统的逻辑模型修正开发计划16.需求分析阶段,系统的综合要求需求有哪些?功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求、约束、逆向需求、将来可能提出的要求。
软件工程导论资料

•软件工程是:①将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;②在①中所述方法的研究软件工程过程包括:开发过程、运作过程、维护过程、管理过程、支持过程、获取过程、供应过程、剪裁过程等CMM(Capability Maturity Model)即能力成熟度模型,是美国卡内基梅隆大学软件工程研究所(SEI)在美国国防部资助下于二十世纪八十年代末建立的,用于评价软件机构的软件过程能力成熟度的模型。
•典型的软件过程模型有:–瀑布模型(waterfall model)–演化模型(evolutionary model)–增量模型(incremental model)–原型模型(prototyping model)–螺旋模型(spiral model)–喷泉模型(water fountain model)–基于构件的开发模型(component-based development model)–形式方法模型(formal methods model)•是瀑布模型和演化模型的结合,并增加了风险分析•螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即:–制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件–风险分析:评价所选的方案,识别风险,消除风险–工程实施:实施软件开发,验证工作产品–客户评估:评价开发工作,提出修正建议•喷泉模型是一种支持面向对象开发的模型•体现迭代和无间隙特征–迭代:各开发活动常常重复工作多次,相关的功能在每次迭代中随之加入演进的系统–无间隙:开发活动之间不存在明显的边界•所谓基于计算机的系统是指:通过处理信息来完成某些预定义目标而组织在一起的元素的集合•组成基于计算机系统的元素主要有:软件、硬件、人员、数据库、文档和规程•本书将软件需求工程细分为:需求获取、需求分析与协商、系统建模、需求规约、需求验证和需求管理六个阶段。
•常用的分析方法:–面向数据流的结构化分析方法(SA)–面向数据结构的分析方法–面向对象的分析方法(OOA)•需求管理是一组用于帮助项目组在项目进展中的任何时候去标识、控制和跟踪需求的活动•需求跟踪有两种方式,正向跟踪与逆向跟踪–正向跟踪:以用户需求为切入点,检查《需求规约》中的每个需求是否都能在后继工作产品中找到对应点–逆向跟踪:检查设计文档、代码、测试用况等工作产品是否都能在《需求规约》中找到出处•软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段:软件体系结构设计阶段和部件级设计•使用一种设计方法,软件分析模型中通过数据、功能和行为模型所展示的软件需求的信息被传送给设计阶段,产生数据/类设计、体系结构设计、接口设计、部件级设计软件设计的原则:抽象化与逐步求精;•软件设计中主要抽象手段有:过程抽象和数据抽象模块化;信息隐藏;功能独立;•功能独立性可以由两项指标来衡量:内聚度与耦合度软件体系结构关注系统的一个或多个结构,包含软件构件、这些构件的对外可见的性质以及它们之间的关系•常见的软件体系结构–单主机结构–C/S(Client/Server)结构–B/S(Browser/Server)结构常用体系结构风格:数据为中心的体系结构数据流风格的体系结构调用和返回风格的体系结构面向对象风格的体系结构层次式风格的体系结构在这里要了解几个概念:–程序结构的深度:程序结构的层次数称为结构的深度。
软件工程导论复习资料

软件工程导论复习资料填空题1.在信息处理和运算机范畴内,一样认为软件是_法度榜样____、_文档____ 和_数据____ 。
2.数据流图的全然构成部分有_数据的源点与终点____、数据流_____、加工_____、数据文件_____。
3.数据流图和数据字典合营构成了体系的_逻辑____模型,是需求规格说明书的重要构成部分。
4.划分模块时尽量做到__高内聚、低耦合______,保持模块的自力性,尽量应用公共模块。
5.类的实例化是_对象_______。
6.人们常用硬件靠得住性的定量度量方法来度量软件的靠得住性和可用性,常用的度量软件可7.靠性的两个指标是_成功地运行的概率_______和_平均故障时刻_______。
8.将待开创的软件细化,分别估算每一个子义务所须要的开创工作量,然后将它们加起来,9.将获得软件的总开创量。
这种成本估算方法称为_自底向上_______。
10.假如一个模块被n 个模块调用,个中直截了当的上级模块的个数是m 个(m<=n )那么该模块的扇入数是____N_______ 个。
11.构造化设计以__数据流图_________ 为差不多,按必定的步调映射成软件构造。
12.软件的风险分析可包含风险辨认、风险推测和风险驾驭(或风险治理)等3项活动。
13.软件著作权挂号的3种重要类型:(1)著作权挂号;(2)著作权连续挂号;(3)权力转移立案挂号。
14.软件工程治理的重要内容有:项目经费治理,软件质量治理,项目进度治理和人员治理。
15.面向对象分析的目标是对客不雅世界的体系进行___建模_______________ 。
16.软件爱护工作的临盆性活动包含分析评判、修改设计和____编写法度榜样代码_______等。
17.为了使应用软件适应运算机情形的变更而___修改软件_______________ 的过程称为适应性爱护。
18.一个进行学生成就统计的模块其功能是先对学生的成就进行累加,然后求平均值,则该模块的内聚性是__________次序内聚________ 。
软件工程导论(整理)

软件工程导论(整理)软件工程导论软件工程导论是计算机科学与技术专业的一门重要课程,通过对软件工程的基本概念、方法和技术进行介绍和讲解,使学生对软件开发过程有全面的认识。
本文将从软件工程的定义与特点、软件生命周期、软件开发方法和软件工程的挑战等方面进行论述。
一、软件工程的定义与特点软件工程是指研究和应用科学原理、方法和工具,对软件进行全面的规划、开发、测试、部署和维护的一门工程学科。
软件工程具有以下特点:1. 抽象性:软件是虚拟存在,不同于硬件,具有高度的抽象性。
2. 复杂性:软件开发是一项复杂的任务,涉及多个环节和多个参与者之间的协同合作。
3. 可变性:软件需求会随着时间和需求的变化而变化,需要具备良好的变更管理能力。
4. 可靠性:软件在使用过程中需要具备稳定、健壮和可靠的特性。
5. 可维护性:软件应该具备良好的可维护性,便于后续对其进行修改和维护。
二、软件生命周期软件生命周期是指软件从提出到退役的全过程,一般包括需求分析、设计、编码、测试、部署和维护等阶段。
1. 需求分析:明确用户需求,采集并分析用户的需求,形成软件的需求规格说明。
2. 设计:根据需求分析的结果,进行系统的设计,包括软件架构设计、模块设计等。
3. 编码:根据设计结果,进行具体代码的编写,实现软件的功能。
4. 测试:对编码后的软件进行测试,验证软件是否满足需求并具备稳定性。
5. 部署:将测试通过的软件部署到目标环境中,进行系统集成和性能调优等操作。
6. 维护:对已发布的软件进行修改、优化、升级和Bug修复等工作,确保软件持续稳定运行。
三、软件开发方法软件开发方法是指用于规范和指导软件开发过程的方法论和模型。
其中较为常见的软件开发方法有瀑布模型、迭代模型和敏捷开发等。
1. 瀑布模型:瀑布模型是软件开发过程中最早提出的方法之一,将软件开发过程划分为需求分析、设计、开发、测试和维护等阶段,每个阶段按顺序进行。
2. 迭代模型:迭代模型将软件开发过程划分为多个迭代周期,每个周期完成一部分需求的开发和测试,并通过反复迭代逐步完善软件。
软件工程导论(共65张PPT)可编辑全文

– 学生选课系统 软件
Microsoft Visio; Rational Rose
高级程序语言 作业递交方式:
来信标题注明 :班级 、学号、姓名、章节
第1章 软件工程学概述
1.1 软件危机
软件危机的出现:60年代中期到70年代中期, 许多软件最终成为不可维护的,这就是软件危 机.
不能用象硬件替换部件的方式修复软件的故障 使用增量模型的困难是,在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。
出现了“软件作坊”,软件作为一种产品被广泛使用;
使用个体化开发方式;
软件的发展史_2
随着软件数量的增加及软件需求的日趋复杂, 维护难度与来越大,开发成本高,质量低 导致“软件危机”
➢相同点:都将软件开发划分为分析、设计、编码、 测试等阶段 ➢不同点:思想不同,方法不同。另外,传统软件 工程更关注功能模块,面向对象软件工程更关注对 象的抽取和设计
➢ 两类软件工程方法学没有绝对的替代关系
1.3软件生命周期
生命周期方法学
从时间角度对软件开发和维护的复杂问题进行分解,把软件生命 的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务, 然后逐步完成每个阶段的任务。
关注大型程序的构造 中心问题是控制复杂性 软件经常变化 开发效率非常重要 和谐地合作是开发软件的关键 有效地支持它的用户 具有一种文化背景的人替另一种文化背景的人
创造产品
用分阶段的生命周期计划严格管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 结果应能清楚地审查 开发小组成员应少而精 承认不断改进软件工程实践地必要性
软件工作涉及到很多社会因素。 由于对象概念的引入,表达分析、设计及实现等活动只用对象类和关系,从而可以较容易地实现活动的迭代和无间隙
软件工程导论 复习资料

软件工程导论复习资料软件工程导论是计算机科学与技术专业的一门重要课程,它主要介绍了软件工程的基本概念和原理,帮助学生了解软件开发过程中的关键问题和解决方法。
本文将为大家提供一份软件工程导论的复习资料,希望能够帮助同学们更好地复习和掌握这门课程。
1. 软件工程概述1.1 软件工程定义软件工程是一门关于开发和维护大规模软件的学科,它涉及到软件开发的各个阶段和过程。
软件工程的目标是通过系统化和可量化的方法来开发、维护和管理软件,以提高软件的质量、效率和可靠性。
1.2 软件生命周期软件生命周期是软件开发过程中的一个重要概念,它包括需求分析、设计、编码、测试、部署和维护等阶段。
了解软件生命周期的各个阶段和活动,对于理解软件开发过程的全貌和整体把控至关重要。
1.3 软件工程方法学软件工程方法学是用于指导软件开发过程的一种方法体系,包括传统的瀑布模型、敏捷开发方法、迭代开发方法等。
通过学习不同的软件工程方法学,可以使软件开发过程更加有序、高效。
2. 需求工程2.1 需求定义和分类需求工程是软件开发过程中的第一个阶段,它主要涉及到需求的定义、分析和规范化等活动。
了解需求的定义和分类能够帮助我们更好地理解用户的需求,从而制定出更准确的软件需求规格说明书。
2.2 需求获取和分析需求获取是收集用户需求信息的过程,需求分析是将这些需求信息进行过滤、分类和分析的过程。
在需求获取和分析阶段,我们需要使用一些常见的工具和技术,例如面谈、问卷调查、用例图等。
2.3 需求规格说明书需求规格说明书是对系统需求进行详细描述和规范的文档,它包括功能需求、非功能需求、性能需求等内容。
编写清晰、准确的需求规格说明书是软件开发过程中的关键一步,它对于后续的设计和编码工作具有重要的指导作用。
3. 软件设计3.1 软件设计基础软件设计是将需求转化为软件结构的过程,它包括模块化设计、面向对象设计、数据结构设计等。
掌握软件设计的基础知识,能够帮助我们合理划分系统的功能模块,提高软件的可维护性和可扩展性。
软件工程导论张海藩
效率问题: 程序运行时间 存储器效率 输入输出的效率
(1) 程序运行时间 写程序之前先简化算术的和逻辑的表达式;
仔细研究嵌套的循环,以确定是否有语句可以从内层 往外移;
尽量避免使用多维数组; 尽量避免使用指针和复杂的表; 使用执行时间短的算术运算; 不要混合使用不同的数据类型; 尽量使用整数运算和布尔表达式。
7.1 编码 7.1.1 选择程序设计语言
机器语言,几乎不使用。 汇编语言,特殊场合使用。 高级语言,明显优于汇编语言。
程序设计语言的划代:
划代
语言
特点
级别
1GL 机器语言
程序不直观,编程出错率高 运行效率高
比机器语言直观,减少了出错率 低级
2GL 汇编语言
与机器码一样长
特殊情况下才使用
BASIC 3GL PASCAL
7.2 软件测试基础 7.2.1 软件测试的目标
测试目的:为了发现程序中的错误而执行程序 的过程;
好的测试方案是极可能发现迄今为止尚未发现 的错误的测试方案;
成功的测试是发现了至今为止尚未发现的错误 的测试。
7.2.2 软件测试准则
所有测试都应该能追溯到用户需求; 应该远在测试开始之前就制定出测试计划; 把Pareto原理应用到软件测试中; 应该从“小规模”测试开始,并逐步进行“大
WORK=A[T]; A[T]=A[I]; A[I]=WORK;
例7:简单直接
for (i=1; i<=n; i++) for (j=1; j<=n; j++) V[i][j]=(i/j)*(j/i)
软件工程导论 复习资料
名词解释:1.软件生命周期模型软件生存周期模型:是描述软件开发过程中各种活动如何执行的模型。
软件生存周期主要模型:瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型等2. 模块独立性模块独立性指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。
模块独立的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果。
3.软件的可维护性软件可维护性指软件能够被理解、校正、适应及增强功能的容易程度。
4. 软件工程软件工程指用科学知识和技术原理来定义、开发、维护软件的一门学科。
或者说,软件工程就是运用工程学的基本原理和方法来组织管理软件的生产、研究、开发、管理、维护的过程、方法和技术。
5.数据字典字据字典:简称DD,就是用来定义数据流图中的各个成分具体含义的,它以一种准确的\无二义性的说明方式为系统的分析\设计及维护提供了有关元素的一致的定义和详细的描述。
6、静态测试静态测试是采用人工检测和计算机辅助静态分析的方法对程序进行检测。
7、面向对象:面向对象OO=类+对象+继承+通信8、需求分析需求分析是指:开发人员要准确理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的形式主义功能规约(需求规格说明)的过程。
9、软件危机软件危机(Software Crisis) 是计算机软件在它的开发和维护过程中所遇到的一系列严重问题。
概括地说,主要包含两方面的问题:如何开发软件,怎样满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
10、软件生存周期软件生存周期:一个软件从提出开发要求开始直到该软件报废为止的整个时期。
软件生存周期包括:可行性分析和项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护等。
简答:1.软件生存周期有哪几个阶段?①可行性研究②需求分析③总体设计④详细设计⑤编码⑥测试⑦维护2.白盒测试法有哪些逻辑覆盖标准?①语句覆盖②判定覆盖③条件覆盖④判定/条件覆盖⑤条件组合覆盖⑥点覆盖、边覆盖、路径覆盖3.软件的维护有哪4种类型?①校正性维护②适应性维护③完善性维护④预防性维护。
软件工程导论第一章
软件工程的发展经历了多个阶段,从早期的手工作坊式开发到结构化方法、面 向对象方法,再到现在的敏捷开发方法和DevOps等,不断推动着软件产业的快 速发展。
软件工程的研究对象与范围
研究对象
软件工程的研究对象包括软件开发过程中的各种技术、方法、工具和管理等方面 ,旨在提高软件开发的效率和质量,降低开发成本。
研究范围
软件工程的研究范围涵盖了软件开发的各个阶段,包括需求分析、设计、编码、 测试和维护等,同时也涉及到软件项目管理、软件质量保证和软件测试等方面。
软件工程的重要性
提高软件质量
通过采用先进的软件工程方法和工具,可以显著提高软件的质量,减 少软件中的缺陷和错误,提高软件的稳定性和可靠性。
降低开发成本
针对软件的最小可测试单元进行测试,确保每个单元的功能正 确无误。
将多个单元组合在一起进行测试,验证它们之间的接口和功能 是否正常。
对整个软件系统进行全面的测试,包括功能测试、性能测试、 安全测试等,确保软件满足需求和设计要求。
记录和管理测试过程中发现的缺陷,跟踪缺陷的修复进度和结 果,确保软件质量得到持续改进。
软件开发模型介绍
瀑布模型
瀑布模型是一种线性的软件开发模型,按照固定的顺序进行开发,每个阶段都有明确的输入和输出。它的优点是易于 理解和管理,但缺点是缺乏灵活性,难以应对需求变更。
螺旋模型
螺旋模型是一种迭代式的软件开发模型,强调风险分析和控制。它在每个迭代周期中都包括需求定义、风险分析、工 程实现和评审等步骤,适用于大型、复杂的软件项目。
将软件划分为独立的模块,降低 模块间的耦合度,提高代码的可 重用性和可维护性。
02
版本控制工具
使用版本控制工具(如Git)管理 代码,记录代码的变更历史,方 便团队协作和代码回溯。
软件工程导论(整理)
一、软件危机与软件工程1、软件危机软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题.(正常、不正常运行软件都具有这种问题)2、软件危机的原因1)软件本身特点造成;程序规模庞大;程序复杂性随着程序规模的增加而呈指数上升。
2)软件开发与维护的方法不正确。
主要表现:(a)忽视软件需求分析;(b)认为软件开发就是写程序并使之运行;(c)轻视软件维护;3、解决软件危机的途径:1、组织管理:软件开发不是某种个体劳动的神秘技巧,软件开发应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
2、方法:应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。
3、工具:应该开发和使用更好的软件工具。
在软件开发的每个阶段都有许多繁琐重复的工作需要做,在适当的软件工具辅助下,开发人员可以把这类工作做得既快又好.4、软件工程包括哪7条基本原理?1. 用分阶段的生命周期计划严格管理;2。
坚持进行阶段评审;3. 实行严格的产品控制;4. 采用现代程序设计技术;5. 结果能清楚地审查;6. 开发小组的人员应该少而精;7。
承认不断改进软件工程实践的必要性。
5、软件开发流程?1)、问题定义2)、可行性研究3)、需求分析4)、总体设计5)、详细设计6)、编码和单元测试7)、综合测试8)、软件维护6、软件开发模型瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、rational统一过程、敏捷过程与极限编程、微软过程二、可行性研究1.系统流程图系统流程图是概括地描绘物理系统的传统工具,它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件(程序、文件、数据库、表格、人工过程等),表达信息在各个部件之间流动的情况。
2.数据流图数据流图描绘系统的逻辑模型,图中没有任何具体的物理元素,只是描绘信息在系统中流动和处理的情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
•软件工程是:①将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;②在①中所述方法的研究软件工程过程包括:开发过程、运作过程、维护过程、管理过程、支持过程、获取过程、供应过程、剪裁过程等CMM(Capability Maturity Model)即能力成熟度模型,是美国卡内基梅隆大学软件工程研究所(SEI)在美国国防部资助下于二十世纪八十年代末建立的,用于评价软件机构的软件过程能力成熟度的模型。
•典型的软件过程模型有:–瀑布模型(waterfall model)–演化模型(evolutionary model)–增量模型(incremental model)–原型模型(prototyping model)–螺旋模型(spiral model)–喷泉模型(water fountain model)–基于构件的开发模型(component-based development model)–形式方法模型(formal methods model)•是瀑布模型和演化模型的结合,并增加了风险分析•螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即:–制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件–风险分析:评价所选的方案,识别风险,消除风险–工程实施:实施软件开发,验证工作产品–客户评估:评价开发工作,提出修正建议•喷泉模型是一种支持面向对象开发的模型•体现迭代和无间隙特征–迭代:各开发活动常常重复工作多次,相关的功能在每次迭代中随之加入演进的系统–无间隙:开发活动之间不存在明显的边界•所谓基于计算机的系统是指:通过处理信息来完成某些预定义目标而组织在一起的元素的集合•组成基于计算机系统的元素主要有:软件、硬件、人员、数据库、文档和规程•本书将软件需求工程细分为:需求获取、需求分析与协商、系统建模、需求规约、需求验证和需求管理六个阶段。
•常用的分析方法:–面向数据流的结构化分析方法(SA)–面向数据结构的分析方法–面向对象的分析方法(OOA)•需求管理是一组用于帮助项目组在项目进展中的任何时候去标识、控制和跟踪需求的活动•需求跟踪有两种方式,正向跟踪与逆向跟踪–正向跟踪:以用户需求为切入点,检查《需求规约》中的每个需求是否都能在后继工作产品中找到对应点–逆向跟踪:检查设计文档、代码、测试用况等工作产品是否都能在《需求规约》中找到出处•软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段:软件体系结构设计阶段和部件级设计•使用一种设计方法,软件分析模型中通过数据、功能和行为模型所展示的软件需求的信息被传送给设计阶段,产生数据/类设计、体系结构设计、接口设计、部件级设计软件设计的原则:抽象化与逐步求精;•软件设计中主要抽象手段有:过程抽象和数据抽象模块化;信息隐藏;功能独立;•功能独立性可以由两项指标来衡量:内聚度与耦合度软件体系结构关注系统的一个或多个结构,包含软件构件、这些构件的对外可见的性质以及它们之间的关系•常见的软件体系结构–单主机结构–C/S(Client/Server)结构–B/S(Browser/Server)结构常用体系结构风格:数据为中心的体系结构数据流风格的体系结构调用和返回风格的体系结构面向对象风格的体系结构层次式风格的体系结构在这里要了解几个概念:–程序结构的深度:程序结构的层次数称为结构的深度。
结构的深度在一定意义上反映了程序结构的规模和复杂程度。
–程序结构的宽度:层次结构中同一层模块的最大模块个数称为结构的宽度。
–模块的扇入和扇出:扇出表示一个模块直接调用(或控制)的其它模块数目。
扇入则定义为调用(或控制)一个给定模块的模块个数。
多扇出意味着需要控制和协调许多下属模块。
而多扇入的模块通常是公用模块。
部件级设计阶段,主要完成如下工作:(1)为每个部件确定采用的算法,选择某种适当的工具表达算法的过程,编写部件的详细过程性描述;(2)确定每一部件内部使用的数据结构;(3)在部件级设计结束时,应该把上述结果写入部件级设计说明书,并且通过复审形成正式文档,作为下一阶段(编码阶段)的工作依据。
图形表示法:•程序流程图•N-S图•PAD设计评审:•软件设计的最终目标是要取得最佳方案•“最佳”是指在所有候选方案中,就节省开发费用,降低资源消耗,缩短开发时间的条件,选择能够赢得较高的生产率、较高的可靠性和可维护性的方案设计评审的内容:1. 可追溯性:即分析该软件的系统结构、子系统结构,确认该软件设计是否覆盖了所有已确定的软件需求,软件每一成分是否可追溯到某一项需求。
2.接口:即分析软件各部分之间的联系,确认该软件的内部接口与外部接口是否已经明确定义。
部件是否满足高内聚和低耦合的要求。
部件作用范围是否在其控制范围之内。
3.风险:即确认该软件设计在现有技术条件下和预算范围内是否能按时实现。
4.实用性:即确认该软件设计对于需求的解决方案是否实用。
5.技术清晰度:即确认该软件设计是否以一种易于翻译成代码的形式表达。
6.可维护性:从软件维护的角度出发,确认该软件设计是否考虑了方便未来的维护。
7.质量:即确认该软件设计是否表现出良好的质量特征。
8.各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么。
9.限制:评估对该软件的限制是否现实,是否与需求一致。
10.其它具体问题:对于文档、可测试性、设计过程等等进行评估。
•评审分正式评审和非正式评审两种•正式评审除软件开发人员外,还邀请用户代表和领域专家参加,通常采用答辩形式•非正式评审多少有些同行切磋的性质,不拘泥于时间和形式结构化分析的模型•数据字典是模型的核心,它包含了软件使用和产生的所有数据的描述•数据流图:用于功能建模,描述系统的输入数据流如何经过一系列的加工变换逐步变换成系统的输出数据流,数据流图中的数据流、文件、数据项、加工在数据字典中描述,反映加工逻辑的加工规约用“小说明”描述•实体—关系图:用于数据建模,描述数据字典中数据之间的关系,数据对象的属性用“数据对象描述”描述•状态转换图:用于行为建模,描述系统接收哪些外部事件,以及在外部事件的作用下系统的状态迁移,控制规约用来描述软件控制方面的附加信息分层数据流图示例——资格和水平考试的考务处理系统•简化的资格和水平考试的考务处理系统•分成多个级别,如初级程序员、程序员、高级程序员、系统分析员等,凡满足一定条件的考生都可参加某一级别的考试•考试的合格标准将根据每年的考试成绩由考试中心确定•考试的阅卷由阅卷站进行,因此,阅卷工作不包含在软件系统中资格和水平考试的考务处理系统—功能需求1.对考生送来的报名单进行检查2.对合格的报名单编好准考证号后将准考证送给考生,并将汇总后的考生名单送给阅卷站3.对阅卷站送来的成绩清单进行检查,并根据考试中心制订的合格标准审定合格者4.制作考生通知单送给考生5.进行成绩分类统计(按地区、年龄、文化程度、职业、考试级别等分类)和试题难度分析,产生统计分析表资格和水平考试的考务处理系统—部分数据流的组成•报名单=地区+序号+姓名+文化程度+职业+考试级别+通信地址•正式报名单=准考证号+报名单•准考证=地区+序号+姓名+准考证号+考试级别+考场•考生名单={准考证号+考试级别}•考生名册=正式报名单•统计分析表=分类统计表+难度分析表•考生通知单=准考证号+姓名+通信地址+考试级别+考试成绩+合格标志考务处理系统顶层图分层数据流图的审查:•检查图中是否存在错误或不合理(不理想)的部分–一致性:分层DFD中不存在矛盾和冲突–完整性:分层DFD本身的完整性,即是否有遗漏的数据流、加工等元素分层数据流图的一致性•父图与子图平衡–任何一张DFD子图边界上的输入/输出数据流必须与其父图中对应的加工的输入/输出数据流保持一致•数据守恒–一个加工所有输出数据流中的数据,必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生–多余的数据流:加工未使用其输入数据流中的某些数据项(不一定是错误,但可能隐含潜在的错误)•局部文件•一个加工的输出数据流不能与该加工的输入数据流同名分层数据流图的完整性•每个加工至少有一个输入数据流和一个输出数据流•在整套分层数据流图中,每个文件应至少有一个加工读该文件,有另一个加工写该文件•分层数据流图中的每个数据流和文件都必须命名(除了流入或流出文件的数据流),并保持与数据字典的一致•分层DFD中的每个基本加工(即不再分解子图的加工)都应有一个加工规约结构化设计•结构化设计(Structured Design,简称SD)是一种将结构化分析得到的数据流图映射成软件体系结构的设计方法•强调模块化、自顶向下逐步求精、信息隐蔽、高内聚低耦合等设计准则•分为概要设计和详细设计两大步骤–概要设计是对软件系统的总体设计,采用结构化设计方法,其任务是:将系统分解成模块,确定每个模块的功能、接口(模块间传递的数据)及其调用关系,并用模块及其对模块的调用来构建软件的体系结构–详细设计是对模块实现细节的设计,采用结构化程序设计(Structured Programming,简称SP)方法•SA、SD和SP构成完整的结构化方法体系启发式设计策略按照模块化设计原则,相应的启发式设计策略如下:•改造程序结构图,降低耦合度,提高内聚度•避免高扇出,并随着深度的增加,力求高扇入–避免如图a那样的“平铺”形态,较好的结构图形态是如图b那样的“椭圆”型•模块的影响范围应限制在该模块的控制范围内,•降低模块接口的复杂程度和冗余程度,提高一致性•模块接口上应尽可能传递简单数据,而且传递的数据应保持与模块的功能相一致,即不传递与模块功能无关的数据•模块的功能应是可预测的,避免对模块施加过多的限制•模块功能可预测是指该模块对相同的输入能产生相同的输出•限制一个模块只处理单一的功能,那么,这个模块体现出高内聚•尽可能设计单入口和单出口的模块•单入口和单出口的模块能有效地避免内容耦合••结构化设计是将结构化分析的结果(数据流图)映射成软件的体系结构(结构图)•根据信息流的特点,可将数据流图分为变换型数据流图和事务型数据流图,其对应的映射分别称为变换分析和事务分析•信息流可分为两类:•变换流(transform)•事务流(transaction)结构图改进技巧1.减少模块间的耦合度可以通过将功能简单的模块合并到与其关系密切的模块中,或调整模块的位置,来减少模块间的参数传递,或避免参数长距离传输,以降低耦合度。
2.消除重复功能如果二个模块中存在某一相同的功能,应将这个功能从二个模块中分离出来,作为一个独立的模块被二者调用。
3.消除“管道”模块“管道”模块通常是应该删除的,除非删除后上层模块的扇出太大。