软件架构的非功能特征

1.可修改性

大型的工业和商业软件系统的寿命周期通常都是很长的,有时候会长达20年甚至更长。很多这类应用程序在开发结束后都不是固定不变的,而在其整个生命周期内不断演化。原来的需求又会变化,还会出现新的需求。为了降低维护成本和修改工作量,应用程序的软件必须为修改和演化做好准备。

2.互操作性

系统中的软件并非独立,经常需要与其他系统或环境交互。为了提高互操作性,设计软件架构时,对那些外部可见的功能和数据结构,必须提供明确的访问途径。
互操作性的另一方面是程序与使用其他编程语言编写的软件系统的交互。

3.效率

效率与执行软件是使用的资源及其对响应速度、吞吐量和存储空间消耗的影响相关。
要提高应用程序的效率,不能光靠使用精巧的算法,在组件之间合理的分配职责以及组件之间的耦合度也是很重要的。
在分布式软件系统中,效率也扮演者重要的角色,分布式应用程序底层的IPC(进程间通信)必须足够快,能够以足够高的速度传输消息和数据,诸如Forwarder-Reciever 等模式致力于解决效率问题,然而,很多模式都为解决问题增加了间接程度,这可能降低而不是提高效率

4.可靠性

可靠性是指,无论应用程序或系统发生错误还是用户以意外或错误的方式使用,软件系统都能继续运行。一般可以将可靠性分为两个方面。

容错: 其目标是在发生错误时确保行为正确并自行修复,如分布式软件系统在到远程组件的连接断开时重新建立连接,修复这种错误后,软件系统可继续或重新执行错误发生时正在执行的操作。

健壮性:指的是对应用程序进行保护,以抵御错误的使用方式和无效输入,确保他在发生意外错误时处于指定的状态。请注意,不同于容错,健壮性并不一定意味着软件能够自发成错误时继续运行,也可能只保证软件以指定的方式终止即可。

软件架构对软件系统的可靠性影响重大,为提高可靠性,软件架构可采取的方式包括

有意在应用程序中添加冗余

集成监视组件或错误处理

5.可测试性

软件系统的规模日益增大并且越来越复杂,工业软件尤为如此,这导致测试更困难,更昂贵。
要简化软件系统正确性的评估工作,有赖于架构的支持,支持可测试性的软件架构有助于发现并修复错误,临时集成调试代码和调试组件也更容易。

6.可重用性

可重用性是当前软件工程讨论最多的主题之一,它有望缩减软件系统的开发时间和成本,还可以改善软件质量,可重用性主要包括两个方面: 通过重用开发软件以及开发时考虑重用。

通过重用开发软件: 这意味着重用既有项目或商业库的组件和成果、设计分析、设计规范或代码组件。

开发软件时考虑重用: 开发软件时专注于生成在未来的项目中可重用的组件,这要求当前开发的应用程序采用的软件架构允许哥哥部分彼此独立,这样无需做重大的修改就能在其他系统使用它们

转载于:https://www.cnblogs.com/1605-3QYL/p/11041959.html

软件架构自学笔记——非功能特性相关推荐

  1. 软件架构自学笔记-- 畅途亿级业务日志系统演变过程

    畅途亿级业务日志系统演变过程 原文链接:https://www.infoq.cn/article/xWlmaS0-rdIjUgNrTjGI 痛点 你是否遇到过如下情况:线上偶尔出现一个问题,但我们并不 ...

  2. 软件架构自学笔记----分享“去哪儿 Hadoop 集群 Federation 数据拷贝优化”

    去哪儿 Hadoop 集群 Federation 数据拷贝优化 背景 去哪儿 Hadoop 集群随着去哪儿网的发展一直在优化改进,基本保证了业务数据存储量和计算量爆发式增长下的存储服务质量.然而,随着 ...

  3. 软件架构自学笔记--大学学的软件工程为什么感觉很“虚”

    软件项目的开发都离不开软件工程的理论知识但感觉大学学的软件工程的知识很虚,因为大学期间的软件工程侧重理论,难以学以致用. 软件工程学习后的效果(理论): 软件质量得到保证,开发时间可估计,开发成本可控 ...

  4. 软件架构自学笔记---架构分析

    架构分析: 什么是架构,根据要解决的问题,对目标系统边界进行界定,并对目标系统按某个原则进行切分根据切分使得这些部分能够进行有机地联系,合并组装成为一个整体,完成目标系统的所有工作. 架构设计的方法体 ...

  5. 信息系统项目管理师-自学笔记

    软考-信息系统项目管理自学笔记 感谢卢海强老师编写时间2021-06-01 09:39:21 选择说明: 第一章,选择题大约占20分,要看教材的120页左右第2.4-12(项目管理).16(变更).2 ...

  6. JAVA自学笔记24

    JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...

  7. DWR自学笔记(1)HelloWorld

    DWR自学笔记(1)HelloWorld 由于新公司的项目是基于DWR的,所以准备自学DWR,参考资料方佳玮的<DWR中文文档v0.9>,百度文献等.学习主要基于DWR3.0,很多方法之前 ...

  8. 程序阅读_全面详解LTE:MATLAB建模仿真与实现_自学笔记(1)调制与编码_程序阅读

    程序阅读_全面详解LTE:MATLAB建模仿真与实现_自学笔记(1)调制与编码_程序阅读 在粗浅地掌握了LTE知识后,从今天开始对<全面详解LTE:MATLAB建模仿真与实现>一书的学习. ...

  9. 基于Java机器学习自学笔记(第81-87天:CNN卷积神经网络的入门到全代码编写)

    注意:本篇为50天后的Java自学笔记扩充,内容不再是基础数据结构内容而是机器学习中的各种经典算法.这部分博客更侧重于笔记以方便自己的理解,自我知识的输出明显减少,若有错误欢迎指正! 目录 1. CN ...

最新文章

  1. 【Verilog HDL 训练】第 06 天(边沿检测)
  2. Notification(二)——PendingIntent的flag导致数据同样的问题
  3. iOS沙盒目录结构解析
  4. 从通信到AI FreeSWITCH与WebRTC
  5. Portal-Basic Java Web 应用开发框架:应用篇(十一) —— 整合 Spring
  6. [问题解决]win10误删启动项(BCD)(HP电脑亲测,无需启动盘,并非重装系统)
  7. Ubuntu中添加应用程序快速启动器的方法
  8. springmvc 接收对象 滴灌摘要
  9. freetextbox java_FreeTextBox使用详解 (版本3.1.1)
  10. Pyserial库使用心得
  11. 员工转正述职答辩问什么问题_员工转正述职报告范文
  12. 字母异位词分组-LeetCode49
  13. 使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(九)---制作APP
  14. GitLab的使用之Git-biz push失败问题整理
  15. Android开发 assets目录
  16. 如何画双层pcb板_双层pcb板布线规则(操作技巧与案例分析)
  17. 模拟滚动条.......
  18. Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法
  19. vscode无法连接扩展市场问题
  20. 【2022 CSDN OpenHarmony应用学习挑战赛】

热门文章

  1. Go 源码里的这些 //go: 指令,go:linkname 你知道吗?
  2. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
  3. 有存款,才能过得更踏实
  4. fileinput_open_读写文件_python
  5. 正向最大匹配 和逆向最大匹配对比比较
  6. Python 中 (,|)和(and,or)之间的区别 逻辑判断
  7. tf.expand_dims()
  8. 智能驾驶开发的几个问题
  9. android源码下载方法 批量下载 基于windows os
  10. JavaScript—— 前端编程语言