软件编程规范总结

2024-05-10

软件编程规范总结(共6篇)

篇1:软件编程规范总结

软件编程规范总结

本规范的内容包括:基本原则、布局、注释、命名规则、变量常量与类型、表达式与语句、函数与过程、可靠性、可测性、断言与错误处理等。

一、基本原则

1.2.3.4.5.6.7.保持代码的简明清晰,避免过分的编程技巧。所有的代码尽量遵循ANSI C标准。

编程时首先达到正确性,其次考虑效率。避免或少用全局变量。尽量避免使用GOTO语句。尽可能重用、修正老的代码。尽量减少同样的错误出现的次数。

二、文件布局

1.头文件必须要避免重复包含。

2.包含标准库头文件用尖括号 <>,包含非标准库头文件用双引号 “”。3.遵循统一的顺序书写类的定义及实现。类的定义(在定义文件中)按如下顺序书写:

公有属性

公有函数

保护属性

保护函数

私有属性

私有函数

类的实现(在实现文件中)按如下顺序书写:

构造函数

析构函数 公有函数 保护函数 私有函数

4.程序中一行的代码和注释不能超过80列。5.定义指针类型的变量,*应放在变量前。

6.源程序中关系较为紧密的代码应尽可能相邻。iLength iWidth = 10;

= 5;// 矩形的长与宽关系较密切,放在一起。

StrCaption = “Test”;

7.禁止使用TAB键,必须使用空格进行缩进。缩进为4个空格。

8.程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。{ }之内的代码块使用缩进规则对齐。

9.if、else、else if、for、while、do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加 { }。

if(varible1 < varible2){

varible1 = varible2;}

10.11.声明类的时候,public、protected、private关键字与分界符{} 对齐,这些部分的内容要进行缩进。

12.结构型的数组、多维的数组如果在定义时初始化,按照数组的矩阵结构分行书写。13.相关的赋值语句等号对齐。

14.在switch语句中,每一个case分支和default要用{ }括起来,{ }中的内容需要缩进。

15.不同逻辑程序块之间要使用空行分隔。16.一元操作符如“!”、“~”、“++”、“--”、“*”、“&”(地址运算符)等前后不加空格。“[]”、“.”、“->”这类操作符前后不加空格。

17.多元运算符和它们的操作数之间至少需要一个空格。18.关键字之后要留空格。(if、for、while等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。)

