软件构造之多维度视图

多维软件视图

按阶段划分

构造时(Build-time)/运行时(Run-time)视图

按动态性划分

时刻(Moment)/阶段(Period)视图

按构造对象的层次划分

代码(Code-level)/构件(Component-level)视图

软件构造的五个关键质量目标

Easy to understand: elegant and beautiful code / understandability(易理解性)

Ready for change: maintainability and adaptability(可维护性和适应性)

Cheap for develop: design for/with reuse: reusability(复用性)

Safe from bugs: robustness(健壮性)

Efficient to run: performance(性能)

多维视图

在这里插入图片描述

Build-time, moment, and code-level view

词汇层面

Lexical-oriented source code

半结构化:近乎自然语言的风格+遵循特定的编程语法

语法层面

Syntax-oriented program structure: e.g., Abstract Syntax Tree (AST)

AST:彻底结构化,将源代码变为一棵树,对树做各种操作=对源代码的修改

语义层面

Semantics-oriented program structure: e.g., Class Diagram

语义:源代码具体想实现什么目标?源代码—>现实世界

用于表达“需求” 和“设计”思想, 再转化成code

通常是图形化或形式化的

Build-time, period, and code-level view

Code churn 代码变化: Lines added, modified or deleted to a file from one version to another

Build-time, moment, and component-level view

这个多维视图着眼于源代码被物理地组织成文件(file),这些文件进一步由目录组织。文件被封装成包(package),并在逻辑上封装组件和子系统。

关注库(这里指静态链接库)和包,库有这几种来源:操作系统提供的库、编程语言提供的库、第三方公司提供的库以及自己积累的库。

开发者像使用编程语言指令一样使用库中的功能

操作系统提供的库

编程语言提供的库第三方公司提供的库

你自己积累的库

Build-time, period, and component-level view

这个多维视图描述了代码随时间的变化(Code churn),包括代码行的增加,删除和修改。

主要是各项软件实体随时间如何变化

Version Control System (VCS)

Run-time, moment, and code-level view

这个多维视图着眼于程序运行时在某个特定时刻的代码层面的状态,主要工具有快照图(Snapshot diagram)和内存信息转储(Memory dump )。

代码快照图:描述程序运行时内存里变量层面的状态
内存信息转储: 硬盘上的一个文件,它是当进程因特定类型的内部错误或信号而中止时产生的,其中包含进程内存的副本。

Run-time, period and code-level view

在这一视图中主要涉及到执行跟踪(Execution tracing),即用日志方式记录程序执行的调用次序,这通常由程序员用于调试目的,并根据跟踪日志中包含的信息的类型和详细信息,由有经验的管理员或技术支持人员以及软件监视工具来诊断软件的常见问题 。

用日志方式记录程序执行的调用次序

Run-time, moment, and component-level view

Deployment diagram in UML

这一多维视图着眼于程序运行阶段在某一特定时刻在组件层面的视图

Run-time, period, and component-level view

这一多维视图着眼于程序在运行阶段在某一阶段的组件层面视图,这一视图主要涉及到事件日志(Event logging),事件日志为系统管理员提供了对诊断和审计有用的信息。每一类事件都被赋予一个唯一的“代码”来格式化并输出一条人类可读的消息。这有利于本地化,并允许系统管理员更轻松地获得有关发生问题的信息。

事件日志:系统层面

下图展示了事件日志和执行追踪的区别
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多维度输入多维度输出的LSTM(长短期记忆)模型可以用于处理时间序列数据,并且能够接受多个特征作为输入,并输出多个特征。 在MATLAB中,我们可以使用深度学习工具箱来实现多维度输入多维度输出LSTM模型。以下是一个简单的实现示例: 首先,我们需要准备好训练数据。训练数据应该是一个三维矩阵,其中包含时间步、特征和样本的维度。对于LSTM模型,我们可以使用序列输入层来接受输入数据。 接下来,我们可以创建LSTM网络模型,并指定网络的层数、每个层的神经元数量以及激活函数。可以使用lstmLayer函数来创建每一层的LSTM层。 然后,我们需要定义网络的输出层。对于多维度输出,我们可以使用完全连接层来指定输出的维度,并使用softmax作为激活函数,以便输出概率值。 在训练之前,我们需要设置训练选项。我们可以指定训练的最大时期数、小批量大小以及优化器等。 接下来,我们可以使用trainNetwork函数来训练LSTM模型。将准备好的训练数据、网络模型和训练选项作为输入参数。 训练完成后,我们可以使用训练好的LSTM模型来进行预测。可以使用predict函数并提供新的输入数据,来获取模型的输出结果。 通过以上步骤,我们可以在MATLAB中实现多维度输入多维度输出的LSTM模型。这种模型对于处理时间序列数据,并进行时序预测,具有很大的应用潜力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值