BLOG

Josh's Blog

《软件开发工具》

发布于 # 应试

第1章 绪论

软件产品的质量、效率、价格已成为各方关注的十分重要的问题。

1.1 软件开发工具的由来

针对以上问题,20世纪80年代以来,一些专门用于支持软件开发的软件开发工具陆续问世,从而进入专用的软件开发工具的阶段。如以下几类:

缺点:

但是集成的软件开发环境的研发并没有因此停滞,例如Rational公司推出了Objectory,Rose等集成的软件开发工具

1.2 软件开发工具的概念

软件开发工具的概念要点:

  1. 它是在**高级程序设计语言(第三代语言)**之后,软件技术进一步发展的产物
  2. 它的目的是在人们开发软件中给予各种不同方面、不同程度的支持或帮助
  3. 它支持软件开发的全过程,而不是仅限于编码或其他稳定的工作阶段

在理解这个概念时,应同时认识软件开发工具的继承性创新性。它的基本思想仍是致力于软件开发的高效优质

  1. 硬件(Hardware)是躯体,软件(Software)是灵魂,二者缺一不可。软件一端连着计算机硬件,向硬件提供可以执行的机器指令,另一端面向用户
  2. 软件是用户与硬件之间的桥梁
  3. 软件实际上是人类知识与经验的结晶。所谓事先编好的指令,正是人们在实践中形成的工作规范与步骤
  4. 当人们把程序编制出来时,已经为这些经验或理论知识找到了一种新的载体

软件开发过程的实质: 知识的提炼、表述、固化

软件开发新特点:

  1. 自动化程度的提高
  2. 这一阶段的工作明确地把需求分析架构设计包括在软件工作的范围之内
  3. 把软件开发工作延伸到项目及版本管理,从而超出了一次编程的局限
  4. 在这一阶段的研究中,吸收了许多管理科学的内容与方法。在这方面卡内基·梅隆大学的软件工程研究所提出的能力成熟度模型(Capacity Morality Model-CMM)具有重要的意义

总之,软件开发工具的提出与使用,是软件技术发展的一个新的阶段。

与软件开发工具的概念术语有很多,如:

CASE工具有两种理解。一种是计算机辅助软件工程(Computer Aided Software Engineering),另一种则是计算机辅助系统工程(Computer Aided System Engineering)

无论按哪种理解, 它的基本思想与软件开发工具是完全一致的,即应用计算机自身处理信息的巨大能力,帮助人们开发复杂的软件或应用系统

1.3 软件开发工具的功能与性能

1. 软件开发的过程

第一阶段 - 需求分析:

软件开发工作首要的任务是根据这种初始要求形成严格的、明确的、可供实际开发使用的功能说明书。

软件设计者需要从初始要求出发、经过大量的调查研究工作,抽象出应用领域中的实际的信息需求,设计出计算机系统内外的、合理的信息流程,并规定出软件系统的功能与性能要求。

这些调查分析的成果集中体现在第一个重要文档—软件功能说明书

第二阶段 - 总体设计

软件的结构设计、公用的数据文件或数据库的设计、各部分的连接方式及信息交换的标准

总体设计的成果是系统的总体设计文件及各个模块的设计任务书。总体设计文件应包括结构图、模块清单、公用数据结构

第三阶段 - 实现阶段(Coding):程序的编写与文档的编写是两件并行的工作

第四阶段 - 测试或调试阶段:其中包括模块的调试与整个软件的联调两个部分

2. 软件开发工具的功能要求

    1. 认识与描述客观系统: 主要用于需求分析阶段
    2. 存储及管理开发过程中的信息
    3. 代码的编写或生成
    4. 文档的编制或生成
    5. 软件项目的管理: 这方面的功能更明确地是为项目管理人员提供支持, 项目管理包括进度管理、资源与费用管理、质量管理三个基本内容

3. 软件开发工具的性能

对于软件开发工具来说以下五项应是特别重要的:

  1. 表达能力或描述能力
  2. 保持信息一致性的能力
  3. 使用的方便程度
  4. 工具的可靠程度: 即在各种各样的干扰下仍能保持正常工作,而不导致丢失或弄错信息
  5. 对硬件和软件环境的要求: 一般来说, 软件开发工具对环境的要求不应当超出它所支持的应用软件的环境要求, 有时甚至还应当低于应用软件的环境要求

1.4 软件开发工具的类别

1. 按工作阶段划分

可以把软件开发工具分为三类:计划工具(出现最晚)、分析工具、设计工具(出现最早)

各种代码生成器、一般所说的第四代语言及帮助人们进行测试的工具,都属于设计工具

