1、1. 软件危机:计算机软件的开发和维护过程中所遇到的一系列严重问题。2. 软件危机典型表现:1对软件开发成本和进度的估计常常很不准确;2用户对“已完成的”软件系统不满意的现象经常发生;3软件产品的质量往往靠不住;4软件产品常常是不可维护的;5软件通常没有适当的文档资料;6软件成本在计算机系统总成本中所占的比例逐年上升;7软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。3. 软件危机原因:1软件本身的特点(规模庞大,其复杂性随着程序规模的增加而呈指数上升;2软件开发与维护的方法不正确(忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等) 一个软件从定
2、义开发使用和维护知道最终被废弃要经历的漫长的时期成为生命周期 软件配置:程序、文档、数据 解决软件危机要有技术措施和组织管理措施,软件工程是从管理和技术两方面来开发和 维护的4. 软件工程是指导计算机软件开发和维护的一门工程学科。5. 软件工程的本质特性:1软件工程关注于大型程序的构造2软件工程的中心课题是控制复杂性3软件经常变化4开发软件的效率非常重要5和谐地合作是开发软件的关键6软件必须有效的支持他的用户7在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品6. 软件工程7条基本原理:1用分阶段的生命周期计划严格管理;2坚持进行阶段评审;3实行严格的产品控制;4采用现
3、代程序设计技术;5结果应能清楚地审查;6开发小组的人员应该少而精;7承认不断改进软件工程实践的必要性。7. 软件工程方法3要素:方法、工具和过程。8. 软件生命周期基本任务:1问题定义要解决的问题是什么?写出关于问题性质、工程目标、工程规模的书面报告2可行性研究研究问题的范围,探索这个问题是否值得去解,是否可行的解决办法;结果是客户做出是否继续进行这项工程的决定的重要依据3需求分析确定目标系统必须具备哪些功能;需求分析报告4总体设计设计出实现目标系统的几种可能的方案,制定出实现最佳方案的详细计划,也就是确定由哪些模版组成以及模版间的关系;结果:设计方案和结构图5详细设计设计出程序的详细规格说明
4、,设计每个模块,确定实现模块功能所需要的算法和数据结构;编码和单元测试写出正确的容易理解、容易维护的程序模块;6编码和单元测试7综合测试各种类型的测试使软件达到预定的要求;8软件维护通过各种必要的维护活动使系统持久地满足用户的需要。9. 4类维护活动:1改正性维护;2适应性维护;3完善性维护;4预防性维护。10. 软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。11. 瀑布模型:文件驱动 特点:1阶段间具有顺序性和依赖性2推迟实现的观点3质量保证的观点;快速原型模型:快速,容易修改;增量模型:能在较短时间内向用户提交可完成工作部分的产品;逐步增加产品功
5、能可以使用户有较充分的时间学习和适应新产品;困难时:在把每个新的增量构建集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品;软件体系结构必须是开放得;螺旋模型:增加了风险分析,主要适用于大规模的软件开发;喷泉模型:无缝迭代 构建原型是一种能使某些类型的风险降至最低的方法12. 可行性研究:从技术、经济、操作三方面研究软件开发的可行性。13. 系统流程图:概括地描绘物理系统的传统工具。系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程。14. 数据流图:正方形数据的远点或终点;圆角矩形:变换数据的处理;开口矩形:数据存储;箭头:数据流。15. 数据流图的
6、用途:1作为交流信息的工具;2作为分析和设计的工具。16. 数据字典是关于数据的信息的集合。17. 数据流图和数据字典共同构成系统的逻辑模型。18. 成本估计:代码行技术:根据经验和历史数据;任务分解技术:将工程分解为若干独立任务再分别估计每个开发任务的成本;自动估计成本技术:减轻人的劳动,结果更客观但需有长期大量的历史数据为基础和良好的数据库系统支持。19. 需求分析是软件定义时期的最后一个阶段,它的基本任务是准确地回答“系统必须做什么?”20. 需求分析的任务:确定对系统必须完成那些工作1功能需求:系统必须提供的服务2性能需求:定时约束或容量约束3可靠性和可用性需求:可靠性:定量,可用性:
7、定性4出错处理需求:说明系统对环境错误应该怎样响应5接口需求:应用系统与他的环境通信的格式:用户接口需求,硬件,软件,通信6约束:在设计或实现应用系统是应遵守的限制条件7逆向需求8将来可能提出的要求;21. 分析系统的数据要求:通常采用建立数据模型的方法22. 与用户沟通获取需求的方法:1访谈:正式、非正式,情景分析技术:对用户将来使用目标系统解决某个具体问题的方法和结果进行分析;2面向数据流自顶向下求精;3简易的应用规格说明技术;4快速建立软件原型:就是快速建立起来的旨在演示目标系统主要功能的可运行的程序;快速,容易修改;。23. 状态图定义的状态主要有:初态、终态和中间状态。只能有一个初态
8、,终态可以有0至多个24. 事件:引起系统做动作或转换状态的控制信息。25. IPO图:输入、处理、输出图的简称。26. 验证软件需求:1一致性2完整性3现实性4有效性。27. 总体设计的基本目的就是回答“概括地说,系统应该如何实现?”总体设计又称概要设计或初步设计,通过这个阶段的工作将划分出组成系统的物理元素:程序、文件、数据库、人工过程和文档等,另一项重要任务是设计软件的结构。28. 总体设计过程:1系统设计阶段:确定系统的具体实现方案;2结构设计阶段:确定软件结构29. 模块是构成程序的基本构件。30. 模块化就是把程序划分成独立命名且可独立访问的模块,模块化是为了使一个复杂的大型程序能
9、被人的智力所管理,是软件应该具备的唯一属性。31. 抽象:把现实事物中相似的方面集中和概括起来,暂时忽略它们之间的差异。抽象和求精是一对互补的概念。32. 信息隐藏设计和确定模块时应该使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说是不能访问的。33. 局部化是指把一些关系密切的软件元素物理的放得彼此靠近34. 模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。35. 耦合是对一个软件结构内不同模块之间互连程度的度量。数据耦合是低耦合,应该避免使用内容耦合:尽量使用数据耦合、少用控制耦合和特征耦合、限制公共环境耦合的范围、完全不用内容耦合36. 低内聚:偶然内聚0
10、,逻辑内聚1,时间内聚3;中内聚:工程内聚5、通信内聚7;高内聚:顺序内聚9,功能内聚10。37. 启发规则是经验总结,不是普遍原理38. 深度:软件结构中控制的层数;宽度:软件结构内同一个层次上的模块总数的最大值;扇出:一个模块直接控制的模块数目;扇入:表明有多少个上级模块直接调用它。39. 模块的作用域:受该模块内一个判断影响的所有模块的集合。控制域是这个模块本身以及所有直接或间接从属于他的模块的集合40. 模块功能应该可预测:只要输入的数据相同就产生同样的输出41. 信息流:变换流,事务流42. 3种控制结构:顺序、选择、循环43. 结构程序设计:经典定义一个程序的的代码块仅仅通过顺序、
11、选择和循环3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口。扩展定义除了3中基本控制结构外还允许使用do-case型分支结构和do-until型循环结构。修正定义在扩展定义上再允许使用Leave(或break)结构。44. 设计问题:系统响应时间;用户帮助设施:出错信息处理和命令交互。系统响应时间属性:长度和易变性;用户帮助设施问题:1在用户与系统交互期间是否在任何时候都能获得关于系统任何功能的帮助信息?提供部分功能的帮助信息和提供全部功能的帮助信息2用户怎样请求帮助?帮助菜单、特殊功能键和HELP命令3怎样显示帮助信息?4用户怎样返回到正常的交互方式中?5怎样组织帮助信息?出错
12、信息处理属性:1信息应该用用户可以理解的术语描述问题2信息应该提供有助于从错误中恢复的建设性意见3信息应该指出错误可能导致哪些负面后果4信息应该伴随这听觉上或视觉上的提示5信息不能带有指责色彩命令交互命令形式:控制序列、功能键和输入命令45. 人机界面设计指南:1一般交互指南2信息显示指南3数据输入指南46. 程序流程图的缺点:过早的考虑程序的控制流程而不去考虑程序的全局结构;程序流程图不易表示数据结构47. 坚持使用盒图作为详细设计的工具,可以使程序员逐步养成用结构化的方式思考问题和解决问题的习惯。48. 使用表示结构化控制结构的PAD符号所设计的程序必然是结构化程序。49. 判定表4部分:
13、左上部:所有条件;左下部:所有可能做的动作;右上部:各种条件组合的一个矩阵;右下部:和每种条件组合相对应的动作。(应用场合:有多个嵌套和多个对应输出)50. 过程设计语言PDL的特点:1关键字的固定语法,它提供了结构化控制结构、数据说明和模块化的特点;2自然语言的自由语法,它描述处理特点;3数据说明的手段,即包括简单的数据结构,又包括复杂的数据结构;4模块定义和调用的技术,应该提供各种接口描述模式。51. jackson方法和warnier方法是面向数据结构的设计方法。52. 使用设计方法首先需要分析确定数据结构,用适当的工具清晰地描绘数据结构。53. McCabe:流图“退化了的”程序流程图
14、,它仅仅描绘程序的控制流程;用圆标识结点,用箭头表示控制流。(环形复杂度V(G)=变的条数-节点数+2;或者=判定节点数+154. 通常把编码和测试统称为实现。程序的质量主要取决于软件设计的质量,所选用的程序设计语言的特点及编码风格对陈旭的可靠性、可读性、可测试性和可维护性产生深远的影响。55. 选择语言的实用标准:1系统用户的要求;2可以使用的编译程序;3课哟得到的软件工具;4工程规模;5程序员的知识;6软件可移植性要求;7软件的应用领域。56. 软件维护:在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。 特点:1结构化维护与非结构化维护差别巨大;2维护的代价高昂3维护的
15、问题很多。57. 非结构化维护:软件配置的唯一成分是程序代码,那么维护活动从艰苦的评价程序代码开始。结构化维护:有一个完整的软件配置存在,维护工作从评价设计文档开始58. 决定软件可维护性的因素:1可理解性;2可测试性;3可修改性;4可移植性;5可重用性:指同一事物不做修改或稍加改动就在不同环境中多次重复使用。59. 文档是影响软件可维护性的决定因素,分为:用户文档和系统文档;用户文档内容:1功能描述;2安装文档;3使用手册;4参考手册;5操作员指南。(用户文档主要描述系统功能和使用方法而不关心怎样实现。系统文档指从问题定义、需求说明到验证测试计划这样一系列和系统实现有关的文档。(从问题定义、
16、需求说明到验收测试计划这样一系列和系统实现有关的文档)60. 面对对象方法学:既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此的通信。(尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程)解空间对象取决于所使用的语言61. 面向对象方法的4个要点:认为客观世界是由各种对象组成的2把所有对象都划分成各种对象类3按子类与父类的关系把对象类组成一个层次结构的系统4对象彼此间仅能通过传递消息互相联系。62. 面向对象方法学的优点:1与人类习惯的思维方法一致;2稳定性好;3可重用性好;4较易开发大型软件产品;5可维护性好(1面向对象的软件稳
17、定性比较好2比较容易修改3比较容易理解4易于测试和调试。63. 模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。对象模型表示静态的、结构化的系统的数据性质。64. 面向对象3种模型形式:对象模型,动态模型和功能模型。对象模型始终是最重要、最基本、最核心的。功能模块指明了系统应该“做什么”;动态模型明确规定了什么时候(即在何种状态下接受了什么事件的触发)做;对象模型定义了做事情的实体。65. 类与类的关系:关联两个类的对象之间存在某种语义上的联系:1普通关联2关联的角色3限定关联(把模型中的重数从一对多变成一对一、或从多对多简化成多对一。限定提高了语义精确性
18、,增强了查询能力)4关联类;聚集关联的特例:1共享聚集:处于部分方的对象可同时参与多个处于整体方对象的构成2组合聚集:部分类完全隶属于整体类,部分与整体共存;泛化(继承关系)通用元素和具体之间的一种分类关系:1普通泛化2受限泛化依赖和细化(特殊的泛化)依赖:描述两个模型元素之间的语义连接关系:其中一个模型元素师独立的,另一个模型元素不是独立的,他依赖于独立的模型元素。细化:同一个事物在不同抽象层次上描述。66. 用例模型描述的是外部行为者所理解的系统功能。一个用例是可以被行为者感受到、系统的一个完整的功能。一副用例图包含的模型元素有系统、行为者、用例和用例之间的关系。行为者是指与系统交互的人或
19、其他系统。67. 用例之间的关系:1扩展关系后者继承前者的一些,通常把后者称为扩展用例(向一个用例中添加一些动作后构成的另一个用例)2使用关系当一个用例使用另一个用例时,这两个用例之间就构成了使用关系。68. 3种模型之间的关系:功能模型指明了系统应该做什么;动态模型明确了什么时候做;对象模型定义了做事情的实体。对象模型是最基本最重要的,为其他两种模型奠定了基础,人们依靠对象模型完成3种模型的集成。69. 3个子模型和5个层次3要素:静态结构(对象模型)、交互次序(动态模型)、数据变换(功能模型);5层次:主题层、类与对象层、结构层、属性层、服务层。70. 动态模型的建立的步骤:1编写典型交互
20、行为的脚本;2从脚本中提取出事件;3排列事件发生的次序;4比较各个对象的状态图。71. 脚本是指系统在某一执行期间内出现的一系列事件。脚本描述用户与目标系统之间的一个活多个典型的交互过程。72. 编写脚本的目的是保证不遗漏重要的交互步骤,它有助于确保整个交互过程的正确性和清晰性。编写脚本时首先编写正常情况的脚本。73. 交互行为可分为:1应用逻辑2用户界面。用户界面是外在的表现形式动态模型赵忠表示应用系统的控制逻辑。74. 定义服务:1常规行为2从事件导出的操作3与数据流图中处理框对应的操作4利用继承减少冗余操作。75. 信息隐藏通过对象的封装性实现:类结构分离了接口与实现,从而支持了信息隐藏
21、。76. 弱耦合:1交互耦合:对象之间的耦合通过消息连接2继承耦合77. 强内聚:1服务内聚2类内聚3一般特殊内聚。78. 可重用的含义:1尽量使用已有的类;2如果确实需要创建新类,则在设计这些新类的协议时应考虑将来的可重复使用性。79. 软件重用3个层次:1知识重用;2方法和标准的重用;3软件成分的重用80. 软件成分划分为3个级别:1代码重用2设计结果重用3分析结果重用81. 典型的可重用软件成分主要有10种:1项目计划;2成本结构;3体系结构;4需求模型和规格说明;5设计;6源代码;7用户文档和技术文档;8用户界面;9数据;10测试用例。82. 面向对象设计模型的4大组成部分:1人机交互部分2问题域部分3任务管理部分4数据管理部分。83. 系统分解子系统之间的两种交互方式:1客户供应商关系2平等伙伴关系84. 组织系统的2个方案:1层次组织封闭式和开放式;2块状组织。85. 面向对象语言的技术特点:1支持类与对象概念的机制2实现整体部分(即聚集)结构的机制3实现一般特殊(即泛化)结构的机制4实现属性和服务的机制5类型检查6类库7效率8持久保存对象9参数化类10开发环境86. 选择面向对象语言:1将来能否占主导地位2可重用性3类库和开发环境4其他5