‘壹’ 程序员如何让自己的程序少出BUG(转)
软件测试心得
,而且还经常写一些工作上的事,现在感觉自己老了似的,开始转型了,会选择写一些总结而不是琐碎,也许这是我以后当领导的征兆吧。
程序员是善于思考的一个职业,做过这行的都知道,写一个程序的过程都要经过构思、设计、写代码、测试到最后运行这几个步骤。慢慢地,这个习惯也被搬到了生活中,现在我才觉得,我平时做事这么的冷静善思考原来是工作影响的原因。
象我一样,大多程序员都有一个毛病,或者说一个习惯,自己编写过的代码都不愿意测试,他们凭着自己的习惯,理论上完成了代码的编写就认为自己的工作结束了,剩下的工作应该交给测试人员了。但实际上来讲,如果代码存在BUG,造成软件在运行期出错,那么测试人员和客户肯定会发现这些BUG的,再等到测试人员或者客户把BUG反馈回来的时候代价就已经很大了,不仅仅是时间的浪费,更重要的还有1、影响了客户对产品以及公司的信任度,2、影响了程序员自己的声誉,3、影响了代码的可读性以及质量,4、增加 了DEBUG的难度,5、对程序员的心理造成一定的影响。
首先,程序员应该克服自己身上的一些缺点,这是很重要的一点,因为每个程序员都有自己的编程习惯,而且每个程序员对自己刚刚完成的程序都会信心百倍的说“绝对没问题”,实际上这种想法很正常,因为每段代码都是通过程序员认真谨慎的思考和设计之后才写出来的,在设计时已经排除了很多问题,所以程序员不会将自己认为不正确的判断写到程序里,但这仅仅是理论上的想法,但人哪有不反错的时候。其实程序员在读其他人写的程序的时候,就会很谨慎,仔细找到程序上的错误,但对自己的代码就很难这样做,如果把这种谨慎应用到自己的代码上来,BUG会减少到最少。软件工程所说的各阶段工作想必大家都清楚,前期的设计以及需求分析才是一个软件工程的重点,这里也是花费时间最多的地方,当对要写的程序有了一个清晰的轮廓之后再动手编写代码。
第二,刚刚提到的前期设计,是指在编写代码之前所作的工作,这要求程序员对系统的整个结构以及逻辑有很清楚的理解,这也要求对系统的需求做到位。我没有写过文档,所以这里不谈文档了。思路清晰很重要,但每个人并不能将系统的整个设计思路都记在脑袋里,那最好就写下来,特别是一些复杂的逻辑结构关系还有复杂的算法。
第三,代码的编写,要尽量减少拼写的错误,严禁使用关键字作为变量来使用,要尽量做到代码模块化,并且保证其正确性和可重复使用性。因为是模块组成的,写过之后可以将每个模块部分单独测试,因为代码量少了质量自然提高了。对顺序执行要求很高的函数尽量不采用调用子函数的方法,让程序按顺序走吧。
第四:代码检查以及系统功能测试,这是保证代码质量的最后一步了,我们可以写一些代码模块或者小工具来进行测试工作,跟踪变量值的变化,使用一些小技巧在这个阶段都是必要的,这里和测试人员的测试不同之处在于:仍然让程序员的注意力放在其自己的代码范围内,减小了排错的难度。
按照如上步骤来走的话,那么我想你的系统应该足够健壮了。
把对待别人代码的态度放到自己的代码上来,也就是反复的Review自己的代码检查逻辑错误也是相当好的办法。别把自己辛苦写的代码看的很值钱,在团队中尽量与别人分享、Review代码这是实际工作的经验。
作为一个优秀的程序员要具备这些习惯,看自己的代码就象对待自己的一样,爱惜、呵护是必须的,同时也要象园丁一样及时修剪多于的树枝来让自己的代码走正确的道路。
‘贰’ java编程中 常见的异常有哪几种
相信作为程序员的我们在对程序进行编译过程中经常会遇到错误,或者在运行过程中出现错误,在这里主要跟大家谈谈经常遇到的一些异常与错误,以及解决办法。
异常是指程序在编译或运行过程出现的错误。
在java.lang包中Throwable包含了所有的异常。
Error (错误) 和Exception(异常)
(1)Error(错误)
一旦发生无法修复,但可以避免发生。
常见错误类:
IOError:I/O错误,当发生严重的I/O错误时,抛出此错误。
VirtualMachineError:虚拟机错误,当 Java 虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。
StackOverflowError:栈内存满了,当应用程序递归太深而发生堆栈溢出时,抛出该错误。
OutofMemoryError:堆内存满了,因为内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时抛出该异常。
以上是一些常见的错误,在Error类中还有一些别的错误(参照文件Java.lang.Throwable.Error).
(2)Exception(异常)
一旦发生,可以捕获并处理,不会导致程序终止,有时可以避免有时无法避免。
异常的分类:
1.编译时异常(需要强制处理) 2.运行时异常(不需要强制处理)
常见的异常有:
IOException:输入输出流异常
FileNotFoundException:文件找不到的异常
ClassNotFoundException:类找不到的异常
DataFormatException:数据格式化异常
NoSuchFieldException:没有匹配的属性异常
NoSuchMethodException:没有匹配的方法异常
SQLException:数据库操作异常
TimeoutException:执行超时异常
常见的运行时异常:
RuntimeException:运行时异常
NullPointerException:空指针异常
:数组越界异
ClassCastException:类型转换异常
IllegalArgumentException:非法的参数异常
InputMismatchException:输入不匹配
以上是常见的一些异常,另外还有别的异常,参见文件:Java.lang.Throwable.Exception
既然我们常常会遇到一些异常,那我们如何来处理这些异常就是一个急需解决的事情。
(1) 如何处理编译时异常?
方法一:将需要处理的代码块放在一个try...catch...中
try{
//需要处理异常的代码
}catch(XXXException ef){
ef.printStackTrace();
}
我们方法一就是要将我们不确定的代码放入try......catch中,先进行try一下,如果没有异常,则不会触发catch,没有输出,一旦出现异常,那么catch就会工作,在catch中捕获异常信息,根据异常信息进行补救措施。
如以下代码:
从结果可以看出,我们在输入数据的时候出现错误,这样通过自定义异常能够让我们更直接快速的找到运行或编译时的异常。
在上述中我们分别提到了三种throw,分别是Throwable,Throws以及throw,那么到底三者有什么区别?
Throwable:是指在在Java.lang包中的一个类,其包含了所有的异常和错误,其中类Error和Exception 是它
的子类。
Thows:是指在解决编译时异常,将方法中异常抛给上一级,在方法后面要加Throw Exception来进行抛。
throw:是指在自定义异常时,如果方法出现异常,那么将作为引用方法的对象抛出。即抛出异常。
希望对您有所帮助!~
‘叁’ 新程序员,刚入职两个月,感觉好闹心,简单需求有时出错,复杂需求又做不来,而且有好多不会的东西。
先装傻,不要盲目去揣度上级的想法。新人刚进公司,基本都是这样的,刚开始一年时间是最难混的。只要你自己有态度,肯努力,多学习,会熬过去的。如果最后经理主动提出不留你,那也没办法了,就只能走了。
‘肆’ 程序员写程序时经常出错吗我刚学c,写的100行左右代码就有好几个问题上万行的代码那是怎么写的啊
呵呵、、、出错很正常啊!你刚开始学习,不要太把错误放在心上,重要是解决错误的办法和过程。至于那上万行的代码,大型程序都是模块化编写的,不是一c文件。那是要分成若干c文件,不能c文件中放着不同的函数(对应相应的功能),单个c文件编译容易发现错误。最后将所有的c文件整体编译。就这样!!模块化编程思想!!
‘伍’ 鐢佃剳涓阌栾鎸囦护鏄浠涔堟剰镐
阌栾鎸囦护鏄鎸囩数鑴戝湪镓ц岀▼搴忔垨镎崭綔镞讹纴鐢变簬镆愮嶅师锲犳棤娉曟g‘镓ц屾垨鐞呜В镄勬寚浠ゃ傝繖浜涢敊璇鎸囦护鍙鑳戒细瀵艰嚧绋嫔簭宕╂簝銆佹暟鎹涓㈠け鎴栫郴缁熶笉绋冲畾绛夐梾棰樸
阌栾鎸囦护阃氩父鏄鐢变互涓嫔嚑涓铡熷洜寮曡捣镄勶细
1. 璇娉曢敊璇锛氲繖鏄链甯歌佺殑阌栾鎸囦护绫诲瀷涔嬩竴銆傚傛灉绋嫔簭锻桦湪缂栧啓浠g爜镞朵笉灏忓绩鐘浜呜娉曢敊璇锛屾瘆濡傛嫾鍐欓敊璇銆佹嫭鍙蜂笉鍖归厤绛夛纴缂栬疟鍣ㄥ氨镞犳硶姝g‘瑙f瀽杩欎簺鎸囦护锛屽艰嚧缂栬疟澶辫触鎴栫▼搴忚繍琛屾椂宕╂簝銆
2. 阃昏緫阌栾锛氩嵆浣挎寚浠ょ殑璇娉曟槸姝g‘镄勶纴浣嗗傛灉瀹冧滑镄勯昏緫涓嶆g‘锛屼篃鍙鑳藉艰嚧绋嫔簭鍑虹幇阌栾銆备緥濡傦纴濡傛灉绋嫔簭涓镄勬煇涓寰鐜娌℃湁姝g‘镄勭粓姝㈡浔浠讹纴闾d箞瀹冨彲鑳戒细镞犻檺寰鐜涓嫔幓锛屽艰嚧绋嫔簭宕╂簝鎴栧崰鐢ㄨ繃澶氲祫婧愩
3. 纭浠堕梾棰桡细链夋椂鍊欙纴阌栾鎸囦护鍙鑳芥槸鐢变簬纭浠堕梾棰桦紩璧风殑銆备緥濡傦纴濡傛灉鐢佃剳镄勫唴瀛樻垨澶勭悊鍣ㄥ嚭鐜版晠闅滐纴闾d箞瀹冧滑鍙鑳芥棤娉曟g‘镓ц屾寚浠ゃ傛ゅ栵纴濡傛灉鐢佃剳镄勭数婧愪笉绋冲畾锛屼篃鍙鑳藉艰嚧鎸囦护镓ц屽嚭阌欍
涓轰简阆垮厤阌栾鎸囦护镄勫彂鐢燂纴绋嫔簭锻橀渶瑕佷粩缁嗘镆ヤ唬镰侊纴纭淇濊娉曞拰阃昏緫閮芥槸姝g‘镄勚傚悓镞讹纴浠栦滑杩橀渶瑕佸圭▼搴忚繘琛屽厖鍒嗙殑娴嬭瘯锛屼互渚垮彂鐜板苟淇澶嶅彲鑳藉瓨鍦ㄧ殑阌栾銆傛ゅ栵纴淇濇寔鐢佃剳纭浠剁殑镩濂界姸镐佷篃闱炲父閲嶈侊纴杩椤彲浠ョ‘淇濇寚浠よ兘澶熸g‘镓ц屻
涓句釜渚嫔瓙锛屽亣璁句竴涓绋嫔簭锻樻e湪缂栧啓涓涓璁$畻绋嫔簭锛屼粬闇瑕佽╃▼搴忚诲彇涓涓鏁板瓧骞跺皢鍏朵箻浠2銆傚傛灉绋嫔簭锻树笉灏忓绩灏嗕箻娉曟寚浠ゅ啓鎴愪简锷犳硶鎸囦护锛岄偅涔堢▼搴忓氨浼氭墽琛岄敊璇镄勬搷浣滐纴瀵艰嚧璁$畻缁撴灉涓嶆g‘銆傝繖灏辨槸涓涓鍏稿瀷镄勭敱浜庨昏緫阌栾瀵艰嚧镄勯敊璇鎸囦护銆备负浜嗛伩鍏嶈繖绉嶆儏鍐电殑鍙戠敓锛岀▼搴忓憳闇瑕佷粩缁嗘镆ヤ唬镰侊纴纭淇濇疮涓鎸囦护閮芥槸姝g‘镄勚傚悓镞讹纴浠栦滑杩橀渶瑕佸圭▼搴忚繘琛屾祴璇曪纴浠ヤ究鍙戠幇骞朵慨澶嶅彲鑳藉瓨鍦ㄧ殑阌栾銆