软件著作权申请中源代码文档的编辑方法

2024-05-03

软件著作权申请中源代码文档的编辑方法(通用8篇)

篇1:软件著作权申请中源代码文档的编辑方法

软件著作权申请中源代码文档的编辑方法:

一、清除整个文档的空行:

方法:用ctrl+a(快捷方式),选中全部源程序代码文档;点击word的查找替换功能

查找:^p^P;替换为:^P。选择“全部替换”。反复N次,直到全部替换完成。

二、源代码每页不低于50行的实现方法:

1、设置整个文档的字体和字号:

方法:用ctrl+a,全选文档。在选中的文档上,点击鼠标右键(功能键),找到“字体”选项,选择“+中文正文”字体、五号字。如下图所示

2、通过文档的“段落”功能设置,实现文档“每页不低于50行”的要求。方法:ctrl+a,文档全选。在文档全选的情况下,点击鼠标右键(功能键)。找到“段落”选项。调出对话框对文档进行设置如下: 选择行距:固定值;设置值:14磅。

三、文档的页眉及页码的设置(字号用5号)

此文档的页眉填加“软件著作权的全称+版本号”和页码(右上角)。效果如下图:

四、文档首页设置与编辑方法:

文字竖排:先“插入文本框”,再录入文字“*****软件源程序”。选择“竖排”文字格式,调整字号,调整文本框到页面合适的位置。效果如下图:

五、提示:

1、文档的页眉上,尽量要用软件全称且含版本号。

目的:如果你的软件简称出现问题时,源代码文档不受任何影响!为调整几个字重新打印61页(源程序要求60页,封面1页)纸会很不爽的!

二〇一四年二月十四日

篇2:基于MFC的代码编辑器设计方法

编辑器种类较多,其主要功能都是用于文档编辑的。市面上常用的编辑工具有Microsoft Word、记事本、UltraEdit等软件工具,也有专门用于编写程序代码的编辑器,除了具有编辑器的一般功能还具有文字高亮、代码格式调整等特殊功能。一般用于某种语言的代码编辑器,它的文字高亮只能针对该种语言。对于想要自己定义某种语言,就需要重新设计文字变色功能的编辑器。本文就是给出制作能给自己设计的语言显示文字高亮的编辑器。

编辑器的制作工具非常多,譬如VB,Delphi,Windows API等[1]。利用这些工具制作编辑器时,编程量很大,而且容易出错。许多代码的重利用率很低。利用MFC制作一个编辑器是比较方便的。在MFC类中,对编辑器的各中窗口界面做了封装,调用其中的函数就可以产生相应的窗口。并且编辑器的基本框架自动由VC工具自动生成,只要添加自己想要的功能即可,比使用VB,Delphi等工具要方便。由于MFC使用了对象的继承特性,因此代码重利用率高。

1编辑器基本组成

在Windows系统中,编辑器具有如图1所示的主要界面组成。编辑器由框架窗口、客户窗口组成。在框架窗口中主要由标题栏、工具栏、状态栏、菜单栏等组成。客户窗口主要由文档窗口组成。文档窗口可以同时打开,形成多文档窗口界面。窗口的产生顺序一般为:框架窗口、菜单、工具栏、状态栏、客户窗口[2]。

标题栏有固定模式,一般都具有最大化、最小化、关闭按钮等组成。工具栏一般位于窗口的上部,也可浮于窗口中。它由许多小按钮组成,小按钮上放置一些直观的图片,表示按钮的功能。状态栏一般位于窗口的底部,通常用于显示一些提示信息。工具栏上也具有许多小窗口,可以用其显示信息。客户窗口是文档窗口的统称,文档窗口是用户能够能够使用的窗口区域,比如编辑文本、绘图等都是在客户窗口中进行。

2编辑器制作流程

利用MFC制作编辑器的基本流程如图2所示。先利用VC++工具自动生成一个编辑器基本框架。该框架产生了框架窗口、工具栏、菜单栏、状态栏、文档窗口等界面。然后设计自己想要的功能,譬如文字高亮、行列坐标显示以及其他功能等。下面对设计步骤详细说明。

2.1 编辑器框架生成

首先打开VC++6.0,新建一个MFC工程,工程名为CodeEditor,点击确定。在步骤2的对话框时,选择多重文档,建立一个多文档应用程序。然后依次点击“下一步”按钮到步骤6的对话框时,将视类的基类选择CRichEditView类,点击完成即可。

用CRichEditView类就可实现简单的文件操作和编辑功能。该类具有丰富的功能。可以实现文字输入、字符查找与替换等功能。完成以后先运行一下,就可发现它是一个不错的编辑器了,这个应用程序名为CodeEditor。

2.2 文字高亮功能设计

关键字高亮功能使用了一个现有的类CSynEditView,这个类可以从网上获得。只要将该类引入工程,便可轻松的获得如VC++和VB编程环境中的语法编辑能力,看起来比较美观。这个CSynEditView类适合于代码编辑,不适合文字编辑。将该类添加到工程文件中[3]。将视类头文件“CodeEditorView.h”和源文件“CodeEditorView.cpp”中的CRichEditView字符串全部改为CSynEditView。头文件“CodeEditorView.h”和源文件“CodeEditorView.cpp”中的CRichEditView字符串全部替换。由于替换后的视类中包含CSynEditView字符串,因此在视类中要包含头文件“SynEditView.h”。

为了满足自定义语言的关键字高亮显示功能,在类CSynEditView中的LoadSynWord()函数中添加需要的关键字即可。

2.3 在状态栏上显示光标位置

在视类CCodeEditorView的“CodeEditorView.h”中添加保护成员函数DisplayCurPos(),DisplayCurPos()函数用于显示光标位置。编写其代码如下:

void CCodeEditorView::DisplayCurPos(){ //显示光标位置

CRichEditCtrl &SynCtrl=GetRichEditCtrl(); //获得RichEdit控件对象

int Fline=SynCtrl.GetFirstVisibleLine( ); //获得文档窗口第一行的行数

CPoint pt=GetCaretPos(); //获得光标位置

int line=Fline+pt.y/16+1; //计算光标所在的行位置

int col=(pt.x-7)/8+1; //计算光标所在列位置

CString str;

str.Format("行:%d,列:%d",line,col); //格式化字符串

CClientDC dc(this);

CSize sz=dc.GetTextExtent(str);

m_pwndStatusBar->SetPaneInfo(1,IDS_POSITION,SBPS_NORMAL,sz.cx);

m_pwndStatusBar->SetPaneText(1,str);

}

其中,m_pwndStatusBar为CStatusBar类型的指针变量。当鼠标点击和键盘敲击时,行列数字值不变。为了使数字变化。需要增加键盘WM_KEYUP、鼠标WM_LBUTTONUP和光标WM_SETCURSOR三个标准消息的消息响应函数。在CodeEditorView.cpp文件中,找到相应的消息响应函数,添加代码如下:

void CCodeEditorView::OnLButtonUp(UINT nFlags, CPoint point){

DisplayCurPos(); //显示光标位置

CSynEditView::OnLButtonUp(nFlags, point);

}

void CCodeEditorView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags){

DisplayCurPos(); //显示光标位置

CSynEditView::OnKeyUp(nChar, nRepCnt, nFlags);

}

BOOL CCodeEditorView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message){

DisplayCurPos(); //显示光标位置

return CSynEditView::OnSetCursor(pWnd, nHitTest, message);

}

这样当点击鼠标或敲击键盘,行列坐标值就会随光标位置的变化而变化[3]。

