Daily Build and Smoke Test

软件测试人员之每日构建和冒烟测试 冒烟测试应该对整个系统进行端到端的验证。通常我们会事前设计一些冒烟测试用例,然后对其进行测试。 阅读详情

Steve McConnell,代码完成(code complete)的作者曾于1996年在IEEE Software杂志上发表了下面这篇关于每日编译和冒烟测试的文章,已经是别人当时的最佳实践(Best Practices)了。

我们现在好几个项目组都在做Daily Build,就这一点上,其实已经落后别人十年了,但是我们希望能够坚持把Daily Build做好,为研发的正常进行提供保证。

原文链接是http://www.stevemcconnell.com/bp04.htm

下面贴出原文,以及我自己的翻译,不当之处,请斧正。

 

Daily Build and Smoke Test

 

If you want to create a simple computer program consisting of only one file, you merely need to compile and link that one file. On a typical team project involving dozens, hundreds, or even thousands of files, however, the process of creating an executable program becomes more complicated and time consuming. You must "build" the program from its various components.

 

A common practice at Microsoft and some other shrink-wrap software companies is the "daily build and smoke test" process. Every file is compiled, linked, and combined into an executable program every day, and the program is then put through a "smoke test," a relatively simple check to see whether the product "smokes" when it runs.

 

BENEFITS. This simple process produces several significant benefits.

 

It minimizes integration risk. One of the greatest risks that a team project faces is that, when the different team members combine or "integrate" the code they have been working on separately, the resulting composite code does not work well. Depending on how late in the project the incompatibility is discovered, debugging might take longer than it would have if integration had occurred earlier, program interfaces might have to be changed, or major parts of the system might have to be redesigned and reimplemented. In extreme cases, integration errors have caused projects to be cancelled. The daily build and smoke test process keeps integration errors small and manageable, and it prevents runaway integration problems.

 

It reduces the risk of low quality. Related to the risk of unsuccessful or problematic integration is the risk of low quality. By minimally smoke-testing all the code daily, quality problems are prevented from taking control of the project. You bring the system to a known, good state, and then you keep it there. You simply don't allow it to deteriorate to the point where time-consuming quality problems can occur.

 

It supports easier defect diagnosis. When the product is built and tested every day, it's easy to pinpoint why the product is broken on any given day. If the product worked on Day 17 and is broken on Day 18, something that happened between the two builds broke the product.

 

It improves morale. Seeing a product work provides an incredible boost to morale. It almost doesn't matter what the product does. Developers can be excited just to see it display a rectangle! With daily builds, a bit more of the product works every day, and that keeps morale high.

 

USING THE DAILY BUILD AND SMOKE TEST. The idea behind this process is simply to build the product and test it every day. Here are some of the ins and outs of this simple idea.

 

Build daily. The most fundamental part of the daily build is the "daily" part. As Jim McCarthy says (Dynamics of Software Development, Microsoft Press, 1995), treat the daily build as the heartbeat of the project. If there's no heartbeat, the project is dead. A little less metaphorically, Michael Cusumano and Richard W. Selby describe the daily build as the sync pulse of a project (Microsoft Secrets, The Free Press, 1995). Different developers' code is allowed to get a little out of sync between these pulses, but every time there's a sync pulse, the code has to come back into alignment. When you insist on keeping the pulses close together, you prevent developers from getting out of sync entirely.

 

Some organizations build every week, rather than every day. The problem with this is that if the build is broken one week, you might go for several weeks before the next good build. When that happens, you lose virtually all of the benefit of frequent builds.

 

Check for broken builds. For the daily-build process to work, the software that's built has to work. If the software isn't usable, the build is considered to be broken and fixing it becomes top priority.

 

Each project sets its own standard for what constitutes "breaking the build." The standard needs to set a quality level that's strict enough to keep showstopper defects out but lenient enough to dis-regard trivial defects, an undue attention to which could paralyze progress.

 

