首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
awk
centos
centos7
colors
curl
压力测试
nginx
port
ftp
sftp
jenkins
k8s
apache
server
grep
debian
7层
syslog
shell
tengine
linux
devops
grafana
负载均衡
fabric
服务器
ssh
cron
docker
路由器
unix
运维
sudo
zsh
ubuntu
service
dns
4层
stdout
crontab
交换机
vagrant
touch
kubectl
tomcat
log4j
当前位置:
开发笔记
>
运维
> 正文
可维护性的度量与构造原则
作者:小白 | 来源:互联网 | 2023-09-05 18:18
可维护性的度量与构造原则软件的维护和演化可维护性的常见度量指标模块化设计规范:聚合度与耦合度内聚性耦合性软件的维护和演化定义:软件可维护性是指软件产品被修改的能力,修改包括纠正、改
可维护性的度量与构造原则
软件的维护和演化
可维护性的常见度量指标
模块化设计规范:聚合度与耦合度
内聚性
耦合性
软件的维护和演化
定义:软件可维护性是指软件产品被修改的能力,修改包括纠正、改进或软件对环境、需求和功能规格说明变化的适应。简而言之,软件维护:修复错误、改善性能。
类型:纠错性(25%)、适应性(25%)、完善性(50%)、预防性(4%)
演化:软件演化是一个程序不断调节以满足新的软件需求过程。
演化的规律:软件质量下降,延续软件生命
软件维护和演化的目标:提高软件的适应性,延续软件生命 。
意义:软件维护不仅仅是运维工程师的工作,而是从设计和开发阶段就开始了 。在设计与开发阶段就要考虑将来的可维护性 ,设计方案需要“easy to change”
基于可维护性建设的例子:
模块化
OO设计原则
OO设计模式
基于状态的构造技术
表驱动的构造技术
基于语法的构造技术
可维护性的常见度量指标
软件可维护性的五个子特性:
易分析性。软件产品诊断软件中的缺陷或失效原因或识别待修改部分的能力。
易改变性。软件产品使指定的修改可以被实现的能力,实现包括编码、设计和文档的更改。如果软件由最终用户修改,那么易改变性可能会影响易操作性。
稳定性。软件产品避免由于软件修改而造成意外结果的能力。
易测试性。软件产品使已修改软件能被确认的能力。
维护性的依从性。软件产品遵循与维护性相关的标准或约定的能力。
一些常用的可维护性度量标准:
圈复杂度(CyclomaticComplexity):度量代码的结构复杂度。
代码行数(Lines of Code):指示代码中的大致行数。
Halstead Volume:基于源代码中(不同)运算符和操作数的数量的合成度量。
可维护性指数(MI):计算介于0和100之间的索引值,表示维护代码的相对容易性。 高价值意味着更好的可维护性。
继承的层次数:表示扩展到类层次结构的根的类定义的数量。 等级越深,就越难理解特定方法和字段在何处被定义或重新定义。
类之间的耦合度:通过参数,局部变量,返回类型,方法调用,泛型或模板实例化,基类,接口实现,在外部类型上定义的字段和属性修饰来测量耦合到唯一类。
单元测试覆盖率:指示代码库的哪些部分被自动化单元测试覆盖。
模块化设计规范:聚合度与耦合度
模块化编程的含义:模块化编程是一种设计技术,它强调将程序的功能分解为独立的可互换模块,以便每个模块都包含执行所需功能的一个方面。
设计规范:高内聚低耦合
评估模块化的五个标准:
可分解性:将问题分解为各个可独立解决的子问题
可组合性:可容易的将模块组合起来形成新的系统
可理解性:每个子模块都可被系统设计者容易的理解
可持续性:小的变化将只影响一小部分模块,而不会影响整个体系结构
出现异常之后的保护:运行时的不正常将局限于小范围模块内
模块化设计的五条原则:
直接映射:模块的结构与现实世界中问题领域的结构保持一致
尽可能少的接口:模块应尽可能少的与其他模块通讯
尽可能小的接口:如果两个模块通讯,那么它们应交换尽可能少的信息
显式接口:当A与B通讯时,应明显的发生在A与B的接口之间
信息隐藏:经常可能发生变化的设计决策应尽可能隐藏在抽象接口后面
内聚性
又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
耦合性
也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
对于低耦合,粗浅的理解是:一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合。
算法
运维
扩展
编程
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
负载均衡
HBase运维工具全解析
本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ...
[详细]
蜡笔小新 2024-12-24 17:00:59
server
深入理解设计模式与七大原则
本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ...
[详细]
蜡笔小新 2024-12-27 19:10:10
docker
深入解析Serverless架构模式
本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ...
[详细]
蜡笔小新 2024-12-22 09:08:56
docker
非公版RTX 3080显卡的革新与亮点
本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ...
[详细]
蜡笔小新 2024-12-28 13:07:40
服务器
解决 IIS 中 PHP 页面无法访问的问题
本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ...
[详细]
蜡笔小新 2024-12-28 11:54:54
服务器
优化ListView性能
本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ...
[详细]
蜡笔小新 2024-12-28 10:36:30
服务器
Understanding Life: A Forward-Living, Backward-Reflecting Paradox
Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ...
[详细]
蜡笔小新 2024-12-28 10:17:59
nginx
解决PHP与MySQL连接时出现500错误的方法
本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ...
[详细]
蜡笔小新 2024-12-27 15:48:52
nginx
自学编程与计算机专业背景者的差异分析
本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ...
[详细]
蜡笔小新 2024-12-26 17:53:18
nginx
2023年京东Android面试真题解析与经验分享
本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ...
[详细]
蜡笔小新 2024-12-26 17:45:48
nginx
UnityGUI 扩展与自定义控件
本文介绍了如何通过扩展 UnityGUI 创建自定义和复合控件,以满足特定的用户界面需求。内容涵盖简单和静态复合控件的实现,并展示了如何创建复杂的 RGB 滑块。 ...
[详细]
蜡笔小新 2024-12-26 08:36:29
nginx
深入理解领域驱动设计及其实践
本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ...
[详细]
蜡笔小新 2024-12-25 18:45:55
docker
技术变现之道:从日常工作中挖掘潜力
本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ...
[详细]
蜡笔小新 2024-12-24 15:21:23
k8s
Kubernetes 持久化存储与数据卷详解
本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ...
[详细]
蜡笔小新 2024-12-23 12:10:22
devops
分布式架构概览与实践
本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ...
[详细]
蜡笔小新 2024-12-19 15:11:28
小白
这个家伙很懒,什么也没留下!
Tags | 热门标签
awk
centos
centos7
colors
curl
压力测试
nginx
port
ftp
sftp
jenkins
k8s
apache
server
grep
debian
7层
syslog
shell
tengine
linux
devops
grafana
负载均衡
fabric
服务器
ssh
cron
docker
路由器
RankList | 热门文章
1
C#在界面画分隔线的小技巧
2
gMIS吉密斯更新Workflow工作流、FileMgr文件柜及GTAjax等模块
3
【转】Android 性能优化之内存检测、卡顿优化、耗电优化、APK瘦身
4
更新_mysql外键级联更新删除
5
MySQL数据库简介与基本语法
6
react配置移动端适配
7
快捷键_Visual Studio 代码快捷键
8
JS实现类别选择
9
11_策略模式
10
[下载]微软面向LTSC/周年更新推送KB4338814累积更新
11
ios之应用数据存储五:writeToFile
12
Code10
13
如何将fucntion sumVec转换为模板函数 - How do I turn the fucntion sumVec into a template function
14
anchor box
15
无法在C#中访问远程数据库 - unable to access remote database in C#
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有