2.4 编辑器打开时不产生新文档

为了在打开程序文件时,不生成新文档,可以采取下面的方法。在CodeEditor.cpp文件中找到InitInstance()函数,并将该函数的代码进行改造,如下所示:

将原来的代码从ParseCommandLine(cmdInfo)语句开始到结尾处用下面的代码替换。

CCommandLineInfo cmdInfo;

ParseCommandLine(cmdInfo); //分析命令行

if(cmdInfo.m_strFileName.IsEmpty()){

cmdInfo.m_nShellCommand=CCommandLineInfo::FileNothing; //命令行为空

if (!ProcessShellCommand(cmdInfo)) //处理shell命令

return FALSE;

pMainFrame->ShowWindow(m_nCmdShow); //显示主框架窗口

pMainFrame->UpdateWindow(); //更新窗口

}

else {

cmdInfo.m_nShellCommand=CCommandLineInfo::FileOpen; //表示打开文件

if (!ProcessShellCommand(cmdInfo))

return FALSE;

pMainFrame->ShowWindow(m_nCmdShow);

pMainFrame->UpdateWindow();

CMDIChildWnd *pChild = (CMDIChildWnd *) pMainFrame->GetActiveFrame();CSynEditView *pView = (CSynEditView *)pChild->GetActiveView();

pView->LoadFile(cmdInfo.m_strFileName); //加载文件显示

}

这样,在打开编辑器时就不会自动新建一个文档了[3]。

3结语

本文通过利用MFC完成一个代码编辑器的设计。从编辑器的组成、编辑器的制作流程等方面进行了较全面地介绍。尤其重点介绍了自定义文字高亮、行列坐标显示、打开编辑器不产生新文档等特点及其制作方法。文字高亮使得阅读代码比较方便,代码编辑器中很常用。文字高亮也是设计代码编辑器的一个难点。在此,给出了自定义文字高亮的代码。当需要使自定义语言中的关键字高亮显示,就可按照文中方法去做。利用MFC制作一个编辑器是非常方便的,这主要是站在前人的基础之上。MFC利用对象继承性等特点,封装了大量代码,可以供编程人员方便地调用。因此,可以高效地、方便地制作一款编辑器。

摘要:编辑器是常用的软件工具,主要作用是编辑文档、打开和保存文档。在此介绍了编辑器的组织结构,并详细说明了利用MFC定制一个代码编辑器的方法和流程。所制作的编辑器除了具有编辑文档、打开与保存文档等基本功能,还具有文字高亮、行列坐标显示、打开编辑器不产生新文档等特点。该编辑器已应用于实际工程中。

关键词:编辑器,MFC,文字高亮,编辑文档

参考文献

[1]李英俊,奚越,靖树杰.用VB开发文本编辑器[J].福建电脑,2005(10):146-147.

[2]孙鑫,余安萍.VC++深入详解[M].北京:电子工业出版社,2007.

[3]赵刚,张磊,夏俊杰,等.计算机系统的自主设计[M].北京:电子工业出版社,2011.

[4]TEITELBAUM T,REPS T.CPS-Cornell program synthe-sizer:a syntax-directed programming environment[J].CACM,1981:24(9):563-573.

[5]宋国钦.编辑器设计技术[J].现代计算机,1996(5):21-23.

[6]郭锋,刘建伟.基于Socket的局域网络通信软件开发[J].电子科技,2009(5):14-16.

[7]李聪玲.液氧/煤油发动机试验控制系统软件架构与设计[J].火箭推进,2009,35(2):46-53.

篇3:浅谈软件静态测试中的代码审查

关键词:软件代码审查;代码审查过程;代码审查问题

中图分类号:TP311.52文献标识码:A文章编号:1007-9599 (2012) 03-0000-02

Discussion on the Code Review of Software Static Testing

Yuan Zhengjiang

(Jiangnan Institute of Electrical and Mechanical Design,Guiyang550009,China)

Abstract:This paper describes the software code to examine the role,content,code review process,and lists some common problems of code review.

Keywords:Software code review;Code review process;Code review problem

一、引言

软件测试常用方法可分为动态测试和静态测试,只有动态测试和静态测试有效结合,才能更好的完成软件测试工作。代码审查是软件静态测试中常用的软件测试方法之一,代码审查时,只要测试人员方法得当、足够细心,往往能够产生意想不到的效果。

二、代码审查的作用

代码审查是在不执行软件的条件下有条理的仔细审查软件代码,从而找出软件缺陷的过程。

代码审查可以找出动态测试难以发现或隔离的软件缺陷。在开发过程初期让测试人员集中精力进行软件代码审查非常有价值:可以提高代码质量;在项目的早期发现缺陷,将损失降至最低;促进团队沟通、促进知识共享、共同提高。

代码审查还可以为动态测试时设计和执行测试用例提供思路。通过代码审查,可以确定有问题或者容易产生软件缺陷的特性范围。

三、代码审查的过程

代码审查过程可分为:代码审查策划阶段、代码审查实施阶段以及代码审查总结阶段。

(一)代码审查策划阶段

1.项目负责人分配代码审查任务;

2.确定代码审查策略:依据软件开发文档,确定软件关键模块,作为代码审查重点;将复杂度高的模块也作为代码审查的重点;

3.项目负责人确定代码审查单,审查内容一般可包括:

(1)可追溯性:

——代码是否遵循详细设计?

——代码是否与需求一致?

(2)逻辑:

——表示优先级的括号用法是否正确?

——代码是否依赖赋值顺序?

——“if…else”和“switch”使用是否正确清晰?

——循环能否结束?

——复合语句是否正确地被花括号括起来?

——case语句是否所有可能出现的情况均已考虑?

——“goto”是否使用?

(3)数据:

——变量在使用前是否已初始化?

——变量的声明是否按组划分为外部的和内部的?

——除最明显的声明外,是否所有声明都有注释?

——每个命名是否仅用于一个用途?

——常量名是否都大写?

——常量是否都是通过“#define”定义的?

——用于多个文件中的常量是否在一个头文件中定义?

——头文件中是否存在可执行的代码?

——定义为指针的变量是否作为指针使用(而不是作为整数)?

——指针是否初始化?

——释放内存后是否将指针立即设置为NULL(或0)?

——传递指针到另一个函数的代码是否首先检查了指针的有效性?

——通过指针写入动态分配内存的代码是否首先检查了指针的有效性?

——宏的命名是否都大写?

——数组是否越界?

(4)接口:

——在所有的函数及过程调用中,参数的个数都正确吗?

——形参与实参类型匹配吗?

——参数顺序正确吗?

——如果访问共享内存,是否具有相同的共享内存结构模式?

(5)文档:

——软件文档是否与代码一致?

(6)注释:

——注释与代码是否一致?

——用于理解代码的注释是否提供了必要的信息?

——是否对数组和变量的作用进行了描述?

(7)异常处理:

——是否所有可能的错误都已加以考虑?

(8)内存:

——在向动态分配的内存写入之前是否检查了内存申请是否成功?

——若采用动态分配内存,内存空间分配是否正确?

——当内存空间不再需要时,是否被明确的释放?

(9)其它:

——是否检查了函数调用返回值?

——所有的输入变量都用到了吗?

——所有的输出变量在输出前都已赋值了吗?

4.确定代码审查进度安排,项目负责人负责安排代码审查的进度。

(二)代码审查实施阶段

