[学术论文]从轻量级形式化方法出发的需求建模——用Radl语言对MIS系统进行规范描述的案例研究

从轻量级形式化方法出发的需求建模

——用Radl语言对MIS系统进行规范描述的案例研究

 

摘要 形式化方法对提高软件的正确性、可靠性意义重大,可大幅度减少软件的后期维护费用,但由于设计周期和人员素质的限制,形式化方法未能得到广泛应用。本文介绍了一种新的软件开发方法——轻量级形式化方法,从理论的角度阐述了其成因和基本思想,并从实践的角度给出了轻量级形式化方法在MIS系统分析中的应用实例。

关键字   轻量级形式化方法  需求建模  软件工程

引言

随着软件系统复杂度的不断增长,特别是软件在尖端领域的应用,使得开发安全、可靠的软件成为一个非常重要的问题。传统的软件工程方法为软件系统开发制订了一系列的原则、标准及步骤,在不同方面和程度上提高了软件的生产率和质量。但软件系统需求一般采用自然语言和伪代码相结合作为描述语言,由于自然语言存在着二义性和不一致性等缺陷,而伪代码又过分关注实现细节,使得软件系统的描述和构造过程往往潜藏着大量的错误,而这些错误不能仅仅依靠测试来解决。对于那些要求高安全性和高可靠性的行业,如核电站、航空航天、铁路运输等,这个问题显得尤为重要,必须有一种系统的方法来解决。对一般的应用系统,安全性和可靠性也是不容忽视的。

形式化方法作为一种以数学为基础的方法,能够清晰、精确、抽象、简明地规范和验证软件系统及其性质,能够极大地提高软件的安全性和可靠性。许多形式化方法学家研究了形式化方法存在的问题及其发展趋势,指出形式化方法不是万能的,当前的形式化研究和实践水平还远远没有发挥出形式化方法应有的潜力[Hall 1990Browen 1995]

在学术界和工程界,对形式化方法的应用仍然存在相当多的困难,如较长的设计周期和较高的人员素质,这使得在目前阶段对整个开发过程进行完全形式化是不可行的。为了使形式化方法更实用、更经济,能够适合不同领域系统开发的要求,形式化研究工作者开始探讨一种新的软件形式化开发方法——轻量级形式化方法(Lightweight Formal Method),着重于在软件开发的某些阶段或某些部分中进行有选择地形式化。本文先对轻量级形式化方法的成因和基本思想作了一定的阐述,再用RadlRecurrence_based Algorithm Design Language)语言给出了一个MIS系统中部分需求用例的轻量级形式化规范描述。

 

需求分析中的轻量级形式化方法

在形式化方法历史上,由于早期实践多集中在高安全性、高风险性的行业中,为了保证系统的安全和可靠,往往采用一套严格而复杂的过程。这造成了在构造一个完整的形式化系统模型时,需要较长的设计周期和较高的人员素质。实践证明,整个系统的完全形式化在现阶段是极其困难的。

为了使形式化方法更实用、更经济,形式化研究工作者开始探讨轻量级的形式化方法,目的是对资源有限、工期紧张、交流有限、迭代频繁、可靠性要求高的系统,在放弃部分规范验证机制的同时,又能够避免产生关键性缺陷。基本思想是对原有的“重型”形式化方法进行剪裁,将之应用于软件开发的某一阶段或某一部分,从而有效地平衡软件质量和生产率之间的矛盾。现阶段,轻量级形式化方法在航空航天、嵌入式开发、语音通讯、组件开发和其他工业应用中已经有了一些尝试[EasterBrook 19971998Horl 2000Matsumoto 2002Murray 2001]