At a minimum, a "good" build should

 

compile all files, libraries, and other components successfully;

link all files, libraries, and other components successfully;

not contain any showstopper bugs that prevent the program from being launched or that make it hazardous to operate; and

pass the smoke test.

Smoke test daily. The smoke test should exercise the entire system from end to end. It does not have to be exhaustive, but it should be capable of exposing major problems. The smoke test should be thorough enough that if the build passes, you can assume that it is stable enough to be tested more thoroughly.

 

The daily build has little value without the smoke test. The smoke test is the sentry that guards against deteriorating product quality and creeping integration problems. Without it, the daily build becomes just a time-wasting exercise in ensuring that you have a clean compile every day.

 

The smoke test must evolve as the system evolves. At first, the smoke test will probably test something simple, such as whether the system can say, "Hello, World." As the system develops, the smoke test will become more thorough. The first test might take a matter of seconds to run; as the system grows, the smoke test can grow to 30 minutes, an hour, or more.

 

Establish a build group. On most projects, tending the daily build and keeping the smoke test up to date becomes a big enough task to be an explicit part of someone's job. On large projects, it can become a full-time job for more than one person. On Windows NT 3.0, for example, there were four full-time people in the build group (Pascal Zachary, Showstopper!, The Free Press, 1994).

 

Add revisions to the build only when it makes sense to do so. Individual developers usually don't write code quickly enough to add meaningful increments to the system on a daily basis. They should work on a chunk of code and then integrate it when they have a collection of code in a consistent state-usually once every few days.

 

Create a penalty for breaking the build. Most groups that use daily builds create a penalty for breaking the build. Make it clear from the beginning that keeping the build healthy is the project's top priority. A broken build should be the exception, not the rule. Insist that developers who have broken the build stop all other work until they've fixed it. If the build is broken too often, it's hard to take seriously the job of not breaking the build.

 

A light-hearted penalty can help to emphasize this priority. Some groups give out lollipops to each "sucker" who breaks the build. This developer then has to tape the sucker to his office door until he fixes the problem. Other groups have guilty developers wear goat horns or contribute $5 to a morale fund.

 

Some projects establish a penalty with more bite. Microsoft developers on high-profile projects such as Windows NT, Windows 95, and Excel have taken to wearing beepers in the late stages of their projects. If they break the build, they get called in to fix it even if their defect is discovered at 3 a .m.

 

Build and smoke even under pressure. When schedule pressure becomes intense, the work required to maintain the daily build can seem like extravagant overhead. The opposite is true. Under stress, developers lose some of their discipline. They feel pressure to take design and implementation shortcuts that they would not take under less stressful circumstances. They review and unit-test their own code less carefully than usual. The code tends toward a state of entropy more quickly than it does during less stressful times.

 

Against this backdrop, daily builds enforce discipline and keep pressure-cooker projects on track. The code still tends toward a state of entropy, but the build process brings that tendency to heel every day.

 

Who can benefit from this process? Some developers protest that it is impractical to build every day because their projects are too large. But what was perhaps the most complex software project in recent history used daily builds successfully. By the time it was released, Microsoft Windows NT 3.0 consisted of 5.6 million lines of code spread across 40,000 source files. A complete build took as many as 19 hours on several machines, but the NT development team still managed to build every day (Zachary, 1994). Far from being a nuisance, the NT team attributed much of its success on that huge project to their daily builds. Those of us who work on projects of less staggering proportions will have a hard time explaining why we aren't also reaping the benefits of this practice.

 

Editor: Steve McConnell, Construx Software, 11820 Northup Way #E200 , Bellevue , WA 98005 .

E-mail: steve.mcconnell@construx.com - WWW: http://www.construx.com/stevemcc/

 

 

 

 

 


每日构造与冒烟测试

 

如果你想创建一个只包含一个源程序文件的简单程序,那么你只需要编译、连接那一个文件就可以了。如果是一个团队项目组,有着许多甚至上千个源程序文件,那么要创建一个可执行程序的过程就变得更复杂、更耗时。你必须用各种各样的组件将程序逐步建立起来。

 