1.代码讲解:软件开发人员详细向测试人员讲解如何以及为何这样实现,测试人员提出问题和建议。通过代码讲解,测试人员对被审查的软件有了一个全面的认识,为后续代码审查打下良好的基础。

2.静态分析:一般采用静态分析工具进行,主要分析软件的代码规模、模块数、模块调用关系、扇入、扇出、圈复杂度、注释率等软件质量度量元。静态分析在代码审查时应优先进行,有利于软件测试人员在后续代码审查时对软件建立宏观上认识,在审查中容易做到有的放矢,更易于发现软件代码中的缺陷。

3.规则检查:采用静态分析工具对源程序进行编码规则检查,对于工具报出的问题再由人工进行进一步的分析以确认软件问题,是一种比较有效的方法。

4.正式代码审查:代码审查可分两步进行:独立审查和会议审查。根据情况,这两步可以反复进行多次。

(1)独立审查:测试人员根据项目负责人的工作分配,独自对自己负责的软件模块进行代码审查。测试人员根据代码审查单,对相关代码进行阅读、理解和分析后,记录发现的错误和疑问。

(2)会议审查:项目负责人主持召开会议,测试人员和开发人员参加;测试人员就独立审查发现的问题和疑问与开发人员沟通,并讨论形成一致意见;对发现的问题汇总,填写软件问题报告单,提交开发人员处理。

5.更改确认:开发人员对问题进行处理,代码审查人员对软件的处理情况进行确认,验证更改的正确性,并防止出现新的问题。

(三)代码审查总结阶段

代码审查工作结束后,项目负责人总结代码审查结果;编写测试报告,对软件代码质量进行评估,给出合理建议。

把代码审查提出的所有问题、亮点及最终结论详细的记录下来,供其他软件项目代码审查借鉴。必要时,可建立常见软件代码缺陷数据库,为软件代码审查人员培训和执行代码审查提供数据支持,也可以为软件编码规则制定规范提供实践依据。

四、代码审查中的常见问题

如果软件测试人员熟悉常见的软件代码审查问题,对代码审查效率是很有帮助的。笔者根据自己的应验,列举部分常见软件代码审查问题如下(仅供参考):

(1)浮点数相等比较:可能造成程序未按设计的路径执行;

(2)因设计原因导致某些代码不能执行:如逻辑表达式永远为真(或假)造成某分支不能执行、代码前面有return语句、某模块从未被调用等;

(3)switch语句没有break语句(有意如此设计时除外);

(4)数组越界使用:数组越界容易发生在数组下标是计算得到的情况下,而且审查时很难发现这种代码缺陷,应加以重视;

(5)变量未初始化就使用或者是条件赋值就使用;

(6)程序中存在未使用的多余变量;

(7)复合逻辑表达式没有使用括号造成运算顺序错误;

(8)有返回值的函数中return没有带返回值;

(9)逻辑判别的表达式不是逻辑表达式;

(10)动态分配的内存没有及时释放:忘记写内存释放代码或由于其它逻辑缺陷导致内存释放代码未得到执行;

(11)没有对缓冲区溢出进行必要的防护;

(12)访问空指针,即指针未初始化就使用;

(13)指针指向的内存释放后,未将指针置为NULL:其它函数访问该指针时,判断指针不为空,当作有效指针使用,会造成内存访问错误;

(14)注释说明与程序代码实现不一致,甚至相反;

(15)循环存在不能跳出的可能,程序中没有相应的保护机制。

五、结束语

软件代码审查是重要的软件测试方法之一,软件测试单位应建立完善的代码审查规程,规范代码审查过程。代码审查人员应善于使用软件静态分析工具,善于总结代码审查经验。软件代码审查工作做得扎实,可以发现很多软件编码隐含的缺陷,提高软件的可靠性,为后续的动态测试打下良好的基础。

[作者简介]袁政江(1977.5-),男,江南机电设计研究所,本科,工程师,研究方向:软件开发与测试。

篇4:软件著作权申请中源代码文档的编辑方法

为了解决直接使用网上搜索到的源代码所带来的问题,充分利用网络上丰富的源代码资源,该文给出了一种综合代码搜索引擎的代码收集过程和在已收集代码中挖掘通用API应用范例过程的源代码挖掘使用模型,称为范型挖掘过程模型。这个模型能够在以下三个方面辅助软件质量的改进:1)通过自动推导编程规则学习API用法;2)使用挖掘模式发现在软件中的潜在缺陷;3)对所发现的软件缺陷进行定位。

1 范型挖掘过程模型

范型挖掘过程模型结构如图1所示,过程包含搜索和挖掘两个主要阶段,分别完成从互联网获取源代码并进行相应处理阶段,从处理过的源代码中挖掘通过范型阶段。下文详细介绍模型中两个阶段的工作。

1.1 搜索

范型挖掘过程模型的搜索阶段包括查询构造和冗余消除两个任务。