分析工具主要指用于支持需求分析的工具,如帮助人们编写数据字典的、专用的数据字典管理系统工具-FLOW,帮助人们画系统结构图或E-R图的工具等。保持信息的一致性,在这类工具中具有十分重要的地位

计划工具则是完全为项目主管人员服务的

2. 按集成程度划分

专用的、面对某一工作阶段或某一工作任务的工具,以及集成化的、面对软件开发的全过程的工具

集成化的软件开发工具也常常被称为软件工作环境(是指支持全过程、全阶段的软件开发工具)。

3. 按与硬件、软件的关系划分

有点软件开发工具依赖于特定的计算机或特定的软件(如某种数据库管理系统),有的则是独立于硬件与其他软件的。

设计工具多是依赖于特定软件的

分析工具与计划工具往往是独立于机器与软件的

集成化的软件开发工具又常常是依赖于机器与软件的

1.5 软件开发工具的研究与使用

软件开发工具的使用者:

  1. 从计算机专业出身的技术人员
  2. 来自各个应用领域,他们出身于计算机以外的各个专业领域,如会计、金融、工程、企业管理等

第2章 软件开发过程及其组织

软件危机源于客观世界,大系统的复杂性,规模越来越大

如何克服软件危机: 1. 结构化程序设计方法 2. 软件工程方法 3. 面向对象的程序设计方法 4.即插即用的程序设计方法 5.面向开源软件和互联网平台的程序设计

两个领域的问题需要特别注意: 1.软件质量的评价与改善问题 2.项目组管理的任务与方法。这两者与软件开发工作也是有直接联系的

2.1 软件开发的困难

软件的复杂性超出了人类的处理能力

1. 软件开发的基本问题

两个转换没有顺利地通过。首先是从用户的理解到程序员的理解,其次是从程序员的理解到程序的理解

img

  1. 第一个转换是用户对软件功能的理解与程序员对软件功能的理解之间的转换
    1. 程序员必须花相当的时间尽可能地了解与熟悉应用领域, 并且正确地理解用户工作中的信息需求和信息流程
    2. 保证这一顺利完成的手段就是利用尽可能的标准化的方法编写程序设计任务书, 用明确的语言或图形、表格,把程序要处理的信息的内容、格式、来源、去向、存储与处理清楚地表达出来,作为双方共同的理解
  2. 第二个转换所要解决的是人和机器之间的交流与协调问题, 这个转换关键在于程序员的知识水平和实际经验

2. 大型软件开发中的困难

  1. 一致性的保持称为十分困难的问题

  2. 测试的困难大大增加

    1. 水波效应: 人们修改程序的某一处时, 由于没有充分考虑这一修改对相关部分带来的影响, 结果出现了新的错误
    2. 每个程序员只了解自己的一部分, 无法全面地预测自己的任何改动对其他部分的影响, 而项目负责人也不可能深入每一个细节中, 只能采用所谓的”黑箱”检验方法。这种检验只能证明程序有错而不能证明程序无错
  3. 工作进度难以控制

    1. 单个程序员常常过低估计工作难度而拖延进度
    2. 对整个系统进行联调, 联调后发现问题回到程序员手中的修改, 反复多少次是无法事前判断的
  4. 文档与代码的协调十分困难

  5. 我们所说的文档包括: 功能说明书总体设计、各模块的设计任务书、每个部分的研制报告测试报告、直到最终的验收报告和给使用者的用户手册

  6. 代码与文档必须一致,否则文档不仅没有用处,反而会造成混乱

  7. 版本更新带来的困难

  8. 版本更新的大量工作往往在于审核与回顾,包括对代码文档两个方面的认真检查

3. 困难产生的原因

  1. 这些困难来自大系统的复杂
  2. 许多具有主动性的个人之间的组织与协调带来大量的困难
  3. 各个应用领域之间的差别导致困难的加重
  4. 时间的因素,变化的因素给软件开发工作带来许多困难

2.2 软件开发方法的发展

大型软件开发过程的各种角色:

1. 结构化程序设计方法

好的程序结构的各种看法:

程序的结构分解成三种基本模块(避免“水波效应”):

模块的划分应当符合以下三条基本的要求:

  1. 凝聚性强:模块的功能在逻辑上尽可能地单一化、明确化,最好做到一一对应
  2. 低耦合:模块之间的联系及互相影响尽可能的少,尽量避免逻辑耦合,而仅限于数据耦合
  3. 模块的规模应当足够小,以便使它本身的调试易于进行

