一、排版:
1.关键词和操作W之间加适当的空根{?
2.相对独立的程序块与块之间加空?
3.较长的语句、表辑ּ{要分成多行书写?
4.划分出的新行要进行适应的羃q,使排版整齐,语句可读?
5.长表辑ּ要在低优先操作W处划分新行Q操作符攑֜新行之首?
6.循环、判断等语句中若有较长的表达式或语句Q则要进行适应的划分?
7.若函数或q程中的参数较长Q则要进行适当的划分?
8.不允许把多个短语句写在一行中Q即一行只写一条语句?
9.函数或过E的开始、结构的定义及@环、判断等语句中的代码都要采用~进风格?
10.C/C++语言是用大括?#8216;{’?#8216;}’界定一D늨序块的,~写E序块时‘{’?
‘}’应各独占一行ƈ且位于同一列,同时与引用它们的语句左对齐。在函数?
的开始、类的定义、结构的定义、枚丄定义以及if、for、do、while?
switch、case语句中的E序都要采用如上的羃q方式?
二、注?
1.注释要简单明了?
2.边写代码Ҏ释,修改代码同时修改相应的注释,以保证注释与代码的一致性?
3.在必要的地方注释Q注释量要适中。注释的内容要清楚、明了,含义准确Q防?
注释二义性。保持注释与其描q的代码盔RQ即注释的就q原则?
4.对代码的注释应放在其上方盔R位置Q不可放在下面?
5.Ҏ据结构的注释应放在其上方盔R位置Q不可放在下面;对结构中的每个域
的注释应攑֜此域的右方;同一l构中不同域的注释要寚w?
6.变量、常量的注释应放在其上方盔R位置或右斏V?
7.全局变量要有较详l的注释Q包括对其功能、取D围、哪些函数或q程存取?
以及存取时注意事等的说明?
8.在每个源文g的头部要有必要的注释信息Q包括:文g名;版本P作者;生成
日期Q模块功能描qͼ如功能、主要算法、内部各部分之间的关pR该文g与其
它文件关pȝQ;主要函数或过E清单及本文件历史修改记录等?
9.在每个函数或q程的前面要有必要的注释信息Q包括:函数或过E名Uͼ功能?
qͼ输入、输出及q回D明;调用关系及被调用关系说明{?
三、命?
1.较短的单词可通过L“元音”形成~写Q?
2.较长的单词可取单词的头几发符的优先Qƈ用括h表辑ּ的操作顺序,?
免用默认优先?
3.使用匈牙利表C法
四、可L?
1.避免使用不易理解的数字,用有意义的标识来替代?
2.不要使用难懂的技巧性很高的语句?
3.源程序中关系较ؓ紧密的代码应可能相邅R?
五、变?
1.L没必要的公共变量?
2.构造仅有一个模块或函数可以修改、创建,而其余有x块或函数只访问的公共
变量Q防止多个不同模块或函数都可以修攏V创建同一公共变量的现象?
3.仔细定义q明公共变量的含义、作用、取D围及公共变量间的关系?
4.明确公共变量与操作此公共变量的函数或q程的关p,如访问、修改及创徏{?
5.当向公共变量传递数据时Q要十分心Q防止赋与不合理的值或界{现象发生?
6.防止局部变量与公共变量同名?
7.仔细设计l构中元素的布局与排列顺序,使结构容易理解、节省占用空_q减
引赯用现象?
8.l构的设计要量考虑向前兼容和以后的版本升Qƈ为某些未来可能的应用?
留余圎ͼ如预留一些空间等Q?
9.留心具体语言及编译器处理不同数据cd的原则及有关l节?
10.严禁使用未经初始化的变量。声明变量的同时对变量进行初始化?
11.~程Ӟ要注意数据类型的强制转换?
六、函数、过E?
1.函数的规模尽量限制在200行以内?
2.一个函数最好仅完成一件功能?
3.为简单功能编写函数?
4.函数的功能应该是可以预测的,也就是只要输入数据相同就应生同L输出?
5.量不要~写依赖于其他函数内部实现的函数?
6.避免设计多参数函敎ͼ不用的参数从接口中L?
7.用注释详l说明每个参数的作用、取D围及参数间的关系?
8.查函数所有参数输入的有效性?
9.查函数所有非参数输入的有效性,如数据文件、公共变量等?
10.函数名应准确描述函数的功能?
11.避免使用无意义或含义不清的动词ؓ函数命名
12.函数的返回D清楚、明了,让用者不Ҏ忽视错误情况?
13/明确函数功能Q精(而不是近|地实现函数设计?
14.减少函数本n或函数间的递归调用?
15.~写可重入函数时Q若使用全局变量Q则应通过关中断、信号量Q即P、V操作Q?
{手D对其加以保护?
七、可?
1.在编写代码之前,应预先设计好E序调试与测试的Ҏ和手D,q设计好各种?
开兛_相应试代码如打印函数等?
2.在进行集成测?pȝ联调之前Q要构造好试环境、测试项目及试用例Q同?
仔细分析q优化测试用例,以提高测试效率?
八、程序效?
1.~程时要l常注意代码的效率?
2.在保证Y件系l的正确性、稳定性、可L及可测性的前提下,提高代码效率?
3.不能一呛_q求代码效率Q而对软g的正性、稳定性、可L及可测性造成?
响?
4.~程Ӟ要随时留心代码效率;优化代码Ӟ要考虑周全?
5.要仔l地构造或直接用汇~编写调用频J或性能要求极高的函数?
6.通过对系l数据结构划分与l织的改q,以及对程序算法的优化来提高空间效率?
7.在多重@环中Q应最忙的循环攑֜最内层?
8.量减少循环嵌套层次?
9.避免循环体内含判断语句,应将循环语句|于判断语句的代码块之中?
10.量用乘法或其它Ҏ代替除法Q特别是点q算中的除法?
九、质量保?
1.在Y件设计过E中构筑软g质量?
代码质量保证优先原则
Q?Q正性,指程序要实现设计要求的功能?
Q?Q稳定性、安全性,指程序稳定、可靠、安全?
Q?Q可试性,指程序要h良好的可试性?
Q?Q规?可读性,指程序书写风根{命名规则等要符合规范?
Q?Q全局效率Q指软gpȝ的整体效率?
Q?Q局部效率,指某个模?子模?函数的本w效率?
Q?Q个达方?个h方便性,指个人编E习惯?
2.只引用属于自q存贮I间?
3.防止引用已经释放的内存空间?
4.q程/函数中分配的内存Q在q程/函数退Z前要释放?
5.q程/函数中申LQؓ打开文g而用的Q文件句柄,在过E?函数退出前要关闭?
6.防止内存操作界?
7.时刻注意表达式是否会上溢、下溢?
8.认真处理E序所能遇到的各种出错情况?
9.pȝq行之初Q要初始化有兛_量及q行环境Q防止未l初始化的变量被引用?
10.pȝq行之初Q要对加载到pȝ中的数据q行一致性检查?
11.严禁随意更改其它模块或系l的有关讄和配|?
12.不能随意改变与其它模块的接口?
13.充分了解pȝ的接口之后,再用系l提供的功能?
14.要时L意易h的操作符。当~完E序后,应从头至检查一遍这些操作符?
15.不用与g或操作系l关pd大的语句Q而用徏议的标准语句?
16.Q用第三方提供的Y件开发工具包或控件时Q要注意以下几点Q?
Q?Q充分了解应用接口、用环境及使用时注意事V?
Q?Q不能过分相信其正确性?
Q?Q除非必要,不要使用不熟悉的W三方工具包与控件?
十、代码编?
1.~写代码时要注意随时保存Qƈ定期备䆾Q防止由于断c硬盘损坏等原因造成
代码丢失?
2.同一目l内Q最好用相同的~辑器,q用相同的讄选项?
3.合理地设计Y件系l目录,方便开发h员用?
4.打开~译器的所有告警开兛_E序q行~译?
5.在同一目l或产品l中Q要l一~译开关选项?
6.使用工具软gQ如Visual SourceSafeQ对代码版本q行l护?
十一、代码测试、维?
1.单元试要求臛_辑ֈ语句覆盖?
2.单元试开始要跟踪每一条语句,q观察数据流及变量的变化?
3.清理、整理或优化后的代码要经q审查及试?
4.代码版本升要经q严格测试?nbsp;
说道Web Service的程序开发八个月前我加班调试公司和中国电信的商务领航pȝ的接口的时候,用的是Web ServiceQWeb Service有很多优点,使用Web Service可以在不同编E语a间实现数据交换,而我那时对Web Service也不熟,q同事帮我生成了一大堆Web Service的框架代码,我则只单独开发业务代码?/p>
q次的另外一个项目也要用Web Service了,不过人手也少了,没有人帮做Web Service了,只好自己动手?/p>
好在开发前Q有个同事先l我们不熟悉Web Service的程序员q行了一些培训,我才知道原来以前的Web Service都是可以自动生成代码的,而且也不难,试了一个下午客L和服务器端的Web Service代码都调试通过了,真不错?/p>
Z更多喜爱开发的E序员也能迅速了解Web Service的开发,我这里整理了一些通过Axis开发Web Service的一些要点,希望能让不熟悉Web Service的开发h员能够迅速掌握Web Service?/p>
一、Axis环境的安?/strong>
1、安装环?J2SE SDK 1.4QTomcat 5.0Qeclipse 3.2?/p>
2、到 http://xml.apache.org |站下蝲Axis安装包?/p>
3、将Axis相关包文件放在WEB-INF\lib目录下?/p>
4、Axis可选的包:activation.jarQ?mail.jarQ?xmlsec-1.4.Beta1.jar拯到WEB-INF目录下,生成客户端时候需要用?/p>
Axis支持三种web service的部|和开发,分别为:
1、Dynamic Invocation Interface QDIIQ?/p>
2、Dynamic Proxy方式
3、Stubs方式
前两U方式我׃介绍了,同事告诉我他们自己都不用前两种方式Q他们徏议我们用Stubs方式Q因此我׃要就介绍一下第三种方式。注意,我自qJava源代码是攑֜DQ\workspace\test\目录下,Axis相关包文件放在DQ\workspace\test\WEB-INF目录下?/p>
二、编写wsdd发布web服务Q编写stub client讉Kweb服务
1、编写服务端E序serverQSayHello.javaQ编译server.SayHello.java
package server;
public class SayHello
{
public String getName(String name)
{
return "hello "+name;
}
}
2、编写wsdd文g
deploy.wsdd文g内容如下Q?/p>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="SayHello" provider="java:RPC">
<parameter name="className" value="server.SayHello.getName"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
3、发布服务:
~辑一个deploy.batQAxis_Lib为axis.jar路径。内容如下:
set Axis_Lib=D:\workspace\test\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://localhost:8080/test/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd
执行q个批处理文Ӟq时候,如果提示成功的话Q访?a href="http://localhost:8080/test/services">http://localhost:8080/test/services ׃昄服务列表?/p>
4、生成客Lclient stub文g
在浏览器上访问服务器端的服务Q可以下载到WSDL文gQ通过Axis的相兛_P可以自动从WSDL文g中生成Web Service的客L代码?/p>
~写一个WSDL2Java.bat文gQ其内容如下Q?/p>
set Axis_Lib=D:\workspace\test\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\workspace\test\src
set Package=server.SayHello
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% SayHello.wsdl
执行q个批处理文件就可以生成client stub.
生成的stub client文g列表为:SayHello.javaQSayHelloService.javaQSayHelloServiceLocator.javaQSayHelloSoapBindingStub.java .
5、编写客LE序Q编译ƈ执行
下面是一Djunit试客户端代码?/p>
import java.net.URL;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class TestWSClient extends TestCase {
public TestWSClient(String string) {
super(string);
}
public void SayHelloClient() throws Exception {
SayHelloService service = new SayHelloServiceLocator();
SayHello_PortType client = service.getSayHello() ;
String retValue = client.getName("clientname");
System.out.println(retValue);
}
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new TestWSClient("SayHelloClient"));
return suite;
}
}
xQ整个服务器端和客户端的Web Service框架代码完成了Q剩下的是在里面加入你的业务代码了Q怎么PWeb Serviceq不隑ּ发吧?/p>