知识点总结
第一章:软件工程概述
1、软件的定义:在运行中能提供所希望的功能与性能的程序+使程序能够正确运行的数据及其结构+描述软件研制过程和方法所用的文档。
2、软件危机:软件开发的生产率远远不能满足客观需要。开发的软件产品往往不能满足用户的实际需要。软件产品的质量低下且可维护性差。很难估计软件开发的进度计划与成本。
3、软件工程是将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件。
4、软件工程三个要素:方法、工具、过程
5、瀑布模型:软件需求的认识是明确的
6、演化模型:适用于对软件需求缺乏准确认识的情况。软件需求的认识是模糊的、不确定的
7、增量模型特别适用于:需求经常变化的软件开发;市场急需而开发人员和资金不能在设定的市场期限之前实现一个完善的产品的软件开发
8、原型是预期系统的一个可执行版本,它反映了系统性质的一个选定的子集。
9、螺旋模型:是瀑布模型和演化模型的结合,并增加了风险分析
10、喷泉模型:喷泉模型是一种支持面向对象开发的模型,体现迭代和无间隙特征。
第二章:系统策划
1、可行性研究的任务:技术可行性 、经济可行性和社会因素的考虑。
2、两种成本估算方法:代码行法(LOC)——每行代码的平均成本乘以程序的行数;功能点法(FP)——采用软件所提供的功能来测量的
第三章 需求分析
1、需求分析的重要性:需求分析是发现、求精、建模、规格说明和复审的过程;需求分析是系统设计的基础,关系到程的成败和软件产品的质量。
2、需求获取困难原因有三:一是用户需求的动态性(不稳定性);二是需求的模糊性(不准确性);三是需求必须得到用户的确认,否则毫无意义 。
3、需求分析任务:
确定对系统的综合要求:系统界面要求、系统功能要求、系统性能要求、完全性可靠性保密性要求、系统运行要求、异常处理要求、将来可能提出的要求、分析系统的数据要求;分析系统的数据要求;画出系统的逻辑模型;修正项目开发划。
4、评审、验证的四个方面:一致性、完整性、现实性和有效性。
5、结构化分析方法:面向数据的方法,以数据流为中心 。其核心概念包括:数据流、数据存储、外部实体、数据组和数据元素。基本思想:自顶向下和逐层分解。
6、面向对象的分析方法 :面向对象分析以对象及其服务作为建模标准,比较自然,对象也具有相对的稳定性。
7、数据流图(DFD)是一种图形化技术,它描绘信息和数据从输入到输出的过程中所经受的变换。
8、数据字典任务:对于数据流图中出现的所以被命名的图形元素在数据字典中作为一个词条加以定义,使得每一个图形元素的名字都有一个确切的解释。
9、数据元素:数据的最小单位
10、面向对象=对象+类+继承+通信
11、对象是现实世界中个体或事物的抽象表示,它封装了特殊的属性(数据)和行为方法(操作)。
12、类是具有相同属性和操作的一组相似对象的抽象
13、实例:是由某个特定的类所描述的一个具体的对象
14、属性:是类或对象中所定义的数据,它是描述客观世界实体静态特征的数据项。
15、方法是对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法
16、一个消息由以下三部分组成:
•接收消息的对象;
•消息选择符即消息名;
•零个或多个变元。
17、封装就是把某个事物包起来,使外界不知道该事物的具体内容。在面向对象的程序中,把数据和实现操作的代码集中起来放在对象内部。
18、继承:类之间的继承关系是现实世界中遗传关系的直接模拟,它表示类之间的内在联系以及对属性和操作的共享,即子类可沿用父类(被继承)的某些特征。当然也可以具有自己独有的属性和操作。
19、多态是指在父类中定义的属性或服务被子类继承后,可以具有不同的数据类型或表现出不同的行为
20、向对象方法
Booch方法 :提出面象对象的软件工程的概念
OMT方法 :提出面象对象的建模技术方法
OOSE方法 :用例贯穿于软件整个开发过程
21、UML(重点放到下边来总结)
第四章 软件设计
1、软件设计是一个把需求转换为某种软件表达方式的过程。基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务。
2、概要设计:将软件需求转化为软件体系结构,确定系统级接口、全局数据结构或数据库模式。
3、详细设计:确立每个模块的实现算法、局部数据结构,用适当方法表示算法和数据结构的细节。
4、所谓模块,是指具有相对独立性的,由数据说明、执行语句等程序对象构成的集合。模块具体表现为函数、子程序、过程等。一个模块具有输入/输出(接口)、功能、内部数据和程序代码四个特征。
5、模块化是指将整个程序划分为若干个模块,每个模块用于实现一个特定的功能。
6、体系结构设计的主要任务
软件体系结构设计(功能性):设计软件的体系结构需要在对需求分析阶段生成的数据流图进一步分析和精化的基础上,首先将系统按照功能划分为模块,接着需要确定模块之间的调用关系及其接口,最后还应该对划分的结果进行优化和调整。良好的软件结构设计对详细设计及编码阶段的工作都是至关重要的。
数据结构和数据库设计:体系结构设计中应对需求分析阶段所生成的数据字典加以细化,从计算机技术实现的角度出发,确定软件涉及的文件系统及各种数据的结构。
系统可靠性、安全性设计(非功能性):可靠性设计也称为质量设计,目的是为了保证程序及其文档具有较高的正确性和容错性,并对可能出现的错误易于修改和维护。安全性设计的主要目的是为了增强系统的自我防护能力和运行的稳定性,防止系统遭受到有意或无意地入侵和破坏,保证系统在安全的环境下正常地工作。
7、体系结构设计的原则
(1)降低模块的耦合性,提高模块的内聚性。 为了提高软件中各个模块的独立性,提高程序的可读性、可测试性和可维护性。
(2)保持适中的模块规模。对于模块的适当规模并没有严格的规定,但普遍的观点是模块中的语句数最好保持在10~100之间。
(3)模块应具有高扇入和适当的扇出。模块的扇入越大,则说明共享该模块的上级模块数越多,或者说该模块在程序中的重用性越高,这正是程序设计所追求的目标之一。模块的扇出若过大,如在一个模块中要调用八个下级模块,则会使该模块的调用控制过于复杂。最常见的解决办法是通过在此模块和下级模块间增加一个中间层来控制模块分解的速度。根据实践经验,设计良好的典型系统中,模块的平均扇出通常为3或4。
(4)软件结构中的深度和宽度不宜过大。所谓深度,是指软件体系结构中控制的层数,它能够粗略地反映出软件系统的规模和复杂程度;所谓宽度,是指软件体系结构内同一层次上模块个数的最大值,通常宽度越大的系统越复杂。
(5) 模块的作用域应处于其控制域范围之内。模块的作用域是指受该模块内一个判定条件影响的所有模块范围。模块的控制域是指该模块本身以及所有该模块的下属模块(包括该模块可以直接调用的下级模块和可以间接调用的更下层的模块)。因此,软件设计时应使各个模块的作用域处于其控制域范围之内。若发现不符合此设计原则的模块,可通过下面的方法进行改进:
a、 将判定位置上移。
b、 将超出作用域的模块下移。
(6) 尽量降低模块的接口复杂度。
8、划分模块的重要目标是提高模块的独立性。度量模块独立性的两个准则是模块间的内聚性和耦合性。好的软件结构应该具有高内聚、低耦合的模块化结构。
内聚性是一个模块内部各个元素彼此结合的紧密程度的度量。
耦合性是模块间互相连接的紧密程度的度量。它取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。
9、模块内聚按照模块独立性由高到低的顺序:
功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。
逻辑内聚:这种模块把几种相关的功能组合在一起, 每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能。
时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
过程内聚:构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据进行传递。
通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。
顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。
偶然内聚:模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能,这种模块称为巧合强度模块。
10、耦合度由低到高:
非直接耦合:两模块间没有直接关系,之间的联系完全是通过主模块的控制和调用来实现的。
数据耦合:一个模块访问另一模块,彼此间通过简单数据参数来交换输入、输出信息。这里的简单数据参数不同于控制参数、公共数据结构或外部变量。
标记耦合:指两个模块之间传递的是数据结构,如高级语言的数组名,记录名,文件名等这些名字即为标记,其实传递的是这个数据结构的地址。
控制耦合:一个模块通过传递开关、标志、名字等控制信息,明显的控制选择另一模块的功能 。
外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数传递该全局变量的信息。
公共耦合:一组模块都访问同一个公共数据环境。该公共数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
内容耦合:一个模块直接修改另一个模块的数据,或直接转入另一个模块 。
11、概要设计的主要目标是把需求转换为软件的体系结构。
12、图形设计表示法
流程图、盒图(N-S图)、PAD图(问题分析图)、PDL (Process Design Language)语言即过程设计语言,是一种用于描述程序算法和定义数据结构的伪代码。
13、类图通常表示为长方形,长方形又分三个部分,分别用来表示类的名字、属性和操作。常用的可见性有公用、私有、受保护 3 种, 分别用“+”、 “-”、 “#”来表示
14、包(package)是一种组合机制,把许多类集合成一个更高层次的单位,形成一个高内聚、低耦合的类的集合。包图是一个很有用的工具,特别是对于改进系统的结构非常有帮助。
15、状态图:所有对象都具有状态,状态是对象执行了一系列活动的结果。当某个事件发生后,对象的状态将发生变化。状态图中定义的状态有:初态、终态、中间状态、复合状态。其中,初态是状态图的起始点,而终态则是状态图的终点。一个状态图只能有一个初态,而终态则可以有多个。状态图描述跨越多个用例的单个对象的行为
16、顺序图用来描述对象之间动态的交互关系,着重体现对象间消息传递的时间顺序。
17、协作图用于描述相互合作的对象间的交互关系和链接关系。
18、顺序图和协作图适合描述单个用例中几个对象的行为。
第五章:编程
1、计算机语言分类
面向机器的语言:汇编语言
面向过程的语言:FORTRAN、COBOL、 PASCAL 、C
面向对象的语言:C++、C#、Java、 Perl 、python、Delphi、Visual Basic、PowerBuilder
面向服务的语言:XML、.NET(C#)、J2EE(Java)
Web编程语言:HTML语言、ASP 、JSP、PHP、.Net
2、源程序的文档化包括标识符的选择与命名、注释的安排、程序代码的视觉组织等 。
3、注释是程序员和程序读者通信的重要手段,正确的注释非常有助于对程序的理解。
4、结构化程序设计的原则
程序三种基本流程结构:顺序结构、选择结构和循环结构。
基本原则:自顶向下,逐步求精,单入口单出口。在分析一个问题的编程思路时,先将该问题分成若干个大的步骤,然后对每一步骤再进行细化分成若干个小的步骤,这样逐级细分,直到最后能将每一个步骤直接翻译成为相应的计算机语言的指令。
5、面向对象程序设计风格:提高可复用性、提高可扩充性和提高健壮性
第七章 软件实施与维护
1、软件文档分类:开发文档、管理文档和用户文档
2、软件维护概念:是指在软件的运行/维护阶段由软件厂商向客户所提供的服务工作 。
3、软件维护分四类
(1)纠错性维护 占 17%~20% :改正在特定的使用条件下软件中暴露出来的错误与缺陷,这些错误或缺陷在测试时并未被发现。
(2)适应性维护占18%~25%:使软件产品能够适应变化了的运行环境,如操作系统版本的升级、机器配置的变化、软件使用对象的变化等。
(3)完善性维护,占50%~60%:为适应用户对软件功能、性能或接口方面提出的新要求以使产品更加完善与合理而进行的修改
(4)预防性维护占4%左右:提高产品的可靠性和可维护性,减少今后维护的工作量,有利于系统和进一步改造或升级换代而进行的维护
4、UML将软件生存周期定义为4个主要阶段:初始、细化、构造、移交。
第八章软件项目管理
1、软件项目管理的主要任务:为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分析和管理的活动。
2、软件项目组织结构类型
工作队式的项目组织:适用于大型项目,工期要求紧,要求多工种、多部门密切配合的项目。
部门控制式组织:适用于小型的,专业性较强,不需涉及众多部门的项目。
项目型组织:能迅速有效地对项目目标和客户的需要做出反应。
矩阵型组织:能够充分利用人力和物力资源,适用于同时承担多个项目的企业。
直线职能型组织:缺点是项目时间长,各部门协调困难。
3、成本估算需要考虑的因素
(1)项目所包括的工作
(2)资源需求
(3)资源单价
(4)项目完成所需要的时间
(5)已完成项目的历史资料
(6)会计科目表
4、成本估算的方法
(1)通过度量软件代码行数进行估算:是度量软件规模的直观指标,对软件成本估算起一定的作用。
(2)通过软件功能点进行估算
(3)使用类比估计法
(4)使用累加估计法
5、进度控制就是比较项目执行的实际状态和项目计划之间的差异,并做出必要的调整使项目向有利的方向发展。
6、进度控制的四个步骤:计划、执行、检查、行动。
7、软件质量保证是为了保证软件产品和服务能够充分满足客户所要求的质量而进行的有计划、有组织的活动 。
8、软件质量因素
(1)正确性(2)健壮性(3)效率(4)完整性(安全性)(5)可用性(6)易用性(7)风险
(8)可理解性(9)可维护性(10)灵活性(适应性)(11)可测试性(12)可移植性
(13)可再用性(14)互运行性(兼容性)
9、使用合理的质量评价指标体系:(1)功能性指标(2)可靠性指标(3)易用性指标(4)效率特征指标
10、软件配置管理任务:配置标识;建立系统受控配置库;版本管理;变更控制;配置审核
配置状态报告;发布管理
第九章软件过程
1、CMM内容简介
(1)软件过程:人们用于开发和维护软件及其相关过程的一系列活动,包括软件工程活动和软件管理活动。
(2)软件过程能力:描述(开发组织或项目组)遵循其软件过程能够实现预期结果的程度,它既可对整个软件开发组织而言,也可对一个软件项目而言。
(3)软件过程性能:表示(开发组织或项目组)遵循其软件过程所得到的实际结果,软件过程性能描述的是已得到的实际结果,而软件过程能力则描述的是最可能的预期结果,它既可对整个软件开发组织而言,也可对一个特定项目而言。
(4)软件过程成熟:一个特定软件过程被明确和有效地定义,管理测量和控制的程度。
(5)软件能力成熟度等级:软件开发组织在走向成熟的途中几个具有明确定义的表示软件过程能力成熟度的平台。
(6)关键实践:对关键过程域的实践起关键作用的方针、规程、措施、活动以及相关基础设施的建立。关键实践一般只描述“做什么”而不强制规定“如何做”。
(7)软件能力成熟度模型:随着软件组织定义、实施、测量、控制和改进其软件过程,软件组织的能力也伴随着这些阶段逐步前进,完成对软件组织进化阶段的描述模型。
2、软件过程评估目的是确定一个组织的当前软件过程的状态,找出组织所面临的急需解决的与软件过程有关问题,进而有步骤地实施软件过程改进,使组织的软件过程能力不断提高。
3、软件能力评价目的是识别合格的能完成软件工程项目的承制方,或者监控承制方现有软件工作中软件过程的状态,进而提出承制方应改进之处。
4、PSP简介:个体软件过程(PSP:Personal Software Process)能够指导软件工程师如何保证自己的工作质量,估计和规划自身的工作,度量和追踪个人的表现,管理自身的软件过程和产品质量。
5、RUP(Rational Unified Process,统一(软件开发)过程)是一个面向对象且基于网络的程序开发方法论。
6、RUP最重要的它有三大特点:
1)软件开发是一个迭代过程,
2)软件开发是由Use Case驱动的,
3)软件开发是以架构设计(Architectural Design)为中心的
7、软件生命周期中的各个阶段:
初始阶段、细化阶段、构造阶段和交付阶
第二部分
开发模式与平台
1、客户/服务器(Client/Server)模式
特点:系统使用了客户和服务器双方智能、资源和计算能力来执行一个特定的任务。提出服务请求的一方称为“客户机”,而提供服务的一方则称为“服务器”。
应用软件安装在:前端(即客户部分)/后端(服务器部分)
2、浏览器/服务器( Browser/Server)模式
特点: B/S结构的客户端采用了人们普遍使用的浏览器,它是一个简单的、低廉的、以Web技术为基础的“瘦”C/S系统。
应用软件安装在:后端(服务器部分)
3、对等(Peer to Peer,P2P)模式
特点:用户和资源处于对等状态,分布式计算。
P2P网络是一个应用层网络,一般由网络边缘节点构成,充分利用资源;网络的扩展性好;
资源分布在各个节点中,而不是集中在一个服务器上进行管理,不存在单点瓶颈问题;节点之间可直接建立连接,交互共享资源。
需要解决的问题