`
zym_nanako
  • 浏览: 84397 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

程序员写防弹程序的问题[转]

阅读更多

 这是一个老问题,也是大问题。记得去年,一个朋友招几名资深程序员,我做面试官,问到一个有10年经验的程序员,这位仁兄说道,写程序也就是到处copy代码,不能运行的我改改就能让它运行。这句话我听了很恐怖,建议这人还是不要的好,会害死人。但是还是招聘了,造成了项目的bug满天飞。
根据我写代码的经验,代码分为3种,可以运行的代码,正确的代码,和好的代码。
写大多数时间能够运行的代码很easy的,使用几种常用的输入,得到几种常用的输出,一旦给一个不常用输入数据,程序就over了。
正确的代码不会over的,所有可能的输入数据,都是正确的,一般来说,所有可能的输入是测试不到的。
但是正确的代码并不一定是好的代码,正确的代码可能逻辑混乱,或者垃圾代码很多。
编写好的代码是我们的目标,好的代码具有鲁棒性,运行起来高效,即使不常见的输入也不导致当机或错误的输出,当然也必须满足其他的要求,线程安全,数据库的事务处理等等。
坏的程序,我总结了一下,出了问题大家的说法
1.函数不能这样调用,它的参数必须合法。
2.这段代码一直工作,它不会产生任何错误。
3.我的文档说明了这个全局变量是内部用的,只有我可以用。
经验告诉我们,你的代码在某个时间,某种情况下,会出错,很多人解释就是,不正确的输入,他当然会出问题。
当我们写程序的时候,我们不能做任何假设,我们不能想它不能发生。当你写的代码越来越多,工作也越做越快,你没有时间验证每一种情况,你的程序鲁棒性下降,你的代码的bug也越来越多。
举个我遇到的例子
这个一个给停车场的读卡器设置频率的程序,因为这种使用日立SuperH系列芯片的读卡器,可以设置各种读卡频率,使用函数setFreq,原型为 int setFreq(int array[],int arraylenth);传入参数有两个,一个int数组,后面的数组长度,返回的设置成功的频率个数,这位仁兄把这函数封装一下,认为后面的那个arraylenth不需要,因为sizeof(a)就是得到数组长度了。
函数写成这样
int SetFrequency(int a[])
{
     int retcode=setFreq(a,sizeof(a)/sizeof(int)););
     return retcode;
}
因为是交叉编译平台,公司没有购买相应的调试设备,无法经行调试,关于调试的问题,我以后会说的。当时公司只有一张频率的卡用于测试,我们测试通过,就ok了。
到了客户那里,不久就有投诉,很多频率的卡读不到,当时感到很是奇怪,后来发现问题。因为SuperH是32位的RISC CPU,a是指针,sizeof(a)的长度为4,setFreq只是设置4个频率,恰巧我的3张卡,在这4个频率之内。马上修改了这段代码,事后这位仁兄喋喋不休到,
int a[]={1,2,3,4,5,6,7};
    printf("%d",sizeof(a)/sizeof(int));
得到就是数组长度吗?注意你一旦传递数据,被调用的函数得到是个指针。

分享到:
评论

相关推荐

    程序员表白专用程序

    "程序员表白专用程序"就是一个这样的创意项目,它利用JavaScript(简称JS)这门强大的前端编程语言来为程序员们提供一个独特的方式来向心仪的对象表白。JavaScript是Web开发的基础,广泛应用于网页交互、浏览器扩展...

    程序员表白专用程序源码 (demo)

    程序员表白专用程序源码 (demo)程序员表白专用程序源码 (demo)程序员表白专用程序源码 (demo)程序员表白专用程序源码 (demo)程序员表白专用程序源码 (demo)程序员表白专用程序源码 (demo)程序员表白专用...

    程序员如何写程序

    本资源"程序员如何写程序"旨在深入浅出地引导程序员们理解软件开发的全过程,从构思到实现,再到测试与发布。通过C#的经典实例,我们将一步步探索这一过程。 首先,软件开发的初始阶段是需求分析。在这个阶段,...

    程序员级高级程序员级程序设计

    总的来说,《程序员级高级程序员级程序设计》涵盖了程序设计的多个高级层面,旨在培养出能够解决复杂编程问题、编写高效代码的专业程序员。通过深入学习和实践这些知识点,你将能够提升自己的编程能力,更好地应对...

    程序员高级程序员 程序设计辅助理解软件

    这个“程序员高级程序员程序设计辅助理解软件”压缩包文件,显然是为那些寻求晋升或者增强自身技能的软件开发人员准备的学习资源。其中包含的知识点涵盖了多个方面,特别强调了数据结构这一核心编程概念,同时也与...

    程序员写的后台管理系统模板

    【程序员写的后台管理系统模板】是一个基于C#编程语言和MVC3框架开发的后台管理界面模板,适合初学者和有经验的C#程序员用于快速构建自己的网站后台系统。MVC(Model-View-Controller)是一种设计模式,它将应用程序...

    程序员如何写文档

    程序员如何写文档

    程序员项目交接文档

    程序员项目交接文档概要 IT 项目交接文档概要是程序员在项目交接过程中的重要文件,它对项目的开发、测试和维护起着至关重要的作用。本文档概要将对程序员项目交接文档的主要内容进行概要介绍。 人事模块是程序员...

    软件工程思想——程序员与程序经理.doc

    在软件行业中,程序员和程序经理的角色至关重要,他们是软件开发的核心力量。软件工程的成功不仅依赖于技术能力,还需要有效的管理。管理并非单纯的控制,而是要激发团队潜力,共同达成目标,让每个成员都能在工作中...

    Java Web程序设计任务教程源码(黑马程序员)

    《Java Web程序设计任务教程》是一本专注于Java Web开发实践的书籍,由中国工信出版社出版,由传智播客旗下的高端教育品牌“黑马程序员”精心编著。这本书旨在帮助读者掌握Java Web开发的核心技术和实践方法,通过一...

    程序员练习打字程序.exe

    练习打字程序.exe是一个适用于Win7-32位的 C/C++程序员练习打字的神器!!

    好的程序员如何写代码

    以下是一些关于好的程序员写代码的特点和技巧: 1. **整洁规范**:好的程序员注重代码的视觉美感,空白和注释的布局都显得错落有致,遵循统一的命名和排版规范,使得代码易于阅读和理解。 2. **命名一致性**:他们...

    程序员记事本程序记录器

    【程序员记事本程序记录器】是一款专为程序员设计的高效工具,旨在提供一个便捷、功能丰富的文本编辑环境,帮助他们记录代码、调试信息、项目笔记等重要数据。这款记事本程序集成了多种实用功能,是编程人员日常工作...

    程序员必读非程序书籍

    【程序员必读非程序书籍】 对于程序员来说,技术能力的提升固然重要,但扩展视野、增强人文素养和社交技巧同样不可忽视。以下是从Stackoverflow和伯乐头条中收集到的29本非编程类书籍,这些书籍深受程序员喜爱,能够...

    程序员表白程序 源码开放性 第一辑 不断更新(程序之爱系列第一辑)

    【程序员表白程序 源码开放性 第一辑 不断更新(程序之爱系列第一辑)】 这个项目是一个程序员为了表达爱意而创作的独特程序,它不仅展现了编程技术的运用,还融合了情感的传递。程序员们常常以其独特的思维方式和...

    为什么程序员必须写技术博客?以及如何写?博客在面试时的加分可不是一点点,别再犹豫了,快行动起来!

    为什么程序员必须写技术博客_以及如何写_博客在面试时的加分可不是一点点,别再犹豫了,快行动起来!

    程序员的情书-----看专业程序员对程序的评价

    异常处理机制允许程序员捕获并处理程序运行过程中可能出现的错误情况,以防止程序崩溃或出现不可预料的结果。通过适当的异常处理,可以使程序更加健壮和稳定。例如,在Java中,可以使用try-catch-finally语句块来...

Global site tag (gtag.js) - Google Analytics