Daniel Jackson[Jackson 1996]认为轻量级形式化方法侧重于从不同角度观察问题,有选择地应用形式化技术。在规范语言上,传统的形式化方法中往往含有大量的数学符号,片面地把规范语言看作是一般数学表示法,在描述问题时有较浓的数学味,这妨碍了形式化方法在一般系统开发中的应用,轻量级形式化方法主张语言及其辅助工具并重。在测试和证明的关系上,轻量级形式化方法放弃了正确性证明,认为测试的根本问题不在于不能说明系统无错,而在于找不到那些错误,通过穷举状态空间查错的Model Checking在部分领域的成功应用就是较好的例子。轻量级形式化方法还主张对大型系统有选择地采用形式化,再在一致性的基础上把不同的部分规范组合在一起。在具体实施上,也有一些成果出现,如在需求规约的构建中,Steve Easterbrook[EasterBrook 1997]总结了在NASA项目中应用轻量级形式化方法的研究成果,把形成需求规范的过程分成了四个步骤:

(1)    以清晰、精确、无二义的方式描述需求。

(2)    确认和修正规范内部的不一致性。

(3)    根据系统预期行为来测试需求。

(4)    将测试结果反馈给需求的作者。

目前的软件系统常常极为复杂,理解和描述问题的本质也很困难。在需求过程中,往往会潜伏很多不一致和二义性的错误,而错误发现得越晚,修复错误的费用越高[Zhou 2001]。形式化描述具有精确的语义和推理能力,通过无二义性描述、一致性检查、类型检查、有效性检查、行为检测、求精验证等手段,能够提高需求规范的清晰性和精确性,及早发现需求中隐藏的规范和设计缺陷,在系统构建的初期杜绝大部分错误的产生。因此,借鉴轻量级形式化方法的思想,本文对在MIS系统开发的需求建模阶段引入形式化方法作了尝试。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是C++语言的代码示例: ```cpp #include <iostream> #include <cmath> using namespace std; // 定义常量 const double PI = 3.14159265358979323846; const double a = 6378137.0; // WGS84椭球长半轴 const double f = 1 / 298.257223563; // WGS84椭球扁率 // 大地坐标系转空间直角坐标系函数 void geodetic2ecef(double B, double L, double H, double& X, double& Y, double& Z) { // 弧度制转换为角度制 double radB = B * PI / 180.0; double radL = L * PI / 180.0; // 计算第一偏心率的平方 double e2 = 2 * f - f * f; // 计算卯酉圈曲率半径 double N = a / sqrt(1 - e2 * sin(radB) * sin(radB)); // 计算空间直角坐标系的坐标 X = (N + H) * cos(radB) * cos(radL); Y = (N + H) * cos(radB) * sin(radL); Z = (N * (1 - e2) + H) * sin(radB); } int main() { double B, L, H; // 大地坐标系的纬度、经度、高程 double X, Y, Z; // 空间直角坐标系的坐标 // 输入大地坐标系的坐标 cout << "请输入大地坐标系的纬度(度分秒):"; cin >> B; cout << "请输入大地坐标系的经度(度分秒):"; cin >> L; cout << "请输入大地坐标系的高程(米):"; cin >> H; // 转换为十进制度数 B = B / 3600.0; L = L / 3600.0; // 调用函数计算空间直角坐标系的坐标 geodetic2ecef(B, L, H, X, Y, Z); // 输出结果 cout << "空间直角坐标系的坐标为:" << endl; cout << "X = " << X << " m" << endl; cout << "Y = " << Y << " m" << endl; cout << "Z = " << Z << " m" << endl; return 0; } ``` 在上面的代码中,我们定义了一个 `geodetic2ecef` 函数,用来将大地坐标系的坐标转换为空间直角坐标系的坐标。该函数接受四个参数:大地纬度 B、大地经度 L、大地高程 H,以及空间直角坐标系的坐标 X、Y、Z。在函数中,我们首先将大地纬度和大地经度转换为弧度制,然后根据 WGS84 椭球的参数计算卯酉圈曲率半径 N,最后根据公式计算空间直角坐标系的坐标。 在 `main` 函数中,我们首先输入大地坐标系的坐标,然后调用 `geodetic2ecef` 函数计算空间直角坐标系的坐标,并输出结果。注意,在输入大地坐标系的纬度、经度和高程时,我们将其转换为十进制度数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值