在微软或其它一些软件公司中惯例是:每日构造并做“冒烟测试”。每天都对已完成的源程序进行编译,然后连接组合成可执行的程序,并做“冒烟测试”,以简单的检查该执行程序在运行时是否会“冒烟”。

 

带来的好处

虽然这是一个非常简单的过程,但却有非常重要的意义:

 

1、能最小化集成风险

项目组可能遇到的一个很大的风险是,项目组成员根据不同的系统功能各自开发不同的代码,但是当这些代码集成为一个系统的时候,也许系统完成不了预期的功能。这种风险的发生取决于项目中的这种不兼容性多久才被发现,由于程序界面已经发生了变化,或者系统的主要部分已经被重新设计和重新实现了,相应的排错工作将非常困难和耗时。极端情况下,集成的错误可能回导致项目被取消掉。每日构造和冒烟测试可以使这种集成错误变得非常小,而且便于解决,防止了很多集成问题的产生。

 

2、能减小产品低质量的风险

    这种风险是和集成不成功、集成出错相关联的。每天对集成的代码做一些少量的冒烟测试,即可杜绝项目中那些基本的质量问题。通过这种方式,使系统达到一种周知的良好状态,维护这样的系统可以防止系统逐步恶化到耗费大量时间排查质量问题的地步。

3、能简单化错误诊断

当系统每天都进行build和测试时,系统任何一天发生的错误都能够变得十分精细,便于排查。比如在17日系统还运行正常,18日就出错了,那么只需要检查这两次build之间的代码变化就可以了。

 

4、能极大鼓舞项目组的士气

看到产品的不断成长,能够极大的鼓舞项目组的士气,有时甚至不管这个产品到底用来做什么。开发人员可能会为系统显示了一个矩形而感到激动。通过每日构造,产品每天进步一点点,保证项目士气的持续高涨。

 

进行每日构造和冒烟测试

虽然说这是一个简单枯燥的活,每天进行build,每天进行测试,但也有着一些值得注意的细节:

 

1、每天坚持

每日构造,最重要的就是“每日”。如Jim McCarthy所说,把每日构造看作是项目的“心跳”,没有“心跳”的话,项目也就死了(Dynamics of Software Development, Microsoft Press, 1995)。Michael Cusumano and Richard W. Selby描述了另外一种隐含的比喻,把每日构造比作项目的“同步脉冲”(Microsoft Secrets, The Free Press, 1995)。 不同开发人员写的代码在他们的“脉冲”之间肯定都会存在“同步”的差异,但是必须有这样一个“同步脉冲”,使得这些代码能够组合为一个整体。当项目组坚持每天把这些不同的“脉冲”组合到一起的时候,开发人员脱离整体的情况就会得到极大程度的杜绝。

 

有些项目组把这一过程简化为“每周build一次”。这样带来的问题是,某一次build失败后,可能要回溯好几周才能找到原因。如果这种情况发生的话,已经得不到经常build带来的好处了。

 

2、严格检查每一次build

要保证每一次build的成功,就必须保证build后的结果(也可称为build)是可以正常运行的,如果build不可运行,那么本次build被认为是不成功的,同时应该将修复此次build的工作提高到项目组最高级别来处理。

对于如何衡量一个build,每一个项目组都会定义一些自己的标准,这些标准需要设定一个严格的质量级别来处理那些特别严重的缺陷,同时也需要具有一定的伸缩性来忽略掉那些微不足道的缺陷,一些不适当的关心也许会使整个过程举步为艰。

一个好的build起码应该具备以下条件:

●能够成功编译所有的文件、库,以及其它相关组件;

●能够成功链接所有的文件、库,以及其它相关组件;

●不能存在任何使得系统无法运行或者运行出错的高级别故障;

●当然,必须通过冒烟测试

 

