软件工程
第一章:
1. 软件的组成不仅是程序、数据和文档,而且还有完成一定功能和性能所蕴含的知识和经验。
2. 领域知识是基于计算机的系统的设计、软件需求获取和系统测试不可或缺的。 3. 软件发展的历史给我们的启发是社会需求和硬件进步是软件技术发展的基础。
4. 软件的进步和成就促进了信息社会和知识经济的发展。
5. 按照应用领域、基本属性和特点研究软件有助于对软件的理解,提高了软件开发、使用和维护的针对性。
6. 软件工程学科具有鲜明的工程特性。 第二章:
1.面向对象方法是现代软件工程技术体系的基石,它以分类、继承、聚合、封装、多态和消息传递等贴近人类思维习惯的概念。
2.因面向对象与生俱来的自然性、直观性,以及支持软件复用、改善软件结构等许多优势,面向对象方法后来居上,迅速取代结构化方法而成为当前主流的软件开发方法学。
3.UML通过图形化的表示机制从多个侧面表示软件系统的分析和设计模型。 4.UML定义了5类图形机制:用例视图,包括用例描述和用例图;结构视图,包括视图,包括包图、类图和对象图;行为视图,包括交互图、状态图与活动图;构件视图和部署视图。
5.RUP将软件生存周期(即软件制品的进化状态)划分为初始、细化、构造、移交、生产5个阶段。
6.RUP将软件开发过程分解为业务建模、需求、设计、实现、V&V、部署、配置和变更管理、项目管理、环境9个工作流。 7.软件项目团队可利用5个阶段、9个工作流组织管理软件项目的开发活动。RUP过程中生成的各类制品通常以UML表示。
8.软件开发过程是基于面向对象方法学的,包括需求获取、需求分析、体系结构设计、人机交互设计、详细设计、实现、测试、维护与进化等重要的软件开发阶段。 第三章:
1.软件需求是指利益相关方对目标软件系统在功能、性能和质量等方面的期望,以及对目标软件系统在运行环境、资源消耗等方面的约束。
2.软件需求可划分为功能需求、质量需求和约束性需求3种类型,其中质量需求和约束性需求统称为非功能需求。
3.软件需求的质量要素包括正确性、完全性和可行性。
4.需求调查包括:访谈和会议、调查问卷、业务文档分析、现场观摩。 5.需求建模包括:抽象、分解和多视点分析。
6.需求模型包括:策划、需求获取、需求分析、需求规范化、需求验证和总结等活动。
7.对大中型软件项目以及初期初期需求不明朗的软件项目,需求工程过程采用迭代方式。
第四章
1.需求获取是需求工程中后续活动的基础,需求工程又是后续软件开发活动的基础。需求获取对于软件项目的成就具有决定性影响。
2.UML的用例、用例图、类图、活动图等是记录、表示需求获取结果的合适工具。用例驱动的过程模型可用于知道需求获取活动。 3.用例驱动的过程模型包括4大步骤:定义软件问题、创建框架用例、精化用例、评审用例模型。
4.需求获取阶段的主要输出制品包括经评审通过的软件问题定义、领域概念模型、业务流程模型、用例模型、业务规则和非功能需求说明。 第五章
1.需求分析的主要工作是对需求获取阶段得到的需求模型进行需求项的优先级分析、基于用例模型构建以分析类图和交互图为主题的分析模型。
2.相对于需求获取阶段获得的用例模型,分析模型更加精确、全面、完整,业务逻辑线索更加鲜明,从而为软件设计和实现奠定了更好的基础,提供了更多的支持。
3.用例驱动的过程模型可用于指导需求分析活动,该过程包含的三大步骤:需求优先级分析、用例分析、分析模型评审。
4.需求分析阶段的主要输出制品为需求规约,其主体内容是软件需求的用例模型、分析模型及非功能需求的描述。
5.需求分析过程中,软件质量保证工程师应当并行地检查、审查需求分析的过程和输出制品,以便及时发现过程与输出制品中可能存在的质量缺陷。 第六章
1.软甲设计的主要任务是根据软件需求模型导出软件的实现方案,这种方案表现为设计模型。
2.典型的软件设计模型一般包括体系结构模型、用户界面模型、用例设计模型、数据模型、子系统/构件/类设计模型。
3.设计模型的质量要素包括正确性、充分性、优化性和简单性4方面。
4.为了获得高质量的设计模型,软件设计必须遵循一些基本的设计原则,包括抽象与逐步求精、强内聚及松耦合、信息隐藏和关注点分离原则。
5.为了获得高质量的需求模型,软件设计还必须遵循系统化的过程模型,它通常包括策划、体系结构设计、人机交互设计、详细设计和总结等活动。 第七章
1.软件体系结构从高层抽象的角度刻画组成目标软件系统的设计元素以及它们之间的逻辑关联。
2.按照自顶下向、逐步求精的设计原则,软件设计往往始于体系结构设计,其设计成果构成后续的详细设计和软件实现的主要工作基础。
3.与详细设计相比,体系结构设计对灵活性、可修改性、可扩充性等质量需求的影响是全局性的、决定性的。
4.一个完整的软件体系结构通常包含逻辑视图、开发视图、物理视图、运行视图和数据视图。
5.用于表示体系结构的逻辑视图的UML图形机制主要是包图和构件图,有时还辅以类图;开发视图的表示可能会用到UML包图;物理视图显然应表示为UML部署图;运行视图通常表示为UML 活动图,有时还辅以对象图;数据视图一般表示为UML类图或实体——关系图。
6.软件体系结构的设计过程一般那依序包括概念设计、精化和验证。
第八章
1.软件产品其成败最终取决于用户的满意程度。
2.在软件设计,尤其是用户界面设计的过程中,遵循以用户为中心的设计理念是至关重要的。
3.以用户为中心的理念包括:对用户特征的研究和理解应该作为软件设计决策的主要依据,在软件开发的各个阶段尽可能获得来自用户的反馈并利用用户反馈改进或优化设计。
4.基于以用户为总新的设计理念,软件产品的用户界面设计必须遵循易理解性、易操作性、灵敏性、一致性、容错性、人性化等原则。
5.用户界面的设计过程主要包括用户及任务分析、概念设计、界面流设计和界面精化。
6.在界面设计的整个过程中均必须给予用户分析的成果进行设计决策,这是提高用户满意度的关键之一。
第九章
1.详细设计是软件体系结构与软件实现之间的桥梁,是确保体系结构设计成果得以落地的关键环节。
2.详细设计主要任务是对体系结构模型和界面设计模型进行细化和精化,最终获得高质量的详细设计模型。
3.详细设计模型的主要质量要素包括正确性、优化性和设计充分性。
4、一个完整的详细设计过程通常包括用例设计、子系统设计、构件设计、类设计、数据模型设计、设计整合和设计验证等活动。
5.用例设计的目标是确保体系结构模型、界面设计模型与需求工程阶段获得的用例模型的符合型。
6.用例设计的关键步骤包括:针对每个用例给出以UML交互图表示的软件实现方案,据此构造设计类图,从全局和整体的高度整合所有的用例实现方案 7.子系统设计的任务是确定子系统内部的结构。
8.子系统设计的关键步骤包括:确立子系统内部的设计元素并将子系统的服务提供接口中规定的职责分配给这些设计元素,构造子系统的设计类图,必要时构造子系统的状态图和相关的状态图。
9.构件设计与子系统设计非常类似,但是构件设计非常强调接口与实现相分离、为复用而设计。
10.类设计的任务是对体系结构模型中出现的关键设计类,以及界面设计模型、子系统设计模型和构件设计模型中出现的类进行细化设计。
11.类设计的关键步骤包括:精化类之间的关系,精化类的操作和属性,必要时构造类的典型对象的状态图和与类相关的活动图。
12.数据模型设计的任务是确定设计模型中需要持久保存的数据条目。
13.数据模型的关键步骤包括:确定设计模型中需要持久保存的类的对象及其属性,确定持久数据的组织方式,确定数据模型中的操作行为,通过合适的索引、反规范化等手段优化持久数据操作的性能。
14.设计整合的任务是整合前面获得的所有设计模型,检查并消解它们之间的不一致性,剔除冗余性,最终形成正式的设计规约。
15.设计规约必须遵循规范的格式,能够直接成为软件编码实现的基础。
16.设计验证的目标是确保设计规约能够以足够优化的方式实现所有的软件需求,确保设计模型已经精化到合格的软件实现工程师能够构造出符合软件设计者期望的目标软件系统。
17.软件设计是迈向最终软件解的漫长征途中的非常关键的一程。
第十章
1.软件实现是软件开发过程的重要组成部分,其任务是把软件详细设计翻译为计算机可以“理解”、最终可运行的代码。
2.软件实现涉及编写模块代码、单元测试、集成测试、调试和确认等多项活动,是一个迭代过程。
3.编写代码需借助某种程序设计语言的帮助。
4.程序设计若根据其语言基本机制的不同又可分为过程式、函数式、逻辑程序设计语言和面向对象程设计语言4类。
5.编程准则和编程风格也对编码质量产生深远的影响。 6.调试针对软件缺陷的表征确定引起缺陷的代码。
第十一章
1. 面向数据流的分析与设计技术在软件工程发展史上具有重要地位,特别是实时嵌入式系统。
2. 数据流图、数据字典和实体——关系图是面向数据流分析的基本机制。 3. 基于数据流图进行需求分析的大致过程为:创建数据流模型、创建控制流模型、针对原子级处理功能给出过程规约。维持数据流图各层次平衡、保证需求和设计模型的一致性是非常重要的原则。 4. 基于数据流图进行软件设计的大致过程如下:(1)确定信息流的类型 (2)划定流界 (3)将DFD映射为程序结构。 (4)提取层次控制结构。 (5)通过设计复审和使用启发式策略进一步精化模型结构。
第十二章
1. 软件测试时软件质量保证的关键。
2. 软件测试的任务是检查软件是否满足规约,并在软件制品交付前尽可能发现软件中潜伏的缺陷,减轻交付后软件改正性维护的开销。
3. 软件测试需要程序运行,为测试专门设计的输入数据成为测试用例。 4. 软件测试分黑盒测试和白盒测试两种方法。
5. 黑盒测试用例检验软件功能是否正确,白盒测试用例则测试程序中的重要逻辑路径。
6. 在测试资源有限的情况下,用白盒测试方法测试程序所有的逻辑路径是不现实的。白盒测试技术包括基本路径测试、条件测试、数据流测试和循环测试等。
7. 黑盒测试技术包括等价分类、边界值分析和对比测试等。
8. 软件测试需制定测试规划,包括测试策略、测试用例集设计、测试步骤、测试实施和测试结果收集评估等。
9. 测试步骤包括单元测试、集成测试、确认测试和系统测试。
10. 单元测试针对单个模块,模块组装后进行集成测试,软件系统交付前,请客
户和专家参加进行确认测试。5
第十三章
1. 软件系统交付后即进入维护阶段。软件维护是软件的进化。
2. 软件可维护性是软件质量标准的重要要素,是软件开发过程努力追求的一个目标。
3. 软件维护分为纠错性维护、适应性维护、完善性维护和预防性维护4类。 4. 软件重构是目前预防性维护采用的主要技术,是目前对遗留系统或未按软件工程标准开发的软件实施维护的主要手段。
5. 软件重构分为文档重构、重组、逆向工程和再工程,重构需要软件工具和环境的支持。
6. 软件维护经常遇到的问题与软件规划和开发方法有关。
7. 有效的维护活动需要尽力维护组织,强制报告和评估过程,为每次维护申请确定标准工作流,制定保存维护活动记录的制度和有关复审及评估的标准
第十四章略。。
第十五章
1. 度量是所有工程项目实施科学管理的关键环节。 2. 软件度量是软件项目管理和软件过程改进的基础。
3. 软件具有外部属性和内部属性,软件工程过程生成软件的中间中品和最终制品。
4. 软件最终制品是软件中间制品的进化,软件外部属性是由软件内部属性决定的。
5. 设计软件度量模型必须建立软件中间制品和软件最终制品的因果关系、软件内部属性与软件外部属性的因果关系。
6. 软件不同阶段的规模度量、复杂性度量、软件质量度量的三层次模型都反映了这种关系。
7. 在软件开发过程中利用各个阶段的项目和制品信息,对软件制品属性和过程进行跟踪度量,可以控制软件制品的质量和软件项目的进度和成本。
第十六章
1. 软件工程具有鲜明的“工程”特征,软件项目是软件开发团队的共同任务。 2. 软件工程师要实现“系统的、规范的、可量化的软件开发、运行和维护”的目标,必须对软件项目实施科学的管理。
3. 软件项目管理的主要要素是软件项目、人员、软件制品、软件开发过程、软件开发方法和工具,此外,还涉及客户、市场、法律、人员培训等。
概念:
1. 软件工程:软件工程就是用科学的知识和技术原理来定义,开发,维护软件的一门学科。(1)是将系统的、规范的、可量化的方法应用于软件的开发运行和维护的过程;即将工程化应用于软件开发和管理之中。(2)及对上述方
法的研究。
2. 软件危机:软件开发技术的进步未能满足发展的要求。在软件开发中遇到的问题找不到解决的办法,问题积累起来,形成尖锐的矛盾,导致了软件危机。 3. 面向对象特性:面向对象=对象+类+继承+聚合+多态+消息。面向对象的特性是(1)对象唯一性。每个对象都有自身唯一的标识,在对象生存期中,其标识不变,不同的对象不能有不同的标识。(2)分类性。是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。 (3)继承性。是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。(4)多态性。是指相同的操作或函数过程可以作用于多种类型的对象上并获得不同的结果。
4. UML:是一种标准的建模语言,它是面向对象分析与设计方法的表现手段。其本质表现是:它是一种可视化的建模语言,不是可视化的程序设计语言,不是工具或知识库的规格说明,不是过程,也不是方法,但允许任何一种过程和方法使用它。
5. 耦合及其分类:指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的性则越差。以低耦合为设计目标。面向对象设计的耦合有交互耦合和继承耦合。模块的耦合分七类:内容耦合、公共耦合、外部耦合、控制耦合、数据结构耦合、数据耦合、非直接耦合。 6. 内聚及其分类:也称块内联系。是一个模块内部各成分之间相关联程度,以高内聚
为设计目标。面向对象设计的内聚有:服务内聚和类内聚。模块的内聚分七类:巧合内聚、逻辑内聚、时间性内聚、过程内聚、通信内聚、信息内聚、功能内聚。
7. 可维护性:软件制品交付用户使用后,能够对它进行修改,以便改正潜伏的
缺陷、改进行性能和其他属性,使软件制品适应环境的变化。(软
件的可维护性是指理解、改正、调整和改进软件的难易程度。是软件质量的重要属性,涉及软件开发方法、工具、过程、软件制品、文档、软件管理、资金投入、维护计划和维护团队等。是指导软件工程活动的一条基本原则,也是软件工程追求的一个目标。)
8. 有效性:软件系统利用计算机的时间资源和空间资源完成系统功能的能力。
简答:
1. 软件工程的原则有哪些
答:抽象、信息隐藏、模块化、局部化、一致性、完全性和可验证性。
2. 面向对象的设计活动有哪些
系统构架设计、用例设计、类设计、数据库设计和用户界面设计。
3. 从外部的视角和软件系统内部的视角谈什么是用例 答:外部视角:一个用
例是执行者与目标软件系统之间一次典型的交互作用,其效果就是执行者在
软件系统的帮助下完成了某项业务功能,或达成了某项业务目标。内部视角:一个用例代表着熊执行的一系列动作,动作执行的结果能够被外部的执行者所察觉。
4. 定义软件活动的目标是什么?答:目标是获得对目标软件要解决的主要业务
问题及其业务背景的初步理解,尽量消除需求工程师与用户之间的交流障碍;明确待开发软件系统的目标、业务价值、范围及边界。
5. 软件的分类 答:从软件的功能上分:系统软件、应用软件。从实时性上分:
实时软件、非实时软件。从运行环境上分: 单机软件、网络软件。从加工
的数据类型上分:事物处理软件、科学和工程计算软件。从计算方法上分:有基于传统算法的软件、基于符号演算和推理规则的人工智能软件。
6. 软件质量的八要素
答:正确性、可用性、可靠性、有效性、可维护性、可移植性、安全性、可复
用性
7. 瀑布模型的基本内容
答:是将软件生存各个活动规定为依线性顺序联接的若干阶段的模型。它包括
可行性研究、需求分析、概要设计、详细设计、编码、测试、运行与维护、退役几个阶段。它规定了由前至后,相互衔接的固定次序,如同瀑布流水,逐级下落。
8. 原型模型的分类?答:原型主要有两类:(1)一类是抛弃型原型,也成实验
性原型,利用原型定义和确认了软件需求后,原型就完成了任务,开发人员
就可以按照确认的需求进行软件设计、编码、测试; (2)另一类是应用型原型,也称进化性原型,利用原型确认软件需求后,对原型进一步加工、完善,使之成为系统的一个组成部分。
9. UML表示系统的静态结构有几种图形(动态有几种)
答:静态图有:用例图,类图,组件图,对象图,部署图
动态图有:活动图,状态图,时序图,协作图(网上)
10. 软件的维护与分类 答:软件维护:是软件交付后,保障软件生产活动,
发挥软件社会和经济效益的关键。软件交付并投入运行后,任何针对系统变更所做的工作都是维护。
维护分类:纠错性维护、适应性维护、完善性维护和预防性维护4类。
11. 什么是单元测试、集成测试、系统测试?
答:单元测试:是指对软件中的最小可测试单元进行检查和验证。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的单元将在与程序的其他部分相隔离的情况下进行测试。集成测试:集成测试是组装软件的系统测试技术,按设计要求把通过单元测试的各个模块组装在一起之后,进行集成测试以便发现与接口有关的各种缺陷。系统测试:是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,目的是充分运行系统,验证系统各部件是否都能正常工作并完成所赋予的任务。主要有以下几类:回恢复测试、安全测试、强度测试、性能测试。