结构化程序设计的实施要点:

  1. 限制甚至不用GOTO语句,绝对禁止超越模块边界的GOTO语句
  2. 子程序(也叫方法或函数)尽可能做到只有一个入口和出口
  3. 程序风格应尽量明确、清晰,包括适当增加注释
  4. 在程序编写的同时完成有关的文档编撰,不要拖延时间

结构程序设计的方法是为程序员服务的,而对于项目负责人来说,则较少涉及他所关心的问题。对于这种方法的批评意见是增大了程序工作量,增加了编程中的麻烦与繁琐的工作,并且降低了程序的运行效率。

为了保证软件的可靠、准确与易于修改,这种代价是值得的

2. 软件工程方法

根据经典的辞书《简明不列颠百科全书》,工程指的是“应用科学知识使自然资源最佳地为人类服务的一种专门技术”。工程的观点是和近代、现代的大生产联系在一起的,它是和依靠个人技艺的手工的生产方式相对立的

软件工程的思想和方法:

  1. 把软件的质量寄托于各个程序员的技能与认真负责是不牢靠的、危险的、不现实的
  2. 要想从根本上提高软件开发的效率和质量,就应当吸取人们在各种传统产业中的成功经验
  3. 从组织和管理的角度加强力量
  4. 使软件生产从程序员的个人劳动提高到有组织的、可控制的工程

软件工程从传统产业中吸取的经验:

  1. 它们在多年实践的基础上,对于这项工作的步骤做出了严格的规定
  2. 顺序绝对不能颠倒
  3. 每一个阶段都有各自的明确的任务
  4. 在质量、表达方式等方面要有统一
  5. 它们作为有关各方沟通与交流的手段,使参加工作的不同职务、不同角色的人们成为一个整体,共同地完成一项大的工程任务

IBM提出的AD/Cycle中,对于应用软件的开发过程作了如下的划分和规定:

第一阶段:需求分析

第二阶段:分析与设计阶段

第三阶段:编程阶段

第四阶段:测试阶段

第五阶段:使用及维护阶段

在标准化方面(如著名的ISO 9001标准等),人们主要从2个方面去探索:

  1. 表达方式的标准化
  2. 对工作的质量及检查制定标准

软件工程的思想主要集中于加强项目管理者的工作上,对于程序员关系不大,这点与结构化程序设计方法正好互相补充。

3. 面向对象的程序设计方法

面向对象的程序设计(Object Oriented Programming—OOP)

“面向对象”(Object Oriented)这个用于有多种不同的翻译方法,如“面向客体”、“面向目标”、“物件导向”

“Object”的由来:把信息的静态属性(数据结构)和对它的处理(功能模块)从根本上结合起来,数据库(数据结构)和功能的矛盾和冲突就迎刃而解了

20世纪70年代,Smalltalk语言的出现 ,使人们对这种思想的作用刮目相看。这种与众不同的语言把一切事物都看做Object,仅用三个最基本的语句(new,send,get)来表明对象的生成、送出消息、得到消息,而把一切动作都作为对象接到信息的反应,通过一套巧妙的递归嵌套,可以发展出任意的、复杂的结构。当C语言接受了这种思想后,发展出C++后,面向对象的思想成为普遍的潮流

面向对象的程序设计的基本思想:

  1. 客观世界的任何事物都是对象,它们都有一些静态属性(相当于数据结构),也都有一些相关的操作(相当于程序模块或方法)。作为一个整体,对象对外不必公开这些属性与操作。这就是所谓的“封装性”(Encapsulation)
  2. 对象之间有抽象与具体
  3. 抽象的、较大的对象所具有的性质,包括静态属性和动态操作,自然地成为它的子类的性质,不必加以说明或规定。这就是所谓的“遗传”(Inheritance)
  4. 对象之间可以互送消息(Message)。这消息可以是传送有一个参数

面向对象的程序设计之所以能产生巨大的影响,其根本原因在于它提供了认识框架。也正因为这样,认识框架迅速地散步到程序设计语言的范围之外,以至出现了面向对象的系统分析(OOA),面向对象的系统设计(OOD)面向对象的数据库管理系统(ODBMS)

4. 即插即用的程序设计方法

与即插即用紧密相关的还有组件程序设计(Component Programming),组合文件(Compound Document),宏观程序设计(Macro Programming)等,这是在面向对象的程序设计方法的基础上提出来的

一部分人专门生产软件组件(相当于芯片),而另一部分人构造整个软件的结构(相当于计算机结构),并且把软件组件插入这个结构,以便迅速地完成大型软件的研制工作。这就是即插即用的意思

