附:

模型
用来表示一个系统、过程、事物或概念(的一种表达形式)。
模型可以是物理实体、图形、数学表达式或一段描述文字。
好处:是形成一种具体的印象,有助于了解过程的实质。

工作模型
就是对一个事物完成一次工作的描述、工作流程、步骤

1.7.1 什么是模型 ?

模型(Model)就是 一个系统的抽象表现 (Abstract representation)。由于一个真实的系统可能太庞大,也可能含有许多细节,常常超过人类智力可能认知的范围,所以人们必须从系统中“抽”离出重要的“现象”(Essential factor),让人们能够认识与理解系统的 重要特性 ,包括系统 各组件 静态 动态合作关系

模型包含一组明确定义的 基础概念 ( Building concept),以及这些 概念之间的关系 。即这些基础概念 根据 明确定义的规则 (Rule)来 组合 成为较高层次的概念或系统

简单而言,模型的基础元素包括一组基本概念以及一组关系或规则。借助这些元素来表达出系统的架构(Architecture)。由于人们 对基础元素有了共同的认知 ,所以 整个系统的架构的描述 (即系统的模型)也就成为人与人之间可以认知和理解的东西。

因此,人与人之间采用共同的模型时,就 易于沟通,易于互相合作 了。

软件调试-张银奎

前言

本书写作目的:
软件调试,就是通过调试手段来 解决软件中的问题 (BUG)或 作底层的探索研究 (HACK等)

具体就是想告诉大家:

1、软件调试的原理、步骤 (原文:工作的模型,即一次调试工作的步骤、流程)、 工具 (又一轮原理、步骤等)。(这是被动,出了问题再来解决,是从外面来治病,比如西医。是软件外的东西,是外部)

为什么要知道这些:

类比:

软件调试可比喻为修理汽车。作为修理工,当然不能像司机一样会开就行了,首先要知道一个事物的工作原理,如汽车各部分的作用,它们如何配合起来让汽车动起来?动力来自于哪(发动机的活塞上下运动),它又是怎么变成让轮子向前滚动(通过巧妙的传动装置让力变成了旋转轮子的方向)?

然后要知道一次具体修理的过程,即先拆哪部份再拆哪部分,出什么问题应该观察哪几部分,什么时侯需要开动发动机来修理,什么时侯应该关掉不然会搞坏东西。

最后,应该知道你所使用的工具的原理,从原始的滑轮吊装,你应该知道拉哪根是向上吊、几根才够,现在修车还有一些先进的调试设备,什么四轮定位,甚至X光机等都有了。

而软件调试也相当于修理,只不过你修理的东西是在内存和CPU中的一些磁信号罢。你也应该知道基本原理(为什么能工作)、不同情况下的调试步骤、各类调试工具的使用原理(才知道什么情况下适用)。

2、代码自身可调试性。 这是主动,是预防问题,从内部来发现、医治,比如中医。是软件自身、内在)

类比来解释:

光事后去修还太被动了,任何设备都应该能自行发现一些故障并作记录、作相关动作(及时停止工作以保护用户的工作成果,并方便找出毛病所在等。)

所以,

就是在代码中加入一些预备对付故障毛病的代码(记录情况、通知用户、诊断位置与原因等),方便以后调试。

3、教授方法与技巧 (都是摸索出来的)。

除了上面那些通用性的东西外,由于东西太多,肯定还有很多其它情况,所以有一些经验性的东西。或者说,一些找不到文档不被公开的东西。一些很少说明的东西。这不是经验和技巧,不太都知道的东西。都知道的就是教材上的东西。



4、总结:

掌握 原理 、体会到 重要性 (通过一些实例或情况)、学会 方法和工具 、学会用这些方法和工具去 索更多知识、 解决 更多问题。



------------------------------
http://591000.cn/bbs/ShowPost.asp?ThreadID=397
Prata《C++ Primer Plus》:基础,第一本书。(之前的版本也可,不过推荐最新的)       Lippman《Inside C++ Object Model》:初级,加深语言层次上的理解。不过有点小老了。里面的cfront编译器早退出江湖好久了。思想值得学习       侯捷《STL源码剖析》:第三本书,中级,深入STL       Vandevoor 如果说 软件 的执行过程就像是CPU在无数条道路(指令流)间飞奔,那么开发 软件 的过程就是设计和构建这个交通网络的过程。其基本目标是要让CPU在这个网络中奔跑时可以完成需求(requirement)中所定义的功能。对这个网络的其他要求通常还有可靠(reliable)、灵活(flexible)、健壮(robust)和易于维护(maintainable),开发者通过简单的改造就能让其他类型的车辆(CPU)在... 大会讲师系列访谈(3) :Windows系统内核专家- 张银奎 大会会务组:张老师是什么时候开始关注Windows系统内核和 软件 调试 排错方面的?为什么选择这些领域研究?张老师能否与广大IT工程师分享一下技术道路上的成长心得? 张银奎 :对系统内核的重 软件 是信息时代的主角,它已经对人类社会产生了巨大的影响,而且正在产生更大的 影响。如果你在做 软件 方面的 工作 ,那么你应该感觉很幸运;如果你在学习 软件 ,那么你选择了前景无限广阔的方向,一定要坚持。 回顾作者学习 软件 的亲身经历,如果要分享经验,那么第一条经验就是多写代码,多 调试 。笔者一直觉得自己不是一个聪明的人,如果说作者的 软件 技术学得还可以,那么靠的就是这条:几乎每一天都写代码,几乎每一天都高度,坚持了二十多年,已经成为了习惯。 最近在公司比较闲,再加上自己好久没有认真的看过书了 打算买本书来充实一下,网上倒腾了一圈,决定买 张银奎 老师的《 软件 调试 》。今天收到书了,浏览了一下,觉得很不错,打算认真看看。 书的内容还没有细看,记不了啥。先写写买书原因吧... 主要三点: 1) 张银奎 老师在 《程序员》杂志" 调试 之剑"栏目上的系列文章是《程序员》目前还健在的不可多得的"硬开发"技术文章。 2)某网站下载了 横枪立马观核景 挥码枪线上发布会2022年6月11日下午14:00至15:30,挥码枪的线上发布会通过腾讯会议举办,有近百名来自全国各地的 软件 同行和 调试 技术爱好者参与了本次发布会。主持过后,先由格蠹科技创始人 张银奎 介绍了CoreSight技术背景。他先从自身对 调试 技术的一些理解入手,借用梁肇新博士的名言——“好代码是 调试 出来的”,... 1、Android7.1禁用锁屏功能 — a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -2488,7 +2488,7 @@ class DatabaseHelper extends SQLiteOpenHelp