
闻缺陷则喜
文章平均质量分 62
我和大家一样,是凡人,IT行业摸爬滚打近20年,错误、经验主义在所难免,欢迎指教。
主要读者:一,想入行、转行的新人,了解整个软件开发过程,方便选择职业。二,创业者、管理者,通过本书查漏补缺。这是本书命名为《软件开发面面观》的原因。三,方便投资人寻找合适的团队,避免投资那种偏科验证的团队
此书可下载
软件架构师何志丹
我的源码、视频、博文、电子书可复用性、可理解性、可测试性皆强。优于工作,劣于竞赛。源码:https://gitcode.com/invite/link/a07392368f3a4ae295c0
展开
-
调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
关键字:函数调用约定 混合编程 __stdcall c++ WINAPI APIENTRY _cdecl。原创 2024-01-10 17:00:00 · 1696 阅读 · 3 评论 -
长期加班的判断树
本人算法的总结《闻缺陷则喜算法册》,可到优快云下载频道下载,doc版的。优快云学院有基础算法的C++实现的课程,请使劲戳下面的链接。C++入职培训,C#入职培训等课程可以学习。闻缺陷则喜,早解决问题,让自己和老板安心。:VS2022或VS2019。好的算法让程序生气勃勃。:Win10或win7。墨家:有所得,以墨记。原创 2022-04-10 10:27:24 · 365 阅读 · 0 评论 -
HOperatorSet.GenRandomRegions 有内存泄漏或缓存,释放不掉
除生成的区域数量外,全部用halcon样例的默认值。原创 2023-09-01 09:18:31 · 654 阅读 · 0 评论 -
HOperatorSet.Connection 有内存泄漏或缓存
换了halcol18 halcon12的 debug release都如此。Win7 VS2002 halcon12, 直接运行Debug的exe。先释放regionConnect和先释放region 都如此。大约占用200M,两者的顺序不影响结果。原创 2023-08-31 08:34:12 · 906 阅读 · 0 评论 -
加强容错设计
这世界几乎不存在完全正确的软件系统,目前的趋势是:系统规模越来越大,逻辑越来越复杂,要求越来越高。这种情况下追求完全正确会让成本变得不可控。理论上,设计、实现、环境都正确的软件可以做到完全正确;现实是,这三条一条都做不到。一,就算是小型商业软件,无论测试还是形式化证明,工作量都是巨大无比,所以只能妥协而采取近似解。二,开发工具、第三方库不会完全正确,或多或少的存在缺陷。三,运行环境不一定和设计环境相同,比如:操作系统、数据库系统版本号不一致,操作系统、数据库系统本身的缺陷等。出于对现实的妥协,容错技术应原创 2022-01-09 14:54:19 · 517 阅读 · 0 评论 -
【闻缺陷则喜】避错设计
同型原理 同型原理指保持形式统一。统一不同人风格很难,同一个人急躁的时候和轻松的时候风格都不一样,何况不同的人。统一的内容包括但不限于:统一的命名规则。 利用接口和适配器统一诸多类似算法。CDC系统的算法主要有:瑕疵检测、寻找极耳、寻找Mark孔,宽幅测量等,每种算法因为要检测的材料不同,有细微区别。可以统一成接口:输入图像,输出json串。 统一的文件格式,如:日志文件。 简化问题,问题有多个解。选择一个较优解。比如...原创 2022-01-05 19:17:59 · 518 阅读 · 0 评论 -
真实重构例子
很简单的问题。出于保密考虑,只显示部分代码。功能需求有些工艺有槽位,有些工艺没槽位。有槽位的理论上可能多行,已知工艺都是单行槽位。寻找槽位需要以下参数:槽位行数。一行有多少个槽位,不同行槽位数相同。槽位宽高及宽高公差,不同槽位宽高完全相同。各行槽位(中间)距离涂布顶端(或底端)的位置及公差。是以涂布顶端还是涂布底端为参考位置。各列槽位(中间)距离涂布左边缘(或右边缘)的位置及公差。是以左边缘为参考,还是以右边缘为参考。设计此功能可以拆分成两个步骤:寻找各槽位的中心原创 2021-12-28 18:33:19 · 317 阅读 · 0 评论 -
高内聚和内聚分类
内聚 内聚指的的一个模块各组成成分的紧密程度。LCOM4通俗的说就一个类的成员变量和成员函数可以分为几组,以下两种情况之一分为一组:一、函数间存在调用关系。二、两个或更多函数操作同一个成员变量。此值最好是1。 偶然内聚、逻辑内聚 前者看起来没联系,实际也没联系;后者看起来有联系,实际没联系。这种情况很常见,尤其在基础库:一、某个读取配置类,有三个函数从txt读取配置,从ini读取配置,从json文件读取配置。系统最...原创 2021-12-15 19:58:33 · 1518 阅读 · 0 评论 -
_set_se_translator无效
_set_se_translator 只对当前线程有效原创 2021-12-13 14:56:36 · 391 阅读 · 0 评论 -
低耦合概述
低耦合 耦合指的两个系统(模块)联系紧密。共7种,除掉无直接耦合和高级语言不存在的内容耦合,共5种。耦合从低到高,分别是:数据耦合、标记耦合、控制耦合、外部耦合、公共耦合。 数据耦合两例 JiSuan(5, 3);CGouMaiXinXi gouMai = new CGouMaiXinXi();//...JiSuan(gouMai); 标记耦合六例 ...原创 2021-12-11 13:22:05 · 1264 阅读 · 0 评论 -
托管C++实现C#接口崩溃的一种情况
“System.TypeLoadException”类型的未经处理的异常在 CYSAlogExe.exe 中发生其他信息: 程序集“CLRAdapter, Version=1.0.8011.18681, Culture=neutral, PublicKeyToken=null”中的类型“CLRAdapter.CAlogFactory”的方法“GetCameraAlgo”没有实现应该定义为:virtual array<ProjectBaseLib::IImgAlog^, 1>...原创 2021-12-07 10:29:17 · 587 阅读 · 0 评论 -
halcon10求周长
关于接口 非托管C++和C#分别定义类似接口,托管C++派生与非托管C++的接口,和C#的接口是整体部分关系。C#接口:非托管C++:托管代码C++声明:托管C++实现:托管C++ 派生于C#接口,和C++接口是整体、部分关系,更简单。...原创 2022-01-14 17:18:23 · 330 阅读 · 0 评论 -
HALCON error #1302: Wrong value of control parameter: 2 in operator affine_trans_region
关于affine_trans_region最好一个参数,帮助上可选值是:'constant','nearest_neighbor'VS2013 halcon10 这两个值都会崩溃。void Test() { HObject rRect; HOperatorSet.GenRectangle1(out rRect,0, 0, 100, 100); HTuple matIdentity; ...原创 2021-11-14 13:30:02 · 5385 阅读 · 1 评论 -
简单C#类转非托管C++
开发工具: C#2013功能:针对简单的C#类,生成对应的非托管C++类,并生成托管C++的转换函数。应用场景:界面层、数据层C#,逻辑层C++。简单的C#类:类型只包括 double string List源码下载:简单的C#类生成对应的C#类-C#文档类资源-优快云文库https://download.youkuaiyun.com/download/he_zhidan/37948430 public class CFieldInfo {原创 2021-11-07 10:59:59 · 793 阅读 · 0 评论 -
通过简单原理增强软件可靠性
简单原理,就是字面的意思,系统越简单越好。复杂问题简单化,很难;简单问题复杂化,很容易。简化问题至少有如下方法:借用、取舍、拆分、分类、分工、模式与学习、规范 。借用是站在巨人的肩上。“欲穷千里目,更上一层楼”。遇到问题,先不急着动手,先思考、查阅记录,看以前是否遇到相同或接近的问题,直接复用或借鉴。以前,我和500年接到一个流程图的小项目,500年奋战几天没能解决,半年后发现BCG有现成的功能。如果没有可复用或借鉴,查阅团队文档和第三方文档。取舍。抓住主要矛盾,忽略次要矛盾。常见反例:某程序员原创 2021-10-24 16:29:18 · 201 阅读 · 0 评论 -
复制文件夹需要考虑的问题
完成一个函数复制文件夹,将源文件夹(strSrcDir)的文件复制到目标文件夹(strDestDir)。为了简化问题,限定如下:一,如果参数错误,可以崩溃,但不能损坏源文件。简单实现:依次复制各文件,如果目标文件存在,则先删除。这个实现有个严重的缺陷但触发几率低的缺陷。当源文件夹和目标文件夹相同时,会把源文件夹清空。可能有人说源文件夹和目标文件夹几乎不会完全相同。以下情况很常见:一,源文件夹和目标文件夹都是配置的,在两个不同的配置界面。二,一个文件夹是按某种规则生成,一个文件夹是配置的。解原创 2021-10-24 16:00:49 · 2734 阅读 · 0 评论 -
C++复制内存比C#稍快
同一台机器,都是VS2013,都是Debug版。 复制10M 内存5000次,C++ 4秒,C#6秒。C++稍快,除非核心模块没必要C#换C++。下面是C++和C#的测试代码。 [TestMethod] public void MemcpyUseTime() { byte[] src = Enumerable.Repeat((byte)0x08, 1000*1000*10).ToArray(); src[0] = 5; ...原创 2021-10-12 10:32:06 · 380 阅读 · 0 评论 -
10000次写1K 比 一次写10M 耗时多30倍
Test1一次写10M,Test2 100次写100K,Test3 10000次写1K。Test1用时,单位毫米:93 111 95 102 105Test2用时,单位毫米:226 210 198 289 224Test3用时,单位毫米:3000 3000 4000 3000 3000Test1平均用时101.2毫秒,Test2平均用时229.4毫秒,Test3平均用时3200毫秒。结论:10000次写1K 比 一次写10M 耗时多30倍。测试环...原创 2021-09-30 10:48:13 · 142 阅读 · 0 评论 -
[闻缺陷则喜]关于boost的想法
公司有个大约2万行的项目,用到了boost,我想取消掉不用boost。理由:一,可理解性差,除了高手很难弄懂。二,类太多,光头文件就1万多。大点的团队四五个高手,每人用一个boost类。高手流失后,很难补充,因为候选人不知道需要熟悉那五个类。我同学,一入职就接手一个boost用得多的项目,不到3个月就摸清了整个脉络,结果被辞退了,理由:3个月无任何成果。此公司花了6个月才找到他。 只有一个读取xml的类用到了boost,要想不用boost,要么自己写xml内核,要么用其他xml库。前者成本高...原创 2021-09-21 16:48:18 · 246 阅读 · 0 评论 -
[闻缺陷则喜]C#调用C++的类
开发环境:Win10+VS2015 新建Win32 DLL 一,确保c:\code文件夹存在。二,新建Win32项目HD。向导的应用程序类型选择:DLL,勾选“导出符号”。 C#调用extern "C" 函数 一,打开hd.h和hd.cpp,发现向导已经导出一个变量、一个函数、一个类。HD_API int fnHD(void);前面加上extern "C" 变成extern "C" HD_...原创 2021-08-31 17:38:58 · 155 阅读 · 0 评论 -
[闻缺陷则喜]编码与实现方式
人类记忆字母、数字、汉字、符号需要记住读音或笔顺;计算机制只需要记录编号。 ASCII码 文本编码方式的基础是ASCII码,它是一个7位的编码标准,包括26个小写字母、26个大写字母、10个数字、32个符号、33个控制代码和一个空格,共128个代码。其中ASCII码是大多数常用编码的基础。 ANSI ANSI(美国国家标准协会)通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x80~0xFFFF来编码,即扩展的ASCII编码原创 2021-08-25 19:34:17 · 283 阅读 · 0 评论 -
单元测试 节选自《闻缺陷则喜》(此书可免费下载)
单元测试 单元测试用例设计 功能测试的用例设计是业务功能逻辑的输入输出,单元测试中就是函数的输入输出,那么单元测试中的输入输出有哪些呢?输入:被测试函数的输入参数被测试函数需要的全局变量被测试函数的内部私有变量函数内部调用子函数的数据函数内部调用其他模块的数据函数内部调用外部服务的数据输出:被测函数的返回值被测试函数的输出参数被测试函数修改的全局变量被测试函数修改的内部变量被测试函数增删改的数据库数据等被测试函数...原创 2021-07-17 10:08:02 · 185 阅读 · 2 评论 -
概要设计 其它 节选自《闻缺陷则喜》(此书可免费下载)
反模式 反模式是指在对经常面对的问题经常使用的低效、不良或者有待优化的设计思想、方法。如:软件膨胀:随着版本的升级,软件越来越消耗系统资源。反抽象:需要的功能并不暴露给用户,导致用户要在较高层次重新实现一些功能。万能类︰在一个类的设计中,聚集了太多的函数。硬编码(Hard Code):或称写死。在实现某系统用途上设死该系统的运作环境。超布尔逻辑︰不必要的比较,或是过于抽象的布尔计算。剪贴编程(Copy-n-paste programming):宁愿拷贝(并修改)...原创 2021-07-10 10:57:33 · 138 阅读 · 0 评论 -
设计模式 选自《闻缺陷则喜》此书可免费下载
口诀,方便记忆而已:抽工单建原桥代理组合适配器,享元装饰外观访问者写好策略备忘录,观察模板迭代的状态,命令中介解释责任链。设计模式很多,GOF就列出23种,本文仅举三例。 工厂方法 定义一个用于创建对象的接口,让子类决定实例化哪一个类。自定义一个消息框,最初只能设置标题和内容。后来:可以选择是否有按钮,是否有图标。笨办法:4个类对应4种情况。最简单的解决方法:加两个成员变量记录相关信息。再后来:图标可以更换,且数量不定;点击某个按钮对话框不需要关闭。可行原创 2021-06-23 19:02:42 · 124 阅读 · 0 评论 -
设计模式六大原则 节选自《闻缺陷则喜》(此书可免费下载)
设计模式六大原则 单一职责原则 Single Responsibility Principle,开闭原则 Open-Closed Principle 里氏代换原则 Liskov Substitution Principle迪米特法Law of Demeter接口隔离原则Interface Segregation Principle 依赖倒置原则Dependence Inversion Principle,可以记为SOLID。 单一职责原则 定...原创 2021-06-14 19:07:44 · 192 阅读 · 2 评论 -
架构模式 节选自《闻缺陷则喜》(此书可免费下载)
架构模式很多,仅举三例。 分层架构 经典三层架构最优场景,数据库管理软件(增删查改),大部分企业软件都是这类。经典三层架构自顶向下由用户界面层、业务逻辑层与数据访问层组成。《领域驱动设计》中的分层架构:用户界面层、应用层(给调用者提供完整的业务用例)、领域层、基础设施层。分层依据:一,顶层更面向业务和用户,底层更面向通用和硬件。二,面对变化。三,同层处于同一抽象层次。注意:如果某一层大部分函数只是简单调用低层的函数,则此层应该取消。 事件总线原创 2021-06-05 11:53:23 · 226 阅读 · 6 评论 -
架构内容 节选自《闻缺陷则喜》(此书可免费下载)
架构内容 取舍 质量、工期与成本三者之间是相互影响、相互制约。质量与工期影响着成本。成本又约束着质量和工期,工期影响着质量的提高。反过来质量的提高又促进了工期的缩短。让公司亏钱是最大的罪过;工期的长短严重影响现金流,暂时亏损可以拉投资,没现金流公司会倒闭。体会:一,有时,要求高质量会让成本翻倍,所以不如分两阶段,第二阶段重写,不留历史包袱。二,不同经历的开发人员侧重于不同的质量要求,有的适合快,有的时候适合可维护性、可复用性。天下武功唯快不破,快是很大的优势。90%的...原创 2021-05-29 18:44:13 · 167 阅读 · 2 评论 -
沟通 节选自《闻缺陷则喜》(此书可免费下载)
签单前和用户沟通 一,质量要求需要方便测量,以避免以后产生纠纷。比如:程序不容易崩溃,就不好测量。可以改成:a,平均一天崩溃一次。b,崩溃时不损坏数据。c,崩溃后重启可以解决问题,且重启过程不超过5分钟。二,提供多个不同收费的质量要求,供用户选择,防止提不合理要求。比如:平均一周崩溃一次免费,一天崩溃一次收费10万。三,有些不方便测量的质量需求,可以拆分成可测量的需求。比如:易用性往往可以拆分具体功能需求。四,不方便测量的需求,单独报价,如美观。 ...原创 2021-05-24 19:35:02 · 156 阅读 · 0 评论 -
运行期质量
运行期质量 性能 对用户而言,最关心的是:响应时间和操作总耗时。点击一个按钮,几秒没反应,用户就蒙了。最简单的方法:点击后,马上禁用按钮,操作完成后启用。客户最关心的是,资源使用率。比如:a,带宽,视频网站这个占大头。b,多少台服务器。如果需要多台服务器,看瓶颈在那?内存、CPU运行速度、磁盘读写速度。如果只需要一台服务器就没必要浪费时间。一台服务器比增加的开发成本少得多。如果是单机程序或客户端,在主流配置下能流畅运行就可以了。 安全性 ...原创 2021-05-20 19:45:14 · 182 阅读 · 0 评论 -
开发期质量 节选自《闻缺陷则喜》(此书可免费下载)
开发期质量 可理解性 一,尽量使用成熟的技术、方法,除非优势非常大。新技术要花时间学习,新方法要详细斟酌、测试。二,分析、设计时消除偶发复杂性、简化根本复杂性。三,除小函数的局部变量外,变量和函数命名要符合规范。四,单一职责原则,一个函数、一个类、一个模块、一个项目只完成一个任务。五,可理解性是逐步降低的,所以仔细单元测试,尽量早发现缺陷,每次多发现缺陷,减少修改次数。六,完善测试用例和自动化测试用例,这使得经常优化代码成为可能。 可测试性 ...原创 2021-05-09 15:54:37 · 174 阅读 · 6 评论 -
问题定义 模式
模式 商业模式 一,价值主张,帮用户解决什么问题。二,客户细分,谁是我们最重要的客户。三,核心资源,需要什么核心资源可以保证商业行为的执行和落实。四,关键业务。那些关键性的事情才能使产品正常运行。五,渠道通路,用什么方式和途径接触用户。六,客户关系,什么方式保证产品和用户拥有长期利益。七,需要哪些上下游合作伙伴。八,成本结构。九,收入来源。主要收入来源是什么? 八类36种盈利模式 一,价值链模式:价值链分拆模式、价值链挤压模式、价值链修...原创 2021-04-24 16:51:28 · 205 阅读 · 1 评论 -
用户细分
用户细分 常见分类规则 基础属性,如:年龄、性别、身高、体重、民族、教育、职业、地理位置、城市规模、气候状态、人口密度、渠道来源。社会关系:家庭、社区、学校、公司、兴趣部落。消费能力:月收入、月支出、贷款、信用卡。行为特征:设备类型、使用频率、使用偏好、使用时长、经常团购、经常追剧、爱运动。心理特征:贪小便宜、价格敏感、品牌偏好、好攀比、犹豫纠结、果断、可能黄牛。 天使用户与种子用户 天使用户验证价值,种子用户验证增长。...原创 2021-04-23 19:29:40 · 1106 阅读 · 0 评论 -
过滤概念(可行性分析)
过滤概念(可行性分析) 可行性分析事关重大,所以选取多个版本,供参考。每个版本,我都根据我自己的累积加以修改、简化,所以和原版有一定出入。 可行性分析(科教书版) 一,投资必要性。项目是有价值的。二,技术可行性。设计技术方案和几套备选方案,并作出评价选择。三,经济可行性,成本可以接受或利润大于成本,且现金流健康。四,组织可行性。有适合的执行团队保障项目顺利执行。五,社会可行性。不违反法律、政策、道德。如果能顺应政策方向或投资方向,项目的阻力会小得多。...原创 2021-04-20 19:05:04 · 157 阅读 · 0 评论 -
问题定义 基础
基础 《人人都是产品经理》的作者在阿里巴巴待了多年,他书中总结阿里内部创业绝大部分失败了。没资源的创业失败几率更高。 目标和资源相匹配 一,目标与资源相匹配。玩过游戏的都知道“先打小怪,升级换装备,反复多轮后才去挑战最终怪物。”现实中常常发生的是“2010年制定计划如何如何,2011年继续执行此计划,2012年继续执行,2013年继续,2014年不干了。”游戏中反馈及时,有错误几分钟就能发现,从而做相应的调整。二,寻找与交换资源。深刻的知道自己有那些...原创 2021-04-18 10:06:06 · 160 阅读 · 0 评论 -
面向过程与面向对象及相关工具
面向过程与面向对象 面向过程:模块化、自顶向下、结构化。模块化指的是将程序划分成若干个函数(过程)。自顶向下:不断将任务拆分成子任务。结构化指不用GoTo,只使用顺序、选择、循环三种控制结构。面向对象:封装、继承、多态性。封装,只能访问对象的公有成员函数和成员变量。继承,派送类自动拥有基类的成员。多态性,不同的类实现同一个函数的方式不同。 工具 源码控制工具 源码控制工具的作用: 源码备份,节省时间和磁盘空间。 方便退回。有时突然引...原创 2021-03-20 15:18:46 · 449 阅读 · 1 评论 -
第二章 软件过程与思想 第一节 基础
基础 软件项目失败的常见原因(学院派) 对客户需求理解不足造成的风险。主要包括需求变更风险,涉及风险,过程风险,安装及维护风险。由于管理人员能力不够,经验不足,沟通不畅,任务或其分配不合理造成的各种风险,主要包括进度风险,预算风险,管理能力风险,信息安全风险。由于技术力量不足,开发环境工具不足造成的风险。主要包括技术风险,质量风险,软件设计工具风险,软件开发工具风险,员工技能风险。由于公司或项目组内外部环境变化所导致的风险,主要包括人力资源风险,政策风险,市场...原创 2021-03-13 10:54:37 · 204 阅读 · 0 评论