软件开发方式是指软件开发过程中所遵循的办法和步骤,从不同的角度可以对软件开发方法进行不同的分类。
从开发风范上看,可分为自顶向下和自低向上的开发方法。在实际软件开发中,大都是两种方法的结合;熊性质上看,可分为形式化方法和非形式化方法;从适应范围来看可分为整体性和方法和局部性。
8.2.1 形式化方法
广义的形式化方法是指软件开发过程中分析、设计和实现的系统工程方法,狭义上的形式化方法是指软件规格和验证的方法。
- 形式化方法概述。
形式化的思想是利用形式化规格语言,严格定义用户需求;并采用数学推演的方法证明定义的性质,对于复杂的应用问题,尽管无法验证整个需求定义的完整性,但仍有可能为避免某些要点的疏漏而建立数学断言,然后予以形式证明或反驳。
(1)形式化方法与图形语言机制想结合
(2)用CASE(computer aided software engineering,计算机辅助软件工程)工具支持形式化软件开发。 - 净室软件工程
净室软件工程(cleanroom software engineering ,CSE)是软件开发的一种形式化方法。使用盒结构归约进行分析和建模,并且将正确性验证作为发现和排除错误的主要机制,使用统计测试来获取认证软件可靠性所需要的信息。
CSE的理论基础是函数理论和抽样理论,所采用的技术手段主要有以下4个方面:
(1)统计过程控制下的增量开发
(2)基于函数的规范、设计
(3)正确性验证
(4)统计测试和软件认证
CSE的缺点:
(1)对开发人员要求比较高
(2)正确性验证的步骤比较困难,且耗时
(3)开发小组不进行传统的模块测试,不现实
8.2.2 逆向工程
逆向工程(reverse engineering),软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。
- 相关概念
(1)重构(restructuring),重构是指在同一抽象级别上转换系统描述形式
(2)设计恢复。设计恢复是指借助工具从已有的程序中抽象出有关数据设计、总体结构设计和过程设计等信息
(3)再工程 。是指在逆工程所获得的信息基础上,修改或重构已有的系统,产生系统的一个新版本。
(4)正向工程。是指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善质量。 - 完备性
一般认为,凡是在软件生命周期内将软件某种形式的描述转换成更为抽象形式的活动都可称为逆向工程。