实现的困难:

  1. 标准化的问题十分困难
  2. 软件部件的提供方式
  3. 存在多种硬件、多种操作系统

一些软件公司或机构在这方面作了不少探索,并已经在标准化方面提出了方案,如注明的CORBA(Common Object Request Broker Architeeture),就是一种公用的对象需求的转换结构,还有COM101(Common Object Model 101)等

5. 面向开源软件的程序设计方法

随着开源软件(Open Source)的出现和发展,利用开源软件进行程序设计,已经成为越来越普遍的方法。对于开源软件,社会上和学术界有不同的看法。支持者认为这实现了软件的重用,能够大大提高软件生产的效率,是一种革命性的进步

在一些应用面广,流程比较清晰,比较规范的应用领域,开源代码的重用是比较有把握的。

使用开源代码并不一定会减轻工作量。实际上这对于软件开发人员,特别是项目负责人或软件系统的架构师来说,要求更高、更难。

2.3 软件开发过程的管理

一般来说,项目管理的要素是进度、质量、费用(开支)、资源利用。对于软件开发来说,核心是质量问题

1. 什么样的软件才是好的软件?

  1. 正确地实现所要求的功能,准确地给出预定的输出结果
  2. 用户界面友好,符合实际用户的使用习惯于知识能力
  3. 具有足够的速度(而不是越快越好),能在符合用户要求的时间额度内,给出所要求的处理结果
  4. 具有足够的可靠性,能够在各种干扰下保持正常的工作
  5. 程序易读结构良好文档齐全,从而保证系统易于修改

2. 好的程序员与好的项目组

就单个程序员来说,主要的指标包括以下几个方面:

  1. 具有程序设计所需要的基本知识与技能,如关于数理逻辑的知识与训练,关于各类数据结构的概念及处理方法等
  2. 对本项目所在的领域有较深入的了解,从而能够准确地理解用户的信息需求,正确地把握有关的信息流程与信息处理原则
  3. 对于软件开发的技术环境比较熟悉,包括硬件设备、软件环境和网络环境。特别是对于所用的语言,应当有足够的、实际运用的经验

就规模超出单个程序员的工作量的大型软件来说:

  1. 保证严格地在本模块范围内操作,绝不使用可能干扰其他模块的命令或函数
  2. 严格按总体设计的要求和理解去传递参数值,绝不随意修改其内容或含义
  3. 在对公用的文件数据库进行存取时,必须完全地、准确地统一规定的格式去操作,决不能擅自改变
  4. 在使用标识符时,应按照统一的原则,尽量使用易于看出逻辑含义的名称。
  5. 严格按照统一的要求编写文档,在内容、格式、表达方式、符号使用上遵循项目组的统一规定
  6. 尽量保持程序风格的统一,如注释行的安排,行末空格的使用等。

3. 怎样建立一个好的项目组?

根据CMM模型及其他一些材料,一个好的项目组至少具备以下几个条件:

  1. 有严格的、成文的工作规范和文档标准,而且应当为全体成员所熟知,并且切实得到遵守
  2. 人员之间有严格的分工,除了程序员之外,必须有专门的秘书(负责文档的收集、审核及保管)
  3. 每个项目都要事先制定详细的时间表,并且得到严格执行。每一项目完成之后都有完整的资料,并得到妥善保存

第3章 软件开发工具的理论基础

软件开发工具的目的十分明确,就是从信息管理信息处理方面,给软件开发人员提供支持与帮助

本章重点阐述概念模式、信息库(或称为中心库)、人机界面以及项目管理

3.1 软件开发过程的信息需求

软件开发过程的信息

  1. 有关系统环境现状及需求的信息。此类信息由用户提出
  2. 有关软件的功能设计物理设计的各种信息。这类信息是由分析人员(或设计人员)根据需求分析而形成的,它体现为设计方案
  3. 软件成果本身,包括程序文档程序代码必然是在计算机内的,文档也常常以联机方式提供
  4. 用户对系统的各种变更要求,以及系统的各种变更的记录。而这类信息是跨软件开发周期的

围绕以上四类信息,涉及的信息管理工作有以下几方面:

  1. 许多信息需要长期保存,因为它们并非只用一次,而是需要不断更新,不断被调用
  2. 在许多环节上都要进行数据的转换加工
  3. 大量的人与人之间的信息交流

软件开发工具正是为上述四类信息的合理存储正确转化顺畅流通提供帮助

软件开发工具用到的比较重要的理论和方法:

  1. **认知科学(Cognitive Science)中关于概念模式(Conceptual Model)**的概念与方法
  2. 数据库技术的理论与方法
  3. 编译技术的有关方法
  4. 关于人机界面的理论与方法
  5. 管理科学中关于项目管理与版本管理的理论与方法
  6. 系统科学与系统工程中的有关理论与方法

