软件工程结构化建模的方法和工具_软件工程系列-结构化设计方法2

本系列文章为笔记,内容根据北京大学《软件工程》MOOC

初始化模块结构图精化的启发式规则

常见的启发式规则

  • 什么叫做“启发式”
    • 根据设计准则,从长期的软件开发实践中,总结出来的规则
    • 既不是设计目标,也不是设计时应该普遍遵循的原理
  • 常见的六种启发式规则
    • 改进软件结构,提高模块独立性
      • 通过模块的分解和合并,力求降低耦合,提高内聚
    • 模块规模适中-每页60行语句
      • 最好控制在一页纸内
      • 分解过大的模块
    • 深度、宽度、扇入和扇出适中
      • 扇入:表示有多少个上级模块直接调用它
      • 扇出:一个模块控制的下级模块的数量
      • 好的系统:顶层扇出高,中层扇出少,底层扇入高,系统呈“葫芦”型

81d49ebac68ca24d28cb04aa42695974.png
  • 模块的作用域力争在控制域之内
    • 作用域:受该模块内一个判定影响的所有模块的集合
    • 控制域:模块本身+所有直接或者间接从属于它的模块的集合

615183c7183d53b8e96b8662332df630.png
  • 降低模块接口的复杂性
    • 使得信息传递简单并且和模块的功能一致
    • 接口复杂或不一致容易增加耦合
  • 模块功能应该可以预测
    • 相同的输入有相同的输出

7d45694188fefb145f9bd27428f0c73b.png
  • 示例

ca0ef418c90ff74c1d049c1faf6fd541.png

输入部分的精化

92929433f43f92b2bd577358315d925f.png


sps:转速的每秒信号量
rpm:每分钟转速
mph:每小时英里数
gph:每小时燃烧的燃料数 输出部分的精化

9a7fe7160d812b1b9418ed57110ecf8b.png

变换部分的精化
对于变换部分的求精,是一项具有挑战性的工作。其中主要是根据设计准则,并要通过实践,不断地总结经验,才能设计出合理的模块结构


接口设计

分类

  • 模块间的接口设计(内部接口)
  • 软件与其他软硬件系统之间的接口设计(外部接口)
  • 软件与用户之间的交互设计

系统的接口设计是由穿过系统边界的数据流定义的
在最终的系统中,数据流将成为用户界面中的表单、报表或与其它系统进行交互的文件或通信 人机交互界面
在设计阶段,必须根据需求把交互细节加入到用户界面设计中,包括人机交互所必须的实际显示和输入
用户界面应具备的特性

  • 可使用性:是用户界面设计最重要的目标。包括使用简单、界面一致、充分提示、快速响应、低运行成本、健壮性等
  • 灵活性:考虑到用户特点。应该使用户接口满足不同用户的要求。对不同的用户,应有不同的界面形式,但不同的界面不应该影响功能
  • 可靠性:用户界面的可靠性是指无故障使用的间隔时间。用户界面应能保证用户正确、可靠地使用系统,保证程序和数据的安全性

界面设计类型

  • 外行型
  • 初学型:需要很多界面支持
  • 熟练型:需要较少的界面支持,但不能处理意外错误
  • 专家型:需要为他们提供能够修改和扩充系统能力的复杂界面

选用界面形式(表格,图形,菜单,对话,窗口等)的时候,应该考虑每种类型的优点和限制,可以从以下方面考察

  • 使用的难易度
  • 学习的难易度
  • 操作速度
  • 复杂程度
  • 控制:人机交互时,由计算机还是由人发起和控制接口
  • 开发的难易程度:该界面设计是否有难度,工作量多大

一个界面的设计通常使用一种以上的设计类型,每种类型与一个或一组任务相匹配
设计原则

  • 一致性
  • 操作步骤少
  • 不要“哑播放”
  • 提供Undo功能
  • 减少用户记忆负担
  • 提高学习效率

数据设计