3、每天进行冒烟测试

冒烟测试应该是对整个系统流程从输入到输出的完整测试。测试不必是面面俱到的,但是应该能够发现系统中较大的问题。冒烟测试应该是足够充分的,通过了冒烟测试的build就可以认为是经过充分测试、足够稳定的。

不进行冒烟测试的build是没有太大价值的。冒烟测试就像一个哨兵,在阻止着产品质量恶化和集成问题的产生,不进行冒烟测试,每日构造可能会变成浪费时间的练习。

冒烟测试必须随着系统的扩充而扩充。最初,冒烟测试可能是非常简单的,比如验证系统是否会打印“Hello World”,随着系统功能的扩充,冒烟测试需要越来越充分。最初的冒烟测试也许只需要几秒钟来执行,逐渐地,测试可能会花费30分钟,1小时,甚至更长。

 

4、建立一个专门的build小组

    在很多项目组,维护每日构造,并更新冒烟测试用例,会耗费一个人工作的大部分时间。因此在一些大的项目中,这项工作独立成不止一个人来完成的全职工作。比如在 Windows NT 3.0的研发中,就有一个由四个全职人员组成的专门的build小组(Pascal Zachary, Showstopper!, The Free Press, 1994)。

 

5、为build增加修订,如果这样做有意义的话

    一般开发人员不会每天都经常向系统中快速的增加实际的代码,通常是每隔几天,他们在开发好完成某个功能的一套代码以后,然后集成到整个系统中。

 

6、规定一些导致build失败的惩罚措施

很多执行每日构造的项目组都会规定一些惩罚措施,来惩罚那些导致build失败的行为。从最开始,项目组成员就清楚的知道,build的正常执行是项目组的头等大事。一个失败的build是项目组的意外,无法成为项目组工作的准则。必须坚持:导致build失败的同事,必须停下手中的工作,首先来解决build失败的问题。如果一个项目组的build经常失败的话,久而久之的,再来谈build的正确性就没有意义了。

有种轻松的惩罚措施,能够突出解决问题的优先性。Some groups give out lollipops to each "sucker" who breaks the build. This developer then has to tape the sucker to his office door until he fixes the problem. 有些项目组会惩罚犯错的同事戴上山羊角,或者向一个项目基金捐献5块钱。

有些项目组对此的惩罚就有点残酷了。微软的开发人员,在一些知名度很高、很重要的产品如Windows NT,Windows 95,Excel等产品后期研发中,被要求随时带着寻呼机,如果你的代码导致build失败的话,即使是凌晨3点钟,也会要求你立即来处理这个问题。

 

7、即使在压力下也需坚持每日构造和冒烟测试

当项目进度的压力越来越大时,维护每日构造的工作看起来有些浪费时间,但是恰恰相反。在压力之下,开发人员丢掉一些平时的规定,会采用一些设计和实现的捷径,这在平时压力较小的环境下一般时不会用的。代码的review和单元测试也可能会比平时粗心一些,这些代码的状态变化也会比平时快很多。

为防止这种情况的出现,每日构造会坚持相关的规定,让压力下的项目保持在正轨上。代码仍然每天在不断变化,但是构造过程使得这种变化每天都可控。

 

谁能够从每日构造这种过程中得到好处呢?一些开发人员会抗议说,由于他们的项目太大,每天进行build是没有实际意义的。但是为什么现在最复杂的软件项目组却能够成功的执行每日构造的制度呢?本文首发时,Windows NT包括了560万行代码、分布在4万个源程序文件中,项目组仍然可以坚持每日构造。

 