3.2 概念模式及其作用

Conceptual Model概念模式 ,也译为概念模型。它指人们在认识事物过程中,对于某一事物或某一系统形成的、抽象的、一般化的框架。这种概念模式具有主观性

概念模式是人们认识客观世界的一种方法,一种工具

概念模式是人们在长期的实践活动中逐渐形成的

img

从上图中可以看出概念模式总是在一定理论、思想指导之下形成的,同时又不断地根据实际情况修正

概念模式在认识中的作用十分重要,同时作为交流表达工具也是十分重要的

如何评价概念模式:

概念模式的意义决定了它的相对性,即面对各种不同的用途,必然会有不同的形式的概念模式。一般来说,它们是各有各的用处,不能互相代替,也无法一般地说哪个更好或更有利。对于有一定的应用领域而言,如果有多种概念模式,则可以从它的表达能力,是否方便易用,是否严格,有没有二义性(容易引起误解)等方面进行评价和比较

作为表达与交流的工具,必须简单明了、易于理解

正确理解、掌握和运用概念模式,是做好软件开发工作的基础,也是掌握和运用软件开发工具的基础

常见的概念模式有以下:

  1. 框图(Flow Chart)
    1. 框图是人们编写软件时用的最早的一种概念模式,用来描述程序执行的逻辑过程。
    2. 当软件规模不太大时,它比较适用

img

  1. 结构图(Structure Chart)又叫模块结构图

  2. 它的观点是,程序的调用方式有三种: 顺序调用、选择调用、循环调用

  3. 数据流程图(Data Flow Diagram)

    1. 简称DFD
    2. 面对的是一个系统的信息流程
    3. 它更多地用于描述某一业务处理系统的信息来源存储处理去向的全面情况
    4. 基本思想是把信息流看成一个组织或系统运作的线索,力图简明扼要地勾画出全局
    5. 和结构图相比,它更适用于客观描述
  4. 实体关系图(Entity-Relationship Diagram)

    1. 简称E-R图
    2. 用于描述静态数据结构的概念模式
    3. 它以实体关系属性三个基本概念概括数据的基本结构
    4. 广泛应用于数据库的设计中
  5. **数据字典(**Data Dictionary)

    1. 简称DD
    2. 描述数据内容的概念模式
  6. 时序网络(Petri Net)

    1. 它主要描述系统状态及其转换方式
    2. 常用于一些实时控制方面的软件的功能描述
  7. 数学与逻辑模型

    1. 作为逻辑模型的表达方式,决策树决策表也是经常使用的
  8. 计算机模拟模型

    1. 计算机模拟是一种强有力的概念模式
    2. 利用计算机大量、高速处理信息的能力,在计算机内设置一定的环境(如资源条件等),又以程序来实现客观系统中的某些规律或规则,在二者基础上,计算机就可以高速运行,以便人们观察与预测客观系统的状况 软件开发的质量与效率可以由此得到很大的提高。在此基础上,软件开发工具进一步用计算机来帮助人们使用和实现这些概念模式,使软件开发工作提高一步

3.3 信息库及其一致性

信息库(Repository)译法不统一,有的专家译为中心库、总库、主库等。实际上,从它原义来说,无非就是数据库。但他不同于Database或Data Warehouse

Database是在文件系统基础上发展起来的一种数据管理技术,它的重点在于合理地组织数据,体现出数据之间的逻辑关系,并尽可能地帮助用户检索,减少冗余。

数据仓库(Data Warehouse)是近年来针对大批数据的分析利用而提出来的概念。它的基本思想是:现实中的大量原始数据与实际的应用是有相当距离的,为了能够切实为企业管理者提出对管理真正有用的信息,就要对信息或数据进行多次的加工或提炼,从而得出许多派生的或综合的数据

信息库的特点:信息库是一个包罗万象的,随着项目进度不断修改与补充的数据集合。作为软件开发全过程的信息管理总枢纽,它的数据结构是相当复杂的,而且会随着时间不断变化,因此保持一致性的任务变得十分复杂和艰巨。