在查询构造任务中,主要是通过将API的名称作为搜索项构造所需的查询。例如,构造查询“lang:java org.apache.regexp.RE”,意图是在Google code search中收集与RE类相关的代码实例。CSEs根据我们的查询返回了大约2,000条相关的代码实例。根据CSEs的使用经验,与对应CSE相关的查询格式对查询结果的相关性起了决定作用,查询结果的相关性是指查询结果中包含所需查询的API的程度。如果查询格式构造的不好,GCEs可能会产生大量不相关的代码实例。例如,要搜索与fopen API相关的代码实例,在GCEs中建立基础搜索查询设为“lang:c fopen”。这个搜索会产生大约752,000个代码样本。当查询转换为“lang:c file:.c$[s*]fopen[s]?(”时,GCEs会返回689,000个代码样本。在两者各自返回的前50个代码实例中,后者产生的搜索结果中相关代码实例的数量是前者的两倍。由于GCEs所产生的代码实例的相关性在通用模式挖掘中起了十分重要的作用,所以即使是程序员可以在搜索阶段或者代码挖掘阶段手工去除不相关的代码实例,由于这样会极大的增加程序开发的工作量,代码实例的相关性对于程序挖掘也是依然非常重要。

冗余消除任务,是根据对CSEs返回的代码样本数据的观察,可以发现返回结果中有很多的重复样本。如果2个样本属于同一个源文件或者同一个工程,就认为这两个样本是重复样本。例如,在CSEs中根据“lang:java org.apache.regexp.RE”搜索出的2,000个代码样本中源文件,其中JakartaRegexpRegexp.java一共出现了13次。在这13个拷贝中,有5个不同的版本,有5个拷贝对应这些版本,剩下的8个拷贝则是这五个版本的冗余拷贝。

另一方面冗余代码的存在或者说一个代码实例多次出现重复能够表明这个代码实例被广泛使用,而被广泛使用的代码实例比没有被复制过的代码实例更加可信。另一方面,被复制或者有多个版本复制的有倾向性的代码能够帮助挖掘程序挖掘出通用范型。

1.2 挖掘

挖掘阶段主要包括类型解析,抽取候范型和范型推导三个任务。这三个任务是对所收集的代码的预处理过程。

在类型解析任务中,将解析对象的类型,例如解析所收集代码中方法调用所产生的返回对象的类型。这个模型中不使用传统的方法进行分解和解析对象类型,主要原由于通过CSEs收集的代码实例通常是不完整的,不可编译的,所以在我们的模型中不能采用传统的对象类型抽取和解析技术。这里所说不完整代码实例是指代码本身完整,而代码实例运行所依赖的其他源文件不可用。在本阶段的任务中使用了部分程序分析技术,利用反汇编的启发式方法解析对象类型。以图2中的程序为例:在java程序中,通常可以从类的声明中提取完整的类和接口属性名称。然而从网络中获取的这个程序代码实例片段是不完整的,因此需要从程序的impor声明中推导出完整的属性名称。比如从01行程序的import声明中可以推导出ArrayList类。需要说明的是使用启发式的方法并不是总是有效的[2],例如对于05行程序启发式方法无法推导出Iterator类是否也是一个完整的属性名称,因为在02行程序中使用了*替代了Iterator。不过总的来说,基于启发式方法的对象类型解析还是相当有效的。

抽取候选范型这个任务是指通过分析CSEs所收集的代码实例,抽取出程序的候选范型。候选范型包含了API惯用信息。例如图2中的代码实例,从这个实例中可以抽取出的范型是:Iterator.next之前必须要执行Iterator.hasNext的布尔判断。

在范型推导这个任务中,使用频度子序列挖掘等技术挖掘候选范型,用以得到API的通用使用范型。在程序挖掘的三个任务中抽取候选范型和范型推导是两个关键的任务,然而从收集的代码实例中解析类型的任务也是一个重要的工作。

2 范型挖掘过程模型应用

使用范型挖掘过程模型,可以在以下几个方面提高软件开发的质量:

开发阶段:应用范型挖掘过程模型挖掘范型,能够帮助程序员更好的完成软件开发阶段的任务。这些挖掘出的范型提供APIs通用的使用场景,这为如何重用APIs提供了有用的指导,并且可作为所写代码的注解使用。

验证阶段:在此阶段应用范型挖掘过程模型分析程序,能够发现异常行为。挖掘出来的范型通过处理可以得到APIs的详细使用说明书和并对违反该范型的程序进行分析并报错。例如:为标准C语言库(stdio.h)中的fopen API挖掘出的范型如下:

API方法:fopen

检查返回状态值

状态类型:NULL-CHECK

在前面的范型描述中,收集的代码实例中大部分都包含了fopen方法调用的NULL状态检查的返回值。这个范型能够用于发现那些在程序底层分析中使用了fopen方法调用但是却丢失了状态检查而产生的缺陷。这个范型挖掘过程模型能够在软件验证任务中发现错误。

维护阶段:应用范型挖掘过程模型挖掘范型还可以在维护阶段用于缺陷定位。例如下面这个Iterator.next方法的相关范型。

API方法:Iterator.next

检查Iterator.hasNext的返回状态值

状态类型:BOOLEAN-CHECK

在前面提到了Iterator.next方法使用之前都要执行Iterator.hasNext方法进行布尔值检查,如果不执行布尔值检查会导致NoSuchElementException。验证任务完成的是在程序分析时发现范型的错误,根据先前的范型可以进行错误定位。例如可以通过在Iterator.next方法使用之前插入Iterator.hasNext方法的布尔值检验自动对执行缺陷定位。

3 总结

重用已有代码是软件开发过程中程序员经常使用的方法,为了改进在软件开发过程中程序员对源代码的机械重用,该文中给出的基于搜索技术和挖掘技术的范型挖掘过程模型,并详细说明了该模型中两个主要阶段,以及从源代码中挖掘通用范型的处理技术。利用该范型挖掘过程模型可以从三个方面改进软件开发的质量,在实际的软件开发中应用也取得了很好的效果,解决了机械重用源代码带来的很多问题,对保证软件的质量起到了明显的作用。

摘要:代码搜索引擎(code search engines,CSE)的产生和互联网上日益增加的开源代码工程,使得软件开发人员在软件开发的过程中可以大量的重用已有的源代码。然而大部分开发人员使用CSEs只是简单完成相关代码搜索。该文给出了一种通用的范型挖掘过程模型,能够充分利用CSEs,通过挖掘源代码范型保证重用代码的质量,并详细的说明了该范型挖掘过程模型在三个方面辅助软件质量改进。

关键词:代码搜索,代码挖掘,软件质量改进

参考文献

[1]Sushil B,Trung N,Erik L.Sourcerer:a search engine for open source.code supporting structure-based search[C].Proc OOPSLA Compan-ion,2006:681-682.

[2]Agrawal R,Srikant R.Fast algorithms for mining association rules in large databases[C].Proc VLDB,1994:487-499.

[3]于秀梅,梁彬,陈红.软件源码上的数据挖掘应用综述[J].计算机应用,2009(9):2494-2498.

篇5:软件著作权申请中源代码文档的编辑方法

关键词:计算机软件;著作权;登记

计算机软件著作权登记工作是版权公共服务体系的重要组成部分,近几年,软件著作权登记数量突飞猛涨,仅2014年我国软件著作權登记218783件,这是继2011年我国软件登记量超过10万件后,又一重大突破。[1]本文针对计算机软件著作权登记工作中的状况进行讨论,并尝试提出有效的完善计算机软件著作权登记制度的建议。

一、计算机软件著作权登记的基本情况

计算机软件的著作权是指软件的开发者或其他权利人依据有关著作权法律的规定,对于软件作品享有的各项专有权利。[2]

1991年6月4日,国务院依据著作权法的规定,发布了《计算机软件保护条例》(以下简称《保护条例》),并在该条例中规定了计算机软件著作权登记的内容。1992年4月6日,《计算机软件著作权登记办法》(以下简称《登记办法》)应声出台,由机械电子工业部发布并实施。截止到今年,计算机软件著作权登记制度已经实施了24年。作为受著作权法保护的作品之一,计算机软件具有不同于其他作品的突出特点,因此对于计算机软件作品的保护,采取了通过法规单独立法予以保护的方式。在计算机软件著作权登记制度实施的24年中,软件登记主管部门与登记机构发生了变化,由机械电子工业部委托的中国软件登记中心,调整为国家版权局指定的中国版权保护中心负责计算机软件著作权登记的相关工作。同时,计算机软件著作权登记的主要法律依据《计算机软件保护条例》和《计算机软件著作权登记办法》分别在2001年12月和2002年2月进行了修订。

二、计算机软件著作权登记中存在的问题及完善建议

现行的计算机软件著作权登记制度主要依据是《保护条例》和《登记办法》中的规定,在一段时期和一定程度上发挥了积极的作用。但与此同时,随着软件产业的快速发展,软件著作权登记量的不断增长,现行的登记制度也开始暴露出一些问题,无法完全适用于目前的软件登记工作以及软件产业发展的实际需要。为使登记工作能更好地服务于软件产业发展,为软件权利人提供便捷、高效的登记服务,建议对现行著作权登记制度进行修改和完善,主要包括软件著作权登记种类、登记文件及交存方式、登记证书内容、登记机构撤销职权、处罚措施等方面。

1. 软件著作权登记种类

按照现行《登记办法》的规定,软件著作权登记不仅仅限于原始取得权利的情形,还包括通过继承、承受、受让等方式取得权利的情形。即软件著作权发生继承、受让、承受等转移变化后,仍可办理软件著作权登记,而不是权利变化的记载,造成登记的混乱。尤其是通过转让取得软件著作权的受让方不仅可以以著作权人的身份申请软件著作权登记,也可以以合同当事人身份申请软件著作权转让合同登记,造成事实上两类登记的交叉。基于同一转让行为可以进行两类不同的登记,暴露了登记分类标准的不严谨性,缺乏合理性。在实践中,不仅给登记申请人面对登记申请选择时带来极大的困惑,也人为地增加了登记工作的复杂性,影响着软件登记的权威性。

建议重新梳理软件著作权登记,在立法中明确不同登记的范围。

2.软件鉴别材料的交存方式

现行《登记办法》中要求应以纸介质方式提交源程序和文档的前后各连续的30页,这导致了登记机构保存的鉴别材料证明力不足,无法完整的展现出软件的内容及形式,对软件著作权的保护相当不利。而且现在许多软件源代码中各个模块并无前后之分,著作权人也很难界定源代码的先后顺序。源程序的交存方式应适当放宽,不应仅限于提交前后各连续的30页。其次,软件作品具有不同于一般作品的数字化形式特殊性,它易于复制和修改,以数字化形式提交和保管更符合软件作品的特性,与以纸介质交存鉴别材料的方式相比,权利人将更愿意以数字化形式提交,其更易交存和管理 ,数字化形式提交可以实现登记工作无纸化管理,登记流程更快捷。

建议修改现行《登记办法》中软件著作权登记鉴别材料的交存方式,规定申请人提交全部源程序,文档则需要提交任意一种软件文档的全部材料,并且源程序和文档应当以CD-ROM或DVD-ROM光盘为载体的数字文件方式提交。对于有正当理由,无法提交源程序,规定其可以以同一源程序的目标代码形式提交,但必须附送该软件样品。

3.登记证书内容

软件著作权登记证书中记载了软件著作权的主要登记事项,合同登记证书中记载了软件权利转让或专有许可的合同主要事项,登记证书是软件登记人对外公示软件权利的最有效的方式,其在软件权利人行使权利的过程中具有非常重要的作用。而现行《登记办法》中却没有对登记证书中的记载事项做任何规定,这可以说是一种缺失,这也导致登记机构在制定登记证书时缺少相关依据。

建议以登记簿作为具体的登记文件形式,对登记的全部信息进行全面和清晰的记载,不仅记载软件著作权登记的基本事项,同时记载有关变更、补充甚至转让等信息,使登记文件具有全面性和连续性。[3]

4.登记机构撤销软件著作权登记

近年来,国家对软件企业的扶持力度逐渐加大,部分企业为享受国家相关政策,提供虚假材料骗取登记证书的事情时有发生。依据现行《登记办法》的相关规定,当软件登记机构发现软件登记主要登记信息不真实时,只要软件登记人不主动提出撤销登记,登记机构也没有权利撤销其登记。这一主动撤销职能的缺失不仅影响软件著作权登记工作的正常开展,更影响了软件著作权登记信息的公信力及权威性。

建议在《登记办法》中赋予登记机构对于不符合要求的登记的主动撤销职权,即对于经查证确属以下情形的,登记机构有权予以撤销:①提交的软件鉴别材料不是《保护条例》规定的程序和文档的;②申请文件中软件名称、权利署名不一致,且未提交证明文件的;③申请登记的软件存在权属争议的;④申请登记的合同违反法律法规强制性规定的;⑤软件著作权登记申请人不是软件著作权人的;⑥合同中的转让方或专有许可方不是软件著作权人的;⑦其他不符合登记的情形。⑧根据司法机关、仲裁机关或行政管理机关作出的生效裁决或行政处罚决定书应当撤销的;⑨软件著作权转让合同或专有许可合同无效或被撤销的;⑩申请人提供虚假登记文件或者以其他手段骗取软件著作权登记或合同登记的;?其他应当撤销的。

同时,对于登记机关依职权撤销软件登记之后,软件登记人若对撤销登记有异议的,可以向国家版权局提出异议请求。

5.关于处罚措施

目前,虚假登记频发,而现行《登记办法》中并无对虚假登记的监管及惩罚措施等相关规定,造成登记机构在治理虚假登记行为时,缺少相关法律依据,惩治力度不足,无法对这类登记进行有效监管及惩处。

建议在《登记办法》中明确申请人或代理人提供虚假登记文件或者以其他手段骗取软件著作权登记或合同登记的,登记机构将对登记申请作出不予登记的处理,对已登记软件,登记机构将予以撤销登记。同时将通过登记机构网站向社会公示虚假登记的有关信息。以此威慑虚假登记等恶意登记行为,对登记行为进行有效的监管,维护登记的严肃性和权威性。

参考文献:

[1] http://www.ccopyright.com.cn/cms/ArticleServlet?articleID=17903

[2]叶建华.计算机软件保护条例的分析与评论[J]理论与探索 2003(2) 第24 页

[3]索来军.《著作权登记制度概论》[M] 北京 人民法院出版社 第148页

作者简介:

篇6:巧用文档编辑软件简化批处理编写

在电信交换专业日常维护工作中经常会遇到要批量查询、增加、修改、删除、用户或者中继电路, 这就需要编写批处理命令。所谓批处理就是把一批命令集合到一起执行。对每条命令而言, 各个参数的值是变化的。如何将参数赋值自动带入批命令, 这就是编写批命令的困难所在。

写字板、记事本等文本编辑工具只能按行而不能分列进行编辑, 所以无法将一个参数的赋值整块带入, 所以编写批命令的常规方法是复制命令后, 再手工逐个修改参数值, 比较耗费时间而且很容易出错。经过笔者的摸索、实践, 终于找到了一种简便可行的批量修改批命令中各参数值的方法——使用提供列块编辑功能的文档编辑软件, 如Ultra Edit、EXCEL等, 通过公式或自动填充等方法将参数赋值整体带入批处理中。

由于Ultra Edit本身提供的计算功能并不突出, 所以在编写批处理命令时, Ultra Edit适用于批处理中参数值是事先已经提供好, 不需要再计算的情况, 例如批量新装机或割接时会提供用户号码及其对应的物理端口 (包括设备标识和终端标识) 、新业务权限等用户资料。而在实际工作中, 有时也会遇到批处理中参数值是需要计算得到的, 例如批量增开中继电路时, 双方事先会对好PCM电路的顺序并约定CIC编码的使用范围, 但具体到每个2M的起始和结束CIC是需要简单计算得到的, 而且计算时有一定的规律可循。在这种参数值需要计算的情况下, 编写批处理命令就需要具有强大计算功能的EX-CEL大显神通了。

下面就两个实例, 详细阐述如何使用Ultra Edit、EXCEL编写批处理命令。

1 两种快速编写批处理命令的方法

1.1 使用Ultra Edit编写批处理命令脚本

以软交换Softx3000增加语音用户为例, 具体命令如下:

命令中等号前的是命令参数, 等号后即为命令参数的赋值。

首先将用户号码、设备标识、端口标识、用户新业务权限等信息保存成文本文件——文本1。然后将以上增加语音用户的命令复制粘贴到另一文本文件——文本2中, 需要处理多少个用户就粘贴多少条, 形成批处理命令的雏形 (图1) 。

运行程序Ultra Edit, 打开保存有用户号码、物理端口 (包括设备标识、终端标识) 等信息的文本1, 在菜单栏选择“列块”, 再选择“切换列块模式”, 然后打开粘贴有增加语音用户命令的批处理命令雏形——文本2, 也选择切换到列块模式, 从文本1中逐列选择用户号码、设备标识、终端标识、新业务权限, 粘贴替换掉文本2中需要替换的参数赋值部分。

依上述操作将所有需修改的参数赋值都修改完后, 将文本2保存后即可得到批增语音用户的批处理命令脚本。

1.2 使用EXCEL编写批处理命令脚本

现以在CSoftx3000软交换设备上增加N7中继电路的命令为例, 阐述使用EXCEL编写批处理命令脚本的操作方法。增加N7中继电路的命令为:

命令中等号前的是命令参数, 等号后即为命令参数的赋值。

假设要增开20个E1, 编写批处理命令的具体方法如下:先将批命令除参数值外的其他部分录入到一张EXCEL表中, 命令名 (包含冒号) 占一列, 其后每个参数 (包含逗号和等号) 占一列, 然后每个参数后留一空列, 命令结束符“;”单独占一列。同样的命令先录入一行, 然后复制已录入的行进行粘贴, 需要多少条就粘贴多少行 (见图2) 。

就批量增开E1电路而言, SCIC、ECIC、STID参数赋值是有规律的:编写增开一个E1电路的批命令参数SCIC、ECIC的值固定相差31, 而增开多个E1时CIC一般是连续的, 即一个E1的SCIC与下一个E1的SCIC固定相差32, 这就可以利用EXCEL的“填充”功能, 完成等差序列的填充, 快速准确的完成批命令中的参数赋值:

先将第一行的各项参数均填入EXCEL表的相应位置, 选中SCIC参数后的空白列, 如果使用的EXCEL是2007版, 在菜单栏中依次选“开始”—“编辑”—“填充”, 点开“下箭头图标”旁的小三角 (图2中红色圈中) —“系列” (如果使用的EXCEL是2003版, 在菜单栏中依次选“编辑”—“填充”—“序列”) , 然后在弹出的窗口中进行相关设置:序列产生选“列”, 类型选“等差序列”, 步长值填“32”, 终止值要计算, 取起始CIC+ (增开E1个数-1) *32, 例如:CIC从320开始, 共开20个E1则终止值为320+ (20-1) *32=928。

习惯使用EXCEL公式的朋友, 也可以通过公式计算得到以上的CIC赋值:

先将第一行的各项参数均填入EXCEL表的相应位置, 在E2单元格中输入=E1+32后回车, 然后复制E2单元公式, 粘贴到E3~E20单元格中, 就可完成SCIC参数的赋值。

其后的ECIC、TID参数赋值可以用与SCIC参数相同的方法完成填充。在本例中TGN (中继群名称) 参数和SCF参数值是相同的, 所以直接复制粘贴就行了, 完成后的结果见图3。

最后一步是将图3中的每一行的多个单元格合成一个单元格形成一条完整的命令, 具体方法是:在第一行命令后选定一空白单元格M1, 输入公式:=A1&B1&C1&D1&E1&F1&G1&H1&I1&J1&K1&L1后回车 (注意:输入公式时必须将命令占用的每一列都包含进来, 才能合成正确的命令) , 余下的命令行合成可通过复制该公式再粘贴到下方的空单元格实现。最后将M1~M20单元格内容复制再粘贴到文本文件中即可最终完成批处理命令脚本。

2 结语

现代社会的工作节奏越来越快, 大家每天都要面对繁重的工作, 其中不乏一些枯燥的重复性的工作, 既耗费时间又耗费精力。其实, 在科技日益发达的今天, 很多重复性的工作都可以交给计算机去完成, 从而节省出人力去做更多的创造性的工作。笔者在工作中摸索出来两种快速编写批处理命令的方法, 在这里分享给大家, 希望能在工作中给大家带来帮助。

摘要:在交换日常维护工作中, 经常会遇到编写批处理命令来实现批量操作。文章详细阐述了使用UltraEdit、EXCEL等文档编辑软件来编写批处理命令的方法, 通过公式或自动填充等方法将参数赋值整体带入批处理中, 从而达到简化批处理命令编写过程的目的。

篇7:软件著作权申请中源代码文档的编辑方法

一、修改字符中的某些错误

众所周知,Word是目前使用最广的一款字处理软件,人们在用它进行操作的过程中都会犯下某些错误,其中常见的错误是字符本身的输入错误、字符格式或段落格式的错误等。出现上述错误该怎么办吗,对一篇长文章来说,这时如果对着屏幕一个个地查找并改正的话,将费时费力,有时甚至还可能改错。针对此情况,并没有必要一个一个地找,一个一个地改,因为Word已经提供了功能强大的查找与替换功能,使用它不仅可修改错误,还可大大提高编辑工作的效率。下面以将文中的所有“西方”替换为“西欧”,且字符格式设为黑体、五号、加粗、倾斜、阴影为例,来谈一谈如何利用它来完成解决此种问题。

先选中要进行替换的文本,然后单击菜单栏中的“编辑”→“替换”命令,打开“查找和替换”对话框,在“查找内容”框中,输入“西方”,在“替换为”框中输入“西欧”。如果扩展的替换选项看不见,可单击“高级”按钮,选中替换框中“西欧”,单击“格式”按钮,从下拉列表选择“字体”命令,然后在弹出的“字符”对话框中,选择字体为“黑体”,字号为“五号”,字形为“加粗、倾斜”,效果列表选中“阴影”。若要全部修改可直接单击“全部替换”按钮,在弹出的提示框中,若单击“确定”按钮,则完成修改操作。若要逐个修改,可单击“替换”按钮,重复多次,也完成多个错误的修改,最后单击“关闭”按钮。

二、删除文字间多余的字符和特殊符号间的更换

在实际生活中经常遇到这样的问题:如从Internet网下载一篇文章其保存为Word文档后,会发现在文档的字符间有很多个无用的字符或符号,特别是特殊符号,其中特殊符号最多的是空格符,有时多得甚至在每两个字符间均含有一个多余字符或符号。或者会在文章中发现本来应该分段的,却分成了行,即句号后有一个软回车符“↓”(即手动换行符)。这样不仅影响了文档的美观,并可能浪费了磁盘空间。该如何将其删除呢?通常人们就直接用删除键(即DEL键)或退格键(即BackSpace键)将多余的字符或软回车符“↓”一个一个地慢慢删除,但对一篇长文章来说,这样虽然可将字符或软回车符“↓”全部删除,不仅费时费力,有时甚至还可能删错。有没有更快的方法呢?回答是肯定,可用Word中替换命令来完成。下面以删除多余的空格符和软回车符“↓”转变成硬回车符“”为例,介绍一下该方面的具体操作。

1、删除多余的空格符

先选中要进行替换的文本,然后单击菜单栏中的“编辑”一“替换”命令,在打开的对话框的“查找内容”框中,单击“特殊字符”按钮,在弹出的菜单中选择“空白区域”项或直接输入“w”,在“替换为”框中不输入任何内容,再单击“全部替换”按钮,在弹出的提示框中,若单击“确定”按钮,则完成多余字符的删除。也可使用“替换”按钮,逐个将其删除,最后单击“关闭”按钮,这样就可将多余的空格删除掉。

2、特殊符号间的更换(软回车符“↓”转变或硬回车符“”)

先选中要进行替换的文本,然后单击菜单栏中的“编辑”→“替换”命令,在打开的对话框的“查找内容”框中,单击“特殊字符”按钮,在弹出的菜单中选择“手动换行符”项或直接输入“↓”,在“替换为”框中选择“段落标记”或直接输入“p”,再单击“全部替换”按钮,若单击“确定”按钮,则对特殊字符的更换。也可使用“替换”按钮,逐个修改,最后单击“关闭”按钮,完成此方面的操作。

三、在文字间添加特殊符号

在工作中也会遇到这样的问题:在打印好几十页的材料后,领导要求把“第一章”、“第二章”等后面都加上一个顿号。大家可能会想,这还不简单,查找所有的“章”字,把它替换成“章、”不就行了吗?可是,所有的“第一章”、“第二章”都变成了“第一章、”、“第二章、”,但是全文中其他出现的“章”也变成了“章、”。这可怎么办呢?以此为例,介绍一下Word中在文字间添加特殊符号的妙用。

打开“查找和替换”对话框,选择“替换”标签,在“查找内容”中输入“第章”,然后把光标移到两个字之间,单击下方的[特殊字符]按钮(如果没有这个按钮的话,单击[高级]按钮就会出现),选择“任意字符”,这时查找的内容就是“第?章”。接下来,把光标移到“替换为”框中,单击(特殊字符)按钮,选择“查找内容”,就会插入““,再加上一个顿号,这样就把查找的内容替换成原来的查找内容加上一个顿号了,也就是“&”,按下[全部替换]按钮即可,容易且方便。

四、利用替换进行分行或分段

例如,将下列诗《将进酒》按每行一句排列:

君不见黄河之水天上来,奔流到海不复回。君不见高堂明镜悲白发,朝如青丝暮成雪。人生得意须尽欢,莫使金樽空对月。天生我才必有用,千金散尽还复来。烹羊宰牛且为乐,会须一饮三百杯。岑夫子,丹邱生,将进酒,杯莫停。与君歌一曲,请君为我倾耳听。钟鼓馔玉不足贵,但愿长醉不愿醒。古来圣贤皆寂寞,惟有饮者留其名。陈王昔时宴平乐,斗酒十千恣欢谑。主人何为言少钱,径须沽取对君酌。五花马,千金裘。呼儿将出换美酒,与尔同销万古愁。

碰到这种情况,可能有的人会采取以下方式:将插入点定位于每个句号后,再同时按下Shift+Enter键插入一个软回车符来完成。但有的人分辨不清什么是分行或分段,就直接在句号后按Enter键插入段落标记(即硬回车符),这样操作是彻底错误,他们把分行看作是分段,严重违背了题目的意思,是不可行的。做此题时首先要分辨清楚,什么是分行、什么是分段,两者是怎么区分的。分行和分段的区分关键在于特殊符号是软回车符还是段落标记,若是段落标记说明它是分段,否则就是分行。用直接插入软回车符的方法给诗文分行虽可进行,但不是最佳方法。最佳方法是;

先选中要进行替换的文本,然后单击菜单栏中的“编辑”→“替换”命令,在打开的对话框的“查找内容”框中,直接输入句号“。”,在“替换为”框中直接输入句号“。”和特殊符号“手动换行符”或直接输入““↓”,再单击“全部替换”按钮,在弹出的提示框中,若单击“确定”按钮,则分行操作。也可使用“替换”按钮,逐个修改来完成分行操作。最后单击“关闭”按钮,完成分行操作。

五、通配替换

如果要想将文档中的书名(包含在书名号“《》”之间的部分)统一设置“黑体、红色”,可以利用通配符替换来实现:打开“查找和替换”对话框,展开“高级”选项,选中其中的“使用通配符”选项,在“查找内容”中输入“《。》”,然后将光标定在“替换为“右侧的方框中,不输入内容,打开“替换字体”对话框,将“中文字体”和“字体颜色”分别设置为“黑体”和“红色”,点击“确定”返回,再按一下“全部替换”按钮即可。

六、小结

通过上述介绍,可以使人们对字处理软件Word中的替换命令的应有个大致的了解,遇到什么问题时也知道什么时候用替换来解决它题。通过学习使人们可进一步了解到对于某些问题不要被表面现象所迷惑,应深入了解其实质,只有这样才能更好地解决好问题。

篇8:雷达软件代码静态质量度量方法

1977年,McCall等提出从产品运行、产品修订、产品变迁三方面考量软件质量模型[1]。1978年,Boehm等提出了定量评价软件质量的概念,给出了60个度量公式,并首次提出分层结构的软件质量模型[2,3]。ISO于1991年发布ISO9126标准,提出了高层软件需求质量评价准则、中层软件设计质量评价准则、低层软件代码质量度量评价准则的3层质量模型[4]。我国在GB/T 16260.1和GJB 5236定义了软件的内外部质量模型,将软件质量划分为功能性、可靠性、易用性、效率、可维护性和可移植性六个特性,每个特性又进一步细分为若干子特性。外部度量是通过测试、运行和观察可执行的软件,由该软件所占系统行为的测度而导出;内部度量指通过对中间产品静态属性的测量来预测软件外部质量特性[5]。根据产品的业务目标和评价者的要求,选择质量度量的基础也不同,用户一般根据使用软件的结果,发行方一般根据功能性、可靠性、易用性、效率等外部度量准则,开发人员一般根据内部度量准则。文献[6]对现有软件质量模型进行了系统的总结。

代码是软件的中间产品,代码静态质量度量的是软件内部属性,通过它可以预测软件的外部质量测度。需要指出的是,软件开发过程中产品质量的定量评价还比较困难[7],主要是因为软件内部属性在外部质量测度上的作用是由经验决定的,并且依赖于软件的使用环境,度量模型及参数并不惟一,要根据行业特点进行选择,而国内这方面的工作很少,文献[8]提出了一种度量元标准值的计算方法。

1 雷达软件静态质量评价现状

雷达软件按技术特点划分成若干配置项:雷控软件、发射控保软件、接收软件、信号处理软件、数据处理软件、综合显示软件,还可能包括伺服控制软件、波束控制软件、反干扰软件、微波通信软件等。其具有运行平台多样、对实时性稳定性要求高的特点,通常采用C和C++语言进行开发,代码中既有面向过程的又有面向对象的。现在雷达软件代码静态质量分析一般是先使用静态分析工具进行分析,然后查看关心的度量元,没有对代码的静态质量进行系统地分析。而且商用代码静态分析工具只是通过函数、类和系统各自的度量元来计算其质量准则,并没有考虑成员函数对类、类对系统质量准则的影响。雷达软件代码静态质量的关注点通常集中在函数层面,对系统和类较少关注,而这两个层面的静态质量也是需要关注的。

本文以现有代码静态质量模型为基础,根据实际测评过程中关注的要点对其进行调整,并考虑了质量准则值在不同度量范围之间的传递关系,提出了一种计算软件代码静态质量的方法,它可以方便地计算出被评软件代码的静态质量,具有定义清晰、层次关系合理、度量元获取方便的特点。

2 雷达软件代码静态质量模型

新方法采用的是符合GB/T16260规定的软件质量三层模型,分为质量特性、准则和度量元三个层次,按照GB/T16260的描述,软件静态质量主要反映软件的可维护性,准则层包括可分析性、可修改性、稳定性和可测试性四个准则,根据工作需要,度量元选取以商用代码质量分析工具提供的度量元为基础,辅以人工统计的度量元,度量范围分为系统域、类域和函数域。

质量特性中的可维护性是指软件对已完成的部分进行调整需要多大的努力。质量准则中的可分析性是指软件便于发现失效或定位要修改位置的能力;可修改性是指软件便于修改或完善的能力;稳定性是指软件修改不会导致意外结果引发风险的能力;可测试性是指软件便于验证的能力。

2.1 新方法的计算原理

系统域、类域、函数域的复合准则值由自身所含度量元计算的准则值和子域传递准则值构成,权重分别为w1、w2,设每个成员函数的准则值对所属类准则值的影响权重相同,每个类准则值对所属系统准则值的影响权重相同。计算公式如下

式(1)中:ΩA,ΩC,ΩM分别表示系统域、类域、函数域度量元的合理范围,若度量元在规定范围内,则对应的度量元值为1,若在范围外,则对应的度量元值为0。ASMk为系统的第k个度量元取值,CSMik表示类i的第k个度量元取值,MSMijk表示类i的成员函数ij的第k个度量元取值。A表示系统域度量元个数,C表示类域度量元个数,M表示类域度量元个数。

式(2)中:ASC表示归一化的系统域准则值,CSCi表示归一化的类i的类域准则值,MSCij表示归一化的类i成员函数ij的函数域准则值。

式(3)中:CSCCi表示归一化的类i的类域复合准则值,bi表示类i中成员函数的个数。

式(4)中:ASCC表示归一化的系统域复合准则值,n表示系统中类的个数。

2.2 系统域度量模型

系统域选取了A1~A14共14个度量元,见表1,主要从类和成员函数的总体特点进行度量[9,10]。每个质量准则值选5个对其影响最大的度量元计算得到,见图1。系统域复合准则值等于自身准则值和类域传递准则值的加权和。

2.3 类域度量模型

类域选取了C1~C12共12个度量元,见表2,从类自身编码的特点和类与类之间的关系进行度量。每个质量准则值选5个对其影响最大的度量元计算得到,具体见图2。类域复合准则值等于类自身准则值和函数域传递准则值的加权和。

2.4 函数域度量模型

函数域选择了M1~M16共16个度量元,见表3,从函数自身编码的特点和函数之间的相互调用进行度量。每个质量准则值选5个对其影响最大的度量元计算得到,见图3。

3 试验验证

以某型雷达数据处理软件的代码作为评价对象,从中选取了12个类共89个函数,进行度量试验。以类1为例,类1共有5个成员函数,表4中包含了每个函数的函数域度量元统计值和根据图3所示的函数质量模型得到的每个函数的函数域准则值。

类1的类域度量元统计值如表5所示:

根据式(2)和图2计算得到类1的自身准则值,根据式(3)计算得到类1的复合准则值,在复合准则值的构成中自身度量元计算得到的准则值所占的比重w1=50%,子域传递准则值所占的比重w2=50%。结果如表6所示:

表7中记录了被评软件中所含的12个类的类域复合准则值。

从表7中可以看到,被评软件中12个类的复合质量准则值都超过了0.6分,达到了及格水平。总体上看,类的可修改性和稳定性较好,可分析性和可测试性相对较差,原因是被测软件成员函数与圈复杂度相关的度量元普遍超标。

下面是实验结果的玫瑰图,图4(a)、图5(a)和图6(a)是系统域、类域和函数域自身度量元的玫瑰图。图中正多边形的边界表示度量元合理范围的上下边界,不规则多边形是实测的度量元,*形点表示度量元在规定范围内,o形点表示度量元在规定范围外,A1~A14对应表1中系统域的14个度量元,C1~C12对应表2中类域的12个度量元,M1~M16对应表3中函数域的16个度量元。图4(b)、图5(b)和图6(b)分别是系统域、类域和函数域的准则值玫瑰图,图中正菱形表示准则值满分时的边界,浅色实线表示自身度量元计算得到的准则值,深色实线表示复合准则值,标注值为复合准则值。

由图4(a)中可以看到,被评软件在14个系统域度量元中有3个超标,分别为:A7重载函数所占比例、A10未被使用函数所占的比例、A13基本圈复杂度超标比例,说明系统中重载函数的比例较低,未使用函数的比例较高,基本圈复杂超标比例较高。根据图1所示的系统域质量准则模型,系统的可修改性、稳定性和可测试性受到小幅影响,在图4(b)中可以看到影响的程度,图4(b)中还可以看到复合后的系统域准则值与系统域自身度量元计算得到的准则值基本吻合。

由图5(a)中可以看到,被评类在12个类域度量元中有4个超标,分别为:C5成员函数基本圈复杂度均值、C6成员函数基本圈复杂度超标比例、C7成员函数圈复杂度与基本圈复杂度乘积的均值、C8成员函数圈复杂度与基本圈复杂度乘积的超标比例。根据图2所示的类域质量准则模型,被测类的可分析性、可修改、稳定性、可测试性均受到影响,其中可分析性和可测试性受影响较大,在图5(b)中可以看到受影响的程度,图5(b)中还可以看到复合后的准则值与类域自身度量元计算得到的准则值基本吻合。

由图6(a)中可以看到,被评函数在16个函数域度量元中有6个超标,分别为:M9出口语句条数、M11圈复杂度、M12基本圈复杂度、M13圈复杂度与基本圈复杂度的乘积、M14控制结构最大嵌套层数、M15可执行路径数。根据图3所示的函数域质量准则模型,函数的可分析性、可修改性、稳定性、可测试性都受到较大影响,其中可测试性受影响的程度最大,在图6(b)中可以看到这一结果。

4 结束语

目前雷达软件代码静态质量度量中存在度量手段单一,度量方法不能满足实际需要的问题。针对这些问题,本文提出了新的代码静态质量度量方法,采用通用的软件质量三层模型,划分了系统域、类域、函数域三个度量范围,考虑了质量准则从子域向父域的传递,并使用玫瑰图将代码静态质量直观地表达出来,试验结果表明该方法能够有效地对软件代码静态质量进行度量,帮助开发人员和管理人员了解代码的结构状态,有针对性的提高软件编码质量。需要指出的是,如何选取代码的静态度量元表示质量准则还没有定论,本文所提的质量模型主要参考了商业软件以及平时的工作经验,如何通过较为严谨的证明说明所选度量元的合理性可作为后期的研究内容。

摘要:通过软件静态质量分析可以定量评价软件代码的质量。文章通过对软件代码静态质量度量模型的研究,考虑质量准则在不同度量范围间的传递,结合雷达软件代码质量的关注点,提出雷达软件静态质量度量方法,以量化数据表示代码的质量水平,并以玫瑰图的形式表示出来。试验结果表明,新的度量方法能够有效地对软件静态质量进行度量,为设计师了解软件代码质量水平提供了客观依据,减少了软件质量评估中的主观性。

关键词:软件静态质量,度量方法,玫瑰图

参考文献

[1]Mccall J,Richards P,Walters G.Factors in software quali-ty[R].Technical report CDRL A003,US Rome air devel-opment centre,1977.

[2]Boehm B W,Brown J R,Kaspar H.Characteristics of soft-ware quality(TRW serious of software technology)[M].New York:Elsevier science Ltd,1978.

[3]Boehm B W,Brown J R.Quantitative evaluation of soft-ware quality[C]//ICSE′76Proceedings of the 2nd interna-tional conference on software engineering.University ofCalifornia:IEEE Computer society,1976:592-605.

[4]ISO/IEC 9126 1 2001.Software engineering Productquality Part 1:Quality model[S].

[5]GB/T 16260 1 2006.软件工程产品质量第1部分质量模型[S].

[6]吴坚,吴刚.软件质量模型的研究[J].计算机工程与科学,2006,28(6):125-130.

[7]何新贵.软件测试技术综述[J].中国计量学院学报,2008,19(3):187-193.

[8]孙梦璘,宋晓秋,巢翌.软件程序代码质量度量技术研究[J].计算机工程与设计,2006,27(2):325-327.

[9]Telelogic A B.Telelogic Tau Logiscope Audit C++Ref-erence Manual(Revision 6.5)[R].London,2008.

上一篇:微博里的好句子下一篇:《隆中对》