Tag: 软件工程

说说技术债 Technical Debt

技术债 Technical Debt 是软件工程上特别是敏捷开发 (Agile Development) 中的一个概念. 指的是解决一个当前问题最好的方法往往需要更久的时间和精力, 但是为了加快软件开发进度, 赶在代码冻结前按时交差, 采取的一个较为折衷的解法方法. 但是这就是一笔债一样, 可能会把潜在的问题越积越大(利息), 甚至将来却无力偿还(修复). 1年半前, 我提了个BUG, 这个BUG大概是说一种数据文件里如果用TAB而不是空格来隔开字段, 则导入数据过程中软件会崩溃, 这个BUG的确是有效的, 因为把这数据文件放到别的软件中导入则是没有问题的. 前前后后讨论了半年, 然后总算被批准了, 不过由于开发任务繁重, 而且也不是那种非改不可的BUG, 所以就一直拖, 拖到今年10月份, 突然接到邮件通知: “agreed to …

性能评估软件说我写了几行无用的代码

在代码出现性能瓶颈的时候,我们通常使用性能评估软件也就是Profiler 来查看代码中到底是哪几行,或者哪几个模块比较耗资源(速度慢或者占内存). 最近我就用 Profiler 跑了一下,发现我写了几处无用的代码.具体如下: 每行代码左边那个数字是被调用的次数,中间是执行时间(毫秒),右边是子函数的执行时间.我红色标出来的执行次数都是 1498179,而在进入这个函数的前几行都是在判断,如果条件不符合就立马退出函数,避免继续往下执行而导致程序崩溃(数组访问越界等). 但是明显来说,这几行代码都没有起作用.删掉这几行代码能省下2-3秒的执行时间.其实这种编程风格是 “Defensive Programming” 也就是处处加些判断(比如判断对像是否为 null)而不让程序崩溃.但实际上并不推荐,因为最好是一遇到错误就立即抛出异常,这样可以让我们更早的知道潜在的问题,而不是隐藏错误. 英文: The profiler told me I wrote some useless code (An Example of Defensive Programming) 本文一共 305 …

再谈代码审核的重要性

一种观点是 写更多的代码 程序员就更有经验 这样程序里错误就会相对少一些. 但这并不是 说代码越多越好. 如果能用更少的代码完成更多的事 那么越少的代码隐藏的错误就更少. 统计代码行数只会鼓励糟糕的代码. Less is more! 代码审核 可以由多种方式来完成 比如可以结对编程 (Pair Programming) 或者可以由专门代码仓库负责人 按阶段审核并接受提交. 有了代码审核以下的错误就会少了很多. 英文: https://helloacm.com/case-study-importance-of-code-review/ 本文一共 171 个汉字, 你数一下对不对. 再谈代码审核的重要性. (AMP 移动加速版本) …

如何在 Visual Studio 里进行单元测试? (C# .NET)

没有单元测试的工程就不是好工程, 至少不是大工程. 在 Visual Studio 里可以很方便的进行单元测试的创建和运行. 下面的教程是基于C#但是也可以很容易的应用到其它语言,比如 C++. // Example: How to Create Unit Tests // helloacm.com using System; namespace ClassLibrary1 { public class Class1 { public int GetEven() …

VMProtect 对抗虚拟机 和 Win8.1 下的 Hyper V

VMProtect 是一款很有名的保护 native 程序的软件,由俄罗斯人开发的.被保护的软件/程序很难被反编译,是业界公认的利器.其中VMProtect 可以很简单的配置让程序无法在虚拟机下运行机制,如果在虚拟机(比如 VirtualBox) 运行保护的程序,就会弹出(默认,可定制)的错误,比如: 而这些,只要在VMProtect 的界面下 简单的配置成 Yes 就可以: 在 Win8.1 下, 有一个新的功能可以安装: Hyper-V (控制面版 – Programs and Features – Turn Windows Features on and off). …