在设计阶段必须对要存储的数据及其格式进行设计 文件设计
适合选择文件存储的情况:

  • 数据量较大的非结构化数据(多媒体)
  • 数据量大,信息松散(历史记录、档案)
  • 非关系层次化数据(系统配置文件)
  • 对数据的存取速度要求极高的情况
  • 临时存放的数据

文件设计的主要工作就是根据使用要求、处理方式、存储的信息量、数据的活动性以及所提供的设备条件等确定文件类型,选择文件媒体,决定文件组织方法,设计文件记录格式,并估算文件的容量 数据库设计
在结构化设计中,很容易将结构化分析阶段建立的数据字典和 实体-关系 模型映射到关系数据库中

  • 数据对象的映射
  • 关系的映射

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java四种权限的高低_Java(四种权限修饰符)

/*Java中有四种权限修饰符:public > protected > (default) > private同一个类(我自己) YES YES YES YES同一个包(我邻居) YES YES YES NO不同包子类(我儿子) YES YES NO NO不同包非子类(陌生人) YES NO NO NO注意事项:(default)并不是关键字“…

安全扫描失败无法上传_Apache Solr 未授权上传(RCE)漏洞的原理分析与验证

漏洞简介Apache Solr 发布公告,旧版本的ConfigSet API 中存在未授权上传漏洞风险,被利用可能导致 RCE (远程代码执行)。受影响的版本:Apache Solr6.6.0 -6.6.5Apache Solr7.0.0 -7.7.3Apache Solr8.0.0 -8.6.2安全专家建议用户尽快升级到安全…

php session页面传值,PHP session在页面间传递的问题

PHP session在页面间传递的问题:前提: 使用codeIgniter的框架, 使用PHP自带的session1. 在纯apache服务器上没有问题2. 在Nginx的apache模式下, 独立于codeIgniter框架外的页面无问题3. 在Nginx的apache模式下, 置于codeIgniter框架内的页面, 页面间session的传递有问题, 即一个…

php div边框,CSS自定义边框

3 个答案:答案 0 :(得分:2)边框图像覆盖在元素的顶部,因此即使边框图像是透明的,它仍然会显示其背后元素的颜色。纯CSS解决方案是使用伪元素。首先将div的位置设置为非静态(相对,绝对或固定将起作用)。然后使你的元素绝对并跨越di…

html5怎么改为vue_Vue实战——编程式导航打开新窗口,登录状态本地存储

近日来,我陆续的分享了vue相关的系列文章,以新闻列表项目为载体,实战的方式介绍了vue及其周边的技术。本文承接前文,不断通过项目迭代的方式继续分享vue相关的知识。目前Vue实战系列文章已形成了目录,各位感兴趣的朋友…

php 有子目录,php列出目录中所有子目录的实现代码

/*** 取出指定目录的所有子目录* edit: www.jbxue.com* 2013/10/9*/function listdir($dir){if ($handle opendir($dir)){$output array();while (false ! ($item readdir($handle))){if (is_dir($dir./.$item) and $item ! "." and $item ! ".."){$out…

python转cpp_python转c工具

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! compute.proto # python_out目录指定 xxxx_pb2.py的输出路径,我们指定为. 当前路径# grpc_pytho…

php 变量 换行,php去除换行符的方法小结(PHP_EOL变量的使用)_PHP教程

一个小小的换行,其实在不同的平台有着不同的实现,为什么要这样,可以是世界是多样的。本来在unix世界换行就用/n来代替,但是windows为了体现他的不同,就用/r/n,更有意思的是在mac中用/r。因此unix系列用 /n&…

80端口为什么要备案_搞网站的你,不了解一下共享虚拟主机和备案问题

正文共:1474字 14图,预估阅读时间:4 分钟今天分享的这一切要从域名备案说起。先科普一下,平时我们访问网站都是用域名访问的,通过DNS服务器将域名解析为IP地址(你知道上网时输入的URL是怎么解析成IP地址的吗&#xff1…

订阅号 笔记记录开发 php,微信订阅号开发笔记(五)

1、用户管理//查询所有分组public function queryGroups(){$url "https://api.weixin.qq.com/cgi-bin/groups/get?access_token";$url.$this->getacctoken();$result $this->cget($url);header("Content-type: text/html; charsetutf-8");print_r…

jqprint获取打印页数_高年级应用题40道,假期快给孩子打印练习吧!(含答案)...

1.王爷爷家养的4头奶牛每个星期产奶896千克,平均1头奶牛每天产多少奶呢?2.4辆汽车3次运水泥960袋,平均每辆汽车每次运水泥多少袋?3.水波小学每间教室有3个窗户,每个窗户安装12块玻璃,9间教室一共安装多少块…

cstring移除指定字符串_从String中移除空白字符的多种方式!?差别竟然这么大!...

作者 | Hollis来源 | Hollis字符串,是Java中最常用的一个数据类型了。我们在日常开发时候会经常使用字符串做很多的操作。比如字符串的拼接、截断、替换等。这一篇文章,我们介绍一个比较常见又容易被忽略的一个操作,那就是移除字符串中的空格…

php angular使用,如何使用angular.js PHP从mysql显示数据?

您好,您可以查看以下示例代码你的HTML页面:AngularJs Post Example: DevZone.co.in #dv1{border:1px solid #DBDCE9; margin-left:auto;margin-right:auto;width:220px;border-radius:7px;padding: 25px;}.info{border: 1px solid;margin: 10px 0px;padding:10px;co…

php业务的适用场景,根据业务场景寻找合适解决方案(PHP)?

系统环境:LinuxPHP 7.3ThinkPHP 6先说一下业务场景:订单创建成功之后,每一笔订单都需要进行统计及其他业务处理。如何及时发现处理失败的订单,然后进行补单处理。订单所产生佣金的处理。要解决以上问题,最简单的办法就…

matlab 遗传优化算法_转载 | 遗传算法解决TSP问题的MATLAB实现

问题定义:巡回旅行商问题给定一组n个城市和俩俩之间的直达距离,寻找一条闭合的旅程,使得每个城市刚好经过一次且总的旅行距离最短。TSP问题也称为货郎担问题,是一个古老的问题。最早可以追溯到1759年Euler提出的骑士旅行的问题。1…

php 如何配置 redis,php 如何设置redis

php设置redis的方法:首先安装redis服务及PHP redis驱动;然后打开php.ini文件;接着增加内容为“extensionredis.so”;最后重启php-fpm或apache即可。PHP 设置使用 Redis安装开始在 PHP 中使用 Redis 前, 我们需要确保已…

java数组有跨类建立对象_Java性能优化的45个细节(珍藏版)

点击上面 蓝色字体关注我们技术 / 架构 / 职场 / 面试 关注即送:4000G 架构师视频来源:http://t.cn/EiP42VF在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地…

java 数据纠错,纠错码简介

纠错码是个什么东西引出网络中的通信基于TCP和UDP两个通信协议, 这大家都知道的, 什么TCP的三次握手等等, 面试经常被问到. 三次握手是为了保证连接的正确建立. 但是, 在通信的时候, 你如何保证你的消息正确送达了呢? 有人说了, 有收到请求的响应包. 但我说的不是这个,比如说,…

dataframe修改数据_数据处理进阶pandas入门(一)

前言NumPy作为数据处理的利器,在对数据进行科学计算、存储处理大型矩阵等方面为我们带来了极大的方便,但对于更进一步的数据分析任务,文件操作等方面显得有些吃力。于是,作为NumPy的进阶库pandas应运而生,在实际应用中…

java6个人抽奖抽三个人,基于Java的抽奖逻辑

小组在做一个抽奖系统,现在给我分配到了抽奖逻辑这方面的实现。EMMM,拿到分配的时候是懵B的。老大给的需求图给的关键表结构DROP TABLE IF EXISTS dd_annual_meeting_check;CREATE TABLE dd_annual_meeting_check (check_id int(255) NOT NULL AUTO_INCR…