信息库的研究主要在以下方面:

  1. 信息库的内容应当包括哪些方面
    1. 所述软件的工作环境、功能需求、性能要求、有关的各种信息来源的状况、用户状况、硬件环境以及在该专业领域中的作用等外部信息 2. 需求分析阶段中收集的有关用户的各种信息,包括用户本身提供的 3. 逻辑设计阶段的各种调查材料和由此生成的各种文档,包括调查记录 、原始数据、报表及单证的样本、绘制的各种图以及最后生成的系统说明书 4. 编程阶段的所有成果,包括程序代码框图变量说明测试情况(测试数据及输出结果)、验收报告使用说明等。 5. 运行及使用情况的详细记录 6. 维护及修改的情况 7. 项目管理的有关信息、人员变更、资金投入、进度计划及实施情况。还包括版本信息
  2. 信息库应当具备哪些管理功能
    1. 需要把计算机内外的信息存储统一起来管理
    2. 信息库面对 分析人员、程序员和维护人员(一般不直接面对用户)等不同的对象,由于他们各有各的权限和使用目标,所以除了规定复杂的内部结构以存放信息外,还需要认真设计有关的界面
  3. 如何保持一致性
    1. 由于软件环境、需求以及它本身都在不断变化,信息库中的信息需要不断更新
    2. 这里说的更新与一般的更新不同,信息库中的内容一般不删除,当有新的信息需要存入时,旧的信息只是加上时间标志移入历史信息中去,并且它还与新的信息保持着历史的、逻辑的联系
    3. 一个模块的更新往往带来其他模块的相应变更,并不是一个模块更新后就能够自然而然地与其他模块一起构成一个新的版本
    4. 对于一些国际性的大软件公司来说,各种语言的资料之间 的一致性同样需要认真的、细致的组织与安排

因保持信息库的一致性,是信息库研究中的核心问题

3.4 人机界面及其管理

《用户界面程序设计—原理与实例》。这本书讨论了一系列原则

关于用户界面的基本原则, 该书列举了以下几个方面:

  1. 用户界面的主要功能是通信
  2. 用户界面必须始终一致
  3. 用户界面必须使用户随时掌握任务的进展状况
  4. 用户界面必须能提供帮助
  5. 宁可让程序多干,不可让用户多干

该书还特别讨论了在人机界面设计中经常遇到的一个困难的权衡:灵活性一致性的矛盾

IBM的AD/Cycle提供了应用系统及其开发过程中的一个总框架,其应用系统框架为系统应用体系结构(Systems Application Architecture——SAA)

SAA包括三个方向的接口:程序员接口(CPI)、通信接口(CCS)、用户接口(CUA)

人机交互的手段可归结于8个方面:键盘操作、屏幕滚动、菜单选择、帮助系统、鼠标操作、色彩应用、数据录入、信息显示

由于技术的发展,这个归纳已经不能说是完全的了

3.5 项目管理与版本管理

项目管理

项目管理是指与固定的生产线上的日常生产管理不同的,具有更大的变动性,时间性的另一类挂你任务。

项目管理具有以下四个突出的特点:

  1. 子任务,关系复杂
  2. 任务不可重复,形式不断变更
  3. 协调组织**的任务十分突出,资源浪费闲置的风险与合理地优化组合、提高效益的机会并存
  4. 信息处理工作的作用与意义更为突出

进度质量对于软件开发来说,是最关键的问题

但是,软件开发工作还有自己的不同于一般项目管理的特点。一般工程项目没有版本更新的问题

项目管理的基本目标

  1. 使产品(或工程)的质量得到有效的控制
  2. 保证整个系统按预定的进度完成
  3. 有效地利用各种资源,尽可能使资源的闲置与浪费减少
  4. 控制与降低成本

项目管理中的方法

  1. 工程计划网络方法(计划评审技术)
  2. 甘特图(Gantt Chart)
  3. 检查点方法(Check Point)
  4. 排队论等

版本管理

版本管理的核心是保证两个一致性。从时间上说,它的主要关心点是系统的逐步完善,以前达到的成果不要丢失

每一步新的进步都要切实与以前的工作一致,是改进而不是破坏或降低系统的已有功能

一局部与整体保持一致,合理地判断每一次修改的必要性及影响范围

版本管理的具体方法

  1. 规定长远的版本更新计划
  2. 制定版本有关的信息范围及收集、管理方法
  3. 在项目组内明确分工
  4. 在程序编写、测试、文档缩写等工作中贯穿项目管理的思想及要求

用户的反馈信息是项目管理与版本管理的重要资源。因此在信息库的组织、项目管理或版本管理中,都要有其对应的位置

第4章 软件开发工具的技术要素

由于软件开发工具一般都较为复杂、复杂,所以它的功能设计总体结构是必须首先认真考虑的

4.1 基本功能与一般结构

基本功能