Web应用CI/CD流水线设计:从DevOps到端到端闭环交付 CI/CD流水线是现代Web应用持续交付的核心基础设施,其本质是将代码变更自动转化为可验证、可部署、可回滚的生产就绪版本。它基于持续集成、持续交付与持续发布(CI/CD/CR)分阶段协同原理,通过声明式配置、镜像构建优化、Kubernetes原生编排与自动化质量门禁,实现开发提交→测试验证→灰度发布→指标监控的全链路闭环。技术价值在于显著压缩上线周期(实测≤90秒)、降低人工干预故障率(减少0.87事故/年/环节)、提升系统韧性与可观测性。典型应用场景覆盖金融、电商、SaaS等高可用Web APP交付体系, 阅读详情

相关推荐

从freeCodeCamp到AI项目:DevOps与持续集成工程化实践指南

持续集成与持续交付(CI/CD)是现代软件工程的核心实践,它通过自动化构建、测试和部署流程,确保代码质量并加速迭代。其原理在于将开发工作流标准化,每次代码变更都触发一系列验证,从而快速发现并修复问题。这一实践对于提升团队协作效率和软件可靠性具有重要价值,广泛应用于Web开发、微服务及云原生等领域。随着AI应用的普及,将这套成熟的工程体系应用于AI项目开发成为关键挑战。AI项目在管理大型模型文件、处理复杂环境依赖以及评估非确定性输出等方面存在特殊性。本文以freeCodeCamp这一经典开源项目的DevOps

a359798678的博客 437

软件测试之冒烟测试(超详细)

维基百科上对冒烟测试的解释:冒烟测试这个名称的来历,最初是从电路板测试得来的。因为当电路板做好以后,首先会加电测试,如果板子没有冒烟再进行其它测试,否则就必须重新来过。而在软件研发中,冒烟测试其实是微软首先提出来的一个概念,和微软一直提倡的每日build(构建版本)有很密切的联系。具体说,冒烟测试就是在每日build(构建版本)建立后,对系统的基本功能进行简单的测试。这种测试强调程序的主要功能进行的验证,而不会对具体功能进行更深入的测试。

huace3852的博客 3万+

OpenClaw Skill系统:面向LLM的工作记忆外挂与Markdown驱动自动化

Skill是一种为大语言模型(LLM)设计的轻量级工作记忆扩展机制,它通过结构化元数据、动态Markdown模板和声明式执行指令三层架构,将业务逻辑转化为LLM可直接理解与填充的自然语言协议。其核心原理是按需注入上下文,规避传统插件的耦合性与函数调用的抽象损耗,技术价值在于降低LLM推理负担、提升输出格式稳定性与跨团队协作效率。典型应用场景包括自动化周报生成、Jira工单创建、CI/CD流水线编排及多源日志诊断等。本文聚焦OpenClaw框架下Skill的设计范式、仓库治理与Workflow闭环实践,深度结

weixin_34341229的博客 503

冒烟测试(smoke testing)&每日构建 (Daily Build)

关于冒烟测试,应该是微软首先提出来的一个概念,和微软一直提倡的每日build有很密切的联系。具体说,冒烟测试就是在每日build建立后,对系统的基本功能进行简单的测试。这种测试强调功能的覆盖率,而不对功能的正确性进行验证。从这一点看和所谓的“接受性(验收)测试(Acceptance Test)”非常相似。不同之处就在于他们执行的频率和被测的版本不同。 至于冒烟测试这个名称的来历,大概是从电路板

砳缝的渴望 1361

AI原生测试平台mabl实战:智能自愈与自动化测试新范式

自动化测试是软件工程中保障质量、提升交付效率的关键实践,其核心原理是通过脚本或工具模拟用户操作,对软件功能进行验证。传统自动化测试依赖于固定的元素定位器(如XPath、CSS选择器),在应对频繁的UI变更时维护成本高昂,测试脚本脆弱易失效。随着人工智能技术的发展,AI驱动的测试自动化平台通过引入智能元素识别、行为学习和自适应机制,显著提升了测试的稳定性和可维护性,其技术价值在于降低长期维护成本、提升测试覆盖率,并实现更贴近真实用户行为的验证。这类技术尤其适用于产品迭代快速、UI变动频繁的互联网应用测试场景。

