引言:这是自己为了应付期末考试整理的全书知识点。
一 什么是软件危机有哪些典型表型什么会出现软件危机/span>
软件危机的介绍:软件危机是指在计算机开发和维护过程中所遇到的一系列严重的问题
主要包含以下两个问题:
1.如何开发软件,以满足对软件日益增长的需求
2.如何维护数量不断膨胀的已有软件
软件危机的典型表现:
1.对软件开发成本和进度的估计常常不准确
2.用户对“已完成的”软件系统不满意的现象经常发生
3.软件产品的质量往往靠不住
4.软件常常是不可维护的
5.软件通常没有适当的文档资料
6.软件成本在计算机系统总成本中所占的比例逐年上升
7.软件开发生产的速率,跟不上计算机应用迅速普及深入的趋势
产生软件危机的原因
一方面与软件本身的特点有关,另一方面也与软件开发与维护的方法不正确。
二:什么是软件工程有哪些本质特性样用软件工程消除软件危机/span>
软件危机应付途径
运用软件工程技术消除软件危机,具体做法:
1.对计算机软件有一个正确的认识(软件≠程序)
2.必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好,管理严密,各类人员协同配合,共同完成的工程项目。
3.推广使用在实践中总结出来的开发软件的成功技术和方法
4.开发和使用更好的开发工具
软件工程方法学包含3个要素:方法,工具和过程。
软件生命周期是由软件定义,软件开发和运行维护(也称为软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。
软件定义时期可以划分为3个阶段,即问题定义,可行性研究和需求分析。
软件开发时期通常划分为4个阶段,即总体设计,详细设计,编码和单元测试,综合测试。
软件维护时期不再进一步划分阶段,但是每一次维护活动本质上都是一次压缩和简化了的定义和开发过程。
每个时期的任务
1.软件定义时期的任务:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略以及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。
2.开发时期的任务:具体设计和实现在前一个时期定义的软件。
3.维护时期的任务:使软件持久地满足用户的需要。
7.常见三种周期模型的优点
瀑布模型的优点:
1.可强迫开发人员采用规范的方法(例如:结构化技术)
2.严格地规定了每个阶段必须提交的文档;
3.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证
快速原形模型的优点:
1.有助于保证用户的真实需要得到满足
增量模型的优点:
1.能在较短的时间内向用户提交可完成部分工作的产品
2.逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少
一个全新的软件可能给客户组织带来的冲击。
3.软件的可维护性明显好于封闭结构的软件
三:说明微软过程的适用范围
适用于商业环境下具有有限资源和有限开发时间约束的项目的软件过程模式
第二章 可行性研究
可行性研究分为:
- 技术可行性
- 经济可行性
- 操作可行性
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合
数据字典的内容
一般说来,数据字典应该由对下列4类元素的定义组成
- 数据流
- 数据流分量
- 数据存储
- 处理
第三章 需求分析
3.1需求分析的任务
虽然功能需求是对软件系统的一项基本需求,但却并不是唯一的需求。通常对软件系统有下述几方面的综合要求
- 功能需求
- 性能需求
- 可靠性和可用性需求
- 出错处理需求
- 接口需求
- 约束
- 逆向需求
- 将来可能提出的需求
- 实体联系图
数据模型中包含3种相互关联的信息:数据对象,数据对象的属性以及数据对象彼此间相互连接的关系
3.4.1数据对象
3.4.2 属性
3..4.3 联系
第四章 形式化说明技术
4.1概述
一:按形式化程度分为三类:
非形式化,如用自然语言描述规格说明
半形式化,如用数据流图或实体-联系图建立模型
形式化,如描述系统性质是基于数学的技术
二:非形式化的缺点
矛盾性:在需求规格说明书中对同一问题前后存在不同的描述
二义性:读者可以用不同的方式理解的陈述
含糊性:需求规格说明书对某一问题描述不清晰,不可理解
不完整性:需求规格说明书对某一问题只说明了局部,没说明整体
抽象层次混乱:指在非常抽象的陈述中混入了关于低层次的细节陈述
三:形式化的优点:
能够简洁准确的描述物理现象、对象或动作的结果
在不同的软件工程活动之间平滑过渡
提供了高层确认的手段
四:应用形式化准则
选用适当的表示方法
应该形式化,但不要过分形式化
应该估算成本
应该有形式化顾问随时提供咨询
不应该放弃传统的开发方法
应该建立详尽的文档
不应该放弃质量标准
应该测试,测试再测试
应该重用
4.2有穷状态机
有穷状态机的概念在计算机系统中应用得非常广泛。
例如,每个菜单驱动的用户界面都是一个有穷状态机的实现。一个菜单的显示和一个状态相对应,键盘输入或用鼠标选择一个图标是使系统进入其他状态的一个事件。状态的每个转换都具有下面的形式:
当前状态〔菜单〕+事件〔所选择的项〕=>下个状态。
为了对一个系统进行规格说明,通常都需要对有穷状态机做一个很有用的扩展,即在前述的5元组中加入第6个组件——谓词集P,从而把有穷状态机扩展为一个6元组,其中每个谓词都是系统全局状态Y的函数。转换函数T现在是一个从(J-F)×K×P到J的函数。现在的转换规则形式如下:
当前状态〔菜单〕+事件〔所选择的项〕+谓词=>下个状态。
第五章 总体设计
-
设计过程:2个阶段(:确定系统的具体实现方案 和 :确定软件结构); 9个步骤:
- 设想供选择的方案
- 选取合理的方案
- 推荐最佳方案
- 功能分解
- 设计软件结构
- 设计数据库
- 制定测试计划
- 书写文档
- 审查和复审
设计原理的相关概念
模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求
抽象:抽出事物本质特性而暂时不考虑细节
逐步求精:为了能集中精力解决最主要问题而尽量推迟对问题细节的考虑。逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础
信息隐藏:应该这样设计和确定模块,使得一个模块内包含的信息对于不需要这些信息的模块来说是不能访问的
局部化:是指把一些关系密切的软件元素物理地址放得彼此靠近
模块独立:是模块化、抽象、信息隐藏和局部化的概念的直接结果。独立的程度测量标准:内聚、耦合
耦合:是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。耦合程度强烈影响着系统的可理解性、可测试性、可靠性、可维护性。设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境的耦合的范围,完全不用内容耦合。
数据耦合:如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据。数据耦合是低耦合
控制耦合:传递的信息中有控制信息。中等耦合,增加了系统的复杂性
特征耦合:当整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时
公共环境耦合:当两个或多个模块通过一个公共数据环境互相作用时。公共环境可以是全程变量、共享通信区、内存的公共覆盖区、任何存储介质的文件、物理设备等。
内容耦合:如果发生之一就是①一个模块访问另一个模块的内部数据,②一个模块不通过正常入口而转到另一个模块的内部,③两个模块有一部分程序代码重叠,④一个模块有多个入口
内聚:标志着一个模块内各个元素彼此之间结合的紧密程度,它是信息隐藏和局部化概念的扩展。设计原则:力求高内聚,通过提高模块间的内聚降低耦合从而使模块获得较高的独立性。高内聚意味着低耦合
低内聚
偶然内聚:如果一个模块完成一组任务,这些任务彼此之间有关系,关系也是很松散的。如在一个程序内有一组语句在两处或多处出现,于是把这些语句作为一个模块以节省内存
逻辑内聚:如果一个模块完成的任务在逻辑上属于相同或相似的一类。如一个模块产生各种类型的全部输出
时间内聚:如果一个模块包含的任务必须在同一时间内执行。如模块完成各种初始化工作
中内聚
过程内聚:如果一个模块内的处理元素是相关的,且必须以特定次序执行。如流程图确定模块的划分,得到的往往是过程内聚的模块
通信内聚:如果一个模块中所有元素都是用同一个输入数据和产生同一个输出数据
高内聚
顺序内聚:如果一个模块内的处理元素和同一个功能密切相关,且这些处理必须顺序执行。如一个处理元素的输出数据作为下一个处理元素的输入数据,根据数据流图划分模块得到往往是顺序内聚模块
功能内聚:如果模块内的所有处理元素属于一个整体,完成单一的功能
7种内聚的优劣评分
名称 得分
功能内聚 10
顺序内聚 9
通信内聚 7
过程内聚 5
时间内聚 3
逻辑内聚 1
偶然内聚 0
47. 启发规则
改进软件结构提高模块的独立性
模块规模应该适中
深度、宽度、扇出和扇入都应适当
模块的作用域应该在控制域内
力争降低模块接口的复杂程度
设计单入口单出口的模块
模块的功能应该可预测
描绘软件结构的图形工具(例子见P102,P103)
层次图:描绘软件的层次结构。一个矩形框代表一个模块,方框间的连线表示调用关系
HIPO图:“层次图加输入/处理/输出图”,就是在层次图的每个方框加编
结构图:每个方框代表一个模块,框内注明模块的名字或主要功能,方框间的箭头(或直线)代表模块的调用关系,注释表示来回传递的信息【尾部空心圆表示传递数据,实心圆代表传递控制信息】
第六章 详细设计
6.1结构化程序设计
详细设计
根本目标:确定应该怎样具体地实现所要求的系统。
详细设计阶段的任务不是具体地编写程序,而是要设计出程序的“蓝图”。
详细设计的结果基本上决定了最终的程序代码的质量。
2.1 结构程序设计
结构程序设计经典定义:如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
结构程序设计更全面的定义:结构程序设计是尽可能少用GO TO语句的程序设计方法。最好仅在检测出错误时才使用GO TO语句,而且应该总是使用前向GO TO语句。
6.2人机界面设计
6.2.1 设计问题
系统响应时间。用户帮助设施。出错信息处理。命令交互
程序流程图:
优点:对控制流程的描绘直观,初学者很容易掌握
缺点:①程序流程图不是精益求精的好工具吗,它诱使程序员过早地考虑程序的控制流程,而不去考虑全局结构
②程序流程图中用箭头代表控制流 ,因此程序员不受任何约束,可以完全不顾结构程序设计的思想,随意转移
③程序流程图不易表示数据结构
盒图(N-S图)的特点:
功能域明确
不可能任意转移控制
很容易确定局部和全局数据的作用域
很容易表现嵌套关系,也可以表示模块的层次结构
问题分析图(PAD图):使用二维结构的图来表示程序的控制流。其优点:
使用PAD符 设计出来必然是结构化程序
PAD图描绘的程序结构十分清楚
PAD图表现程序的逻辑,易读、易懂、易记
很容易将PAD图转化为高级语言程序
即可表示程序逻辑,也可表示数据结构
PAD符 支持自动向下,逐步求精
判定表:当算法中含有多重嵌套的条件选择时
优点:能清晰表示复杂的条件组合与应做的动作之间的关系
缺点:①判定表的含义不能一眼看出来②当数据元素多于两个时,判定表的简洁程度下降
判定树:判定表变种
优点:一眼看出其含义,易于掌握,使用
缺点:①简洁性不如判定表,数据元素需重复写多遍②判定树的分支次序对画出的判定树的简洁程度有较大影响
PDL(过程设计语言):也称伪码,具有严格的关键字外部语法,用于定义控制结构和数据结构,内部语法灵活自由,适应各种工程项目。
其优点:
可作为注释直接插在源程序中间
已有自动处理PDL的程序,可自动生成程序代码
其缺点:
不如图形工具形象直观,描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单
McCabe方法:McCabe根据程序控制流的复杂程度度量 程序的复杂程度,这样度量出的结果称为程序的环形复杂度
①流图的表示:
结点:用圆表示,一个圆代表一条或多条语句
边:箭头线称为边,代表控制流
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!