软件开发工具的基本功能:

  1. 提供描述软件状况及其开发过程的概念模式,以协助软件开发人员认识软件工作的环境与要求,合理地组织与管理软件开发的工作过程。
  2. 提供存储和管理有关信息的机制与手段。简单地说,就是提供一个信息库和一个人机界面
  3. 帮助使用者编制、生成及修改各种文档。(实现需信息库的支持)
  4. 帮助使用者编写程序代码,即一般常说的代码生成
  5. 对于历史信息进行跨生命周期的管理,把项目进度版本更新的有关信息科学地管理**起来

完整的、一体化的软件开发工具应当具备以上这些功能

一般结构

总控人机界面处于一般结构中的中间位置,它是使用者和软件开发工具之间交流信息,实现所有的支持功能的桥梁。总控与人机界面的中心位置是不言而喻的、顺理成章的。

系统中的另一个重要部分是信息库及其管理。信息库的结构框架反映了人们对软件产品及软件开发过程的基本看法,信息库内容的丰富程度是软件开发工具的功能与作用的最基本的依据。如果说总控和人机界面使用户面对一个良好的工作环境的话,那么在这个环境中,工作的范围及深度取决于信息库的功能和内容

除了直接通过人机对话提供查询之外,最重要的两个信息就是代码生成文档生成

一般结构中没有反映出来的另一个技术要素项目管理版本管理

如果要实现跨越开发周期的信息共享、知识重用以及软件重用,那么它的信息管理功能就必须大大加强

4.2 总控与人机界面

作为一个完整的、一体化的软件开发工具,总控和人机界面处于中心的位置

解决软件配置或集成(Software Configuration)的问题的实质: 设立一个有效的总控,它能够在各个具体工具之上、实现信息的正确传递与转换,帮助人们完成协调与配合的工作,从而形成一个统一的、完整的支撑环境,并通过一个统一的、友好的人机界面与用户对话

总控和人机界面的技术要点面向使用者保证信息的准确传递保证系统的开放性(或灵活性)

AD/Cycle是IBM根据多年软件开发的经验形成的对于软件开发过程的抽象理解,将软件开发过程的每一个周期分为五个阶段

  1. 需求分析阶段

    1. 任务是建立逻辑模型
    2. 首先建立起软件所处领域或环境的模型
    3. 其次建立软件所要处理的信息的静态模型,即数据模型
    4. 最后建立信息流通的模型,即信息的来源、去向、存储及处理的逻辑过程
  2. 分析设计阶段

    1. 包括数据结构的详细设计、处理过程的详细设计、子系统或模块的划分以及它们之间相互联系的具体规定
    2. 还应当完成屏幕设计、报表设计、数据库的物理设计
  3. 编码阶段

    1. 编码阶段指具体地编写软件的阶段,这里是实际的程序代码的产生点
  4. 测试阶段

    测试阶段指是对已经完成的各个模块或子系统进行测试、调整,以便最终形成完整的软件。这就需要准备测试数据,收集与分析测试结果

  5. 维护阶段 维护阶段主要是组织管理软件的日常运行,收集运行中的状态信息及出现的问题,并及时进行局部的修改与完善

    所谓面向用户,最根本的是要立足于符合实际的应用领域,符合软件开发人员思路的概念模型

软件开发的技术原则:

  1. 面向用户原则,具体体现在两方面:

    1. 总控对各部分的调度与安排应当符合上述模式
    2. 向用户提供的统一界面应当体现这个模式
  2. 保证各部分之间信息的准确传递。信息能否准确地从一个部分传送到另一个部分,就成为一体化是否成功的关键

  3. 保证系统的开放型或灵活性

以上三项原则当然是对整个软件开发工具而言的,但是它们的实现,主要体现在总控人机界面这个中心环节中

4.3 信息库及其管理

信息库(Repository)是软件开发工具的基础。合理地组织信息库的内容,加强信息库的管理内容,是软件开发工具的又一个重要的技术要素。

信息库的技术要素

  1. 信息库的内容

  2. 信息库的组织方式

  3. 信息库的管理功能

  4. 历史信息的处理方法

1. 信息库的内容

  1. 关于软件应用的领域与环境的状况。主要用于分析设计阶段

  2. 设计成果,包括逻辑设计与物理设计的成果。主要包括数据流程图、数据字典、系统结构图、数据库的逻辑设计、各模块的设计要求,以及由此形成的设计文档。主要是为了组织实际编码工作

  3. 运行状况的记录。包括 运行运行效率、作用、用户反映、故障情况、故障的原因及处理情况

  4. 有关项目管理与版本管理的信息。这属于跨生命周期的信息

2. 信息库的组织方式