weixin_34062469的博客 386

冒烟测试的一些示范性质的用例

冒烟测试的一些示范性质的用例。 在软件中,“冒烟测试”这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程。在检查了代码后,冒烟测试是确定和修复软件缺陷的最经济有效的方法。冒烟测试设计用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。

什么是冒烟测试 每日build

 什么是冒烟测试?http://www.enet.com.cn 2007年04月23日11:04【导 读】:关于冒烟测试,应该是微软首先提出来的一个概念,和微软一直提倡的每日build有很密切的联系。具体说,冒烟测试就是在每日build建立后,对 系统的基本功能进行简单的测试。这种测试强调功能的覆盖率,而不对功能的正确性进行验证。从这一点看和所谓的“接受性(验收)测试(Accept

GreenLearner的专栏 1503

软件测试用例PPT。。。

软件测试用例PPT。。。。。。比较简单啊。。。。。。

冒烟测试执行标准

冒烟测试

cuihaihui的博客 352

华为软件精英大赛冒烟测试工具

参加华为软件精英大赛的冒烟测试工具

Ubuntu下全面解析硬盘健康:从基础检测到性能优化

本文详细介绍了在Ubuntu系统中如何全面监测硬盘健康状态。从安装smartmontools工具、解读SMART关键属性(如重新分配扇区计数、通电时间),到进行性能基准测试(使用dd和fio),最后根据检测结果提供针对性的优化与预警方案,帮助用户有效预防数据丢失并提升硬盘可靠性。

weixin_29223603的博客 287

OPC服务器实战指南:从协议选型到搭建避坑

在工业自动化与数字化转型进程中,数据采集是连接物理设备与信息系统的关键环节。OPC服务器作为工业控制系统中的核心中间件,负责将不同协议的PLC、仪表数据统一转换为标准接口,供SCADA、MES等上层应用消费。从传统的OPC DA到跨平台的OPC UA,协议演进解决了互联互通与安全性的挑战。选型时需综合设备协议、平台及实时性要求,免费方案如Ignition Maker与开源库可降低测试门槛。本文以KEPServerEX为例,详解OPC服务器的搭建步骤、标签配置、字节序等易错细节,并给出故障速查表与稳定性优化经

weixin_34347651的博客 412

海思ISP实战:YUV Sharpen参数调试全解析

本文深入解析了在海思ISP平台上进行YUV Sharpen参数调试的实战经验。文章以海思3516EV300芯片为例,详细拆解了EdgeFiltStr、TextureFreq等核心参数的作用与协同策略,并重点阐述了如何通过ISO联动调试,在图像清晰度与噪声抑制之间取得最佳平衡,为图像调试工程师提供了宝贵的避坑指南和实战参考。

grape的博客 208

Smoke Test & Daily Build

冒烟测试的由来: 冒烟测试,应该是微软首先提出来的概念,与微软一直提倡的每日构建(build)有很密切的联系。 具体来说,冒烟测试就是在每日构建完成后,对系统的基本功能进行简单的测试。这种测试强调功能的覆盖率,而不对功能的正确性进行验证。 至于冒烟测试这个名称的来历,大概是从电路板测试得来的。因为当电路板做好以后,首先会加电测试,如果板子没有冒烟在进行其它测试,否则就必须重新来过

Abbygee的博客 523

别再手动写JSON了!用Node-RED OPC UA节点5分钟搞定楼宇温湿度数据采集

本文介绍了如何利用Node-RED和OPC UA节点快速实现楼宇温湿度数据的自动化采集与JSON格式转换。通过可视化工具Node-RED,开发者无需编写复杂代码,5分钟内即可完成从传感器到数据输出的全流程配置,大幅提升智慧楼宇和工业物联网项目的实施效率。

weixin_30368405的博客 431

揭秘Synopsys EDA中的AI黑科技:DSO.ai如何改变传统芯片设计流程

