码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 《系统架构设计师教程(第2版)》第5章-软件工程基础知识-05-净室软件工程(CSE)


    文章目录

    • 1. 概述
    • 2. 理论基础
      • 2.1 函数理论
      • 2.2 抽样理论
    • 3. 技术手段
      • 3.1 增量式开发
      • 3.2 基于函数的规范与设计
      • 3.3 正确性验证
      • 3.4 统计测试 (Statistically Based Testing) 和软件认证
    • 4. 应用与缺点
      • 1)太理论化
      • 2)缺少传统模块测试
      • 3)带有传统软件工程的弊端

    1. 概述

    • 净室软件工程(Cleanroom Software Engineering):力图通过严格的工程化的软件过程达到开发中的零缺陷或接近零缺陷
    • 过程:要求在规约和设计中消除错误,然后以“净”的方式制作

      它的过程模型是在代码增量积聚到系统的过程的同时,进行代码增量的统计质量验证。它甚至提倡开发者不需要进行单元测试,而是进行正确性验证和统计质量控制。

    • 作用:降低软件开发中的风险,以合理的成本开发出高质量的软件

    2. 理论基础

    净室软件工程的理论基础主要是函数理论和抽样理论。

    2.1 函数理论

    • 概述:
      • 函数:函数定义了从定义域到值域的映射
      • 程序:一个特定的程序定义了一个从定义域(所有可能的输入序列的集合)到值域(所有对应于输入的输出集合)的映射。
      • 因此,一个程序的规范就是一个函数的规范
    • 函数应当具备的特性
      • 完备性:
        • 对函数:定义域中的每个元素,值域中至少有一个元素与之对应
        • 对程序:每种可能的输入都必须定义,并有一个输出与之对应。
      • 一致性
        • 对函数:在值域中最多有一个元素与定义域中的同一元素对应
        • 对程序:每个输入只能对应一个输出
      • 正确性:
        • 函数:的正确性可以由上述性质判断
        • 对程序:由通过基于函数理论的推理来验证

    2.2 抽样理论

    • 不可能对软件的所有可能应用都进行测试
    • 把软件的所有可能的使用情况看作总体,通过统计学手段对其进行抽样,并对样本进行测试
    • 根据测试结果分析软件的性能和可靠性

    3. 技术手段

    净室软件工程中应用的技术手段主要有以下4种

    3.1 增量式开发

    • 统计过程控制下的增量式开发 (Incremental Development )
    • 基于产品开发中受控迭代的工程原理——控制迭代
    • 概述:
      • 增量开发把开发过程划分为一系列较小的累积增量
      • 小组成员在任何时刻只须把注意力集中于工作的一部分

    3.2 基于函数的规范与设计

    • 3种抽象层次
      • 行为视图(黑盒)
      • 状态机视图(状态盒)
      • 过程视图(明盒)
    • 过程:
      • 从一个外部行为视图开始
      • 被转化为一个状态机视图(
      • 最后由一个过程视图来实现
    • 盒子结构是基于对象的

    支持软件工程的关键原则:信息隐藏和实现分离。

    3.3 正确性验证

    正确性验证被认为是CSE的核心,正是由于采用了这一技术,净室项目的软件质量才有了极大的提高。

    3.4 统计测试 (Statistically Based Testing) 和软件认证

    净室测试方法采用统计学的基本原理,即当总体太大时必须采取抽样的方法。首先确定一
    个使用模型 (Usage Model) 来代表系统所有可能使用的(一般是无限的)总体。然后由使用模
    型产生测试用例。因为测试用例是总体的一个随机样本,所以可得到系统预期操作性能的有效
    统计推导。
    净室软件工程是软件开发的一种形式化方法,它可以生成质量非常高的软件。它使用盒子
    结构规约进行分析和设计建模,并且强调将正确性验证(而不是测试)作为发现和消除错误的
    主要机制。

    4. 应用与缺点

    1)太理论化

    • 需要更多的数学知识
    • 正确性验证的步骤困难、耗时
    • 开发成本较高

    CSE要求采用增量式开发、盒子结构、统计测试方法,普通工程师必须经过加强训练才能掌握,开发软件的成本比较高昂。

    2)缺少传统模块测试

    CSE 开发小组不进行传统的模块测试,这是不现实的。工程师可能对编程语言和开发环境还不熟悉,而且编译器或操作系统的bug也可能导致未预期的错误。

    3)带有传统软件工程的弊端

    CSE毕竟脱胎于传统软件工程,不可避免地带有传统软件工程的一些弊端。


    在这里插入图片描述

  • 相关阅读:
    学习CANopen --- [10] 汽车外接OBD模块原理
    【Mac 教程系列第 18 篇】如何修改 iTerm2 的背景图片
    班级校园网页设计作业 静态HTML我的班级网页 DW班级网站模板下载 大学生简单班级网页作品代码 我的大学网页制作 学生班级网页设计作业
    下一站——Java,准备好踏上新征程了?少年!!!!
    使用 Clion (cmake) 开发FreeRTOS
    CUDA----window更新升级cuda版本
    进销存管理系统是什么?有哪些功能?
    Nginx请求强制缓存设置
    API接口接入1688电商数据平台获取商品详情数据示例
    【npm 错误】:npm ERR! code ERESOLVE、npm ERR! ERESOLVE could not resolve问题
  • 原文地址:https://blog.csdn.net/xingzuo_1840/article/details/135409670
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号