人们最初的思路是集中存储,集中存储的思想是建立一个庞大的数据库,把上述各种信息都存放在这个数据库中,而各种工具或实现各项单项功能的模块则围绕在这个信息库的周围,对这个信息进行录入、修改、查询、删除。这种想法比较自然,而且充分利用已有的数据库技术,比较容易保持一致性。但是,它的缺点与前面所要求的模块化相冲突

于是就有分散存储的想法出现,即把信息分别存入不同的数据库,由不同的功能模块来处理。这种方法的优点易于变更和剪裁,一旦某一部分发生变更,不影响整个系统。但是各部分之间的一致性无从保证。针对这个问题,专家提出了第三种思路:逻辑上统一,物理上分散,设立统一的信息库管理模块来进行管理。它通过信息库管理模块来对分散的各个数据库进行存取,并进行一致性的检查与维护。这样一来,数据库与模块都实现了模块化,既保持了一致性,又保证了灵活性

img

3. 信息库的管理功能

图4-1中粗略地画出了三项,录入更新、使用查询、一致性维护。其中许多功能是数据库管理系统所具备的

与一般数据库管理系统不同的有:

  1. 信息之间逻辑联系的识别与记录
  2. 如何实现定量信息与文字信息的协调一致

4. 历史信息的处理方法

如何处理历史信息是信息库的一个困难问题

实际操作中出现2个具体的困难:

  1. 历史信息的数量太大,占用存储设备过多
    1. 解决方法:一般采用脱机备份的方法解决
  2. 历史信息格式不一致,难以有效地利用
    1. 解决方法:加强标准化,稳定数据结构
    2. 这需要应用一些智能方法,使得跨越生命周期的信息得以相互转化、实现共享与重用

4.4 文档生成与代码生成

除了通过屏幕上的对话获取信息支持之外,使用者从软件开发工具得到的最主要的帮助,应当来自文档生成与代码生成两种方式

1. 代码生成(Code Generator)

代码生成器的基本任务是根据设计要求,自动地或者半自动地产生响应的某种语言的程序

输出程序代码是这个模块的目标,输出的代码有两种情况

  1. 某种高级程序设计语言的代码
    1. 优点:使用者可以在这基础上进一步修改加工,即利用自动生成模块作为一个原型,然后在此基础上形成自己所要求的系统(或系统的一部分)
    2. 缺点:功能比较死,效率不高,因此还需要修改
  2. 某种机器(包括硬件和操作系统)环境下可运行的机器指令
    1. 优点:可以直接运行,从而立即检查是否符合要求

原则:程序设计归根到底只要由人来做的,任何工具都只能发挥帮助和支持的作用,而不能完全代替人来工作

生成代码时依据的是三个方面的资料:

  1. 信息库里已有的有关资料
  2. 代码生成器还要利用各种标准模块的框架和构件
  3. 使用者通过屏幕前 的操作送入的信息
2. 文档生成

文档生成的功能与代码生成相比,数量更大,内容更复杂

文档生成包括:文章、表格、图形

4.5 项目管理与版本管理

从技术上讲,它们的核心问题跨生命周期的信息的管理问题。前面章节提到的历史信息的处理也是项目管理与版本管理的关键问题

项目数据库实际上是信息库的一个组成部分。它的内容与另外几部分不同,它记录的是项目本身进展的各种信息。这里的关键是质量进度资源配置费用四个基本问题

在AD/Cycle的总框架中,对项目管理应当考虑的范围给出了如下的规定

  1. 研究与确定开发工作的方针与方法
  2. 开发任务的划分与分工
  3. 资源状况
  4. 人员情况
  5. 变更情况
  6. 质量情况

关于版本的信息,有的工具中把它作为项目数据库的一部分处理。它的主要内容是各个版本的编号、功能改变、模块组成、文档状况、推出时间、用户数量(或用户名单)、用户反映、封存情况等。

第5章 软件开发工具的使用与开发

人们首先遇到的问题往往是购买现成的软件开发工具还是自己开发专用的工具。对于这个问题,不能简单地回答是或不是,它与具体工作的条件、环境、人员素质、项目特征都有不可分割的联系

5.1 购置与开发权衡

购买市场上已有的软件开发工具,能帮助人们:

  1. 减轻一定的工作负担
  2. 使工作的组织管理比较规范
  3. 信息的管理与检索比较方便

真正经过考验的、一体化的软件开发工具还不多。他们的作用于可靠程度还不尽人意。

自己开发的优点:

  1. 目标明确,切实符合自己的需要,便于进一步扩容和升级
  2. 不存在引进外面产品时不可避免的冲突与不一致