软件工程发展
现代软件工程的发展
一、 软件的发展阶段
纵观整个软件的发展过程,大致可以将其分成以下四个重要的阶段。
1. 程序设计阶段:20世纪50一60年代
从19474年到20世纪60年代初,是计算机软件发展的初期。这个时期,人们最关心的是计算机能否可靠、持续地远行以解决数值计算问题,软件仅仅被看成是工程技术人员为解决某个实际问题而专门编写的程序,而且程序规模小,程序的开发者和使用者又往往是同一个人,无须向其他人作任何的交代和解释。因此,程序设计只是一个隐含在开发者头脑中的过程,程序设计的结果,除了程序流程图和源程序清单可以留下来之外.没有任何其他形式的文档资料保留下来。此时只有程序的概念,没有软件的概念。因此,这个时期软件开发就是指程序设计,其生产方式为个体手工方式,而且程序设计很少考虑通用性。 20世纪60年代初,由于硬件体积大、存储容量小、运算速度慢、硬件价格高,因此,为了提高运行效率、节约成本,程序设计人员非常讲究编程技巧,主要采用汇编语言甚至机器语言,以解决计算机内存容量不够和运算速度太低的矛盾。由于过分追求编程技巧,程序设计被视为某个人的神秘技巧,程序除作者本人外,其他人很难读懂。
2.程序系统阶段:20世纪60一70年代
20世纪60年代初到70年代初,计算机硬件技术有了较大的发展,稳定性与可靠性也有了极大提高。随着通道技术、中断技术的出现,外存储设备、人机交互设备的改进,为计算机应用领域的扩大奠定了基础。工程界对计算机辅助设计(CAD)应用软件的制作要求也越来越迫切。
与此同时,人们为摆脱汇编语言和机器语言编程的困难,相继研制出了一批高级程序设计语言(如ALGOL 、FORTRAN 、BASIC 、PASCAL 、COBOL 等) ,这些高级程序设计语言的出现,大大加速了计算机应用普及的步伐,各种类型的应用程序相继出现。
另外,一些商业计算机公司为了扩大系统的功能,方便用户使用,合理调度计算机资源,提高系统运行效率,也投入了大员人力、物力从事系统软件和支撑软件的开发研究。
此时,无论是应用软件还是系统软件,软件的规模都比较大,各个软件成分之间的共系也比较复杂,软件的通用件也很强。因此,提出了“软件”这一概念,但人们对软件的认识仅仅局限于“软件=程序+说明”。
这个时期的软件已经达到中小型规模,逻辑关系复杂,软件开发与维护难度很大。当软件投入运行时,需要纠正开发时期潜在的错误;补充开发用户新的需求;需要根据运行环境的改变对软件做出适应性调整。由于“小组软件作坊”本身的个体化开发特征,缺乏良好的小组管理水平,使得许多软件产品不可维护,最终导致“软件危机”。
由于高级程序设计语言的使用,使得该时期结构化程序设计成为主要的开发技术和手段。
3. 传统软件工程阶段:20世纪70一90年代
微处理器的出现与应用使个人计算机成为大众化的东两,而软件系统的规模、复杂性以及在关键领域的广泛应用,促进了软件开发过程的管理及工程化的开发。这个时期,人们认识到软件开发不再仅仅是编制程序,还包括开发、使用和维护过程所需的文档,软件的开发已经扩展到从需求定义、分析、设计、编码、测试到使用、维护等整个软件地命周期。这个时期软件产业已经兴起,“软件作坊”已经发展为软件公司,甚至是跨国公司。软件的开发不再是“个体化”或“手工作坊”式的开发方式,而是以工程化的思想作指导,用工程化的原则、方法和标准来开发和维护软件。软件开发的成功率大大提高,软件的质量也有了很大的保证。软件也已经产品化、系列化、标准化、工程化。
这一时期,软件工程并发环境(CASE,Computer Aided Software Engineering) 及其相应的集成了具大量涌现,软件开发技术中的度量问题受到重视,出现了COCOMO 软件工作量估计模型、软件过程改进模型CMM 等。20世纪80年代后期,以smalltalk 、C++等为代表的面向对象技术的出现,使得传统的结构化技术受到了严峻的挑战。
4. 现代软件工程阶段:20世纪90年代至今
Internet 以技术的迅速发展使得软件系统从封闭走向开放,web 应用成为人们在Internet 上最主要的应用模式,异构环境下分布式软件的开发成为一种主流需求、软件复用和构件技术成为技术热点,出现了以SUN 公司的EJB /J2EE 、
Microsoft 公司的COM+ /DNA(分布式网络架构) 和OMG(object Management Group ,对象管理集团) 的CORBA /OMA 为代表的3个分支。与此同时,需求工程、软件过程、软件体系结构等方面的研究也取得了有影响的成果。 进入21址纪,Internet 正在向智能网络时代发展,以网格技术(Grid Computing )和web 服务(web service)为代表的分布式计算日趋成熟,从而实现了信息充分共享和服务无处不在的应用环境。
这个时代的主流应用技术包括面向对象技术、软件复用技术(设计模式、软件框架、软件体系结构等) 、构件设计技术、分布式计算技术、软件过程管理技术等。
二、 软件方法学的发展
软件方法学(SoftWare Methodology)是以方法为研究对象的软件学科。主要涉及指导软件设计的原理和原则,以及基于这些原理、原则的方法和技术。狭义的也指某种特定的软件设计指导原则和方法体系。不论何种含义,其关注的中心问题是如何设计正确的软件和高效率地设计软件。
软件方法学的目的是寻求科学方法的指导,使软件开发过程“纪律化”,即要寻找一些规范的“求解过程”,把软件开发活动置于坚实的理论基础之上。软件方法学是为软件工程提供依据和指导。
1.Parnas 方法
这种最早的软件开发方法是由D .Parnas 在1972年提出的。主要针对软件在可维护性和可靠性面这两个严重问题。他提出两个原则:1)信息隐蔽原则:在概要设计时列出将来可能发生变化的因素, 并在模块划分时将这些因素放到个别模块的内部。2)在软件设计时应对可能发生的种种意外故障采取措施。
Parnas 对软件开发提出了深刻的见解。遗憾的是,他没有给出明确的工作流程。所以这一方法不能独立使用,只能作为其它方法的补充。
2. 结构化开发方法
结构化开发方法分为面向数据流的结构化开发方法和面向数据结构的结构化开发方法。
面向数据流的结构化开发方法
SASD 方法
1978年,E .Yourdon 和 L.L .Constantine 提出了结构化方法,即SASD 方法,也可称为面向功能的软件开发方法或面向数据流的软件开发方法。1979年Tom DeMarco对此方法作了进一步的完善。
Yourdon 方法是80年代使用最广泛的软件开发方法。它首先用结构化分析(SA )对软件进行需求分析,然后用结构化设计(SD )方法进行总体设计,最后是结构化编程(SP )。这一方法不仅开发步骤明确,SA 、SD 、SP 相辅相成,一气呵成,而且给出了两类典型的软件结构(变换型和事务型),便于参照,使软件开发的成功率大大提高。
面向数据结构的软件开发方法
a) Jackson 方法
Jackson 方法有时也称为面向数据结构的软件设计方法。1975年,M .A .Jackson 提出了一类至今仍广泛使用的软件开发方法。这一方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图。这一方法对输入、输出数据结构明确的中小型系统特别有效,如商业应用中的文件表格处理。该方法也可与其它方法结合,用于模块的详细设计。
b) Warnier 方法
1974年,J .D .Warnier 提出的软件开发方法与Jackson 方法类似。差别有三点:一是它们使用的图形工具不同,分别使用Warnier 图和Jackson 图;另一个差别是使用的伪码不同;最主要的差别是在构造程序框架时,Warnier 方法仅考虑输入数据结构,而Jackson 方法不仅考虑输入数据结构,而且还考虑输出数据结构。
结构化方法的基本思想
用系统工程的思想和工程化的方法,根据用户至上的原则,自始至终按照结构化、模块化,自顶向下地对系统进行分析与设计。具体来说,就是先将整个系统开发过程划分为若干个相对独立的阶段,如系统规划、系统分析、系统设计和系统实施等。在前三个阶段坚持自顶向下地对系统进行结构化划分。在系统实施阶段,则应坚持自底向上地逐步实施,即组织资源从最底层的模块开始编程和调试,然后按系统设计结构,将模块按层次一个个拼接到一起进行调试,自底向上,逐层地构建整个系统。
特点:
(1)面向用户的观点
(2)自顶向下的分析、设计和自底向上的系统实施相结合
(3)严格划分系统阶段
(4)结构化、模块化
(5)强调充分预料可能发生的变化
(6)开发过程的工程化
优缺点 :
结构化方法的优点:
(1)易于实现。
(2)有利于应用软件总体结构的优化。
(3)实现的系统具有较好的维护性。
结构化方法缺点:
最突出的表现是它的起点太低,所使用的工具,致使系统开发周期过长,带来了一系列的问题(如在这段漫长的开发周期中,人们原来所了解的情况可能发生较多变化等)。另外,这个方法要求系统开发人员在调查中就充分地了解用户需求、管理状况及预见可能发生的变化,这不大符合人们循序渐进地认识客观事物的规律性。因此,在实际工作中实施有一定困难。
随着软件应用领域的越来越广,结构化方法暴露出很多问题
a)
b)
c)
d) 过程和数据之间是割裂的 分析模型和设计模型之间存在鸿沟 难于适应需求的变化和系统的扩充 模块之间相互关联,难于维护
结构化方法已很难适应软件产业的发展需要。
结构化方法的基本思想
是用系统工程的思想和工程化的方法,根据用户至上的原则,自始至终按照结构化、模块化,自顶向下地对系统进行分析与设计。具体来说,就是先将整个系统开发过程划分为若干个相对独立的阶段,如系统规划、系统分析、系统设计和系统实施等。在前三个阶段坚持自顶向下地对系统进行结构化划分。在系统实施阶段,则应坚持自底向上地逐步实施,即组织资源从最底层的模块开始编程和调试,然后按系统设计结构,将模块按层次一个个拼接到一起进行调试,自底向上,逐层地构建整个系统。
特点:
(1)面向用户的观点
(2)自顶向下的分析、设计和自底向上的系统实施相结合
(3)严格划分系统阶段
(4)结构化、模块化
(5)强调充分预料可能发生的变化
(6)开发过程的工程化
优缺点 :
结构化方法的优点:
(1)易于实现。
(2)有利于应用软件总体结构的优化。
(3)实现的系统具有较好的维护性。
结构化方法缺点:
最突出的表现是它的起点太低,所使用的工具,致使系统开发周期过长,带来了一系列的问题(如在这段漫长的开发周期中,人们原来所了解的情况可能发生较多变化等)。另外,这个方法要求系统开发人员在调查中就充分地了解用户需求、管理状况及预见可能发生的变化,这不大符合人们循序渐进地认识客观事物的规律性。因此,在实际工作中实施有一定困难。
随着软件应用领域的越来越广,结构化方法暴露出很多问题
a) 过程和数据之间是割裂的
b) 分析模型和设计模型之间存在鸿沟
c) 难于适应需求的变化和系统的扩充
d) 模块之间相互关联,难于维护
结构化方法已很难适应软件产业的发展需要。
3. 问题分析法
PAM 问题分析法。PAM (Problem Analysis Method)是80年代末由日立公司提出的一种软件开发方法。
PAM 方法希望能兼顾Yourdon 方法、Jackson 方法和自底向上的软件开发方法的优点,而避免它们的缺陷。它的基本思想是:考虑到输入、输出数据结构,指导系统的分解,在系统分析指导下逐步综合。这一方法的具体步骤:从输入、输出数据结构导出基本处理框;分析这些处理框之间的先后关系;
按先后关系逐步综合处理框,直到画出整个系统的PAD 图。从上述步骤中可以看出,这一方法本质上是综合的自底向上的方法,但在逐步综合之前已进行了有目的的分解,这个目的就是充分考虑系统的输入、输出数据结构。
PAM 方法的另一个优点是使用PAD 图。这是一种二维树形结构图,是到目前为止最好的详细设计表示方法之一,远远优于NS 图和PDL 语言。
这一方法在日本较为流行,软件开发的成功率也很高。由于在输入、输出数据结构与整个系统之间同样存在着鸿沟,这一方法仍只适用于中小型问题。
4. 统一软件开发过程
统一软件开发过程(Rational Unified Process,RUP) 是一个面向对象且基于网络的程序开发方法论。根据Rational(Rational Rose 和统一建模语言的开发者) 的说法,好像一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针,模版以及事例支持。 RUP和类似的产品--例如面向对象的软件过程(OOSP ),以及OPEN Process都是理解性的软件工程工具--把开发中面向过程的方面(例如定义的阶段,技术和实践)和其他开发的组件(例如文档,模型,手册以及代码等等)整合在一个统一的框架内。
RUP 核心是解决可操作性问题,帮助开发人员尽可能少地依赖那些“不可描述的经验”。它详细给出了每个阶段参与该过程的各种角色,然后表示在过程中,该角色创建的制品。
特点:用例驱动、以体系结构为中心、增量和迭代开发。
5. 敏捷开发方法
典型的代表
a) XP (Extreme Programming,即极限编程)
敏捷型方法中最为出色的方法就是XP 方法,XP 方法在实施的过程中必须遵守四条价值准则:交流、反馈、简洁和勇气。XP 方法并在这些准则的基础上制定了非常多的实践基本准则。XP 方法实施过程中极端重视测试。XP 方法的基础工作便是测试,在实施的过程中强调每一个技术程序员在进行编程的时候必须保证源码与测试代码同步进行,并且这些测试代码不断地积累,当整个项目完成的时候,则这些测试程序也被整合到系统中,这样的过程会产生一个高度可靠的建造平台,为进一步开发提供了良好的基础。XP 方法最终体现的是“纪律性”与“适应性”的统一。
b) 水晶系列方法
水晶系列的方法继承了敏捷型开发“以人为本”的理念,与XP 方法实施过程中有所不同,创始人Alistair 经过不断努力探索出了用最少的纪律约束却能保证项目成功实施的方法,在一定程度上,在易于运作和产出效率二者之间达到了一种平衡。水晶系列在不断完善,并且被很多的软件编程技术人员所采用。
c) 适应性软件开发方法(ASD )
ASD 的核心是:猜测、合作与学习。这三个软件开发阶段是非线性的、重迭的。为了对付不可预见环境中的很多未知的不确定性,因此需要编程人员在实施的过程中要思考出各种各样的方法。而在适应性环境中,则强调技术员要不断地去学习、去探索,通过不断的学习才能检验他们在实施过程中做的假设。这样的学习是连续不断的,这是这种方法的一个重要特点,因此,必须要认识到计划和设计都得随开发的推进而改变。
d) 树型软件工程方法
树型软件工程方法是结构设计的最新进展,较好地抓住了软件体系结构设计和程序结构设计。这种方法将整个软件系统分为系统、事件、任务、作业、操作五个层次。采用逐层分解的结构化方法对软件系统进行分析建模,用事件树和任务树来进行软件体系结构的设计;整个系统实施中采用事件树来描述,整个事件树用任务来描述事件节点,程序结构设计过程则采用作业树来描述,这样便使得任务与作业通过树的对应关系对应起来。树型软件工程方法是未来结构设计的发展方向。
6. 面向对象开发方法
基本思想:对问题空间进行自然分割以便更接近人类思维的方式;建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计的软件尽可能直接地描述现实世界,构造模块化、可重用、维护性好的软件,且能控制软件的复杂性和降低开发费用。在面向对象的方法中,对象作为描述信息实体的统一概念,把数据和对数据的操作融为一体,通过方法、消息、类、继承、封装和实例化等机制构造软件系统,且为软件重用提供强有力的支持。
面向对象方法是一种把面向对象的思想运用于软件开发过程,指导开发活动的系统方法,包括分析、设计和实现等活动面向对象方法学基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供的灵活性,来认识、理解、刻划客观世界和设计、构建相应的软件系统
优缺点:
主要优点是:
(1)采用面向对象思想,使得系统的描述及信息模型的表示与客观实体相对应,符合人类的思维习惯,有利于系统开发过程中用户与开发人员的交流和沟通,缩短开发周期,提高系统开发的正确性和效率。
(2)系统开发基础统一于对象之上,各阶段工作平滑,避免了许多中间转换环节和多余的劳动,加快了系统的开发进程。
(3)面向对象技术中的各种概念和特性,如继承、封装、多态性及消息传递机制等,使软件的一致性、模块的独立性以及程序的共享性和重用性大大提高,也与分布式处理、多机系统及网络通讯等发展趋势相吻合,具有广阔的应用前景。
缺点:
面向对象的开发中也存在明显的不足。首先,必须依靠一定的软件技术支持,其次,在大型项目的开发上,具有一定的局限性,必须以结构化系统开发方法的自顶向下的系统调查和系统分析作基础,否则,会存在系统结构不合理,关系不协调的问题。
7. 基于构件的开发方法
基于构件的软件开发过程由领域工程和应用系统工程(基于构件的开发)两个并行的工程活动构成。
领域工程:探索一个应用领域,发现适合于复用的可候选的功能、行为、数据构件,将这些构件存入构件库。
应用系统工程(基于构件的开发):根据用户需求,选择合适的体系结构风格满足待建系统的目标,然后:选择潜在的可复用构件;判定这些构件确实适用于系统的体系结构;为了更好的集成,对构件进行适当性的修改;集成构件形成子系统以及应用系统整体。此外,开发定制的构件以满足系统中不能被现有的构件实现的功能。
关于构件的一个指导性模型,由构件的三个不同方面的描述组成
概念(concept):关于“构件做什么”的抽象描述,可以通过概念去理解构件的功能。概念包括接口规约和语义描述两部分,语义描述和每个操作相关联(至少表示为前后置谓词形式)
内容(content):概念的具体实现,描述构件如何完成概念所刻画的功能 周境(context):描述构件和外围环境在概念级和内容级的关系,刻画构件
的应用环境,为构件的选用和适应性修改提供指导
常用的构件标准:
CORBA(公共对象请求代理体系结构)
●Common Object Request Broker Architecture
●OMG 发布的构件标准
●核心是ORB(Object Request Broker) ,定义了异构环境下对
象透明地发送请求和接收响应的基本机制
COM+
●微软开发的一个构件对象模型,提供了在运行于Windows 操
作系统之上的单个应用中使用不同厂商生产的对象的规约
EJB :一种基于Java 的构件标准
●提供了让客户端使用远程的分布式对象的框架
●EJB 规约规定了EJB 构件如何与EJB 容器进行行交互
基于构件的软件开发过程可以概括为以下四个阶段:
(1) 问题域分析与建模( 问题分析阶段) 针对问题描述, 通过领域工程的思想, 进行问题域分析与建模。分析阶段的要求任务是通过对问题域的抽象, 区分出共性问题和变性问题, 分析的结果是将问题域进行形式化表示, 即建立问题域模型, 可采用UML 模型来表示。
(2)求解域模型设计( 构件设计阶段) 根据对问题域的分析与建模, 可得出求解域模型, 即系统的体系结构及系统所需构件。对于已存在的、可复用的构件, 分析其接口是否需要扩展; 对于需要新增的构件, 通过合理的分析及设计, 保证构件满足求解域的要求, 并尽可能保构件的可复用性。
(3)构件开发及组装( 系统开发阶段) 从构件库中选取满足需要的构件, 扩展其接口使之应用于当前工程; 对新开发的软件构件, 不仅应该使其应用于当前工程, 还要将其存储到构件库中, 以便复用。通过组装得到完整的系统, 经测试后可发布运行。
(4)应用系统演化( 系统维护阶段) 基于构件的应用系统的演化实际上是构件升级、替换和扩充的过程, 针对用户需求或实际运行效果进行软件的调整, 以适应新的环境要求。
8. 原型化方法
产生原型化方法的原因很多。主要是随着我们系统开发经验的增多,发现并
非所有的需求都能够预先定义,反复修改是不可避免的。当然能够采用原型化方
法也是因为开发工具的快速发展,比如用VB 、Delphi 等工具,我们可以迅速地开
发出一个可以让用户看得见、摸得着的系统框架,这样,对于计算机不是很熟悉
的用户就可以根据这个样板提出自己的需求。开发原型化系统一般有以下几个阶
段:
(1)确定用户需求
(2)开发原始模型
(3)征求用户对初始原型的改进意见
(4)修改原型
原型化开发比较适合于用户需求不清、业务理论不确定、需求经常变化的情
况。当系统规模不是很大也不太复杂时,采用该方法是比较好的。
基本思想:首先要对用户提出的初步需求进行总结,然后构造一个合适的原
型并运行,此后,通过系统开发人员与用户对原型的运行情况的不断分析、修改
和研讨,不断扩充和完善系统的结构和功能,直至到符合用户要求的系统为止。
优缺点:与结构化方法相比,使用原型法具有如下四个特点:
(1)原型法更容易被人们掌握和接受。
(2)原型法强调用户的参与。
(3)原型法强调开发工具的使用。
(4)原型法实际上将传统的系统调查、系统分析和系统设计合而为一,使用
户一开始就能看到系统开发后是什么样子。
9. 面向agent 软件开发方法
强调基于agent 这一抽象概念模型来认识、描述、分析应用以及开发软件系
统:
系统由一个或者多个agent 构成,即构成系统的成分是一个个agent ;每个
agent 都是自主或者半自主的计算实体;agent 间存在复杂的关系(组织结构关系、依赖关系等) ; agent间通过复杂的社会性交互和合作来实现系统功能和行为。
因此,基于agent 的软件开发方法体现了一种新的软件开发范型。
特点:
高度抽象,自然建模
–
agent 概念是对现实世界(应用) 中计算实体的自然建模 数据抽象 ->对象抽象 -> agent抽象
–
是对现实世界中问题求解方式的自然建模 过程及其调用 -> 对象间的消息传递 -> agent间社会性的交互与合作
● agent 的高度自治
–
– 对自身状态和行为的控制 独立性强、模块性、可维护性、可重用性更好
● agent 的动态性
– 持续性、反应性、主动性
● agent 的并发性
– 反应性,是一个多线程系统
● agent 行为的智能性
– 自主性、自发性
● agent 间的合作,协同,协商,竞争等
–
– 体现了一种更为灵活的“分而治之”的思想 反应了计算的社会性
10. 可视化开发方法
可视化开发就是在可视开发工具提供的图形用户界面上,通过操作界面元素,
诸如菜单、按钮、对话框、编辑框、单选框、复选框、列表框和滚动条等,由可
视开发工具自动生成应用软件。
这类应用软件的工作方式是事件驱动。对每一事件,由系统产生相应的消
息,再传递给相应的消息响应函数。这些消息响应函数是由可视开发工具在生成
软件时自动装入的。
可视开发工具应提供两大类服务。
一类是生成图形用户界面及相关的消息响应函数。另一类服务是为各种具体
的子应用的各个常规执行步骤提供规范窗口,它包括对话框、菜单、列表框、组
合框、按钮和编辑框等,以供用户挑选。
由于要生成与各种应用相关的消息响应函数,因此,可视化开发只能用于相
当成熟的应用领域,如目前流行的可视化开发工具基本上用于关系数据库的开发。
其实可视化开发并不能单独地作为一种开发方法,更加贴切地说它是一种辅
助的工具, 比如用过Sybase 的S-Design 的人都知道,用这个工具可以进行显
示图形化的数据库模式的建立, 并可以导出到不同的数据库中去。当然用过
S-Design 的人不一定很多, 但用过VB 、Delphi 、C++、Builder 等开发工具的
人一定不少,实际上这部分人就是在使用可视化开发工具。当 然,不可否认的
是,使用这些可视化开发工具也只是在编程这个环节上用了可视化, 而不是在
系统分析和系统设计这个层次上用了可视化。实际上,建立系统分析和系统设计
的可视化工具是一个很好的卖点, 国外有很多工具开发商都在致力于这方面产
品的设计。可视化开发使我们的注意力集中在业务流程上, 用户界面可以通过
可视化工具方便地构成。通过操作界面元素,诸如菜单、按钮、对话框、编辑框、
单选框、复选框、列表框和滚动条等,由可视化开发工具自动生成应用软件。
11. 非线性软件开发方法
NSE 软件开发方法,则以缺陷预防与可追溯性驱动- 基于一系列双向可追
溯性技术,支持全生命周期的缺陷预防和缺陷传播预防。NSE 软件开发方法的驱动
力,是六种可追溯性技术与两类缺陷的预防。
NSE 软件开发方法的特点如下:
(1) 遵从非线性系统科学和复杂性科学的一系列基本原则,特别是其非
线性原则、整体性原则、关键性原则、适应性原则、动态性原则、开放性原则、
综合设计原则和增量生成(集成)原则。
(2) 以缺陷预防和可追溯性驱动
(3) 软件开发与维护融为一体
(4) 软件开发与项目管理融为一体
(5) 注重适应性而非预设性
(6) 注重实时沟通 – 通过项目网站、技术论坛报告项目进展与事件处 理情况
(7) 支持多轨并行开发 – 通过双向自动追溯机制实现
(8) 支持高复杂度模块的重构
(9) 支持构件的适应性复用
(10) 实现软件开发与维护全过程的可视化
(11) 频繁向客户交付可执行的工作产品
(12) 实现了软件维护的系统化、量化和规范化
(13) 支持企业级多项目的开发与维护,可实现相关项目间的双向追溯、
调整
12. 计算机辅助软件工程
计算机辅助软件工程CASE (Computer Aided Software Engineering), 原
来指用来支持管理系统开发的、由各种计算机辅助软件和工具组成的大型综合性软件开发环境,随着各种工具和软件技术的产生、发展、完善和不断集成,逐步由单纯的辅助开发工具环境转化为一种相对独立的方法论。
CASE 方法解决系统开发问题的基本思想是:结合系统开发的各种具体方法,在完成对目标系统的规划和详细调查后,如果系统开发过程的每一步都相对独立且彼此形成对应的关系,则整个系统开发就可以应用专门的软件开发工具和集成开发环境(CASE 工具、CASE 系统、CASE 工具箱、CASE 工作台等)来实现。
特点:
(1)解决了从客观对象到软件系统的映射问题,支持系统开发全过程。
(2)提高了软件质量和软件重用性。
(3)系统开发具有较高的自动化水平,缩短了系统开发周期。
(4)简化了软件开发的管理和维护。
(5)自动生成开发过程中的标准化、规范化的统一格式文档,减少了随意性,提高了文档的质量。
(6)自动化的工具使开发者从繁杂的分析设计图表和程序编写工作中解脱出来。
三、 软件工程技术
软件形式化技术
形式方法的分类
形式方法是应用严格的形式符号和数学方法,定义或描述目标软件系统需求规格说明的一种方法。形式方法按照需求规格说明的定义可分为以下两大类:
面向模型的形式方法
又称为基于状态描述的形式方法。其基本思想是利用域、元组、集合、序列、映射、包等这些已知特性的数学抽象概念来为目标软件系统的状态特征和行为特征构造形式语义模型。语义模型就作为目标软件系统需求规格的形式说明。面向模型的形式方法的主要代表有:VDM 方法(维也纳开发方法)、软件工程Z 方法等。
代数构造形式方法
代数形式方法为目标软件系统的需求规格说明提供一些特殊的构造机制,并以代数构造方式描述目标系统的结构、功能。
形式方法的优缺点
优点是:
(1)对系统的需求规格说明描述精确、定义完整。
(2)形式化的需求规格说明有利于系统的设计与实现。
(3)软件实现的正确性可以形式验证,确保软件质量。
形式方法存在的缺点主要有:
(1)形式化的需求规格说明可读性较差。
(2)形式化方法对软件设计人员提出较高要求,需进行更专业化的培训。
(3)形式方法只适用于能够静态定义的软件系统,它无法定义动态系统行为。
(4)形式化的规格说明即形式语义模型,其正确性验证费时费力,目前还不能简化或自动化。
(5)形式方法目前还缺乏软件工程环境的支持。
软件形式开发方法
如果在软件开发过程中应用形式方法则称为软件形式开发方法。
首先,在需求分析阶段的信息收集和信息分析工作中,采用形式化的规格说明语言(如:Z 、VDM 、LoTos OBJ、Larch 等)构造目标软件系统严格的形式需求规格说明(形式语义)。其中信息收集工作要求形式规格说明语言简明、清晰、可维护。信息分析要求形式规格说明语言精确、无二义性并能够实施完整性、一致性、正确性的检查和验证工作。不同的形式规格说明语言在表达能力、术语、准确性以及支持形式处理的能力方面均有所不同,应根据软件系统的功能特征和行为特征选择。
然后,以形式需求规格说明为起点,借助相应的形式开发支持工具辅助实现目标软件系统。目前,除了在软件设计、编码阶段采用形式方法外,还在开展软件系统形式化测试的研究工作。软件形式开发方法还有许多问题有待研究发展。 软件重用技术
软件重用就是重复利用已经存在的软件制品,包括代码、设计结构、模块实现、变换过程、规格说明、文档,用于构造新的软件系统。
软件重用的概念
从软件工程的角度看,软件重用的主要内容是对软件生命期中各主要开发阶段的软件制品实现重复使用。重用软件制品的目标是提高软件开发的生产率和系统的可靠性。从工程的角度看,只有通过系统化、工程化的广泛重用才能实现这个目标。
软件重用可按抽象的层次划分为以下4个方面:代码重用;设计结果的重用;分析结果的重用;测试信息的重用
软件重用的基本方法
1.重用实体的抽象定义方法
抽象是任何重用技术的本质特征,抽象是对重用实体的概括提炼。每一个抽象可以描述相关的可重用的对象集合,而每一个可重用的对象集又决定着一个抽象。软件抽象分为规格说明和抽象实现两个层次。一种重用技术能否在软件工程中成功应用,取决于该重用技术的抽象层次,抽象层次越高,重用的可能性就越大。
2.重用实体的选择及评价方法
多数重用技术都提供快速检索功能,使软件人员快速定位实体的存放位置,还要提供分析、比较、评价软件可重用性的功能。可重用的软件实体必须具备简明的抽象,以便于使用者有效地确定重用软件在一个集合中的恰当位置,并能较容易地理解、比较和评价软件重用实体。
3.实体的特殊化方法
功能、结构类似的重用实体可被抽象地描述为一个一般化的实体。一个一般化的实体是带有变动部分的一个抽象。当开发人员选定了一个一般化的可重用实体后,再通过参数、变换、约束限制或其他细化形式后,可将一个一般化的实体特殊化,这个特殊化的过程就是软件实体抽象规格说明的抽象过程。
4.体系结构的集成方法
软件重用技术需要确定一个体系结构框架,软件人员使用这个框架,将预先选定的、特殊化了的重用实体集成为一个完整的软件系统。按体系结构形式的集成必须清楚的理解重用实体之间互连互通的接口协议以及框架互操作的诸多特性。
软件可重用性
软件的可重用性是指某个软件实体在构造新的软件系统的过程中能够再次被使用的能力。可重用性目前仍是一个定性的度量概念,它表达以前所得到的分析结果和对象在新的环境下的应用匹配的程度。或者说,可重用性是设计者赋予软件实现的一种重用属性,它所表达的对象和操作与目标系统的需求之间相互匹配、适应的难易程度。
面向应用领域的软件重用
目前实现软件重用根据现实情况,在相关的应用领域内实现软件实体的重用,即:研究专向领域的软件重用技术。
1.领域分析
首先是对同一类应用系统的领域进行系统化分析,抽取出领域内相关的知识、需求和系统具备的共同特征。然后在此基础上,提出领域内各个应用系统都适用的可重用软件架构及一组可重用的软件构件。
领域分析的基础是构建面向应用领域的模型,在模型中需识别应用领域的公共实体和实体上的操作,识别实体和实体之间的联系和约束,识别检索可重用构件时应使用的实体性质。通过领域分析将领域知识转换成为一般规格说明。
2.领域工程
领域工程实际上就是面向领域的分析、设计和实现的过程中,涉及技术、管理和成本经济的一整套规范的总称。领域工程是一门正在形成和发展的新兴学科。 基于软件构件的开发技术
集软件复用、分布式对象计算、软件体系结构等技术为一体的“基于软件构件的软件开发”(CBSD ,Component Based Software Development)新技术以软件体系架构为组装蓝图,以可复用的软构件为功能组件,实现软件应用系统的积木式集成,大大提高了软件生产效率和软件质量。
软件构件的概念
从概念上说,软件构件是一种定义良好、独立的、可复用的二进制代码组,它可能包括功能服务块,经过封装的对象,甚至可以是软件框架或软件系统模型。进入20世纪90年代以来,由于技术与环境的不断发展,基于对象的软件构件的内涵有了较大的扩充和改进,其特点有:
(1)构件构造的粒度比较灵活,可大可小,便于扩展。
(2)有统一的二进制接口标准,增强了不同应用环境之间的互操作机制和语言独立性。
(3)支持封装、继承、多态等面向对象特性,外界可以透明地访问构件。
(4)构件的语义表述具有多样性,即构件的语义层次较高,可从多个层面进行连接,外部特性不唯一。
从软件工程的角度看,一个符合规范的软件构件需要满足以下性质:
(1)软件构件实现的功能应具备独立性和完整性。
(2)软件构件求解的问题必须具备一般性和可识别性。
(3)软件构件的结构形式应当参数化和标准化。
(4)软件构件的运行应有较高的可靠性。
软件构件库
为合理的组织各种类型的软件构件,软件构件库是一种有效的组织形式。软件构件的集合就构成了构件库,一个构件库提供了支持可重用的软件构件的存储、管理、检索以及浏览、维护等必要的技术手段。
软件构件库的作用是:
(1)为各种不同的应用领域提供足够多的能原样重用或改写后重用的构件集合。
(2)为构件建立良好的组织形式,方便、快速地搜寻到最接近用户需求的现存软件构件。
软件构件库除了存储大量可重用的构件外,还应提供一些处理机制,如:构件索引、构件功能特征抽取、构件存储结构、构件浏览、检索、需求近似分析与重用效果评价等。这些机制的实现与构件库的结合可构成一个适用的软件构件库管理系统。
软件体系结构
在同一领域的应用系统之间,这个总体框架是相同或相似的。这就表明了一个事实,在一个领域内可以复用的不仅仅是构件,组合构件的总体框架形式也是可重用的,这个可以重用的总体框架就称为软件架构(software framework)。 软件系统架构技术的共同目标就是要提高实际应用系统的开放性、集成性、适应需求变化的扩展性以及开发与执行的高效性。研究并进一步发展软件体系结
构方面的问题,对于提高应用系统的集成性、复用性以及质量和效率有着重要的指导意义。
软件智能化技术
1965年MacCarthy 等人提出了人工智能技术的概念,由此开始了应用计算机技术模拟人类智能行为的研究工作。经过40余年的研究过程,智能化技术在知识的获取、表达、推理及学习等基础性研究中有了较大的发展,建立了有关的理论与技术方法,并应用这些理论及技术方法在人类智能行为的模拟应用方面取得了许多实用性的成果或经验。人工智能理论与技术已经成为计算机科学技术中一个重要的分支。智能化也是计算机应用今后重点发展的一个方向。 智能技术在软件工程中的应用
智能化技术在软件工程的应用目前主要集中在以下几个方面:
(1)用于开发需求分析的智能化软件工具
(2)软件设计过程的自动化
(3)智能化的软件测试及自动排错工具
(4)系统配置的自动适应工具
(5)人-机接口的智能化
人工智能技术还在进一步研究发展之中,其理论与技术的成熟程度直接影响到它在软件工程中的应用程度。
嵌入式系统软件技术
嵌入式系统的定义
嵌入式系统一般的定义为:嵌入式系统以应用为中心,以计算机技术为基础,软硬件可裁剪,从而能够适应实际应用中对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
嵌入式系统的应用软件是针对特定的实际专业领域,基于相应的硬件平台,完成用户预期任务的计算机软件。用户的任务可能有时间和精度的要求。有些应用软件需要嵌入式操作系统的支持,有些简单的应用软件不需要有专门的操作系统。
嵌入式系统的应用
主要用于各种信号处理与控制,用于企业、军队、办公室、实验室及个人家
庭等各种场所。目前已在国防、国民经济及社会生活各领域普及应用。目前,嵌入式系统应用比较热门的有以下几种:
1.IP 电话
IP电话把电话网和Internet 结合成一个功能强大的通信网络,它在IP 网络上实时传输被压缩的语音信息。
2.机顶盒STB (Set Top Box)
它是和电视机结合使用的一个盒子,能提供通过电视机直接上网的功能。它简单易用,是专门为那些不是很了解电脑的人设计的。
3.个人数字助理PDA
嵌入式系统的应用越来越广泛,在信息家电中的应用,是对嵌入式系统概念和应用范围的一个变革 。
嵌入式软件的开发特点
嵌入式软件的开发与传统的软件开发有许多共同点,它继承了许多传统软件的开发方法,但由于嵌入式软件运行于特定的目标应用环境,所以功能比较专一。嵌入式应用软件只完成预期要完成的功能,而且出于对系统成本的考虑,应用系统的资源都应合理配置。
1.需要特定的开发环境
嵌入式应用软件开发要使用交叉开发环境。交叉开发环境是指实现编译、链接和调试应用程序代码的环境。与运行应用程序的环境不同,它分散在有通信连接的宿主机与目标机环境中。
2.任务是基本的执行单元
嵌入式应用系统引入任务设计方法,以任务作为基本的执行单元。在系统设计阶段,采用多个并发的任务代替通用软件的多个模块,同时定义了应用软件任务间的接口。
3.程序需要固化
嵌入式应用程序的开发环境是PC 机,但运行的目标环境却差异很大,可以是PDA ,也可以是仪器设备。而且应用软件在目标环境下必须存储在非易失性存储器中,保证用户用完关机后确保下次的使用。
4.软件开发难度大
绝大多数的嵌入式应用实时性至关重要,这就要求设计者在软件的需求分析中充分考虑系统的实时性。实时性的体现一部分来源于实时操作系统的实时性,另一部分依赖于应用软件本身的设计和代码的质量。
嵌入式应用软件对稳定性、可靠性、抗干扰性等性能的要求都比通用软件的要求更为严格和苛刻。因此,嵌入式软件开发的难度加大。
四、 软件工程工具和环境
软件工程工具可以分为以下九个方面:
一、需求工具
需求工具分为需求建模工具和需求追踪工具。
需求建模工具:
需求建模工具是根据待开发软件系统的需求利用某种建模方法建立该系统的逻辑模型(也称需求模型或分析模型),以帮助软件开发人员检测软件需求的一致性、完全性、二义性和错误等等。
需求管理工具:
需求管理的工具一般分成两种:需求内容管理工具、需求过程管理工具。所谓内容管理,主要是是进行需求条目化管理、需求跟踪、需求基线管理的工具,主要有:IBM Doors 、IBM Requestpro 、Borland CalibraRM 、Hanskey Dragonfly 等。最近还有 Techexcel 公司的产品。
需求过程管理的工具主要是变更管理工具,如:IBM Clearquest,Hanskey 的Butterfly ,IBM Change。
二、设计工具
用来描述结构(静态)视图和行为(动态)视图。如:rational rose,通过类图、对象图、协作图、活动图来描述设计思想。
三、构造工具
包括程序编辑器、编译器和代码生成器、解释器和调试器等。
程序编辑器用来创建和修改程序以及相关的文档。编译器和代码生成器用来编译器就是将“高级语言”翻译为“机器语言(低级语言)”。解释器通过仿真提供软件执行。通过为程序执行提供的可控制和可观察的环境来支持软件构造活动。调试器是的作用是:1、控制软件运行、查看软件运行中信息、修改软件执行流程。
四、测试工具
包括测试生成器、测试执行框架、测试评价工具、测试管理工具和性能分析工具。
测试工具是通过一些工具能够使软件的一些简单问题直观的显示在读者的面前,这样能使测试人员更好的找出软件错误的所在。 使用测试工具的目的就是要提高软件测试的效率和软件测试的质量。软件测试工具也分为自动化软件测试工具和测试管理工具。
自动化测试的好处有:
• 产生可靠的系统;
• 改进测试工作质量;
• 减少测试工作量并加快测试进度。
测试管理工具用于对测试进行管理。一般而言,测试管理工具对测试计划、测试用例、测试实施进行管理,并且测试管理工具还包括对缺陷的跟踪管理。测试管理工具的代表有Mercury Interactive 公司的TestDirector 、IBM —Rational 公司的ClearQuest 。
五、维护工具
包括理解工具(如可视化工具)和再造工具(如重构工具)。
软件维护工具主要有:1、版本控制工具;2、文档分析工具;3、开发信息库工具;4、逆向工程工具;5、再工程工具;6、配置管理支持工具。
其中,逆向工程的工具主要有:程序切分器、静态分析器、动态分析器、数据流分析器、交叉引用器、依赖关系分析器。
六、配置管理工具
包括追踪工具、版本管理工具和发布工具
通过软件配置管理,将对软件系统中的多重版本实施系统的管理;全面记载系统开发的历史过程,包括为什么修改,谁作了修改,修改了什么;管理和追踪开发过程中危害软件质量以及影响开发周期的缺陷和变化。并对开发过程进行有效地管理和控制,完整、明确地记载开发过程中的历史变更,形成规范化的文档,不仅使日后的维护和升级得到保证,而且更重要的是,这还会保护宝贵的代码资源,积累软件财富,提高软件重用率,加快投资回报。
七、工程管理工具
包括项目计划与追踪工具、风险管理工具和度量工具。 项目计划和追踪工具用来进行项目工作量及成本估算和项目进度安排。风险管理工具用来定义、评估和监控风险。度量工具用来辅助软件度量相关的活动。
八、工程过程工具
包括建模工具、管理工具和软件开发环境。建模工具用来对软件过程进行建模和研究。管理工具用来提供软件工程管理。软件开发环境它由软件工具和环境集成机制构成,前者用以支持软件开发的相关过程、活动和任务,后者为工具集成和软件的开发、维护及管理提供统一的支持。
九、质量工具
包括检查工具和分析工具。质量工具为软件提供质量度量和报告机制保证软件特定的质量。
环境:
计算机辅助软件工程(Computer Aided Software Engineering,CASE ) CASE的集成机制包括:
数据集成——工具间可交换数据
界面集成——工具具有相同的界面风格和交互方式
控制集成——工具激活后能控制其他工具的操作
过程集成——系统嵌入了有关软件过程的知识,根据软件过程模型
辅助用户启动各种软件开发活动
平台集成——工具运行在相同的硬件/软件操作系统下
CASE 工具的四个发展阶段:
80年代——软件自动化工具“孤立”发展,重点是自动生成,
如:文档自动生成、报表自动生成等;
80中期——引入系统信息中心库(Repository ),孤立的信
息有了交互环境,推动了分析、设计等上游阶段
开发工具的一体化,既:上游工具的集成;
80后期——应用程序开发和维护自动化工具与项目管理工具
的结合;
90年代——确定了“统一使用开发支持工具、实现软件开发全过
程的自动化”的目标,展开了全面的攻关:
信息一致性:引入“百科全书(Encyclopedia )的概念;
结构可视性:图形开发工具
软件工程化:引入人工智能(AI )工具
五、 软件工程的发展趋势及存在问题
发展趋势:
(1)模块化
随着全球化的发展趋势和全球化市场竞争压力的增加,一方面企业需要更多的业务灵活性和创新能力;另一方面企业面临的IT 环境复杂度的增加和历史遗留系统的增加,对企业的IT 提出了新的挑战。模块化的思想恰恰能够帮助企业从根本上解决了这一问题,它一方面通过抽象、封装、分解、层次化等基本的科学方法,对各种软件构件和软件应用进行打包,提高对企业现资产的重用水平和能力;另一方面,基于模块化思想,业界提出了SOA 技术,它提供一组基于标准的方法和技术,通过有效整合和重用现有应用系统和各种资源,对各种服务进行服务组件化,并基于服务组件实现各种新的业务应用的快速组装,帮助企业很好应对业务的灵活性要求。它通过有效平衡业务的灵活性和IT 的灵活性、平衡业务的灵活性和IT 的复杂度,为IT 人提供了一个业务视角,让IT 人学会用业务的眼睛看世界,有效的拉近了IT 和业务的距离。
(2)开放计算
虽然软件工程方法、技术和工具的发展可谓百花齐放,但谈到趋势,我们必须首先强调的是能够确定行业基础框架,指导行业发展和技术融合的" 开放计算" ,它融合了" 开放标准" 、" 开放架构" 和" 开源软件" 三个方面,通过坚持" 开放标准" ,不同企业开发和使用的软件可以互连互通,不同的软件工程工具能够更好地集成,不同国界和不同文化能够更好地协作交流,用户的投资能够得到很好的保证。正是它为全球化趋势奠定了重要基础;" 开放架构" 通过一组开放的架构标准和技术,有效地解决了商业模式的创新对IT 灵活性要求的增加和现有IT 环境的复杂度之间的矛盾,第一次使IT 和业务走得如此之近,其典型代表包括SOA 、REST 等。而" 开源软件" 不但书写了Linux 、Eclipse 、Jazz 等一个又一个的神奇故事,而且它还有效地促进了开放标准的发展,同时有效利用社区驱动的开发与协作创新,优化软件设计中的网络效应,开源软件越来越被中小企业和个人用户所认可。
(3)合理的开发治理
软件开发治理的研究对象是软件开发团队,其目的是在软件开发生命周期中,通过定义整个开发组织中的各种角色、职责和技能要求,明确" 谁" 、在" 什么时间" 、做" 什么" 、" 怎么做" 和如何评测等内容,不断改进软件团队的生产效率和软件产品质量。软件开发流程和软件工程工具是软件开发治理的两个重要组成部分,首先,全球化的软件交付和社区驱动的软件交付模式对软件工程方法提出了新的要求。环顾当今软件开发方法,RUP 、敏捷开发、MSF 可谓百花齐放,当不同学说的支持者互相不屑一顾的同时,其实我们不难看到,不管是那一种软件开发过程,它都有自己合适的软件开发团队和软件开发场景。Rational 在2004年时提出了" 可适应的流程" 概念,其核心是通过重用组织过程资产库中的最佳实践构件,能够为不同的项目、不同的团队量体裁衣,快速装配特定团队所需要的流程,Rational Method Composer(简称RMC) 是一个软件交付过程的定义、裁剪、配置和发布工具平台,它赋予了RUP 以全新的生命力。RMC 提供了可重用的、统一的方法架构和定义语言,同时整合了RUP 和更多的业界标准、成功经验和方法论(以流程组件的方式存在方法库中),使企业能够基于RUP 和其它业界最佳实践,快速定义、配置和发布自己的软件交付过程和其他管理过程(例如ITUP ),实现了流程的重用、可配置和可适应。基于RMC ,企业可以首先将各种管理活动的最佳实践总结成流程构件,然后基于各种最佳实践流程构件建立统一的方法库。通过重用方法库中的各种流程构件,面向不同类型的、不同规模的IT 组织或软件团队,企业能够快速地量身定做出适用的IT 治理流程或软件开发流程,保证了流程的灵活配置能力。
(4)全球化软件协作交付
全球化的世界必然带来全球化的软件交付模式。根据Forrester 的数据,目前87% 的开发团队是分布式的,56%有两个以上的开发地点 ,同时企业的合并和收购趋势不断产生众多新的分布式开发团队,企业为了提供全球化的24 x 7 支持和开发能力,也在不断加强全球化软件协作交付能力。
全球化软件协作交付的另一个重要的驱动力来自于软件外包行业的发展。放眼今天,外包从最初的在印度公司购买廉价的劳动力,到今天在全球全面展开;从最初的以使用海外更廉价的劳动力为目的 ,到今天的有效使用海外更多人才
和领先技术;从最初的技术编程为主的外包 ,到今天的咨询、BPO 、SOA 和基础设施的全面外包;从企业最初的有无数战略外包供应商,到今天建立3至5家战略性外包供应商,我们都不难看到外包和全球化交付正在成为软件交付发展的标准模式,而不再是个例。
存在的问题:
1. 观念技术管理的创新
(1)观念创新
我国的软件企业对软件技术本身的了解大于对应用的了解,技术与市场的脱离使我们产生了一些高技术的软件,但没有获得市场价值的回报。在技术与市场的结合方面,没有找准技术变成价值的方向,中国的软件业要发展必须走出这个观念的误区。另外,目前软件服务已经成为巨大产业,软件服务将企业运营的重心由产品转向服务。用户不仅关心是否拥有自己的计算机、网络和软件,他们更关心以较低的成本建立和维护满足自身竞争力需要的业务。应用系统用户已经逐渐认识到,花钱获得高效便捷的专业化服务是必要的。未来的软件公司将成为传统产业的一个虚拟的“IT 部门”,这个部门必具备资深的行业背景,能够提供全方位的满足客户咨询、培训、系统实施、系统增值的解决方案。
(2)技术创新
作为产业,在运用技术的同时,必须认识到对产业而言技术是否能换来市场的回报,这是对技术价值衡量的标准。没有市场回报的技术是技术的垃圾,或者是技术转移体制有问题。高技术的高回报是对技术、市场策略和市场环境有效利用的综合描述。盲目地把技术的先进看成是市场成功的唯一因素而忽视社会环境对技术的需要和适应能力,是中国很多软件企业以及科研院所常见的错误。只有以市场的观念来准确地表达技术,才是技术成功的关键。另外,以创新带动产业,注重软件关键技术的研究开发与创新,设立操作系统、数据库管理系统和网络信息安全系统等关键领域的研究开发专项,进而培养我国在软件关键技术和核心产品上的国际竞争力。
(3)管理创新
软件质量的控制已成为软件产业一步步走向世界的成功因素之一。我国软件
产业缺乏软件工程的管理,缺乏对软件过程的控制,没有走上规范化发展的道路,仍处于混沌状态,所有的行为基本是反应式的;软件过程是临时拼凑的;对进度、经费的估计无实际根据,硬件限定时常在质量上让步;在质量管理上,难以预测可能出现的问题,对出现问题的判断没有基础;进度滞后时,常常是减少或取消评审、测试等保证质量的活动;人员安排不合理,忙的忙死,闲的闲死。后果是模块重用程度降低、产品文档编写不甚完备、软件开发工程效率得不到保障,最终软件产品的可靠性无法得到权威认证,无法得到国际市场的认同,严重制约了我国软件业的发展。在质量的控制上,我们应该学习印度的软件企业。印度软件企业将产品和服务的质量品牌作为企业发展的基础,将ISO9000 认证看作发展的第一步,将SE-CMM 等级作为质量管理基准,将最高级别5 级作为企业追求的目标。截止2000 年6 月统计在全球已经注册的38 家CMM-5 级企业中印度就占了15 家,在世界上被公认为质量信得过的软件提供国。另外,软件产业是一个团队的产业。从产品的设计到产品的批量生产,软件产业需要一大批有技术和多层次的人才协同工作。一个全部由高层次人才组成的软件队伍,往往会带来协同中的矛盾,使高水平的群体的生产效率低下。而团队的协作在围绕企业价值观而要求软件开发人员为产品而服务时往往带来了个人创新与产品的矛盾。因此,团队意识的强化,必须始终贯穿在企业运行的过程之中。
2. 理论上有待突破
面对软件开发长期受挫的事实,人们期待着理论有所突破。研制与实践一种新的开发方法已迫在眉睫。软件开发中出现的一系列成本、进度、质量问题会严重影响着软件产品的交付使用。项目开发中暴露出来了问题不断揭示着管理上深层次的混乱。软件产品质量与技术和管理均息息相关。软件产品的质量包括技术含量与管理的含量,因此,开发技术应考虑技术和管理两个方面。融合技术就是具有突破性的研究成果,它已被我们不断的软件开发与监理实践验证。通过长期的实践与研究,人们逐渐认识到:以往的理论或是忽视管理而重视技术,或者反之。事实上,软件开发是项目思想、管理组织、管理方法、管理技术、管理方式的综合体现,其中,技术是其质量保证的坚实基石,而过程管理是另一项决不可忽视的措施。惟有消除管理与技术的隔阂,将两者融合,“有效性”和“实用性”最终才能真正落到实处,并使两者的优势得到充分的发挥。我们致力于的融合技
术的研究方法已被许多成功的实践所证明:针对项目开发常见问题该技术提出的防范措施是行之有效的,它使各阶段的质量控制有章可循,对指导软件的质量管理具有重要的借鉴作用。