本文深入探讨了Synopsys EDA中的AI黑科技DSO.ai如何革新传统芯片设计流程。通过数据驱动的方法论、功耗优化革命和时序收敛智能加速,DSO.ai显著提升了设计效率和质量,实现了从经验驱动到AI驱动的范式转变。文章还提供了实战指南,帮助团队跨越AI EDA的实施鸿沟。

weixin_29296241的博客 523

Smoke Test & Ad hoc Test

smoke test 最初源自微软以及很多大的软件公司,“daily build and smoke test” – 即每天自动编译及smoke test,这里的smoke test仅仅是一个简单的测试,看看我们编译好的产品是否“冒烟”以检查每天编译的结果是否成功。smoke test可以极大的减少集成失败的风险。 带来的好处 虽然这是一个非常简单的过程,但却有非常重要的意义: 1、能最小化集成风险 项目组可能遇到的一个很大的风险是,项目组成员根据不同的系统功能各自开发不同的代码,但是当这些代码集成为一个系

lingangwang的博客 321

TwinCAT3 Modbus-TCP Client/Server使用

/起始地址是12289//起始地址是12294。

panjinliang066333的博客 7732

AI工程化实践:从GEO评估陷阱到CI/CD门禁的全链路方案

在AI工程化领域,持续集成与持续部署(CI/CD)是现代软件开发的核心实践,通过自动化构建、测试和部署流程确保代码质量。其技术原理基于版本控制、自动化测试和容器化技术,能够显著提升开发效率和系统可靠性。在AI搜索和Agent开发场景中,CI/CD的价值尤为突出,需要建立分层门禁体系应对AI生成代码的随机性。GEO仪表盘作为传统搜索引擎的评估工具,在AI搜索时代面临测量失效的挑战,而基于业务结果的可验证指标和动态冒烟测试成为关键解决方案。这些工程实践结合大仓模式下的微服务治理,为AI Agent的自动化编码和

weixin_34054931的博客 348

【NIFI】实现HANA->ORACLE数据同步

实现 HANA->ORACLE数据同步。

weixin_43159039的博客 1506

PLC编程入门基础知识

PLC即为可编程逻辑控制器,实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同。

SANRENYIXING的博客 2万+

【开源软件移植】鸿蒙 PC 三方库适配实战:从 7-Zip Native 编译到 ArkTS 调用完整跑通

本文记录了将7-Zip压缩功能适配为HarmonyOS PC可复用三方库的完整过程。通过裁剪7-Zip 26.01源码,使用CMake交叉编译为Native库,并通过Node-API暴露给ArkTS调用,最终打包成HAR/OHPM可复用库。项目实现了.7z格式的压缩、解压和测试功能,在鸿蒙PC设备上验证通过。文章详细介绍了工程结构、环境配置和适配过程中的关键点,包括Native编译、NAPI异步任务处理等难点,为开源软件移植鸿蒙生态提供了实战参考。

一键难忘的博客 4万+

CTFshow-pwn入门-前置基础pwn32-pwn34

CTFshow-pwn入门-前置基础pwn32-pwn34

你们de4月天的博客 1129

Jenkins自动化测试配置指南:实现Python+Selenium定时执行与持续集成

持续集成(CI/CD)是现代软件开发中保证质量、快速反馈的核心实践,其原理是通过自动化工具链实现代码的持续构建、测试与部署。在自动化测试领域,Jenkins作为一款开源的持续集成服务器,能够将测试脚本的执行自动化、定时化,从而最大化测试效率。通过配置源码管理、构建触发器、Shell脚本执行等步骤,可以实现Python+Selenium Web UI测试的无人值守运行,并生成JUnit、HTML等格式的测试报告。这种技术方案特别适用于需要定期回归测试、监控线上功能稳定性的场景,能够将自动化测试从个人工具升级为

weixin_34015336的博客 635

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 黄山组图之一
下一篇: EXP-00056错误的解决
binaryge
博客等级 码龄23年 2粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值