19.函数名之后不要留空格。(函数名后紧跟左括号‘(’,以与关键字区别。)20.(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。‘,’之后要留空格。‘;’不是行结束符号时其后要留空格。

21.长表达式(超过80列)要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐。

22.函数声明时,类型与名称不允许分行书写。

三、注释

1.一般情况下,源程序有效注释量必须在20%以上。2.注释符与注释内容之间要用一个空格进行分隔。

3.文件头部必须进行注释,包括:.h文件、.c文件、.cpp文件、.inc文件、.def文件、编译说明文件.cfg等。

4.函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、访问和修改的表、修改信息等。

5.包含在{ }中代码块的结束处应加注释,便于阅读。特别是多分支、多重嵌套的条件语句或循环语句。

void Main(){

if(…){

… while(…)

{

} /* end of while(…)*/ …

} /* end of if(…)*/ // 指明是哪条语句结束 } /* end of void main()*/

// 指明函数的结束 // 指明该条while语句结束

6.保证代码和注释的一致性。修改代码同时修改相应的注释,不再有用的注释要删除。7.注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。

8.全局变量要有详细的注释,包括对其功能、取值范围、访问信息及访问时注意事项等的说明。

9.注释与所描述内容进行同样的缩排。

10.对分支语句(条件分支、循环语句等)必须编写注释。11.尽量避免在注释中使用缩写,特别是不常用缩写。

四、命名规则

1.标识符要采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名。严格禁止使用连续的下划线,下划线也不能出现在标识符头或结尾(预编译开关除外)。

2.程序中不要出现仅靠大小写区分的相似的标识符。

3.用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。

4.宏、常量名都要使用大写字母, 用下划线 ‘_’分割单词。预编译开关的定义使用下划线 ‘_’开始。

5.变量名长度应小于31个字符,以保持与ANSI C标准一致。不得取单个字符(如i、j、k等)作为变量名,但是局部循环变量除外。

6.程序中局部变量不要与全局变量重名。7.使用一致的前缀来区分变量的作用域。

g_

:全局变量 s_

:模块内静态变量

空:局部变量不加范围前缀

8.使用一致的小写类型指示符作为前缀来区分变量的类型。说明:常用变量类型前缀列表如下:

i

: int

f

: float d : double c

: char uc

: unsigned char 或 BYTE l : long p

: pointer b

: BOOL h : HANDLE w

: unsigned short 或 WORD dw : DWORD或 unsigned long a

:数组,array of TYPE str

:字符串 t :结构类型

9.完整的变量名应由前缀+变量名主体组成,变量名的主体应当使用“名词”或者“形容词+名词”,且首字母必须大写。

float g_fValue;10.函数名用大写字母开头的单词组合而成,且应当使用“动词”或者“动词+名词”(动宾词组)。

11.结构名、联合名、枚举名由前缀T_ 开头。事件名由前缀EV_ 开头。12.标识符前最好不加项目、产品、部门的标识。

五、变量常量与类型

1.定义全局变量时必须仔细分析,明确其含义、作用、取值范围及与其它全局变量间的关系。

2.明确全局变量与操作此全局变量的函数或过程的关系。3.一个变量有且只有一个功能,不能把一个变量用作多种用途。4.循环语句与判断语句中,不允许对其它变量进行计算与赋值。5.宏定义中如果包含表达式或变量,表达式和变量必须用小括号括起来。6.使用宏定义多行语句时, 必须使用 { } 把这些语句括起来。

建议:

 尽量构造仅有一个模块或函数可以修改、创建的全局变量,而其余有关模块或函数只能访问。

 对于全局变量通过统一的函数访问。

 尽量使用const说明常量数据,对于宏定义的常数,必须指出其类型。 最好不要在语句块内声明局部变量。

7.结构和联合必须被类型化。typedef struct {

char acName[NAME_SIZE];WORD wScore;} T_Student;

T_Student *ptStudent;

建议:

 使用严格形式定义的、可移植的数据类型,尽量不要使用与具体硬件或软件环境关系密切的变量。

 结构是针对一种事务的抽象,功能要单一,不要设计面面俱到的数据结构。 不同结构间的关系要尽量简单,若两个结构间关系较复杂、密切,那么应合为一个结构。

 结构中元素的个数应适中。若结构中元素个数过多可考虑依据某种原则把元素组成不同的子结构,以减少原结构中元素的个数。

 仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减少引起误用现象,对于结构中未用的位明确地给予保留。

 结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未来可能的应用保留余地(如预留一些空间等)。

 合理地设计数据并使用自定义数据类型,尽量减少没有必要的数据类型默认转换与强制转换。

 当声明数据结构时,必须考虑机器的字节顺序、使用的位域及字节对齐等问题。

六、表达式与语句

1.在表达式中使用括号,使表达式的运算顺序更清晰。

if(((iYear % 4 == 0)&&(iYear % 100!= 0))||(iYear % 400 == 0))2.避免表达式中的附加功能,不要编写太复杂的复合表达式。3.不可将浮点变量用“==”或“!=”与任何数字比较。

4.应当将指针变量用“==”或“!=”与NULL比较。

5.在switch语句中,每一个case分支必须使用break结尾,最后一个分支必须是default分支。

6.不可在for 循环体内修改循环变量,防止for 循环失去控制。

建议:

 循环嵌套次数不大于3次。

 do while语句和while语句仅使用一个条件。 当switch语句的分支比较多时,采用数据驱动方式。

如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。

 for语句的循环控制变量的取值采用“半开半闭区间”写法。 在进行“==”比较时,将常量或常数放在“==”号的左边。

七、参数

1.如果函数没有参数,则用void填充。

void SetValue(int iWidth, int iHeight);float GetValue(void);2.如果参数是指针,且仅作输入用,则应在类型前加const。(防止该指针在函数体内被意外修改。)

3.当结构变量作为参数时,应传送结构的指针而不传送整个结构体,并且不得修改结构中的元素,用作输出时除外。

4.不要省略返回值的类型,如果函数没有返回值,那么应声明为void类型。5.对于有返回值的函数,每一个分支都必须有返回值。(为了保证对被调用函数返回值的判断,有返回值的函数中的每一个退出点都需要有返回值)

6.对输入参数的正确性和有效性进行检查。7.防止将函数的参数作为工作变量。

void SumData(int iNum, int *piData, int *piSum){

int iCount;

int iSumTmp;// 存储“和”的临时变量

iSumTmp = 0;

for(iCount = 0;iCount < iNum;iCount++)

{

iSumTmp += piData[iCount];}

*piSum = iSumTmp;} 反例:

void SumData(int iNum, int *piData, int *piSum){

int iCount;

*piSum = 0;

for(iCount = 0;iCount < iNum;iCount++){

*piSum += piData[iCount];// piSum成了工作变量,不好。} }

8.必须对所调用函数的错误返回值进行处理。(函数返回错误,往往是因为输入的参数不合法,或者此时系统已经出现了异常。如果不对错误返回值进行必要的处理,会导致错误的扩大,甚至导致系统的崩溃。)

八、可靠性

1.在程序编制之前,必须了解编译系统的内存分配方式,特别是编译系统对不同类型的变量的内存分配规则,如局部变量在何处分配、静态变量在何处分配等。

2.防止内存操作越界。

3.必须对动态申请的内存做有效性检查,并进行初始化;动态内存的释放必须和分配成对以防止内存泄漏,释放后内存指针置为NULL。

4.变量在使用前应初始化,防止未经初始化的变量被引用。5.指针类型变量必须初始化为NULL。6.指针不要进行复杂的逻辑或算术操作。

7.如果指针类型明确不会改变,应该强制为const类型的指针,以加强编译器的检查。8.减少指针和数据类型的强制类型转化。9.移位操作一定要确定类型。

10.对变量进行赋值时,必须对其值进行合法性检查,防止越界等现象发生。11.类中的属性应声明为private,用公有的函数访问。

12.在编写派生类的赋值函数时,注意不要忘记对基类的成员变量重新赋值。13.构造函数应完成简单有效的功能,不应完成复杂的运算和大量的内存管理。14.不要在栈中分配类的实例,也不要生成全局类实例。

15.正确处理拷贝构造函数与赋值函数。

16.过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出之前要关闭,除非要把这个句柄传递给其它函数使用。

九、可测试性

1.在同一项目组或产品组内,为准备集成测试和系统联调,要有一套统一的调测开关及相应信息输出函数,并且要有详细的说明。统一的调试接口和输出函数由模块设计和测试人员根据项目特性统一制订,由项目系统人员统一纳入系统设计中。

2.在同一个项目组或产品组内,调测打印出的信息串要有统一的格式。信息串中应当包含所在的模块名(或源文件名)及行号等信息。

3.在编写代码之前,应预先设计好程序调试与测试的方法和手段,并设计好各种调测开关及相应测试代码(如打印函数等)。

十、断言与错误处理

1.整个软件系统应该采用统一的断言。如果系统不提供断言,则应该自己构造一个统一的断言供编程时使用。

2.使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。

3.指向指针的指针及更多级的指针必须逐级检查。4.对较复杂的断言加上明确的注释。

5.用断言保证没有定义的特性或功能不被使用。

6.用调测开关来切换软件的DEBUG版和RELEASE版,而不要同时存在RELEASE版本和DEBUG版本的不同源文件,以减少维护的难度。

7.正式软件产品中应把断言及其它调测代码去掉(即把有关的调测开关关掉)。8.在软件系统中设置与取消有关测试手段,不能对软件实现的功能等产生影响。9.用断言来检查程序正常运行时不应发生但在调测时有可能发生的非法情况。

篇2:软件编程规范总结

作者:田进恩

为了提高软件开发质量,降低开发周期,增强代码的可重用性和易读性,使软件便于维护,开发人员间便于交流和协作,特总结出开发规范,以为参考。

一. 原则:

1. 软件工程化 2. 模块化

3. 能简单不复杂 4. 强调团队协作 5. 强调创新和特色

二. 具体规范:

1. 命名规范

命名应尽量使用匈牙利命名法,变量名或函数名中使用大写字符来区分各个部分,以便于记忆和阅读。如bPatchMinute, DeleteDirInfo()。全局(包括类中的)变量用长名字,局部变量用短名字。

类成员变量前一般应加上m_,全局变量加上g_,仅与本模块有关的变量加上l_,紧接着是变量的类型。整型: n,i 长整型: l 无符号整型: u 无符号长整型:dw 字符: ch 布尔量: b 浮点数: f 双精度浮点: d 字符串: str,lpsz,sz,p,lp,ac, 指针: p 字节指针: pb 无符号指针: pv 字符指针: lpsz 整型指针: lpn 文件指针: fp 如:

m_nTotalNum,m_strPath,m_bRcving,m_fPrice,g_lOpenDate,g_dwCardNo,lpszNameStr, lpnSysDoomType,uMsgID,m_pProgress

局部变量应尽量易懂简洁,使用常见的变量,如

Num,nCount,i,j,k,n,len,pos, offset,nReadNum,index,nRet,ret, string,filename

临时变量,如ltmp,ftmp,tmpStr,tempStr,函数命名也应该见名知意。如CalcAllDataStyle(),ReadDocDataFromTime(),GetIndexInfo()常见的函数

Init, OpenAll, Create_, Get_, Set_, Read_, Load_, Write_, Start_, Stop_, Check_, Test_, Fill_, Process_, Sort_, Do_, Select_, Is_, Exist_,_Ex。

宏命名和typedef定义类型应详细,避免重复,一律为大写,如

#define DEL_EMPTY(a){if(a){delete a;a=NULL;}} #define SUCCESS 0 #define FAIL-1

typedef struct { char lpzSource[100];char lpzTitle[100];char lpzURL[194];short nType;long npos;long nlen;}ATTBODY,*LPATTBODY;(指针前加LP)

自定义消息从WM_USER开始

#define MYAPP_MESSAGE WM_USER+0x1001

2. 代码规范

有些不易理解的变量或函数应作注释,难懂的代码要有注解,在文件的开始处有该文件的用途描述。一定要保持注释的一致性。

代码组织要清晰,{,},(,),if,else,do,while,for,case等要对应整齐,少用空格,缩进全部用Tab键。变量的定义要集中,函数间要有空行分开,一个程序中的空行数目最好占8%-16%。多态函数和功能相近的函数集中放在一起。

代码应该简洁、清楚并讲述了所发生的一切,我们的目标应该是写出最清晰的代码,而不是最巧妙的代码。例如如果是MFC多文档程序,就要严格按照其生成的框架写代码。尽量使用编译器已经提供的函数,不必花时间另行编写。例如系统已经有qsort函数,可直接拿来排序用。

某些公用代码要注意多平台易移植,最好使用标准C。

代码的重用要仔细,要将相关的代码也拷贝过来,注意那段代码也许不适合你的应用场合。删掉从来没有用过的函数或变量,大篇幅注释掉的代码行也应删除,以免使程序混乱难读。

3. 工程文件组织规范

一个工程往往包含很多很多文件(*.h,*.cpp,*.inc,*.lib,资源文件等),向工程中加入文件或删除工程中的文件要慎重,避免把工程损坏。工程中不起作用的文件或类应删除,工程目录下的非工程文件也应该移走,保持工程的清洁,避免混淆难于管理。工程文件如果很多,应归类。

在VC环境下,建议将常用的头文件全部放入stdafx.h中,而在每个cpp开始处嵌入stdafx.h。避免头文件的交叉引用,如果有严重的交叉引用,适当使用类的声明。

将独立性比较强的模块抽出来,做成DLL,控件或COM组件,该模块可单独编写和测试,也增强了其可重用性。

一个比较大的工程应留有一定的消息接口或插件接口等。

工程的版本控制要严格,版本格式为xx.xx.xx,必要时使用Build次数或日期。高版本尽量兼容低版本的用法、数据或协议。

工程的编译宏定义和工程参数设置应正确,每作一个新工程时应检查工程参数是否正确。建议字节对齐方式为1字节对齐。

工程文件应经常备份,备份时注明备份日期和主要增加的功能。

4. 类组织规范

类一般有两个文件,一个头文件,一个实现体CPP。

类力求封装好,严格区分public,private,protect等作用域,如果一个函数与本类有莫大的关系,可以作为该类的静态成员函数,不用或少用友元函数等破坏类封装性的方法和技巧。如果一些结构或宏仅与本类有关,可在类头文件中定义。

类的成员变量在构造函数或初始化函数中应赋初值。指针在构造函数中赋NULL,析构时DEL_EMPTY它,以免内存泄露。

5. 用户界面规范

有四大类型的用户界面:对话框、单文档界面、多文档界面、其它界面

对话框要易用且简洁,字体和控件的组织搭配要得体,能简单不复杂,各控件的焦点、Tab顺序等要讲究,视应用场合要适当支持键盘。在简洁易用的前提下,力求个性化,设计得更加友好。程序各对话框的风格要保持一致。

单文档和多文档界面的程序功能可以做得很强,也便于扩充和管理。其中菜单、工具栏、状态栏等设计要有特色。菜单按一定的分类弹出,必要时设计成多套菜单,在重要的窗口或区域应能弹出右键,实现常见操作。工具栏上放最常用的操作按钮,必要时动态更换按钮。状态栏显示足够多的有用信息。

消息主控在Mainframe中,单文档的主控也可在View中,所有的对话框的弹出或非模态对话框的控制都在主控窗口中完成,具体的数据处理放在单独的文件中或设计成类。在App类中实现Ini读写,各数据对象的定义和析构,全局变量的赋值和初始计算,存盘退出等。各视图的OnDraw和GDI画图尽量使用内存位图的方式,以免闪烁。

其它还有ATL,控制台,嵌入式程序界面等,也有作为其它容器如IE中的插件等,此类程序可能不用MFC,而采用COM组件等方法实现。

6. 疑难解答和Bug调试方法

勤问、善于问。在不打扰正常工作的前提下,开发人员间应相互帮助,聚思广益,也许你的问题或Bug就是他人的前车之鉴。

从各种途径请求解答。专业书、教材、期刊、电子文档以及国际标准文献、RFC等,Internet上专业网站、论坛、专家组等。

Bug的出现总是有一定的原因的,冷静查找,不要总是拘泥于某一个小局部,换一个想法、从另外一个角度也许让你柳暗花明。使用一些辅助开发或调试工具,如Spy++,Process Viewer,系统监视器等。

拓宽知识面。多参阅其它编程语言、数据库知识、编译原理、网络协议等,熟悉硬件设备、底层汇编、数字逻辑电路等。使用和揣摩其它软件功能和界面,集百家之长,做出有创新意义和有特色的功能性软件。

三. 一些习惯:

我认为比较好的习惯:

1.if(0 == GetDataType(…))比if(GetDataType(…)== 0)好,纵使误将==写成=,在编译一层就会报错。2.#define MAX_DOWNLOADNUM 20 struct DownInfo m_DownInfo[MAX_DOWNLOADNUM];在代码中尽量不用具体的大小数值,定义成宏,便于以后维护。3.CUSTXG_CONTABLE g_lpCustCon[] = { {“数值串1”,C_ZGB,C_CUSTJBM,C_VT_FBJ,“万”}, {“数值串2”,C_ZSZ,C_CUSTJBM,C_VT_FBJ,“万”}, …

{“数值比例”,C_WTB,C_CUSTHQ,C_VT_FBJ,“%”} };int g_nCustNum = sizeof(g_lpCustCon)/sizeof(CUSTXG_CONTABLE);g_ nCustNum自动适应g_lpCustCon的大小。4.函数定义short GetInputType(const char * lpzInput)比short GetInputType(char * lpzInput)好,以免lpzInput在函数体中被破坏。5.协议包头定义成:

typedef struct tagDataHeader { struct{ unsigned char Version:4;unsigned char HeaderFlag:2;unsigned char Reserved:2;//保留Bits位 }Info;long nOther;long Reserved;//保留4个字节 } DATAHEADER;定义有一定的保留字段,供以后扩充使用。6.变量在定义时赋初值,类析构时或程序退出时判断释放所有变量。7.编码空间一定要充分预留,编码时注意可扩充性。

我认为不好的习惯:

1.代码中是“+2”,“+4”,而不是“+sizeof(short)”,“+sizeof(int)”。2.filename[40],而不是filename[MAX_PATH]。

3.GDI资源使用完后不释放,位图、笔刷等用完后不Select出来。这样会将导致系统Gdi资源丢失或内存泄露。

4.大量使用无符号型变量。无符号变量在判断时易造成错误,甚至死循环,尽量少用。5.使用malloc,free不使用new,delete,大量使用realloc。new,delete是规范的C++语法,通用性强,realloc易造成内存抖动。6.#define square(x)(x)*(x)宏的体应加括号,否则容易出问题,如1/square(x)将被替换1/(x)*(x)

篇3:浅谈软件编程中的代码规范问题

关键词:软件开发,编程规范

随着软件行业的日益发展,C#作为软件开发语言中的后起之秀,在软件开发领域中的地位日益提高。目前,已成为面向对象开发中仅次于JAVA和C++的开发语言。本文探讨了运用C#语言开发软件中需要注意的编程事项,包括变量命名规则、方法格式、语句长度等方面需要注意的细节。

1 我们对软件开发有一定的认识

经历过大大小小的成功,也经历过不少的失败。对于软件编程,只有在有一定的编程水平和经验积累的情况下,才能写出质量较高的代码。一部完善的软件规范可以对程序员的工作起到事半功倍的作用,因此,需要有一套较为完善的软件编程规范来对程序员的编程行为进行约束。

那么,对于代码规范都需要注意哪些方面呢?

1.1 同一项目组中,需要统一的编程规范

在软件规模和大小不断扩大的今天,个人单打独斗完成一个软件编码工作的情况已经越来越少,更多的软件开发需要以团队合作的形式完成。这样就需要在项目开发之前,制定出一套相应的规范,方便程序员之间进行交流,在一个程序员离开项目组后,新加入项目组的程序员能够很快接手工作,进行新的功能开发。

在编程规范的制定当中,倘若项目组中之前从未制定编程规范,那么可以考虑以网上较为成熟的代码规范基础,结合核心程序员的编程习惯,制定出项目组的编程规范。这样既保证了核心程序员不至于因为编程规范的大规模变动而影响工作效率,也对新加入项目组对员工以及新入职的员工起到了良好的规范作用。如果项目组公司已有编程规范,那么则需要对新入职及新加入项目组的员工进行培训,以让新员工尽快将编程规范运用到工作中,在编写代码的过程中熟悉和掌握编程规范。

1.2 命名规则

变量、方法名、类名及接口名称的命名必须清晰明了,能够让人很快知道该变量的含义,避免容易被主观解释和难懂的名称。类似x、y、a1、b1这样的命名方式,不能让人很快理解该对象的含义,应尽可能使用于短循环索引中。

在变量命名时,必须采用英文名称命名变量。推荐在类属性中不要包含类名,例如Color.black Color,应该命名为Color.black。

在类名、枚举类型、枚举值、事件、接口、只读静态字、接口、方法、命名空间、属性中应使用Pascal大小写规则,对于方法参数、方法变量应采用Camel规则。

在大小写规则中在,对于C#语言最重要的两个规则是Pascal和Camel规则。Pascal大小写规则的含义是“将标识符的首字母和后面连接的每个单词的首字母都大写”,例如,Get Color();Camel大小写规则的含义是“标识符的首字母小写,而每个后面连接的单词的首字母都大写”,例如black Color。这样方便开发人员理解变量及类名的含义。

对于ASP页面中的ASP控件,命名时采用控件名简写+英文描述的方式进行命名,采用Camel规则进行命名,英文描述首字母大写,这样便于区分控件类型,提高代码的可阅读性。

1.3 代码格式

在同一项目中,代码的编写格式需统一,每行代码的开头统一缩进四个空格,代码需要垂直对齐左大括号和右大括号,格式如下:

对于if、while这些控制软件流程的语句,必须跟随大括号,这样不易产生混乱。同时,大括号需要另起一行,不能与语句并行。

由于一般开发人员所用的电脑显示器尺寸为17寸4:3比例的显示器,分辨率为1280*1024像素,因此每行代码列宽大约控制在110个字符左右,这样既基本满足了Visual Studio开发软件的布局宽度,又满足了17寸显示器在显示上的需要。在代码超出规定列宽后,请在逗号后换行或者这操作符前换行。

为了区分代码块,方法与方法、类与类,以及方法中的逻辑块之间、类的属性与属性之间、属性与方法之间需要增加空行,以方便程序员阅读和熟悉代码,在发现Bug的时候,也能很快定位到相应代码处进行修改。

方法中的关键词和左括号、等号与变量以及赋值结果都必须以空格隔开,方法中的每个参数除了以逗号隔开外,必须在逗号后添加一个空格。。在Visual Studio运用较为熟练的情况下,完成方法里的最后一条语句之后,删除方法的右大括号,然后自己添加一次,所有必须的空格均可由Visual Studio2008/2010自动添加。上述方法同样适用于为ASP页面编写的Java Script函数。

对于方法而言,每个方法最好仅仅完成一项功能。若对代码进行分层,每层代码必须仅仅完成一种类型的功能。这样的架构不仅满足了面向对象编程中抽象和封装的概念,也提升了代码的可阅读性。每行最多只有一条语句,超过一条语句会让代码显得不美观。对于方法中代码的行数,如果是按照某些大公司的要求,每个方法体中代码行数不要超过40行,但是对于ASP.Net C#编程,尤其对于新入职的员工,很难达到这一要求,那么也应尽量控制代码的行数,以尽量简洁和高效率的代码完成功能的编写。

对于新人而言,在编写代码中很容易犯的一个错误是将别人写的代码移植到自己的代码中时,会将与实现功能不相关的代码一起拷贝到自己的文件中,甚至会由于执行不相干的功能而降低后台文件运行的效率。那么,必须在代码移植之后,仔细检查一遍代码,若是不必要的功能,需要尽可能的精简掉,以免影响代码效率。

1.4 代码分层

在软件规模不断扩大,开发工作日益加重,尤其是以JAVA、ASP.NET为代表的网络编程发展不断加快,技术手段日新月异的今天,软件代码分层的重要性不断体现。软件架构分层不仅提高了代码的可读性和优雅型,更是大大提高了代码执行效率。

目前,网站开发通用的MVC(Model、View、Controller)架构就是一个很好的分层架构例子。在此基础上,通过对Controller层的进一步细化,可将该层分解为页面控件控制层(主要是Java Script函数)、后台逻辑层、数据库访问层、数据模型层等架构,在这其中,页面控件控制层控制前台页面的样式,通过Web Service调用后台逻辑层的运行结果。后台逻辑层通过调用数据库访问层的代码,获得从数据模型层中返回的操作数据库结果。这样的分层结果,使得每一层次的代码只能调用自己下一层次的方法获得返回结果,层层调用,层次分明,大大提升了代码的效率和可读性。

1.5 代码注释

代码注释是软件编程中一个非常重要的问题。程序员在编写代码的过程中,如果能多花半分钟编写代码注释,在后续开发中将大大提高代码的可读性和可重用性。

例如,如下一段代码:

相对于初学者或者新加入项目组的程序员来说,对于“1==1”这个判断条件的理解就会产生歧义,但是如果在if语句后加上注释,如下所示:

通过注释语句,明显可以知道,该判断条件的意思是每次该语句的判断结果均为true,每次程序运行至此都将进入该判断语句下的方法体中。

如果是初学者,在不熟悉代码注释格式的情况下,可以考虑采用Visual Studio的Visual Assist X插件来统一注释的格式。在日常开发工作中,对该插件的注释功能应用较多,但是其他功能相对使用较少。该插件可以自行编辑注释的格式,也可以对注释及代码拼写进行校正。该插件也可以对Visual Studio的编程界面进行更改,让程序员在工作的时候更为舒适。

1.6 代码优化

对于ASP.NET C#网页编程,代码效率的高低主要体现在循环语句和分支判断语句的使用上,尤其体现在数据库操作和DLL文件的引用调度上。良好的编程规范,能够大大提高代码的运行效率。

对于循环语句,需要减少一切不必要的循环操作。当页面逻辑完成必要的循环操作后,如果还未达到循环体语句规定的循环次数时,为了减少不必要的服务器资源消耗,提高页面反应速度,必须跳出循环。对于分支判断语句,例如if()...else if()...else...以及switch()...case“xxx”:...,需要将命中次数较多的条件放在判断语句序列的前列,命中次数较少的判断语句放在判断序列的末尾。以上的编程规范在网站访问量较少的时候体现不明显,但是当网站的访问用户达到一定数目之后,将会对服务器负载产生较大影响。

在完成一套软件的开发之后,如果有时间,必须反复不断的对源代码进行重新阅读和检查,在检查过程中可以不断发现源代码中可以优化的部分。提高了软件效率的同时,也提高了自己的编程水平,积累了更多的经验,一举两得。

2 结论

总之,上述几点是我们对于软件代码规范中的一些小小的看法。对于编程来说,需要不断地在实践中总结经验,时刻将编程规范运用于软件开发中,通过实践,不断提高自己的编程水平,养成良好的编程习惯,提升代码的运行效率,增强代码的优雅性。

参考文献

[1]石晓宁.C/C++风格软件的编程规范与稳健性探讨[J].雷达科学与技术,2005(6):346-349.

[2]刘洋.编程规范与交流能力是国际化嵌入式软件人才基本素质[J].电子设计技术,2008(5):143.

[3]裘昱.面向对象程序设计原则之一编程规范篇[J].电脑知识与技术,2003(11):43-45.

篇4:软件编程规范总结

关键词 C#语言 语言规范 软件编程

中图分类号:TP31 文献标识码:A

软件开发需要技术人员的经验和态度。当然,程序员的工作经验是要靠实际工作来进行积累的,那么对于刚刚参加工作的程序员们来说,一套完善的软件开发规范制度是必要的,即,一套完善的软件开发时的工作制度与代码使用规范可以对程序员的正常工作起到一定的约束作用。

1代码规范

(1)命名规范

变量、方法名、类名和借口名的命名都应该清楚明了,最好选用通用的名称,让旁人一眼便可看出,避免由于主观的认知而让他人产生对于名称的误解。而单字母命名往往会造成歧义,虽然命名简单但是不能够达到预期的效果。应该注意的是,在命名是一定要使用英文,注意使用Pascal的大小写规则与Camel规则。两种规则虽然有所不同,但是其根本目的仍是方便开发人员的理解,增强代码的可读性。

(2)代码注释

在代码编写的过程中,往往需要对代码进行注释,这样既增加代码的辨识度,又提高了代码的可用性。如:

If(1==1)

{statement;}

对于经验丰富的程序员可能不会有任何的理解影响,但是对于新晋的程序员往往会由于“1==1”这个条件啊产生较大的歧义,如果在if语句后加上注释

If(1==1)//always true

这样,这个if语句的含义便很明了了,即:每一次该语句的判断均为true,故每一次运算的结果都会传入下方进行体中。工作经验是需要一定是时间才能积累的,如果工作时间不够,没有针对相应环境的经验,则很容易造成与分歧。

(3)代码优化

对于一些循环语句,为了减少一些不必要的循环,当必要的循环逻辑已经完成之后,如果还未达到之前规定的循环次数,为了减少服务器的资源消耗,提高页面反应的速度,故此时需要跳出循环。

(4)代码分层

现在软件开发工作日益严峻,工作量不断加大,尤其是各种编程技术的发展在不断增速,技术多样化的今天,代码分层的重要性正在不断的展现出来。

2代码规范的重要性

(1)代码规范可以减少即时问题的发生

其实程序员的工作有时并不像想外人想的那样终日埋头在案前进行大量的运算。就像刚才提到的,复杂的运算过程和冗长的逻辑设计往往不是工作量最大的,工作量最大的是编写代码。但是简单不意味着不会出现问题,往往越简单的工作出现问题的频率就会越高。而原因在很大的程度上都可以归于没有一个规范的代码使用制度。没有规范的对输入输出参数的规范,没有规范的异常处理,没有规范的日志处理等等,不但导致了我们总是出现类似空指针这样低级的bug而且还很难找到引起bug的原因。

(2)规范代码可以方便代码的查错工作

代码编写完成后不意味着万事大吉,往往此时只是完成了编写的一个部分,而另一部分就是对源代码的审查工作。及时地复查可以避免错误地发生,也可以端正编程人员的态度,使其工作更加谨慎认真。而且,作为一个团队,可以在其他人编写完代码之后查出其中的错误,对于整个团队的其他成员也是一种学习和进步。但是,如果代码书写不规范,不但严重影响了审查工作的进行,加大了工作量与工作难度,有时甚至会造成没有办法审查的严重后果。由于不了解此代码编写是否成功,因此代码便会被弃用。由此,代码书写的规范可以让程序编写的审查工作更好开展,提高了效率和效果,同时也提高了整个团队的代码开发速度。

(3)规范代码可以提升团队的合作能力

作为团队型工作,如果不规范代码书写,则每个人写出的代码都会有不同的解读障碍。如果是多人同时在书写同一段代码,对于代码可用度的辨识上就会出现很大的分歧;如果是每一个人都有明确的分工,确定其负责的步骤,在整合的时候工作量也会由于每个人代码的差异而加大。很多时候,读不懂代码不仅仅是因为专业知识不够或者是代码有多么复杂难懂,只是因为别人的代码书写方式和自己的不尽相同。如果将代码书写进行规范,则提高了代码在团队中的可读性,每个人看到代码都不会产生疑问,自然会提高整个团队的工作效率。

(4)规范代码可以减少由于维护带来的开销

之前说到的问题如果不去解决,则会影响到所开发程序的质量,在开发过程中,前期的开发工作实际上只是对于程序的编写,而后期的调试才是整个过程中开销最大的一项。代码的质量不够,则需要多次进行检查,而且每一次检查都会需要相应的投入。在每个人的代码书写没有统一的时候,即使是一段没有问题的代码经过数次维护,最后也会成为了乱码,维护又该怎样进行?因此,只有规范代码的书写才能减少维护。

3总结

总之,在代码规范问题中,最重要的还是要树立良好的代码编写规范准则,在不断的实践工作中积累经验,并将其运用与平时的代码编写中。只有通过实践,才能不断的提高自身的技术水平,严惩不良的行为习惯,保证代码运行效率,让写出的代码真正有效运用到软件开发过程中。

参考文献

篇5:软件版本管理规范

第一章 目的

本规范详细规定软件项目版本管理的对象、存储目录、分支、权限、维护等内容,使软件项目版本管理流程化并规范化,确保在系统开发和实施过程中项目的完整性和一致性。

1.第二章 适用范围

所有系统开发及实施项目的软件项目都应进行版本管理。项目中所有正式文档和代码都应纳入配置库(可使用工具建立配置库,本文所述使用的是SVN)进行版本管理。

2.第三章 职责

配置库管理员:负责配置库的日常维护和管理;监督开发及测试部门及时提交版本管理对象(即配置项)。

此岗位可由开发或测试人员兼任。

3.第四章 内容

4.1.版本管理对象

包括但不限于:

 项目总体计划

 可行性研究报告

 开发计划

 需求说明书  需求设计原型

 设计说明书

 系统开发变更申请单

 系统管理手册

 用户操作手册

 培训计划

 培训记录

 源程序

 支持系统运行的配置文件

 存储过程脚本

 测试计划

 测试用例

 测试脚本

 测试报告

 上线计划

 上线申请

 版本维护日志

4.2.配置库的目录结构

每个项目在配置库中应拥有唯一的项目名称。配置库目录结构与项目内部的目录结构建议按下列格式创建。配置库目录结构规划:

┠tags(发布)

┃ ├v1.0.0_T1_2016909 ┃ ├v1.0.0.33899_T1_20161009 ┃ ├v1.0.0_R1_20161109 ┃ ├v1.1.0_T1_20170109 ┃ └v1.1.0_R1_20170209 ┠trunk(主版本)┃ └projectA ┃ ├src ┃ ├MY_MOOC ┃ ├doc ┃ ├tool ┃ ├。。

┖branches(分支)├SY_ABC ├TJ_ABC ├WH_MOOC

其中,项目内部的目录结构:

|–projectA |–src(保存该项目的源程序)

|–doc(保存项目相关文档)

|–000.项目管理(保存项目过程管理相关文档)

|–010.项目计划(保存项目计划相关文档)

|–020.项目需求(保存项目需求相关文档)

|–030.系统设计(保存项目设计相关文档)

|–030.系统测试(保存项目代码测试相关文档)

|–040.系统实施(保存项目部署实施相关文档)

|–050.系统运维(保存项目运维文档,包括培训、用户手册等)

|–060.技术资料(保存项目技术文档,包括第三方技术资料等)

|–。。(保存项目过程管理相关文档)

|–tool(包括该项目特定的开发、编译、测试等工具)

4.3.分支(branch)

建议使用分支来协同不同职能小组对同一个配置库的使用,可按照以下方式进行分支的管理。

解决方案建立三个分支,包括主版本开发(trunk)、分支版本开发(branches)和发布(tags)。

 主版本开发

是所有分支版本的基准版本,主版本的开发分支。开发部门开发使用。

 分版本开发 主版本的分支版本,供开发部门开发使用。开发工程师如果以主版本为基准,进行软件项目开发,要先将trunk目录下的代码分支到branches目录的一个子目录,在那里对代码进行开发。多个主版本的分版本可通过在branches顶级目录创建多个分支目录来区分。

 发布

测试和发布专用分支,该分支代码不允许任何形式的修改。每个经过测试后的不同版本的代码做快照放到此分支文件夹下。

4.4.权限管理

应对配置库的访问权限进行管理,确保软件系统的完整性和安全性。建议按如下方式进行管理。

4.4.1.开发工程师

仅拥有自己所属项目的add file、delete file、check out、check in权限,无目录创建和删除权限。开发工程师若想创建目录,需向配置库管理员申请。

4.4.2.测试工程师

拥有每个项目的测试分支的add file、delete file、check out、check in权限,无目录创建和删除权限,对于其他分支只有只读权限。

4.4.3.配置库管理员

拥有全部权限,但增删项目和增删目录需要有项目负责人批准。

4.4.4.其他人员

若需要配置库访问权限,需经技术总监或经技术总监授权的项目经理批准,由配置库管理员分配权限。

4.5.版本管理

应对软件系统的版本进行管理,确保版本的准确性和可追溯性。建议按如下方式进行管理。

4.5.1.版本维护

软件工程各阶段产生的各种文档和代码,应及时并统一上载到配置库由配置库管理员统一管理。对于要修改的配置项,应从配置库中检出(check out)后修改,修改完毕后及时检入(check in),并填写修改的原因和内容。配置项的历史版本应保存在配置库中。

4.5.2.分支迁移

从开发分支到测试分支的迁移,由开发工程师操作。迁移的时机有:

1.当开发负责人提交测试申请时;

2.开发过程中进行测试,修改好一个或多个bug,需要测试工程师验证时。

从测试分支到发布分支的迁移,由配置库管理员操作。迁移的时机有:

1.当开发组提交上线申请时。

对于每个项目从测试分支到发布分支的迁移,配置库管理员要建立分支迁移日志,并详细记录。

4.5.3.版本升级

软件系统迁移到发布分支后,生成新的版本。

每个系统新的版本不仅以分支形式存在于配置库中,并且要以独立压缩包形式备份。版本的命名规则为,version N1.N2.N3[.N4][_][T/R5]_YYYYMMDD 1.N1是系统编号。当项目整体重新设计时,N1加1,基数为1 2.N2是模块编号。当模块重新设计时,N2加1,基数为0

3.N3是功能编号。当项目增加某一功能,或某一功能需要修改时,N3加1,基数为0

4.N4是BUG编号。当项目的BUG被修复时,N4加1,基数为0

5.T/R5中的T/R分别对应Test/Release。当项目发布时为R,当项目提交测试时为T,T/R5数值基数为0,以发布/测试提交顺序递增加1。

6.YYYYMMDD代表生成版本的实际年月日,如:20160202 4.5.4.版本基线定义

公司首次采用版本管理规范时,可以采取下列方法定义一个基线版本。

获取各项目最新的源程序、配置文件和文档,形成发布分支、测试分支和开发分支。

对每个项目的提测和发布分支都生成一个版本基线,如:Version1.0.0_R1_20160202。

4.6.第五章 版本提交准则

4.6.1.提交之前先更新

更新的原则是要随时更新,随时提交。当完成了一个小功能,能够通过编译并且自己测试之后,谨慎地提交。

如果在修改的期间其他同事也更改了同一个文件,那么update更新时会自动进行合并,如果修改的是同一行或者二者修改差异过大,那么合并时会产生冲突。这种情况就需要同之前的开发人员联系,两人一起协商解决合并冲突。解决合并冲突之后,还需要两人一起测试,以保证解决冲突之后,各自的程序不会受到影响。

在更新时注意所更新文件的列表,如果提交过程中产生了更新,则需要重新编译并且再次完成单元测试,再进行提交。这样既能了解别人修改了哪些文件,同时也能避免合并错误导致代码有错。

4.6.2.保持原子提交

为确保在需要时可以随时回溯代码版本,每次提交的代码只能包含实现一个独立、完整功能所必需的代码,不能夹带提交其他与此功能不相关的代码。为尽早提交,也可以将此独立、完整功能分解为若干小细节功能,分别开发并提交所必需的代码,但必须确保多次提交的功能代码组合在一起,完全实现此独立、完整功能。

仅提交自己修改的部分,最好不要一下子将整个项目提交。

每完成一个独立、完整的功能后,最好尽早提交,以免后续更改时出现bug,无法恢复到正常代码。

每次提交的间歇尽可能地短,以几个小时的开发工作为宜。我们提倡多提交,也就能多为代码添加上保险。为做到尽早提交,在开发功能模块的时候,先将功能分解成一个个独立的、不可再分割的小细节功能,分别完成。每完成一个并通过单元测试,就提交一次。在修改bug的时候,每修改掉一个bug并且确认修改了这个bug,也就提交一次。

4.6.3.不要提交本地自动生成的文件

一般配置管理员都会将项目中一些自动生成的文件或者与本地配置环境有关的文件屏蔽提交(例如Eclipse中的.classpath文件等,Visual Studio中的.suo文件,Debug,Release,Obj等编译文件夹及其下文件,以及其他的一些自动生成,同编译代码无关的文件)。如果项目中没有进行这方面的配置来强行禁止提交这样的文件,请自觉不要提交这样的文件,如果不小心签入了,需要从配置库中删除,以免其他同事在更新后就可能与本地的环境冲突从而影响大家的工作。

4.6.4.不要提交不能通过编译的代码

代码在提交之前,首先要确认自己能够在本地编译通过,并且代码在提交前已经通过自己的单元测试。

如果在代码中使用了第三方类库,要把相应类库文件统一存储在代码相应目录中并提交,以免项目组成员中有些成员可能没有安装相应的第三方类库,从而在更新代码后引起代码运行错误。

4.6.5.不要提交自己不明白的代码

代码在提交之后即被项目成员所分享。如果提交了不明白的代码,自己看不懂,别人也看不懂,如果在以后出现了问题将会成为项目质量的隐患。因此在引入任何第三方代码之前,确保对这个代码有一个很清晰的了解(必要时应有对应文档说明)。

4.6.6.并行开发(同一模块)前沟通

如果开发小组采用并行开发模式开发同一模块功能,在开发前,需要对协作开发进行合理的工作计划与任务分配,让小组成员相互间了解对方的工作计划与工作内容。这样能尽可能的减少在开发过程中可能出现的冲突,提高开发效率。同时也能够在和成员的交流中发现自己之前设计的不足,完善自己的设计。4.6.7.对提交更新的信息采用明晰的标注

如果提交空的标注或者不确切的标注将会让项目组中其他的成员不了解此次签入动作的背景情况(如新增/修改签入的原因是什么?新增/修改什么内容?),项目经理无法通过提交的标注信息,清晰的掌握开发工作进度细节进度。没有清晰标注,甚至会对回溯代码版本造成影响。所以,在提交工作时,要填写明晰的标注,能够概要的描述所提交文件的信息,让项目组其他成员在看到标注后不用详细看代码就能了解你所做的修改。统一的标注格式为:

签入动作+””+”#” +标识ID+”;”+签入内容+[“;”]+[签入原因] 签入动作:

+:表示增加了功能(新增功能)

*:表示对某些功能进行了更改(修改功能)

-:表示删除了文件,或者对某些功能进行了裁剪,删除,屏蔽(删除功能)

^:表示修正bug(修复功能缺陷)

!:优化功能代码的执行性能(代码性能优化)

标识ID:

ID值是从项目开发计划中的WBS任务分解表中获取,对应具体功能编号。

签入内容:

对新增/修改/删除 的内容进行简单描述

签入原因: 对修改/删除 的原因进行简单描述

示例:

+ #62235;新增房源审核功能

* #62236;将房源审核的二级审核修改为一级审核;为缩短业务流程长度,提高业务响应速度

-#62237;删除多余功能;房源审核由二级审核改为一级审核后删除无用功能

篇6:软件工程师职业规范

原则

原则0守则

软件工程师的基本要求,树立软件产业界整体优良形象:

0.01自觉遵守公民道德规范标准和中国软件行业基本公约。

0.02讲诚信,坚决反对各种弄虚作假现象,不承接自己能力尚难以胜任的任务,对已经承诺的事,要保证做到,在情况变化和有特殊原因,实在难以做到时,应及早向当事人报告和说明;忠实做好各种作业记录,不隐瞒、不虚构,对提交的软件产品和及其功能,在有关文档上不作夸大不实的说明。

0.03讲团结、讲合作,有良好的团队协作精神,善于沟通和交流,在业务讨论上,积极坦率地发表自己的观点和意见,对理解不清楚和有疑问的地方,决不放过,在做同级评审和技术审核时,实事求是地反映和指出问题,对事不对人,要自觉协助项目经理做好项目管理,积极提出工作改进建议。

0.04有良好的知识产权保护观念,自觉抵制各种违反知识产权保护法规的行为,不购买和使用盗版的软件,不参与侵犯知识产权的活动,在自己开发的产品中不拷贝、复用未获得使用许可的他方内容。0.05树立正确的技能观,努力提高自己的技能,为社会和人类造福,绝不利用自己的技能去从事危害公众利益的活动,包括构造虚假信息和不良内容、制造电脑病毒、参与盗版活动、非法解密存取、黑客行为和攻击网站等行为,提倡健康的网络道德准则和交流活动。应大力鼓励和提倡利用自己的计算机知识,积极参与科学普及活动和应用推广活动。

0.06认真履行签定的合同和协议规定,有良好的工作责任感,不能以追求个人利益为目的,而不顾协议合同规定,不顾对已承诺的项目开发任务的影响,甚至以携带原企业的资料提高自己的身价。应自觉遵守保密规定,不随意向他人泄露工作和客户的机密。

0.07面对飞速发展的技术,能自觉跟踪技术发展动态,积极参与各种技术交流、技术培训和继续教育活动,不断改进和提高自己的技能,自觉参与项目管理和软件过程改进活动。能注意对个人软件过程活动的监控和管理,积累工程数据,研究和不断改进自己的软件生产效率和质量,并积极参与发展高效的团队软件过程管理,使各项软件产出,都能达到国际和国家标准与规范。

0.08努力提高自己的技术和职业道德素质,力争做到与国际接轨,提交的软件和文档资料能符合国际和国家的有关技术标准,在职业道德规范上,也能符合国际软件工程师职业道德规范标准。

原则1公众

软件工程师应当以公众利益为目标,特别是在适当的情况下软件工程师应当:

1.01对他们的工作承担完全的责任;

1.02以公众利益为前提,合理分配软件工程师、雇主、客户和用户的利益;

1.03批准软件,应该在确信该软件是安全的、符合规格说明的、经过合适测试的、不会降低生活品质、不影响隐私权或者有害环境的前提之下;

1.04当他们有理由相信有关的软件和文档,可以对用户、公众或环境造成任何实际或潜在的危害时,应该向适当的人员或当局举报;

1.05通过合作解决由于软件本身及其安装、维护、支持或文档引起的社会严重关切的各种事项;1.06在所有有关软件、文档、方法和工具的申述中,特别是与公众相关的,力求公正,避免欺骗;1.07认真考虑诸如使用者身体残疾、资源分配限制、经济贫困和其他可能影响软件使用的各种因素;1.08应致力于将自己的专业技能应用于公益事业和公共教育。

原则2客户和雇主

在保持与公众利益一致的原则下,软件工程师应注意满足客户和雇主的最高利益,特别是在适当的情况下软件工程师应当:

2.01在其可胜任的领域提供服务,对其经验和教育方面的不足应持诚实和坦率的态度;

2.02不使用非法或非合理渠道获得的软件,不明知故犯;

2.03 在客户或雇主知晓和同意的情况下,只在准许的范围内使用客户或雇主的资产;

2.04 保证他们所遵循的文档是按要求经过授权批准的;

2.05只要工作中所接触的机密文件不违背公众利益和法律,对这些文件所记载的信息须严格保密;2.06根据判断,如果一个项目有可能失败,或者费用过高,或违反知识产权法规,或者存在其它问题,应立即确认,将文档记录、收集的证据和报告提交客户或雇主;

2.07当他们知道软件或文档有涉及到社会明显关切的问题时,应进行确认,并将文档记录和报告提交给雇主或客户;

2.08 不接受不利于当前雇主工作的外部工作;

2.09不提倡与雇主或客户的利益冲突,除非出于符合更高道德规范的考虑。在后者情况下,应通报雇主或其他涉及这一道德规范的适当的当事人。

原则3产品

软件工程师应当确保他们的产品和相关的改进符合最高的专业标准,特别是在适当的情况下软件工程师应当:

3.01 努力保证高质量、可接受的成本和合理的进度,确保任何有意义的折衷方案是雇主和客户清楚和接受的,且从用户和公众角度是适合的;

3.02确保他们所从事或建议的项目有适当和可达到的目标;

3.03识别、定义和解决他们工作项目中有关的道德、经济、文化、法律和环境问题;

3.04通过适当地结合教育、培训和实践经验,保证他们能胜任正从事和建议开展的工作项目;3.05保证他们在从事或建议的项目中使用合适的方法;

3.06只要适用,遵循最适合当前工作的专业标准,除非出于道德或技术考虑,并在可认定的情况下才允许有所变通;

3.07努力做到充分理解所从事软件的规格说明;

3.08保证他们所从事的软件说明是良好的文档、可满足用户需要和经过适当批准的;

3.09保证对他们从事或建议的项目,做出实际和定量的估算,包括成本、进度、人员、质量和输出,并对估算的不确定性做出评估;

3.10确保对其从事的软件和文档资料有合适的测试、排错和评审;

3.11保证对其从事的项目,有合适的文档,包括列入从中发现的重要问题和采取的解决办法;

3.12开发的软件和相关的文档,应尊重那些受软件影响的人的隐私;

3.13谨慎使用从正当、合法渠道获得的精确数据,并保证只在准许的范围内使用;

3.14注意维护那些容易过时或有出错情况时的数据的完整性;

3.15 处理各类软件维护时,应保持与开发时一样认真的职业态度。

原则4判断

软件工程师应当维护他们职业判断的完整性和独立性,特别是在适当的情况下软件工程师应当:4.01所有技术性判断应服从支持和维护人类价值的需要;

4.02只有在对本人监督下准备的文档,或在本人专业知识范围内并经本人同意的情况下才签署文档;4.03对受他们评估的软件或文档,应保持职业的客观性;

4.04不参与欺骗性的经济行为,如行贿、重复收费或其他不正当经济行为;

4.05对无法回避和避免的利益冲突,应告示所有有关方面;

4.06当他们、他们的雇主或客户之间存有未公开和潜在利益冲突时,拒绝以会员或顾问身份参加与软件事务相关的私人、政府或职业团体;

原则5管理

软件工程的经理和领导人员应赞成和促进对软件开发和维护合乎道德规范的管理,特别是在适当的情况下软件工程师应当:

5.01对其从事的项目保证良好的管理,包括提高质量和减少风险等有效手段;

5.02保证软件工程师在遵循标准之前便知晓它们;

5.03保证软件工程师知道雇主是如何保护对雇主或其他人保密的口令、文件和信息的有关策略和方法;5.04布置工作任务应先考虑其教育和经验有相应的水平,再加上有进一步教育和成长的要求;

5.05保证对他们从事或建议的项目,做出现实和定量的估算,包括成本、进度、人员、质量和输出,并对估算的不确定性做出评估;

5.06在雇佣软件工程师时,需实事求是地介绍雇佣条件;

5.07提供公正和合理的报酬;

5.08不能不公正地阻止一个人取得可以胜任的岗位;

5.09保证对那些在软件、过程、研究、写作、或其它知识产权的所有权方面做出贡献的软件工程师,有一个公平的协议;

5.10应对违反雇主利益或道德观念的指控,提供正规的听证过程;

5.11不要求软件工程师去做任何与道德规范相违背的事;

5.12不能处罚对项目表露出道德关切的人;

原则6专业

在与公众利益一致的原则下,软件工程师应当保证其专业的完整性和声誉,特别是在适当的情况下软件工程师应当:

6.01协助发展一个适合执行道德规范的组织环境;

6.02推进软件工程的共识性;

6.03通过适当参加各种专业组织、会议和通过出版物,扩充软件工程知识;

6.04作为一名职业人员,支持其他软件工程师努力遵循本道德规范;

6.05不以牺牲职业、客户或雇主利益为代价,谋求自身利益;

6.06服从所有监管作业的法规,除非这种要求与公众利益有不一致时例外;

6.07要精确叙述自己所从事软件工作的特性,不仅避免错误的断言,也要防止那些可能造成猜测投机、空洞无物、欺骗性、误导性或者有疑问的断言;

6.08对所从事的软件和相关文档,负起检测、修正和报告错误的责任;

6.09保证让客户、雇主和主管人员知道软件工程师对本道德规范的承诺,以及这一承诺带来的后果和影响;

6.10避免靠近与本道德规范有冲突的业务和组织;

6.11 要认识违反本规范是与成为一名专业工程师不相称的;

6.12在出现明显违反本规范时,应向有关当事人表达自己的担忧,除非在没有可能、会影响生产或有危险时才可例外;

6.13当与明显违反道德规范的人无法磋商,或者会影响生产或有危险时,应向有关当局报告;

原则7同行

软件工程师对其同行应持平等、互助和支持的态度,特别是在适当的情况下软件工程师应当:

7.01鼓励同行遵守本道德规范;

7.02在专业发展方面帮助同行;

7.03充分信任和赞赏其他人的工作,杜绝追逐不应有的赞誉;

7.04评审别人的工作,应客观、直率和进行适当的文档记录;

7.05持良好的心态听取同行的意见、关切和抱怨;

7.06协助同行充分熟悉当前的标准工作规范,包括保护口令、文件和保密信息等有关的政策和规定,以

及其他常规的安全措施;

7.07 出于客户、雇主或公众利益的考虑,软件工程师可以以善意态度质询同行的胜任能力,但不要以不公正的手段干涉同行的职业发展;

7.08在出现超越本人胜任范围的情况时,应主动征询其他熟悉这一领域的专业人员的意见;

原则8自身

软件工程师应当参与终生职业实践的学习,并促进合乎道德的职业实践方法,特别是软件工程师应不断致力于:

8.01深化他们的开发知识,包括软件的分析、规格说明、设计、开发、维护和测试、相关的文档,以及开发过程的管理;

8.02提高他们在合理的成本和时限范围内,开发安全、可靠和有用质量保证的软件的能力;8.03提高他们编写正确、有技术含量的和良好的文档能力;

8.04提高他们对所从事软件和相关文档资料,以及应用环境的了解;

8.05提高他们对从事软件和文档的有关标准和法律的熟悉程度;

8.06提高他们对本规范,及其解释和如何应用于本身工作的了解;

8.07不因为某些难以接受的偏见而不公正地对待他人;

8.08不影响他人在执行道德规范时所采取的任何行动;

上一篇:广告DM杂志岗位职责下一篇:保持党支部的先进性