一、结构化程序设计
结构化程序设计是以模块功能和详细处理过程设计为主的一种传统的程序设计思想,通常采用自顶向下、逐步求精的方式进行。在结构化程序设计中,任何程序都可以由顺序、选择、循环三种基本结构构成。结构化程序采用模块化设计思想来实现,基本思路是把程序要解决的总目标分解为若干个简单的小目标来处理,再进一步分解为具体的任务项来实现,在模块化的程序设计中,应尽量做到模块之间的高内聚、低耦合。
二、面向对象的基本概念
(1)对象:是要研究的任何事务,可以是自然界的任何事物。对像由数据和作用于数据的操作构成一个独立整体,从程序设计者来看,对象是一个程序模块,从用户来看,对象可以提供用户所希望的行为。
(2)类:类是一组有相同数据和相同操作对象的定义,一个类包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。面向对象的程序设计语言通过类库来代替传统的函数库。
(3)消息和方法:对象之间进行通信的机制叫作消息。
(4)软件复用
软件复用是指在两次或多次不同的软件开发过程中重复使用相同或相拟软件元素的过程,软件元素包括 程序代码、测试用例、设计文档、设计过程、需求分析文档甚至领域知识。
根据复用跨越的问题领域,软件复用可分为垂直式复用和水平式复用。
垂直式复用:指在一类具有较多公共性的应用领域之间进行软件重用,大多数软件组织采用这种重用形式。
水平式复用:重用不同应用领域中的软件元素,例如数据结构、分类算法、人机界面构件等,标准函数库属于水平式重用。
三、面向对象的主要特征
(1)继承性
继承性是子类自动共享父类的数据结构和方法的一种机制。在类层次中,若子类只继承一个父类的数据结构和方法,则称为单重继承,若子类继承多个父类的结构和方法,则称为多重继承。
(2)多态性
多态性是指相同的操作、函数或过程可作用于多种不同类型的对象上,对象收到同一个消息可以产生不同的结果,这种现象称为多态性。
(3)封装性
封装是一种信息隐蔽技术,是对象的一种重要特性。封装使数据和加工数据的方法变为一个整体以实现独立性很强的模块,用户只能见到对象的外部特性,对象的内部特性对用户是隐蔽的。
四、面向对象的开发方法
面向对象的开发方法主要有Booch方法、Coad方法和OMT方法。
4.1 Booch方法
(1)类图:描述类与类之间的关系。
(2)对象图:描述实例和对象间传递的消息。
(3)模块图:描述构件。
(4)进程图:描述进程分配处理器的情况。
Booch方法也可以划分为静态模型和动态模块,其中静态模型表示系统的构与和结构;动态模型表示系统执行的行为,动态模型又包含时序图和状态转换图。
(1)时序图:描述对象图中不同对象之间的动态交互关系。
(2)状态图:描述一个类的状态变化。
4.2 Coad方法
Coad方法是多年来开发大系统的经验与面向对象概念的有机结合,在对象、结构、属性和操作的认定方面提出了一套系统的原则。Coad方法可分为面向对象分析(OOA)和面向对象设计(OOD)两部分。在OOA中建立概念模型,由类与对象、属性、服务、结构和主题五个分析层次组成。
面向对象设计就是根据已建立的分析模型,运用面向对象技术进行系统软件设计,它将OOA模型直接变成OOD模型。
4.3 OMT方法
OMT方法认为开发工作的基础是对真实世界的对象建模,然后围绕这些对象使用分析模型来进行独立于语言的设计。
五、UML
UML标准建模语言主要是因为它与程序设计语言无关,UML提供了多种类型的模型描述图,常用的UML图包括用例图、类图、序列图、状态图、活动图、组件图和部署图。
(1)用例图
描述了系统提供的一个功能单元,以一种可视化的方式理解系统的功能需求。
(2)类图
表示不同的实体如何彼此相关,它显示了系统的静态结构。
(3)序列图
显示具体用例的详细流程,并且显示了流程中不同对象之间的调用关系。
(4)状态图
表示类所处的不同状态和类的状态转换信息。
(5)活动图
活动图表示在处理某个活动时,两个或多个类对象之间的过程控制流。
(6)组件图
提供系统的物理视图,显示系统中的软件对其他软件的依赖关系。
(7)部署部
表示软件系统如何部署到硬件环境中。
六、软件开发模型
是指软件开发的全部过程‘、活动和任务的结构框架,其主要过程包括需求、设计、编码、测试及维护阶段等环节,软件开发模型使开发人员能清晰、直观地表达软件开发的全过程,明确了解完成的主要活动和任务。软件开发过程中,常用的软件开发模型可以概括为以下六类。
(1)瀑布模型
最早出现的软件开发模型,它将软件生命周期分为制订计划、需求分析、软件设计、程序编写、软件测试和运行维护六个基本活动,并规定了它们自上而下、相互衔接的固定次序。由于模型的线性过程太过理想化,已不适合现代的软件开发模式。
(2)快速原型模型
首先建立一个快速原型,以实现客户与系统的交互,用户通过对原型进行评价,进一步细化软件的开发需求,从而开发出令客户满意的软件产品。
(3)增量模型
又称演化模型,认为软件开发是通过一系统的增量构件来设计、实现、集成和测试的,每一个构件由多种相互作用的模块构成。
(4)螺旋模型
结合了瀑布模型和快速原型的特点,特别适合于大型复杂的系统。
(5)喷泉模型
也称为面向对象的生存期模型,相对传统的结构化生存期而言,其增量和迭代更多。
(6)RUP模型
软件统一过程RUP也是具有迭代特点的模型,RUP强调采用螺旋和增量的方式来开发软件。
依据时间顺序,RUP生命周期分为四个阶段,初始阶段、细化阶段、构建阶段、交付阶段。
七、软件开发方法
软件开发方法是在软件系统开发过程中使用的方法。与软件开发模型不同的是,开发模型强调规划,即规划软件开发的流程;而软件开发开发方法强调软件系统的具体实现。
1、结构化方法
结构化方法把系统开发分为若干阶段,相邻两阶段中,前阶段是后阶段的工作前提。
结构化方法的基本思想是自顶向下,逐层分解,把一个大问题分解成若干个小问题,每个小问题再分解成若干个更小的问题。经过逐层分解,每个最低层的问题都是足够简单、容易解决的。结构化方法分析模型的核心是数据字典,围绕这个核心,有三个层次的模型,分别是数据模型、功能模型和行为模型(也称为状态模型)。在实际工作中,一般使用E-R图表示数据模型,用DFD表示功能模型,用状态转换图表示行为模型。
2、原型法(又称快速原型法)
原型法获取基本的需求,快速构建原型,通过用户试用、补充、修改,构成新系统。重复这一过程,形成最终系统。原型法用于解决需求不明确的情况。
原型还可以分为演化式原型和抛弃式原型。
(1)演化式原型:从目标系统的部分基本需求出发,通过修改和完善功能的过程演化成最终的目标系统。
(2)抛弃式原型:在真正捕获用户的需求后就放弃不用的原型。
3、面对对象方法
把面向对象思想应用到软件开发中,简称OO方法。方法分为分析、设计、实现三个阶段。
4、Jackson方法
是一种面向数据结构的软件设计方法,是面向数据流的分析方法。
5、敏捷开发方法
其最基本的特征是轻量和简单、增量、协作、直接、适应性强。更适应互联网软件需求模糊、快速变更的特点。
八、CMM模型
能力成熟度模型CMM是对软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。
CMM是一种用于评价软件承包能力并帮助其改善软件质量的方法,侧重于软件开发过程的管理及工程能力的提高与评估,CMM分为五个等级,一级为初始级;二级为可重复级;三级为已定义级;四级为已管理级;五级为优化级。
九、软件测试
软件测试是软件开发过程中的一个重要环节,主要目的是检验软件是否符合需求,测试的对象不仅有程序部分,还有软件开发过程中各阶段产生的文档,如需求规格说明、概要设计文档等。
软件测试一般分为动态测试和静态测试两个大类,动态测试通过运行程序发现错误,包括边界值分析、逻辑覆盖、基本路径等方法,静态测试采用人工和计算机辅助静态分析的手段对程序进行检测,包括桌面检查、代码审查、代码走查等方法。
根据动态测试在软件开发过程中所处的阶段和作用,可以分为单元测试、集成测试、系统测试、验收测试和回归测试。
单元测试:对软件中的基本组成单位进行的测试。
集成测试:系统的各个部件的联合测试,组件是多个单元的集成聚合。集成测试的组装策略可以分为一次性组装和增量式组装(包括自顶向下、自底向上及混合式)两个。
系统测试:将系统中的软件与各种依赖的资源结合起来,在系统实际运行环境下进行测试。
验收测试:系统开发生命周期方法的一个重要阶段,也是部署软件之前的最后一个测试。一般有三种策略:正式验收、非正式验收、Alpha测试、Best测试。
(1)正式验收:是一项管理严格的过程,它通常是系统测试的延续。
(2)非正式验收:非正式验收测试中,执行测试的过程的限制不如正式验收测试中那样严格。
(3)Alpha测试:由最终用户或其他人员来完成,不能由程序员或测试员完成。
(4)Best测试:由软件的多个用户在一个或多个用户的实际使用环境下进行测试,开发者通常不在测试现场,不能由程序员或测试员完成。
(5)回归测试:在发生修改之后,重新测试之前的测试,以保证修改的正确性。
(6)白盒测试:又称结构测试或逻辑驱动测试。它把测试对象看作一个能打开、可以看见内部结构的盒子。(主要方法有逻辑驱动、基路测试等)
(7)黑盒测试:又称功能测试或数据驱动测试。它把测试对象看作一个不能打开的盒子,因此不考虑软件内部的运作原理。
软件测试驱动模型V模型
V模型中,需求分析通过验收测试;概要设计需要通过系统测试;详细设计需要通过集成测试;编码需要通过单元测试。