资源描述
系统分析师(软件设计师计算机学科部分经典教材 专题七:软件工程专题
1 、软件工程知识
1.1 概述
软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工
程。其目的是提高软件生产率、提高软件质量、减低软件成本。
软件工程是 1968 年在德国的 NATO 会议上提出的,希望用工程化的原则和方法来克服软件危机;而软
件危机就是软件开发和维护过程中的各种问题,由于软件开发阶段缺少好的方法的指导和好的工具的辅助,
并且缺少有关的文档,使得大量的软件难以维护。
软件生命周期是指由软件定义、软件开发和软件维护等阶段组成的全过程,反映软件生存期内各种工
作得组织以及各个阶段如何衔接。下表归纳了软件生存周期各个阶段的任务、参与人员和产生文档。
常见的软件开发模型有瀑布模型、演化模型、螺旋模型和喷泉模型等。
阶段
任务
参与人员
产生文档
软件定义阶段——待开发软件要“做什么”
系统分析
拟定待开发软件的总体规定和
用户、项目负责人、系统
可合并项目计划书中
合用范围,以及与之有关的硬
分析员
件、支撑软件的规定
软件项目计划
拟定待开发软件的目的,对其进
用户、项目负责人、系统
可行性分析报告、项
行可行性分析,并对资源分派、 分析员
目计划书
进度安排等做出合理的计划
需求分析
拟定待开发软件的功能、性能、 用户、项目负责人、系统
需求规格说明书
界面等规定,从而拟定系统的逻
分析员
辑模型
软件开发阶段——待开发软件“怎么做”
概要设计
模块分解,拟定软件的结构,模
系统分析员、高级程序员 设计说明书、数据说
软
块的功能和模块间的接口,以及
明书、模块开发卷宗
件
全局数据结构的设计
设
具体设计
设计每个模块的实现细节和局
高级程序员、程序员
计
部数据结构的设计
编码
用某种程序语言为每个模块编
高级程序员、程序员
程序清单
写程序
软件测试
发现软件中的错误,并加以纠正 高级程序员或系统分析
软件测试计划、软件
员(另一部门或单位
测试用例说明,软件
测试报告
软件维护阶段—开发后交付使用的软件的维护
软件维护
使软件适应外界环境的变化、实
维护人员
维护计划、维护报告
现功能的扩充和质量的改善而
修改软件
软件由计算机程序、数据及文档组成,同时与硬件、数据库人、过程等共同构成计算机系统。软件工程涉及三个要素:方法、工具和过程。
重要的软件开发方法有以下几种方法:
生命周期法:命周期法认为:每一个软件系统都有一定的生命周期。软件的生命周期是指一个软件系统从其提出、调查到分析、设计和有效使用,直至被淘汰或取代的整个期间。软件生命周期
共 16 页 第 1 页
系统分析师(软件设计师计算机学科部分经典教材
法就是按软件生命周期的各个阶段划分任务,按一定的规则和环节,有效地进行软件开发的
方法。
通常一个软件系统的生命周期可分为五个阶段:准备阶段、分析阶段、设计阶段、实行阶段、运营与维护阶段
原型法:原型法是先根据用户的最重要规定,开发出能实现系统最基本功能的一个原型,再根据用户
对原型使用与评价的意见,反复修改完善原型,直到等到用户满意的最终系统为止。
原型法分 4 个阶段:拟定用户需求;设计原型;使用、评价原型;修改、完善原型。
1.2 软件分析
软件开发模型:瀑布模型;演化模型(原型法;螺旋模型;喷泉模型(迭代和无间隙;软
件成本模型;可行性分析的任务是从技术上、经济上、使用上、法律上分析需解决的问题是否存在可行的
解。
需求分析是软件生存周期中相称重要的一个阶段。需求分析重要是拟定待开发软件的功能、
性能、数据、界面等规定。具体有以下几点:
拟定软件系统的综合规定
分析软件系统的数据规定
导出系统的逻辑模型
修正项目开发计划
如有必要,可开发一个原型系统
需求分析的基本原则是可以表达和理解问题的信息域和功能域;以层次化的方式进行分解和不断细
化;要给出系统的逻辑视图和物理视图;
描述软件需求的方法:
功能层次模型:一般来讲就是系统的功能图,模块分布图等描述整个系统的功能的分布和功能
的层次结构;
数据流模型:就是以数据流为着眼点的分析方法得到的模型,重要通过数据在整个系统的流动
情况来拟定系统的重要功能主线和流程;
控制流模型:通过了解和界定系统中控制线,通过控制流的走向和控制的对象来拟定系统的功
能分布和控制与被控制的关系;
结构化分析(SA方法是一种面向数据流的需求分析方法,它合用于分析大型数据解决系统。结构化
分析方法的基本思想是自顶向下逐层分解,这样做可以把一个大问题分解成若干个小问题,通过多次逐层
分解,每个最底层的问题都是足够简朴、容易解决的,这个过程就是分解的过程。
结构化方法的分析结果由数据流图 DFD、数据词典和加工逻辑说明几个部分组成。其中,DFD 的基本成
分有数据流(data flow、加工(process、文献(file和源/宿(source/sink。
画数据流图的基本环节:自外向内、自顶向下、逐层细化、完善求精;
数据流图的父图与子图要平衡, 即输入和输出的数据流一致;
数据流图中的每个加工至少有一个输入数据流和一个输出数据流;
局部的数据存储不画出来,只有当局部数据存储作为某些数据加工之间的数据接口才画出,这
有助于信息隐蔽;
画数据流的时候不画控制流,两者的区别就是控制流中没有数据;
一个加工的数据流与输出流不应当同名;
允许一个加工有多条数据流流向另一个加工,也允许一个加工有两个相同的输出流向两个不同
的加工;
保持数据守恒:一个加工的所有输出数据必须能从该加工的所有的输入流中获得;
在整套数据流图中,每个文献都必须既有读文献的数据流也有写文献的数据流;
软件开发过程中的软件工程原则(8 个:
抽象;
自顶向下、逐层细化;
信息隐蔽和数据封装;
模块化;
局部化;
拟定性;
一致性和标准化;
完备性和可验证性;
软件工程基本原理(7 个:
按软件生存周期分阶段指定计划并认真实行;
坚持进行阶段评审;
坚持严格的产品控制;
共 16 页 第 2 页
系统分析师(软件设计师计算机学科部分经典教材
使用现代程序设计技术;
明确责任,使得工作结果可以得到清楚的审查;
用人少而精;
不断改善开发过程;
1.3 软件设计
软件设计原则: 软件设计的原则对提高软件的设计质量有很大的帮助。
◆ 抽象
抽象是指忽视一个主题中与当前目的无关的那些方面,以便更充足地注意与当前目的有关的方面。过程抽
象和数据抽象是常用的两种重要抽象手段。
◆ 模块化
模块化是指将一个待开发的软件分解成若干个小的简朴的部分——模块,每个模块可独立地开发、测试、
最后组装成完整的软件。这是一种复杂问题的“分而治之”的原则。
模块是指执行某一特定任务的数据结构和程序代码。一个模块有它的外部特性和内部特性。
◆ 信息隐蔽
信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,
定义每一个模块时尽也许少地显露其内部的解决。信息隐蔽原则对提高软件的可修改性、可测试性和可移
植性都有重要的作用。
◆ 模块独立
模块独立是指每个模块完毕一个相对独立的子功能,并且与其他模块之间的联系简朴。衡量模块独立限度
的度量标准有两个:耦合和内聚。
耦合是指模块之间联系的紧密限度。耦合度越高则模块的独立性越差。按耦合度从低到高依次有 7种耦合
方式。
非直接耦合(独立运营
数据耦合(用参数表传递简朴数据
标记耦合(传递数据结构或者一部分
控制耦合(传递的信息涉及控制模块的信息
外部耦合(模块与软件之外的环境有关
公共耦合(多个模块引用同一全局的数据区
内容耦合(访问内部数据,代码重叠或者多个入口
内聚是指模块内部各元素之间联系的紧密限度内聚度越低模块的独立性越差。按内聚度从低到高依次有 7
种内聚种类。
偶尔内聚(模块完毕的多个任务,任务之间的关系松散
逻辑内聚(模块完毕逻辑相关的一组任务
瞬时内聚(模块的所有任务必须在同一时间间隔内执行
过程内聚(模块的解决元素相关并且按照特定的顺序执行
通信内聚(模块的所有元素集中在一个数据结构区域上
顺序内聚(模块的解决元素相关,必须顺序执行
功能内聚(模块完毕单一的功能,各个部分协调工作,并且不可缺少
模块分解原则:
满足信息隐蔽;
尽量内聚度高,模块间偶合度低;
模块大小在(50-100 语句;
模块调用深度不能过大;
模块的扇入(直接调用该模块应尽量大,扇出(直接调用下级模块数不宜过大;
设计单入口和单出口的模块;
模块的作用域应在控制域之内:
作用域:受模块内一个鉴定影响的所有的模块的集合;
控制域:该模块自身和被该模块直接或间接调用的所有的模块的集合;
模块的功能应是可以预测的,相同输入得到相同输出
结构化设计方法
结构化设计(SD方法是一种面向数据流的设计方法,它可以与 SA 方法衔接。
结构化设计采用结构图(SC来描述程序的结构。其基本成分有模块、调用和输入/输出数据。
结构图:
共 16 页 第 3 页
系统分析师(软件设计师计算机学科部分经典教材
条件调用 循环调用
在需求分析阶段用 SA 方法产生了数据流图(DFD。面向数据流的设计可以方便的将 DFD 转换成程
序结构图。DFD 从系统的输入数据流到系统的输出数据流的一连串连续变换形成一条信息流。DFD 的信息流
大体可分为两种类型:变换流和事务流。与之相应的也存在两种分析,变换分析和事务分析。变换分析是
从变换流型的 DFD 导出程序结构图,而事务分析则是从事务流行型的 DFD 导出程序结构图。
SD 方法的具体设计环节为:
复查并精化数据流图
拟定 DFD 的信息流类型
根据信息流类型分别将变换流或事务流转换成程序结构图
根据软件设计的原则对程序结构图作改善
结构化程序设计
结构化程序(SP设计采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。
结构化程序设计的描述工具重要有图形描述工具、语言描述工具和表格描述工具。常用的图形描述工具有
程序流程图、盒图(NS 图和问题分析图(PAD。典型的语言描述工具是 PDL(program design language。
典型的表格描述工具是鉴定表和鉴定树。
面向数据结构的 Jackson 方法也十分常用:
Jackson 方法是以数据结构为设计基础,设计目的是得出对程序解决过程的描述,其设计过程是从
描绘数据结构的 Jackson 图推导出描绘程序结构的 Jackson 图。这种方法最适合于具体设计阶段使用。
Jackson 方法的具体设计环节为:
分析并拟定输入和输出的数据的逻辑结构,并用 Jackson 图表达
找出输入数据结构与输出数据结构间有相应关系的数据单元
从描述数据结构的 Jackson 图导出描述程序结构的 Jackson 图
软件编码:
根据具体设计说明书编写程序,为开发项目选择程序设计语言需要考虑的因素有应用领域、算法和计
算的复杂性、软件运营环境、用户需求、数据结构和开发人员的水平。软件的设计质量与程序设计语言的
技术性能无关,但在程序设计转向程序代码时,转化的质量受语言性能的影响。
好的程序应当具有模块化结构,系统应当有较高的模块独立性。
从应用领域看,COBOL 适合商业领域;FORTRAN 适合科学计算;PROLOG 和 LISP 适合人工智能领域;
SMALLTALK、C++、JAVA 是面向对象语言;C 是开发系统的程序设计语言;
例题 1:
软件设计中划分模块的一个准则是 A 。两个模块之间的耦合方式中,B 耦合的耦合度最高,C 耦合的耦合
度最低。一个模块内部的内聚种类中 D 内聚的内聚度最高,E 内聚的内聚度最低。
A: ①低内聚低耦合 ②低内聚高耦合 ③高内聚低耦合 ④高内聚高耦合
B : ① 数 据 ② 非 直 接
③ 控
制 ④内容
C : ① 数 据 ② 非 直 接
③ 控
制 ④内容
D : ①偶尔 ②逻辑
③功
能 ④过程
E : ①偶尔 ②逻辑
③功
能 ④过
A 3
B 4
C 2
D 3
E 1
例题 2
关于程序模块优化的启发式规则有若干条,以下规则中不符合优化原则的是__B__。假如一个模块调用下层
模块时传递一个数据结构,则这种耦合属于_C_。(软件工程
(30A.通过模块的合并和分解,减少模块的耦合度,提高模块的内聚性
共 16 页 第 4 页
系统分析师(软件设计师计算机学科部分经典教材
B.提高上层模块的扇出,减少模块调用的层次
C.将模块的作用范围限制在模块的控制范围之内
D.减少模块之间接口的复杂性,避免“病态连接”
(31A.简朴耦合
B.直接耦合
C.标记耦合
D.控制耦合
1.4 软件测试
对源程序最基本的质量规定是对的性和可靠性,此外还很注重软件的易使用性、易维护性和易移植性。
软件测试的工作量约占软件开发总工作量的 40%以上,其目的是尽也许多的发现软件产品(重要是指程序
中的错误和缺陷。
软件测试是自底向上,逐步集成的过程,低一级测试为上一级测试准备条件;
测试的关键是测试用例的设计,其方法可分为两类。
白盒测试:
白盒测试是根据程序的内部逻辑来设计测试用例,常用的技术是逻辑覆盖,即考察用例测试数据运营被测
程序时对程序逻辑的覆盖限度。重要的覆盖标准有 6 种:
I. 语句覆盖
指选择足够的测试用例,使被测语句的每个语句至少执行一次。
II.鉴定覆盖
指选择足够的测试用例,使每个鉴定的所有也许结果至少出现一次。
III.条件覆盖
指选择足够的测试用例,使鉴定中的每个条件的所有也许结果至少出现一次。
IV. 鉴定/条件覆盖
指选择足够的测试用例,使鉴定中的每个条件的所有也许结果至少出现一次,并且每个鉴定中条件结果的
所有也许组合也至少出现一次。
V. 条件组合覆盖
指选择足够的测试用例,使每个鉴定中条件结果的所有也许组合至少出现一次。
VI. 途径覆盖
指选择足够的测试用例,使流程图中的每条途径至少通过一次。
黑盒测试:
黑盒测试时根据规格说明所规定的功能来设计测试用例,它不考虑程序的内部结构和解决过程。常用的黑
盒测试技术有:
等价类划分
边值划分
错误猜测
软件测试的重要环节有单元测试、集成测试和确认测试。
单元测试:
重要用来发现编码和具体设计中产生的错误,一般在编码阶段,采用白盒测试。
集成测试(也称组装测试:
重要用来发现设计阶段产生的错误,是对各模块组装而成的程序进行测试,重要检查模块间的接口和通信,
采用黑盒测试。
集成测试按集成方式又可提成非渐增式集成和渐增式集成,而渐增式集成又可提成自顶向下集成和自底向
上集成。
确认测试:
检查软件的功能、性能和其他特性是否与用户需求一致,它以需求规格说明书作测试为依据,采用黑盒测试
Alpha 测试是在开发者的现场由客户来实行的,从用户角度和环境下进行;
Beta 测试是在开发者不在现场下测试,由软件最终用户实行;
使用各种测试方法的综合策略:
在任何情况下都必须使用边界值分析方法,用这种方法设计出测试用例发现程序错误的能力最强;
必要时用等价类划分方法补充一些测试用例;
用错误推测法再追加一些测试用例
对照程序逻辑,检查已有测试用例的逻辑覆盖限度
假如程序的功能说明中具有输入条件的组合情况,则选用因果图法
例题:
软件测试的目的是 A 。通常 B 是在代码编写阶段可进行的测试,它是整个测试工作的基础。
逻辑覆盖标准重要用于 C 。它重要涉及条件覆盖、条件组合(多重条件覆盖、鉴定覆盖、条件及鉴定覆
盖、语句覆盖和途径覆盖等几种,其中除途径覆盖外最弱的覆盖标准是 D ,最强的覆盖标准 E 。
共 16 页 第 5 页
系统分析师(软件设计师计算机学科部分经典教材
A: ①表白软件的对的性 ②评价软
件质量
③尽也许发现软件中错误 ④鉴定软
件是否合格
B: ①系统测试 ②安装测试 ③验收测
试 ④单元测试
C : ① 黑 盒 测 试 方 法 ② 白 盒 测 试 方 法
③ 灰 盒 测 试 方
法 ④软件验收方法
D、E: ①条件覆盖 ②条件组合覆盖 ③鉴定覆盖
④条件及鉴定覆盖 ⑤语句覆盖
A:③ B:④ C:② D:⑤ E:②
1.5 软件开发工具与环境(CASE
用来辅助软件开发、运营、维护、管理和支持等过程中的活动的软件称为软件工具,通常也称为CASE
(计算机辅助软件工程工具。
整个软件开发过程要使用很多开发工具,其中涉及分析工具、设计工具、编程工具、测试工具、维护工具等等。
软件开发工具是指支持软件产品开发的软件系统,它由软件工具集和环境集成机智构成。工具集涉及
支持软件开发相关过程、活动、任务的软件工具;环境集成机智为工具集成和软件开发、维护和管理提供
统一的支持。
软件开发环境是把一组相关的工具集成在环境中,提供数据集成、控制集成和界面集成等机制。其中:
数据集成机制:提供统一的数据模式和数据接口规范,需要互相协同的工具通过这种统一的
规范互换数据。数据集成可由共享文献、共享数据结构或共享信息库等不同的层次;
控制集成机制:支持各工具或各开发活动之间的通信、切换、调度和协同工作,并且支持软
件开发过程的描述、执行和转接;通常消息传送的方式实现控制的集成。
界面集成机制使这些工具具有统一的界面风格,从而为软件开发、维护、管理等过程的各项
活动提供连续的、一致的全方位支持。
集成型软件开发环境由工具集和环境集成机制组成,这种环境应当具有开放性和可剪裁性;
环境集成机制的核心是环境数据库。
1.6 软件维护和软件管理
软件开发项目管理基础知识(时间管理、成本管理、质量管理、人力资源管理、风险管理等及其常
用管理工具
软件维护阶段是指从软件交付使用到软件被淘汰为止的整个时期,它是在软件交付使用后,
为了改正软件中隐藏的错误,或者为了使软件适应新的环境,或者为了扩充和完善软件的功能或性能而修
改软件的过程。根据引起软件维护的因素,软件维护通常可提成改正性维护、适应性维护、完善性维护、
防止性维护。
软件管理工作涉及到软件开发工作的方方面面,其直接对象涉及人、财、物,简朴地说,人就是指软
件开发人员,财就是指项目经费,物就是指软件项目。也许还没有关于这方面的专门理论,但在工商管理
领域已有十提成熟的管理学理论,他山之石,可以攻玉,所以我们完全可以引进到软件项目方面的管理。
作为软件管理人员,应当站在高处来俯瞰整个项目,假如有不识庐山真面目的感觉就不太好了。有了
俯瞰全局的意识这一前提,采用适当的管理技术,项目开展就容易罗。软件项目的管理工作可以分位四个
方面:软件项目的计划、软件项目的组织、软件项目的领导和软件项目的控制.
1 软件项目的计划
软件开发项目的计划涉及定义项目的目的,以及达成目的的方法。他涉及到项目实行的各个环节,带
有全局的性质,是战略性的。计划应力求完备,要考虑到一些未知因素和不拟定因素,考虑到也许的修改。
计划应力求准确,尽也许提高所依据的数据的可靠限度。重要工作集中在软件项目的估算、软件开发成本
的估算和软件项目进度安排。软件项目计划的目的是提供一个能使项目管理人员对资源、成本和进度做出
合理估算的框架。这些估算应在软件项目开始时的一段有限时间内作出,并随着项目的进展进行更新。
2 软件项目的估算
软件项目管理过程开始于项目的计划,在做项目计划时,第一项活动是估算。现在已经使用的使用技
术是时间和工作量的估算。由于估算是其他项目计划活动的基石,并且项目计划又未软件工程过程提供了
工作方向,所以我们不能没有计划就着手开发,否则就会陷入盲目性。
估算自身带有风险,估算资源、成本和项目进度时需要经验、有用的历史信息、足够的定量数据和作
定量度量的勇气。估算的精确限度受到多方面的影响。一方面,项目的复杂性对于增长软件计划的不拟定性
共 16 页 第 6 页
系统分析师(软件设计师计算机学科部分经典教材
影响很大,复杂性越高,估算的风险就越高。复杂性是相对度量的,他与项目参与人员的经验有关,比如
假如让搞 MIS 的项目组去搞操作系统设计显然增长了复杂性。另一方面,项目的规模对于估算的精确性和功效
的影响也比较大,由于随着软件规模的扩大,软件相同元素之间的互相依赖、互相影响也迅速增长,因而
估算时进行问题分解也会变得更加困难。尚有项目的结构化限度也影响项目估算的风险,这里的结构性是
指功能分解的简便性和解决信息的层次性,结构化限度提高,进行精确估算的能力就提高,相应风险将减
少。此外,历史信息的有效性也影响估算的风险,在对过去的项目进行这综合的软件度量之后,就可以借
用来比较准确地进行估算。影响估算的因素远不止这些,比如用户需求的频繁变更给估算带来非常大的影
响。
估算的依据是软件的范围,涉及功能,性能、限制、接口和可靠性。在估算开始之前,应对软件的功
能进行评价,并对其进行适当的细化以便提供更具体的细节。由于成本和进度的估算都与功能有关,因此
经常采用功能分解的办法。性能的考虑重要涉及解决和响应时间的需求。约束条件则标记外部硬件、可用
存储和其他现有系统对软件的限制。
此外软件项目计划还要完毕资源估算,涉及人力资源、硬件资源和软件资源。在考虑各种软件开发资
源时最重要的是人,必须考虑人员的技术水平、专业、人数以及在开发过程各阶段对各种人员的需要。硬
件资源作为一种工具投入。软件资源涉及各种帮助开发的软件工具,比如编程工具、管理工具、测试工具,
尚有操作系统和数据库等。
工作两估算是最普遍使用的技术。通过功能分解之后,可以估计出每一个项目任务的分解都需要花费若干人年,总计之后就知道软件项目总体工作量。下面就是一个示意性工作量估算表。
表格 1 某软件系统工作量估算表(单位:人日
任务
需求分析
设计
编码
测试
小计
用户定义
2
5
1
0.5
8.5
系统定义
2
5
1
0.5
8.5
广告预定
4
10
2
0.5
16.5
划版
5
20
10
0.5
35.5
制作和组版
3
5
3
1
12
总计
16
45
17
3
81
软件开发成本的估算
软件开发成本重要是指软件开发过程所花费的工作量及其相应的代价。它不同于其他物理产品的成本,
它重要涉及人的劳动的消耗,人的劳动的消耗所需的代价就是软件产品的开发成本。
开发成本的估算方法有很多种,象简朴的代码行技术,任务分解技术,自动估计成本技术,专家鉴定
技术,尚有参数方程法,标准值法,以及 COCOMO 模型法。其中 COCOMO (Constructive Cost Model模型
法是一种精确、易于使用的成本估算方法,该模型按其具体限度分为三级:基本 COCOMO 模型、中间COCOMO
模型和具体 COCOMO 模型
软件项目进度安排
软件项目的进度安排重要是考虑软件交付用户使用的这一段开发时间的安排。进度安排的准确限度可
能比成本估计的准确限度更重要。软件产品可以靠重新定价或者靠大量的销售来填补成本的增长,但进度
安排的落空会导致市场机会的丧失或者用户不满意,并且也会导致成本的增长。因此在考虑进度安排时要
把人员的工作量与花费的时间联系起来,合理分派工作量,运用进度安排的有效分析方法严密监视软件开
发的进展情况,以使得软件开发的进度不致被迟延。
在进行进度安排时要考虑的一个重要问题是任务的并行性问题。当参与项目的人数不止一人是软件开
发工作就会出现并行情况。由于并行任务是同时发生的所以进度计划表必须决定任务之间的从属关系,确
定各个任务的先后顺序和衔接,拟定各个任务完毕的连续时间。此外还应注意关键途径的任务,这样可以
拟定在进度安排中应保证的重点。常用的进度安排方法有两种,即甘特图(Gantt Chart法和工程网络法。
3.软件项目的组织
参与软件开发的人员如何组织起来,使他们发挥最大的工作效率,对成功地完毕软件项目极为重要。
组织结构
开发组织采用什么形式由软件项目的特点决定,同时也与参与人员的素质有关。通常有三种组织结构
模式:
1. 按课题组划分的模式:把开发人员按课题组成小组,小组成员自始至终承担课题的各项任务。该模
式合用于规模不大的项目,并且规定小组成员在各方面有技术专长。
2. 按职能划分的模式:把开发项目的软件人员按任务的工作阶段划分为若干工作小组。要开发的软
在每个专业小组完毕阶段加工后沿工序流水线向下传递。这种流水作业的方式使用于多项目并行的情况。
3. 矩阵形模型:这种模式是以上两种模式的复合。一方面按工作性质成立一些专门小组,另一方面每
一个项目都有它的经理人员负责。每一个软件开发人员属于某一个专门小组,有参与某一个项目的工作。
共 16 页 第 7 页
系统分析师(软件设计师计算机学科部分经典教材
该模式的优点有一方面参与专门组的成员可以在组内交流在各个项目中取得的经验,这更有助于发挥专业
人员的作用;另一方面,各个项目有专门的人员负责,有助于软件项目的完毕。这种模式比较适合于规模
比较大的项目。
组织结构的最后一层是程序设计小组的组织形式。通常认为程序设计工作是按独立的方式进行的,程
序人员独立地完毕任务。但这并不意味着互相之间没有联系。一般在人数比较少时成员之间的联系比较简
单,但随着人数的增长,互相之间的联系变得负责起来。小组内部人员的组织形式对对生产率有着十分重
要的影响。
常见的小组组织形式有三种,这三种形式可以灵活使用。
1. 主程序员制小组:相称于组长负责制,小组的核心由一位主程序员,此外配备两到三位技术员、一
位后援工程师组成。这种组织结构突出主程序员的领导,强调主程序员与其他技术人员的联系。
2. 民主制小组:在民主制小组中,碰到问题可以在成员之间平等地互换换意见,工作组目的的制定以及决定
的作出都由全体人员参与。这种组织形式强调发挥每个成员的积极性,并规定每个成员发挥积极精神和协作精神。
3. 层次式小组:在层次式小组中,组内人员分位三级:组长(项目负责人一人负责全组工作,他
接领导两到三名高级程序员,每位高级程序员通过基层小组,管理若干位程序员。这种结构比较适合于项
目自身就是层次结构的课题。
人员配备
合理地配备人员是成功地完毕软件项目的切实保证。所谓合理地配备人员应涉及按不同阶段适时运用
人员,恰当掌握用人标准。一般来说,软件项目不同阶段不同层次技术人员的参与情况是不同样的。下图
是典型的软件开发人员参与情况曲线。
在人力配备问题上,由于配置不妥,很容易导致人力资源的浪费,并延误工期。特别是采用恒定人员
配备方案时在项目的开始和最后都会出现人力过剩,而在中期又会出现人力局限性的情况。
4.软件项目的领导
5.软件项目的控制
对后面两个主题以后再讨论。其实本文所讨论的东西大多还没有涉及太多管理学方面的内容,但这方
面的确有许多值得研究的东西,由于时间关系不能进一步下去。姑且作为一个引子吧!
1.7 面向对象技术
1.7.1 面向对象的基本概念
面向对象(object-oriented,OO方法是以客观世界中的对象为中心,其分析和设计思想符合人们的
思维方式,分析和设计的结果与客观世界的实际比较接近,容易被人们所接受。下面列举几个面向对象设
计方法中的重要术语,它们构成面向对象的程序设计语言的核心。
◆对象(Object
对象是和有数据及可对这些数据施加的操作结合在一起所构成的独立单位的总称。一个对象通常可由对象
名、属性和操作三部分组成。
对象的划分鉴定标准:
1、 子对象之间独立性要高,即耦合度尽量达成最低,(抱负的情况是达成组件化的限度;
2、 子对象相对其他划分方法,更易于解决。所以对于复杂的大系统,一般都要通过多次的尝试,以尽量
能找到较优的划分方案。对于比较简朴的系统,E-R 转换也能的到较为满意的划分。
◆实例(Instance
共 16 页 第 8 页
系统分析师(软件设计师计算机学科部分经典教材
实例是由某个特定类所描述的一个对象。
◆类(Class
类是一组具有相同属性和相同操作的对象的集合。类是面向对象的程序设计语言提供的可再用软件成分。
◆方法(Method
对象所能执行的操作称为方法。方法是类中定义的函数,描述对象执行操作的算法。
◆消息(Message
消息是规定某个对象执行类中定义的某个操作的规格说明。一个消息通常涉及接受对象名、调用的操作名
和适当的参数(如有必要。
重要特点:
◆封装性
封装性是一种信息隐蔽技术,它使系统分析员可以清楚地标明他们所提供的服务界面,用户和应用程序员
则只看得见对象提供的操作功能(即封装面上的信息,看不到其中的数据或操作代码细节。
◆多态性
多态性是指同一个操作作用于不同的对象可以有不同的解释,产生不同的执行结果。
◆继承性
继承是指在某个类的层次关联中,不同的类共享属性和操作的一种机制。一个父类可以有多个子类。父类
描述了这些子类的公共属性和操作,子类中还可以定义其自己的属性和操作。假如一个子类只有唯一的一
个父类,这种继承称为单一继承。假如一个子类有多个父类,可以从多个父类中继承特性,这种继承称为
多重继承。
◆分布式对象 Distributed Object
在发布实行角度上看,对象可分为三种:本地对象,远地对象,虚拟对象。
本地对象 Local Object :指分布在同一个系统中的对象,互称为本地对象
远地对象 Remote Object :指分布在不同系统中的对象(同一个群体系统。
虚拟对象 Virtual Object :不同于本地和远地对象,虚拟对象不属于真实的对象,而是一个虚设的
类型。真正的操作不在虚拟对象自身,只是远地对象在本地的映射。
本地和远地对象是互相的关系。而虚拟对象只是一种映射,用于关联本地和远地对象,起到分布和负
载均衡的作用。
面向对象数据库技术:是面向对象技术和数据库技术的有机的结合,它有着关系数据库没有的优点。
面向对象数据库(OODB +关系数据库(RDB→对象-关系数据库(ORDB 面向对象的特性:类和继承性,对象及对象标记、封装性、信息/实现隐蔽、状态保持,消息,多态性,一
般性。
面向对象技术的出现正是填补了前述关系模型的固有局限性。
对象数据模型是有很强的描述复杂对象的能力,能包含更多的数据语义信息。
面向对象方法可很方便的表达嵌套对象,因而很容易表达层次数据,这点与 RDB 形成鲜明的对比,
RDB 逼迫用户用多个关系的元组表达层次数据。
面向对象方法可方便的构造各种类型、而 RDB 不提供增长用户定义数据类型的手段。
1.7.2 面向对象的分析方法
面向对象的系统分析设计,看起来其实也很简朴,环节大约如下:
(1 从项目开始,进行环节(2。
(2 对系统进行分析,假如它在一定的规定下可解决,则停止分析,进行设计;假如它在一定的规定下
不可解决,则对它进行划分。
(3 环节(2假如有分析结果,则对其中每一个子对象,进行环节(2。
边界条件(也即上面提到的“一定规定”,对象划分的原则:
子对象之间独立性要高,即耦合度尽量达成最低,(抱负的情况是达成组件化的限度; 子对象相对其他划分方法,更易于解决(如实现,维护等。
当前常见的面向对象的方法很多,下面简朴介绍三种:
Peter Coard 和 Edward Yourdon 的 OOA 和 OOD 方法
OOA(面向对象分析模型由 5 个层次和 5 个活动组成:
5 个层次:主题层、对象类层、结构层、属性层、服务层
5 个活动:标记对象类、标记结构、定义主题、定义属性、定义服务
在这种方法中定义两种对象类之间的结构:
分类结构——反映了一般与特殊的关系
组装结构——反映了对象之间整体与部分的关系
OOA 中的 5 个层次和 5 个活动继续贯穿在 OOD(面向对象设计过程中。OOD 模型由 4 个部分
,即:
问题域
人机交互
共 16 页 第 9 页
系统分析师(软件设计师计算机学科部分经典教材
任务管理
数据管理
Booth 的 OOD 方法
Booth 认为软件开发是一个螺旋上升的过程。在螺旋上升的每个周期中,有 4 个环节:
标记类和对象
拟定它们的含义
标记它们之间的关系
说明每一个类的界面和实现
OMT 方法
OMT(对象建模技术定义了 3 种模型:
对象模型
描述系统中对象的静态结构、对象之间的关系、对象的属性、对象的操作。它为动态模型和功能模型提供了基本的框架。用对象图表达。
动态模型:
描述与时间和操作顺序有关的系统特性——激发事件、事件序列、拟定事件先后关系的状态以及事件和状态的组织。用状态图表达。
功能模型:
描述与值的变换有关的系统特性——功能、映射、约束和函数依赖。用数据流图表达。
OMT 方法有 4 个环节
分析:这是 OMT 方法的第一步,其目的是建立可理解的现实世界模型。
系统设计:拟定整个系统的体系结构,形成求解问题和建立解答的高层次策略。
对象设计:在分析的基础上,对象设计阶段建立基于分析模型的设计模型,考虑实现的细节。
实现:将对象设计阶段开发的对象类及其关系转换成特定的程序设计语言、数据库或硬件的实现。
1.7.3 面向对象设计方法
面向对象的类设计相关原则:
1. 开闭原则(the Open Closed Principle OCP
一个模块在扩展性方面应当是开放的而在更改性方面应当是封闭的。因此在进行面向对象设计时要尽
量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法,是软件工程设计
方法的重要原则之一。
2. 替换原则 (the Liskov Substitution Principle LSP 子类应当可以替换父类并出现在父类可以出现的任何地方。这个原则是 Liskov 于 1987 年提出的设计
原则。它同样可以从 Bertrand Meyer 的 DBC (Design by Contract 的概念推出。
3. 依赖原则 (the Dependency Inversion Principle DIP 在进行业务设计时,与特定业务有关的依赖关系应当尽量依赖接口和抽象类,而不是依赖于具体类。
具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。
为此,我们在进行业务设计时,应尽量在接口或抽象类中定义业务方法的原型,并通过具体的实现类(子类来实现该业务方法,业务方法内容的修改将不会影响到运营时业务方法的调用。
4. 接口分离原则(the Interface Segregation Principle ISP
采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。
ISP 原则是此外一个支持诸如 COM 等组件化的使能技术。缺少 ISP,组件、类的可用性和移植性将大打
折扣。
这个原则的本质相称简朴。假如你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。
例题:
国家标准《计算机软件产品开发文献编制指南 GB8567-88》中规定,在一项软件开发过程中,
展开阅读全文