软件程序员

2024-07-16

软件程序员(精选十篇)

软件程序员 篇1

一、第三方软件的指称

第三方软件是指主程序软件著作权以外的组织或者个人, 经软件著作权人授权或虽未经授权而通过直接修改软件程序或通过拦截、更改软件数据传递方式来影响或改变主程序软件具体功能和性能的辅助性软件。生活中常见的第三方软件即为我们熟知的非官方编制的外挂和插件。外挂是指故意编制的以包括主程序软件在内的一系列程序产生辅助或扩展等的直接或间接影响, 而并非主程序软件客户端的程序。插件是指遵循一定规范的应用程序接口编写出来的主要用来扩展目标软件功能的程序。外挂与插件的含义很接近, 都是用相同的方式附着于主程序。我国《著作权法》没有对外挂作相应解释, 行政执法部门所认定的外挂软件仅指网络游戏中的软件。

第三方软件中的“第三方”是针对主程序软件开发商、运营商等软件著作权人的“官方”地位而言, 主程序软件著作权人与软件用户分别是“第一方”与“第二方”, 软件著作权人和用户之外的第三方采取特定技术手段对主程序软件的具体功能进行修改, 并将这种特定技术手段以某种软件形式固定下来, 提供给用户下载并使用, 提供依附于主程序软件的组织或者个人就是“第三方”, 其提供的软件即为第三方软件。引发“3Q大战”的“360QQ保镖”就是北京奇虎科技有限公司依附深圳市腾讯计算机系统有限公司的即时通讯软件QQ而编制的辅助性软件, 属于典型的第三方软件。

第三方软件形成三种复杂的法律关系。第一, 用户使用第三方软件改变主程序软件而形成的用户与软件著作权人的关系;第二, 第三方软件编制者与主程序软件著作权人的关系;第三, 用户与第三方软件编制者的关系。第三方软件须依赖于主程序软件运行, 否则无法实现其功能, 第三方软件通过技术手段改变主程序软件的功能或性能, 则有可能侵犯主程序软件著作权中的复制权和修改权。

二、第三方软件侵犯软件著作权的类型

第三方软件是否侵犯主程序软件著作权不能一概而论, 应区分是否取得主程序著作权人的许可使用, 如果已经获得许可自无侵权可能, 只有未取得许可的第三方软件才有可能侵犯主程序软件的著作权。依据我国《计算机软件保护条例》第8条和第16条3款规定, 软件修改权是指对软件进行增补、删节或改变指令、语句顺序的权利。软件合法复制品所有人享有为把该软件用于实际计算机应用环境或者改进其功能、性能而进行的必要修改权利。软件行业惯例将必要性修改扩大解释为适用性修改, 即无需取得软件著作权人许可而进行必要的适用性修改。因此, 第三方软件进行的适用性修改也不侵犯主程序软件著作权。

《计算机软件保护条例》明确规定, 侵犯软件著作权是指故意避开或破坏著作权人为保护其软件著作权而采取技术措施, 故意删除或改变软件权利管理电子信息的行为, 未经授权的第三方软件往往通过三种形式侵犯主程序软件著作权。

(一) 直接修改行为

第三方软件直接修改主程序软件源代码从而修改其数据来实现各种特定功能。第三方通过软件反向工程获取自己所需的源程序代码, 通过反向分析主程序的相关函数功能、参数以及地址, 从而将软件的目标程序还原为软件源程序。曾在业界引起广泛影响的“珊瑚虫”版本QQ软件为其典型代表。

(二) 系统拦截行为

第三方软件通过技术手段拦截操作系统与主程序软件之间的数据传递, 进而拦截系统信息加载特定功能模块来实现特定应用程序功能。由于Windows操作系统的API函数是早已开放的应用程序编程接口, 因此第三方可以通过调用系统API函数拦截主程序软件与操作系统之间的数据传递, 迫使主程序软件执行第三方软件的程序。360QQ保镖把自己的主要功能模块QGuard dll通过全局钩子方式注入腾讯QQ进程, 并拦截QQ进程系统调用Shell Execute Ex W和Create Process Internal W等程序, 从而起到拦截QQ软件部分功能的效果。

(三) 封包拦截行为

第三方软件通过抓包工具来拦截客户端与服务器之间的传输信息, 完成拦截客户端程序与服务器程序之间的数据传递, 并通过专业的解密技术来破解封包加密, 通过修改客户端向服务器发送的数据包或者模拟客户端向服务器发送数据包, 从而达到改变主程序信息或者主程序功能的效果。封包拦截行为主要针对的是需要通过网络服务才能运行的主程序软件, 在线网络游戏中使用的各种“外挂”行为多数是封包拦截行为。

总体而言, 360QQ保镖提供的使无需付费的普通用户获得付费QQ会员专属的去广告功能, 属于破解QQ客户端会员特权服务功能的行为。过滤QQ软件广告、自动清理非必要的QQ表情、删除QQ插件等行为均构成未经授权擅自对腾讯QQ软件程序的代码、数据及其指令进行增补、删节的行为。360QQ保镖直接去除QQ安全模块插件著作权人的权利管理信息, 使QQ软件著作权人不仅失去名称标识, 也失去标示作品使用条款和条件的信息权利, 此行为必然会受到法律规制。

三、第三方软件侵权软件著作权的责任承担机制

(一) 第三方软件直接修改行为的责任承担

第三方软件在网络平台发布并提供其他用户下载的直接修改行为侵犯了软件著作权人的修改权。修改权是软件著作权人一项重要的精神权利, 其他组织或个人未经许可不得擅自修改软件的程序。第三方软件的直接修改行为侵犯软件著作权人的复制权。通过直接修改行为将修改程序直接注入软件主程序, 修改主程序的数据和代码来实现各种特定功能, 其行为本质是对主程序软件的复制, 复制权是著作权的核心权利, 也是软件著作权人重要的经济权利。第三方软件的直接修改行为侵犯软件著作权人的信息网络传播权。第三方软件为主程序软件源代码修改而成的软件, 将此软件上传到网络供他人下载, 侵犯了主程序软件著作权人的信息网络传播权。

根据我国《计算机软件保护条例》第24条规定, 未经软件著作权人许可, 故意避开或者破坏著作权人为保护其软件著作权而采取的技术措施的, 故意删除或者改变软件权利管理电子信息的, 应当根据情况, 承担停止侵害、消除影响、赔礼道歉、赔偿损失等民事责任;同时损害社会公共利益的, 由著作权行政管理部门责令停止侵权行为, 没收违法所得, 没收、销毁侵权复制品, 可以并处罚款;情节严重的, 著作权行政管理部门可以没收主要用于制作侵权复制品的材料、工具、设备等;触犯刑律的, 依照刑法关于侵犯著作权罪、销售侵权复制品罪的规定, 依法追究刑事责任。

(二) 第三方软件拦截行为的责任承担

第三方软件拦截行为无论是系统拦截还是封包拦截均没有直接修改和复制主程序软件的源代码与目标程序代码, 第三方软件拦截和改变的是服务器与客户端网络传输之间封包的数据。因此, 司法实务判例中出现了将直接修改型的“珊瑚虫版”QQ软件的编制和发行认定为侵犯著作权罪, 而将封包拦截行为的网络游戏外挂的编制和发行认定为非法经营罪。

但是, 根据我国《计算机软件保护条例》第3条第 (1) 项规定, 计算机程序是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列, 或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。第三方软件程序所附带的各种数据都应该认为是计算机程序, 法律适用上应当对技术用语范围采用法理扩大解释的方法, 认定两种软件拦截行为均为侵犯软件著作权的行为, 均应承担侵犯软件著作权的责任。

“3Q之战”凸显了我国软件法律保护的滞后性, 让网络企业在“蛮荒时代”进行无序的竞争, 难免会殃及池鱼。软件保护的对象不仅是软件程序, 而应是软件所能触及的全部内容, 这不仅需要互联网行业建立自律规则, 更需要完善法律对互联网竞争行为的规范。

软件程序员简历 篇2

基本信息

姓 名:

性 别:男

年 龄:

居住地区:

最近工作[8个月]

公 司:XX有限公司

行 业:电子技术/半导体/集成电路

职 位:计算机软件

最高学历

学 历:本科

专 业:计算机应用

学 校:武汉大学

自我评价

工作认真负责,不推卸责任;能承受工作中的压力;工作上可以独当一面;具有团队精神,能与同事,其它部门积极配合,公司利益至上;服从性好,能与上司保持良好的沟通,尊重上司的安排;为人诚实,正直;且好学上进,不断提高工作能力;

求职意向

到岗时间:一个月之内

工作性质:全职

希望行业:电子技术/半导体/集成电路

目标地点:武汉

期望月薪:面议/月

目标职能:计算机软件

工作经验

20XX/2 — 20XX/10:XX有限公司[8个月]

所属行业:电子技术/半导体/集成电路

开发部 计算机软件

1. 熟练掌握Office各类软件使用。

2. 企业ERP维护、CRM应收账款、OA考勤系统、门户网站的开发。

3. 结合语音卡开发低成本的电话服务系统,个人简历模板wdjl.net,为公司提供售后服务的`相关数据信息。

20XX/7 — 20XX/12:XX有限公司[5个月]

所属行业:电子技术/半导体/集成电路

开发部 计算机软件

1. XX软件IOS版本性能优化与重点问题的修改;

2. XX软件IOS版本的发布;

3. IOS团队的建设;

4. 公司IOS技术框架的设计与搭建;

教育经历

20XX/9— 20XX/6 武汉大学 计算机应用 本科

证书

20XX/12 大学英语四级

语言能力

英语(良好)听说(良好),读写(良好)

联系方式

手 机:

通用数控加工程序校验软件设计方法 篇3

本文介绍一种通用的数控加工程序检测软件设计方法。设计中包含各种常用的数控指令功能,以满足各种数控设备对功能的要求;为了适应各种设备对有效指令范围的不同要求,对指令的有效性设计了可选功能。对编制完成的数控程序,检测软件具有语法检查功能,可以对出错位置和错误原因进行提示,以便发现错误及时纠正,提高编程效率。检测软件具有模拟加工功能,可在屏幕上以图形方式动态显示加工过程中工件外廓的变化过程和刀具中心的运行轨迹,直观地验证加工轮廓控制的正确性。

数控加工程序检测处理过程大体可分为以下几个部分:数控加工程序输入、数控设备类型选择、设备有效功能选择、语法检测、图形跟踪和其他功能等。检测处理过程的控制流程框架结构如图1所示。

数控加工程序校验软件的结构按检测处理流程和功能进行模块化设计。采用功能划分的模块化设计方法,可以使各程序段功能明确且相对独立,各模块之间的关系清晰,便于调试;其中一些功能模块对多数数控设备具有普适性,可以通用。下面对数控加工程序检测软件的具体设计方法进行讨论。

一、程序输入

通常数控加工指令源程序是按标准数控指令格式,以文本文件保存。因此,程序的输入模块中设计一个通用程序编辑器,加工程序可以通过该编辑器直接输入,并以文本格式保存。也可以将已经编好的加工指令源程序直接调入该编辑器进行编辑和修改。

二、设备选择

该模块的主要功能是选择待检测加工程序所对应的加工设备类型,以便正确进行与设备类型相符的程序校验。

不同数控设备生成的加工轨迹有所不同。如数控铣床和铣削加工中心,加工生成的工件轮廓是一个与刀具中心轨迹相同或平行的图形,而车床和车削加工中心,加工生成的工件轮廓则是一个以刀具中心轨迹轴为母线的轴对称图形。因此,在检测程序设计中,首先按设备类型特点分类,然后不同类型分别编制相应的图形跟踪显示软件。使用时按类型自动调用相应处理软件。

此外,数控指令的含义也与加工设备类型有关。例如,在铣床类设备上表示的终点坐标X值,在车床类设备上则表示为终点处的直径值,采用相对坐标表示径向位移量时,是以直径差值表示,即位移量(半径差)是显示值(直径差)的一半,等等……。因此,可用设备选择功能正确区分这些差别。

输入了设备类型后,设备选择模块具有类型分类判别功能,按轨迹控制特点和加工零件图形特点分类,并自动设置类别标志,为后续工作中进行正确的校验提供相关程序调用依据。设备类型分类控制流程如图2所示。

三、指令选择

不同数控设备功能各异,因而所选用的有效数控代码也不同;因此,设计中应尽可能包含所有常用标准数控代码(ISO code)的语法检查;然后,设计一个有效代码增减功能。实际使用时,针对具体设备的不同要求,选择相应的有效数控代码范围,即可实现该模块具有通用的语法检查功能。

指令选择采用功能列表方式,在每个功能指令旁设计一个选择窗口,通过在选择窗口内打勾确定该功能在程序中是否有效,以适应对各种设备加工控制指令进行语法检查的需要。指令选择程序框图如图3所示。

四、语法检查

可以实现对特定数控设备运动控制参数的语法检查,发现错误及时纠正,然后将检查合格的数控指令文本文件转换成符合该设备要求的数据格式。

其基本功能如下:

打开一个文本文件,对按标准数控指令格式编写的数控加工程序进行语法分析。主要内容为,能够依据设备的刀具运行范围要求,设定运动轨迹超限检测和纠错提示;针对设备的指令功能范围选择,进行有效功能代码的语法检查,对无效功能代码进行纠错提示;对非数控指令的错误代码进行纠错提示;对超过该设备最高转速或进给速度的设定值,进行超限提示。

语法检查正确后,自动转换为能够进行轨迹控制的数据结构,生成的数据可供图形跟踪,也可在运行图形跟踪程序的同时,通过匹配的接口电路直接控制数控设备运行。

语法检查及格式转换模块的内部程序控制流程如图4所示。该模块的设计要点在于通用化设计。实际使用时,针对具体设备的不同要求,选择有效代码范围和各运动参数有效范围,即可实现对不同设备数控加工程序的语法检查。

五、刀具轨迹图形跟踪模块

图形跟踪模块在加工程序的校验中,可以在与数控设备脱机的条件下,在屏幕上模拟显示将要进行的工件加工全过程,并在程序运行结束时在屏幕上呈现实际加工结果,直观验证加工程序编制的控制轨迹是否正确。程序验证过程变得十分便捷。为了便于应用,它应具备以下几个功能:

设备分类判别处理功能,可按分类标志调用不同的图形显示程序,正确显示工件轮廓加工效果;使图形自动缩放功能,可将被加工工件以适当的比例完整地显示在屏幕上;显示已加工部分的外廓;动态显示刀具加工外廓轨迹、显示工件待加工外廓图形;显示已加工、正在加工和将要加工的数控程序段。显示其他主要加工参数(当前运动轴的动态位置、第三轴位置、主轴转速、进给速率等)

下面给出刀具轨迹图形跟踪程序基本结构框架如图5所示。

六、I/O接口模块

该模块提供了一个对数控设备有实际数控要求的控制通道。通过该模块的接口电路可对设备直接进行加工运动轨迹控制。

接口控制模块为非通用模块。应根据控制精度要求和所选伺服电机类型进行有针对性的特定设计。该模块的入口参数来自插补算法模块中控制各轴进给步长及运动方向程序段的运行结果。模块的出口向相应口地址输出各伺服电机运动控制参数,如步长(或距离)、速度(或脉冲频率),方向(或绕组环形分配通电顺序)等。对于带有反馈信号的伺服驱动系统,还应编写相应的反馈信号接收、判断和处理控制程序。

上述各模块的功能组合,使得用这种方法设计的软件能够适应各种数控设备对加工程序校验的不同要求,体现了校验的通用性特点。

该软件简易、实用适用范围宽的设计特点,尤其适合中小企业在掌握和开发现代数控加工新技术中使用。

七、结论

1、数控加工程序校验程序设计中带有尽可能多的常用数控指令功能,可使该校验软件具有广泛的通用性;

2、设计对数控指令有效性的可选功能和控制参数有效范围的可选功能,可以满足各种数控设备对程序校验的不同要求。

基于程序数据属性的联合软件特征 篇4

关键词:软件盗版,数据属性,软件特征

0 引言

近年来, 随着Internet的快速发展, 软件盗版行为越来越猖獗。盗版者利用软件产品易复制和易传播等特点, 非法盗取软件产品所有者的劳动成果。盗版行为不仅危害了软件开发者的著作所有权, 严重扰乱了市场秩序, 而且也给使用盗版软件的用户造成了不小的危害, 比如建立在盗版系统上的杀毒软件根基不牢固, 用户遭到黑客借助盗版传播的病毒和木马的攻击等等。已有的软件保护技术包括加密技术、代码迷惑技术、防篡改技术、软件水印技术和软件特征技术等。

软件特征是程序本身所固有的、能够唯一标识该软件的一个属性或者几个属性的集合, 可以用于软件的识别, 是盗版检测和算法识别的有效方法。软件特征技术一般分为特征提取和相似度比较两部分, 通过比较分别从两个程序中提取特征的相似度来判断两个程序之间是否存在盗版行为, 如果两个程序的相似度较高, 则可以认定二者之间可能存在盗版行为。

1 相关技术

根据提取特征时软件是否运行, 软件特征可以分为静态软件特征和动态软件特征两种。静态软件特征提取的是程序静态的信息集合, 而动态软件特征提取的是程序某个执行状态下的信息集合。根据程序属性分类, 软件特征可以分为基于指令集的软件特征、基于系统API及库函数调用的软件特征和基于图结构的软件特征三种。基于指令集的软件特征的组成基础为软件中的基本指令单元, 根据相关指令的组合或筛选规则形成了不同形式的软件特征, 其中Myles等提出的k-gram静态软件特征[1]是其典型的代表。Myles等在软件特征的描述中引入了滑动窗口 ( 窗口长度为k) 的思想, 把从程序中提取的k-gram碎片作为程序的特征。但由于该特征丢失了控制流信息, 只是对程序指令的机械分割, 难以抵抗代码迷惑和语义保持变换的攻击。为了克服这一不足, 其他研究者对其进行了改进, 如从动态执行程序和运用程序切片技术角度, 提出了k-gram动态软件特征[2]和基于程序切片的k-gram动态软件特征[3]; 从统计k-gram指令序列频数和加权角度, 提出了k-gram频数软件特征[4]和加权kgram静态软件特征[5]等。

基于系统API及库函数调用的软件特征通过静态或动态分析, 将系统API和库函数调用序列及其频数作为软件特征。Tamada等提出的基于API调用序列的动态软件特征[6]是其典型的代表。之后从调用API和库函数子序列角度, 提出了Java库函数动态软件特征[7]、基于系统调用的短序列特征[8]; 从分析API序列调用轨迹的角度, 提出了基于API踪迹序列的静态软件特征[9]和基于API调用图的静态API序列集合特征[10]。基于程序图结构的软件特征通过分析程序内部元素之间的关系, 构造出控制流图、数据流图以及依赖图等图结构, 通过分析图内相关结构提取相应的软件特征, 其中Myles等提出的路径追踪特征 ( WPP) [11]是其典型的代表。

本文通过对程序的数据属性进行分析, 从静态和动态两个方面着手得到基于程序数据属性的联合软件特征DAB ( Data Attributes based Birthmark) 。对于常量, 通过分析程序在特定输入下的动态执行过程, 得到基于程序常量属性的子特征。对于变量, 分别从静态和动态两个方面着手, 分别得到基于程序变量属性的静态子特征和动态子特征。最后将三个子特征结合在一起, 得到基于程序数据属性的联合软件特征。理论分析和实验数据表明, 该联合特征具有较高的可信性和鲁棒性。

2 基于程序数据属性的联合软件特征

程序的执行过程实质上是程序对数据进行处理的过程, 而程序的语义正是体现在程序的执行过程中, 因此, 程序对数据的处理和程序的语义是紧密相关的。提取程序的数据属性作为其特征可以很好地表征该程序独一无二的特性, 使其区分于其他软件的能力得到提高。此外, 采用动态和静态相结合的方式来提取特征, 能够很好地弥补单一使用静态或动态方法提取的不足。本文通过分析程序中由数据引起的指令间的关系以及程序执行过程中数据值的变化, 构建基于程序数据属性的联合软件特征。

2. 1 基于常量属性的子特征

基于常量属性的子特征Crel的提取过程为:

( 1) 在特定的输入I0下, 跟踪程序的执行, 提取在特定输入下程序对常量的引用序列;

( 2) 对该引用序列进行k-gram划分得到长度为k的指令碎片集;

( 3) 该指令碎片集即在特定输入下, 程序基于常量属性的子特征。本文通过以下定义描述Crel。

定义1 ( k-gram碎片集) 记A = { a1, a2, …, an} 是一个序列, ( ai + 1, ai + 2, …, ai + k) 是A的一个k-gram碎片, 其中, k是kgram算法中的滑动窗口长度。A的k-gram碎片集记为Seg ( A, k) ={ (ai+1, ai+2, …, ai+k) |0≤i≤n-k}。

定义2 ( Crel) 设p是一个程序, C = { C1, C2, …, Cn} ( 其中Ci为程序的指令) 是在特定输入I0下提取的程序对常量的引用序列, 则程序p在特定输入I0下基于常量属性的子特征Crel ( p, I0) = Seg ( C, k) 。

定义3 ( Crel的相似度) 设Crel ( p, I0) 和Crel ( q, I0) 分别是从程序P和q中提取的基于常量属性子特征, 则二者的相似度记为:

2. 2 基于变量属性的子特征

对于变量, 从静态和动态两个方面进行数据属性分析。基于变量属性的静态子特征Sdep的提取过程为:

( 1) 对程序进行静态分析得到该程序的控制流图CFG ( Control Flow Graph) ;

( 2) 基于变量间的数据依赖和控制依赖关系, 在CFG上构造其数据依赖图和控制依赖图, 然后将两图合并得到程序依赖图PDG ( Program Dependent Graph) ;

( 3) 提取PDG每条路径上的指令序列, 构成指令碎片集S= { S1, S2, …, Sn} ( Si为第i条路径上的指令序列) , 该指令碎片集即为程序基于变量属性的静态子特征Sdep= { S1, S2, …, Sn} 。

定义4 ( CFG) CFG是一有向图, 可用四元组CFG = ( N, E, nstart, nstop) 表示。其中, N是节点集, 程序中的每个语句都对应图中的一个节点; 边集E = { < ni, nj> | ni, nj∈ N且ni到nj可能存在控制转移 ( 执行完ni后可能立即执行nj) } ; nstart和nstop分别为程序的入口和出口节点。

定义5 ( PDG) PDG可用二元组G = ( N, E) 表示。其中, N= { n∈N | n表示程序中的某一个语句} , E = { ( ni, nj) | ni, nj∈N且nj控制依赖于ni, 或者nj数据依赖于ni} 。

概念1 控制依赖。设n1、n2为CFG中的两个节点, 若n2能否被执行由n1的执行状态决定, 则称n2控制依赖于n1, 记为CD ( n2, n1) 。

概念2 数据依赖。设n1、n2为CFG中的两个节点, v为一变量。n1和n2之间存在一条可执行路径, 变量v在n1处被定义或者修改, 在n2执行, 且在n1和n2之间的路径上没有其它语句对v重新定义或修改, 则称n2关于变量v数据依赖于n1, 记为DD ( n2, n1, v) 。

图1 描述了基于变量的静态子特征的提取过程。

图 1 基于变量的静态子特征的提取过程

基于变量属性的静态子特征的相似度比较分为以下几步[12]:

( 1) 计算两个指令碎片之间的相似度

两个指令碎片之间的相似度可以通过最长公共子序列LCS ( Longest Common Subsequence) 和最短公共子序列SCS ( Shortest Common Subsequence) 来计算。假定a和b分别是两个指令序列, LCS ( a, b) 和SCS ( a, b) 分别表示a和b的最长公共子序列和最短公共子序列, 则两个指令序列的相似度记为:

其中| a| 是指令序列a的长度。

例如, 指令序列a = ( iload-1, iadd, isub, pop) , 指令序列b = ( iload-2, iadd, isub, pop) , 则LCS ( a, b) = ( iadd, isub, pop) , 因此, 两个指令序列a和b之间的相似度记为:

( 2) 计算两个特征之间的相似度

假定Sdep ( p) 和Sdep ( q) 分别是程序p和q的基于变量属性的静态子特征, 为了计算两个特征之间的相似度, 首先需要得到任意两个指令序列之间的相似度Sim ( ai, bi) ( 其中ai∈Sdep ( p) , bi∈Sdep ( q) ) 。然后通过Hungarian算法在两个特征的所有指令序列对 ( ai, bi) 中得到其最优匹配序列对集match ( p, q) = { ( a1, b1) , ( a2, b2) , …, ( an, bn) } ( 其中n是最优匹配序列对的个数) , 即两个特征所有指令序列中最相似的指令序列对的集合。则程序p和q的基于变量属性的静态子特征的相似度记为:

其中| Sdep ( p) | 是p基于变量属性的静态特征中指令序列的个数。

两个程序的相似度通过计算所有最优匹配序列对的相似度之和得到, 为使其标准化, 将所得之和除以两个程序中指令序列个数的最大值。因此, 所得的相似度值从0 到1, 分别表示两个程序基于常量属性的静态子特征的相似程度。

例如, 假定Sdep ( p) = { a1, a2, a3, a4} , Sdep ( q) = { b1, b2, b3, b4} , p和q之间的相似度矩阵如表1 所示。

利用Hungarian算法, 最优匹配序列对集match ( p, q) ={ ( a1, b4) , ( a2, b2) , ( a3, b1) , ( a4, b3) } 。因此, 程序p和q的基于变量属性的静态子特征的相似度为:

基于变量的动态子特征的提取过程如下:

( 1) 对程序进行分析得到局部变量集合{ Var1, Var2, …, Varl} , 其中l为局部变量个数;

( 2) 在特定输入I1下, 记录每个局部变量Vari取值的变化序列Vi= { v1, v2, …, vm} , 其中Vi是变量Vari的变化序列;

( 3) 构造程序基于变量的动态子特征Vseq ( p, I1) = { V1, V2, …, Vl} 。

基于程序变量属性的动态子特征的相似度计算方法和基于程序变量属性的静态子特征的相似度计算方法相同。令Vseq ( p, I1) 和Vseq ( q, I1) 分别为程序p和q的基于程序变量属性的动态子特征, 则二者的相似度记为:

其中| Vdep ( p) | 是p基于程序变量属性的动态子特征中指令序列的个数。

2. 3 基于程序数据属性的联合软件特征

利用基于程序数据属性的三个子特征, 构建基于程序数据属性的静态和动态联合特征DAB ( Data Attributes based Birthmark) = 。联合特征的相似度可以通过计算三个子特征的平均值得到, 即为:

3 性能分析

软件特征的两个最主要的评价标准是可信性和鲁棒性。可信性是指两个独立开发的软件, 即便它们完成的功能是相同的, 从中提取出来的特征也应该是不同的。鲁棒性是指经过语义保持变换前后的两个程序, 从中提取出来的特征应该是相同的。可信性反映了软件特征区别两个独立开发的程序的能力, 鲁棒性反映了软件胎记在受到语义保持变换等攻击后, 将其正确识别的能力。

为了验证DAB的可信性, 本文使用4 对应用程序来进行实验。这4 对程序的大小各异且每一对程序实现的功能相同或是同一应用程序的不同版本。选择这样的实验程序的目的是通过两个方面验证DAB的可信性, 第一, DAB应该能够识别实现相同功能的不同软件; 第二, DAB应该能够识别不同大小, 不同复杂度的软件。实验程序的功能、实现方法、大小及相似度如表2所示。

表2 前两项数据反映了DAB区分实现相同功能的不同软件的可信性。从表中数据可以看出, 阶乘函数和Fibonacci函数这两个程序对大小相对较小, 且每个程序对中的两个程序实现的功能相同, 但分别采用递归和迭代两种不同的方法实现, 属于不同的软件, 所以前两组数据的相似度都比较低, 这说明DAB能够区分实现相同功能的不同软件。表2 后两项数据反映了DAB区分相似软件的可信性。从表中数据可以看出, gnunpdf和ftp4j这两个程序对大小相对较大, 由于每个程序对只是相同软件的不同版本, 所以这两组数据的相似度均高于0. 8。由此可见, DAB对于实现不同功能、不同大小、不同复杂度的软件均具有较高的可信性。

为了验证DAB的鲁棒性, 我们使用两种码迷惑/优化工具:Sandmark和Jarg分别对以上8 个程序进行语义保持变换, 模拟可能的攻击, 然后比较语义保持变换前后的两个程序的相似度, 最后将相似度计算结果以相似度值为基准从小到大排序, 实验结果如图2 所示。

图2 反映了DAB抵抗语义保持变换攻击的能力。由图中数据可知, 对于经Sandmark或Jarg变换前后每个程序对, DAB的相似度均在80% 以上, 由此验证了DAB对这些攻击具有较高的鲁棒性。

4 结语

传统的静态或者动态软件特征各有不足之处, 比如静态软件特征虽然提取简单, 但是抵抗语义保持变换的能力较差, 而动态软件特征鲁棒性虽然较强, 但提取过程复杂, 覆盖面小且高度依赖运行环境。本文将基于变量的静态软件特征和基于常量及变量的动态软件特征相结合, 构造基于程序数据属性的静态和动态联合特征, 使该特征既具有较高的可信性又具有较高的鲁棒性。下一步的工作可以将软件特征技术和软件水印技术进行结合, 将软件特征作为水印信息编码成某个特征的表示, 并嵌入到程序中, 作为程序特征的一部分, 或许可以提高其抵御盗版的能力。

参考文献

[1]Ginger M, Christian S C.K-gram based software birthmarks[C]//Proceeding of ACM Symposium on Applied Computing.Santa Fe, New Mexico, USA, ACM, 2005:314-318.

[2]Lu B, Liu F, Ge X, et al.A Software Birthmark based on Dynamic Opcode N-gram[C]//Proceedings of International Conference on Semantic Computing (ICSC) , 2007:37-44.

[3]Bai Y, Sun X, Sun G, et al.Dynamic K-gram based Software Birthmark[C]//19th Australian Conference on Software Engineering, 2008:644-649.

[4]陈林, 刘粉林, 芦斌, 等.基于k-gram频数的静态软件胎记[J].计算机工程, 2011, 37 (4) :46-48.

[5]Xie Xin, Liu Fenlin, Lu Bin, et al.A Software Birthmark based on weighted k-gram[C]//Proceedings of 2010 IEEE International Conference on Intelligent Computing and Intelligent Systems, 2010, 1:400-405.

[6]Haruaki T, Keiji O, Masahide N, et al.Dynamic Software Birthmarks to Detect the Theft of Windows Applications[C]//Proceeding of Symposium on Future Software Technology.Xi'an China, 2004.

[7]David Schuler, Valentin Dallmeier, Christian Lindig.A Dynamic Birthmark for Java[C]//Proceedings of the 22nd IEEE/ACM International Conference on Automated Software Engineering.2007:274-283.

[8]Wang Xinran, Yoon Chan Jhi, Zhu Sencun, et al.Detecting Software Theft via System Call Based Birthmarks.ACSAC, 2009:149-158.

[9]Heewan Park, Seokwoo Choi, Hyunil Lim, et al.Detecting Java Theft Based on Static API Trace Birthmark[C]//Proceedings of International Workshop on Security (IWSEC) .Springer LNCS, 2008, 5312:121-135.

[10]Seokwoo Choi, Heewan Park, Hyun-il Lim, et al.A Static API Birthmark for Windows Binary Executables[J].Systems and Software, 2009, 82 (5) :862-873.

[11]Ginger M, Christian S C.Detecting Software Theft via Whole Program Path Birthmarks[C]//Proceeding of 7th International Conference Information Security.Palo Alto CA, USA, Springer-Verlag, 2004:404-415.

软件程序员述职报告(通用) 篇5

日子在弹指一挥间就毫无声息的流逝,回顾这段时间的工作,取得的收获不是一星半点的,将过去的成绩汇集成一份述职报告吧。那要怎么写好述职报告呢?下面是小编整理的软件程序员述职报告范文(通用5篇),欢迎阅读与收藏。

软件程序员述职报告1

工作刚满三个月,在这三个月的时间内,我主要做了以下几个方面的工作:

1、对软件的熟悉与理解

2、跟随开发人员对软件的改进进行了跟踪测试,利用功能组合的方法,对各种工具进行了测试,提交Bug共计405个,已验证关闭268个。

3、对软件用户手册和管理员手册的一部分进行了测试与更改,期间也加深了对该软件各个功能的理解。

对已经实现的功能基本上都进行了测试,对软件使用上的改进也提出了自己的建议。期间也了解了软件的功能需求,主要是对客户端服务器端及方案设计器进行了功能测试。在这段时间里学到了不少东西。

在这段期间软件根据用户的反馈一直在不断的改进,基本上每天都会有变化,我跟据开发的进度一直在不断的测试,对新增加的工具边使用边学习,提交缺陷报告,并及时与开发人员进行沟通处理有歧异的缺陷报告,反复验证修复后的缺陷。直到上一周利用他们出差的时间,我有对以前测试过的工具重新进行了更深一层的的组合测试。通过这段时间的改进,软件的各项功能已经越来越全面,目前软件的基本功能都已实现,致命错误越来越少,期间也试用了自动化性能测试工具LoadRunner,由于软件还没有整体完成,在使用中不好匹配协议,现在正在熟悉另一个自动化工具RationalRobot来进行性能测试。

下半年,主要工作时是:

1、随着软件的逐步完成,将细化功能测试并及早的着手准备性能测试,界面测试,易用性等其他方面的总体测试。

2、测试所有与本软件有关的文档。

3、解决所有遗留的有歧异的缺陷报告,参照提交的缺陷报告进行回归测试。

4、随着其他项目的开展着手准备测试前期的工作。

具体的工作实施安排还将根据项目组的工作进展和规划进行调整。

软件程序员述职报告2

我是在7月份到新单位工作的,新单位是一个很不错的单位,项目饱满,资金等方面也没有太多的问题,但就测试部门工作的情况却很不乐观。具体表现是人员少,任务重,人员不稳定。领导对测试部门的工作很不满意,在面试我的时候就多次表示了对公司目前测试不满,期待我来之后能够带领测试部门有一个比较好的发展。

首先说说我们公司测试部门在这四个月的变化吧。

1、测试人员大量增加

原来的测试人员为3人,现在为14人,人员扩充了3倍,目前来说,测试人员的数量还不是很多,但相比原来部门的扩充速度还是很快的,另外一个方面,由于我们工作比较有成效,领导基本认可开发人员和测试人员比例可以达到1:0.8或1的比例。我想这个比例对一个国内的企业来说已经是很高的比例了。

2、个人素质的提高

具体的个人素质提高不是很好说,还是用项目来说吧,我刚来的时候,测试人员在一个系统测试的时候,一般测试需求点位500个左右,后来一个项目在作回归测试的时候,测试需求点达到15000个,第二次回归测试的时候测试需求点达到了49000个,这里要说明的是,我们测试需求点的增加不是为了增加而增加,而是对被测试需求各种使用情况分析的更详细,程序覆盖强度越来越大的结果,测试发现的问题深度逐步增强的反应。

3、机器设备的变化

测试人员是开发群体的弱势群体,他们的机器配置也是公司最低的,刚来的时候,测试人员使用的机器都完全不能满足自动化测试的需要,目前,测试人员基本都提高了机器配置,测试人员很高兴。另外我们还有专门的测试流程管理服务器,一些淘汰下来的老机器作为专门跑测试用例的测试专用机。

4、开发人员对测试人员的态度改变

测试人员在开发过程中处于弱势地位,这是一个不可回避的现象,原来开发人员可以随意的让测试人员做自己认为需要的测试,而测试人员是没有办法拒绝的,甚至连具体测试的方法和手段开发人员都要干涉,而一旦出问题,首先怪罪测试人员,而不是找自己的责任,测试人员成了项目失败的替罪羊。而现在这种已经发生了很大的改变,至少测试人员有能力展示他们的特长。而不是开发人员的附属。

5、领导对测试工作的态度转变

我刚到单位的时候,领导们对测试工作很不满意,给我印象最深的是领导说,测试部门的工作人员,可用的就留下,不可用的就直接开除,这对测试人员的工作评价实在不高,现在好多了,首先测试部门现在的工作得到了领导的认可,其次,人员、设备的配置在增加,最重要的是,我们要求的测试时间可以得到保证。

软件程序员述职报告3

一、个人工作详细说明

本次软件项目设计的题目是场地预约系统,它是基于B/S模式实现的用于体育城场地管理预约的Web应用软件。为用户提供并接受用户提出的需求信息,同时通过数据库管理系统存储数据,给场地的管理带来很大的方便。本项目的实现分为前台与后台。其中前台,用户可以浏览场地所提供的可预订场地的信息,同时可以对需要的场地进行预订;后台主要是针对管理员,管理员可以通过后台对场地的相应信息进行增添修改等操作。

我基本参与了本项目的全部实现过程,涉及项目的需求分析,概要设计,详细设计,代码编写,调试与运行。在需求分析阶段和小组其他成员认真分析讨论了本项目各方面的需求,主要是功能方面的需求,基本确定了本场地预约系统应该具有的基本功能。概要设计阶段通过讨论分析确定了所需表结构。详细设计阶段参与部分代码的编写,其中包括页面与数据库交互的实现,还有相应jsp页面代码的实现几布局的调整,修改。

在数据库设计实现阶段,通过和我们组其他成员的共同讨论,确定了场地信息、用户信息等表结构的详细信息,并实现了其数据库的建立和相应表的具体信息的设计实现。同时针对个别表结构完成了相应代码的编写与实现。

在后台,实现了用户的信息的浏览查看,修改及删除等功能,同时完成了足球场等场地信息的浏览、增添、修改、删除等功能。

前台参与了主界面的设计与实现,通过查询数据库得到主界面显示所需场地的相关信息,通过这样,用户可以很清楚的获知所有可预订场地的信息,其主界面上的所有关于场地的数据都是动态从数据库获取的`,这样当场地增添或删除时通过修改数据库可以很方便的实现界面呈现给用户的场地信息,能够很好的使实际情况跟提供给用户的信息保持同布,非常利于场地信息的管理和发布。

二、个人工作体会西安石油大学

时间过得真快,不知不觉中近一个月的课程设计就要结束了。本次课程设计我们组做的题目是场地预约系统,先前选题的时候以为它实现起来应该比较简单,在通过后边的具体分析之后才发现它并不是我所想象的那样简单,其中涉及许多问题我当时并没有想清楚。

经过我们小组的共同努力,最终基本上完成了场地预约系统的实现。虽然做的不是很完美,不是特别有创意,但这是我们共同努力的结果,当我们看着自己亲自完成的项目觉得很欣慰。

软件程序员述职报告4

时间匆匆,不知不觉已是专业课结束的时候了,却总觉得这学期过得如此之快。这学期刚开始的时候,对于老师的分组学习,我们有点不习惯,也不理解。但后来慢慢的,跟着老师的步伐,也觉得这样也挺不错的。有人出点子,有人做开发,有人做测试,这样一步步地完成作业。老师让我们发挥自己的才能,选着自己想学的方式。

对于老师来说我们是她众多届学生的一届,而对于我来说,却是我作为一名学生难以忘记的一门课。我曾经幻想过我的大学生活,认为平时不听课,只要到期末的时候多看几天的书就可以,不挂科,平时可以有很多的课余时间与朋友们出去玩。我一直以为这样会持续到毕业结束。

但是因为这门课,在每次分配任务的时候,我都希望自己可以多分一部分,因为自己很想玩,但如果有任务必须做的话,就会静下来做吧。所以希望让任务来约束自己。当程序做不出来的时候,苦恼用什么方法可以做出来,也有和同组的同学共同探讨解决办法,也有和其他小组的同学请教方法。在解决问题的过程中出来感谢之外,我觉得我的同学也很优秀,在这样的团队,这样的班级中我觉得很幸运。当实现一个功能的时候,自己特别的高兴,不只是因为完成了作业,更是对自己能力的肯定。当时就觉得自己特别棒。

每次作品展示的时候,都是一个收获的时候。会被设计组人的奇思妙想所惊喜,会对其他开发组人员的实现特别的功能好奇,对测试组的同学又爱又恨,因为他们有时测出的问题这是自己都没有想到的问题,所以会感谢他们,有时又会觉得他们的问题好苛刻,正是这样成了促使我们前进。

在这门课堂的最后一次课上,我们每一个人都说了自己的感言。课代表对班级的付出,对老师的感谢和敬爱,同样也是每一位同学的想法,还有同学对同学的友谊,大家彼此感动着。有太多感动的话语,太多感谢的人,太多值得回忆的画面。太多的感谢,道一句,谢谢我的青春,我的大学,曾经我也如此的努力过,奋斗过。谢谢在我生命中遇到的你们。

软件程序员述职报告5

时间过得真快,转眼间,在山大实习生活就结束了。四周的时间能够和山大的同学一起工作、学习、生活我感到非常的荣幸,同时也感觉到很大的压力,作为电子商务专业的学生从事软件开发感觉还是有一定的困难,特别是我们还是和山大大三的学生一起,在初来时自己就有一些不自信,但随着项目的进展,我慢慢的找到了自己的位置,找到自己的目标,虽然自己与好的同学还有差距,这也给了我很大压力,但是我相信没有压力就没有动力,所以整个实训过程中我都在不断地努力。

实训期间让我学到很多东西,不仅在理论上让我对it领域有了全新的认识,在实践能力上也得到了很大的提高,真正的学到了学以致用,更学到很多做人的道理,对我来说受益匪浅。特别是利用周六上午的时间山大为我们安排的讲座让我们了解it领域一些新的发展动态以及一些领先的技术,让我意识到自己知识的缺少,这激励我在以后的学习、工作、生活中要不断了解信息技术发展动态以及信息发展中出现的新的技术。

除此之外,我还学到了如何与人相处,如何和人跟好的交流,我们组成一个团队大家一起开发一个项目,大家的交流沟通显得尤为重要,如何将自己的想法清楚明白的告诉队友,如何提出自己想法的同时又不伤害其他的队友的面子,这些在我的实训生活中都有一些体会。可是说,第一次亲身体会理论与实际相结合,让我大开眼界。也是对以前学习的一个初审吧,相信这次实训多我以后的学习、工作也将会有很很大的影响,在短短的二十几天里这些宝贵的经验将会成为我以后工作的基石。

作为大二的学生,经过两年的在校学习,对程序设计有了一些基本的理性的认识和理解。在校期间一直忙于理论的学习,没有机会也没有经验来参与我们项目的开发,所以在实习之前软件按开发对我来说是非常抽象的,一个完整的项目要怎么来分工以及完成该项目所需要的基本步骤也不明确,经过这次实训让我明白一个完整项目的完成必须团队分工合作,并在每个阶段进行必要的总结和检查。在我们项目的开发过程中我们项目的步骤:详细设计、详细设计review、编码、编码review、单体测试。在项目开发过程中我也深刻的体会到详细设计对一个项目开发有明确的指引作用,它可以使开发人员对这个项目所要实现的功能在总体上有具体的认识,并能减少在开发过程中出现不必要的脱节。

经过二十多天的obbligato信息安全管理的java开发,是我对java软件开发平台有了更深一步的了解,也对nec公司的obbligato平台有了一定的了解。

这次实训是对我们两年学习的一个检验,虽然项目中很多知识我们在日常的学习中都没有遇到,这同时提醒我:要想成为一个合格的程序员就有具备一种自学能力,在工作中会遇到很多从未接触过的问题,当有了问题时要去解决,在你不断努力,寻找答案的过程中,自己的能力也在潜移默化的提升。有时遇到问题时可能有很多想法但却不知道那个正确,这就让我们不断地去探索,不断地尝试。

软件程序员 篇6

【关键词】建筑装饰设计 SketchUp软件 课堂 程序

一、目前建筑装饰设计教学的不足

我们目前建筑装饰设计教学一般情况如下:在学生具有如建筑材料、建筑美术等基础知识后,进入专业设计课的学习,同期也学习其他较深的专业知识。由于多数学生空间想象能力都尚未真正建立,学生在设计过程中并不能灵活运用相关的专业知识,比如会忘记建筑装饰材料的性质,在满足设计规范的前提不知如何营造出空间艺术,也不知如何基于成本考虑设计方案。总体来说,学生的设计效率较低。

能不能用一种较好的方法,让学生在直观的、立体的画面中高效率地推敲建筑装饰设计方案?

二、SketchUp软件应用于建筑装饰设计课堂教学具可行性

SketchUp是一款建筑草图设计工具,主要用于设计过程中方案的推敲。操作者可一边构思方案一边制作数字模型,设计效果直观,易于学生与教师之间或设计者与甲方之间的直接交流。用SketchUp制作数字模型有如下优点。

(1)操作界面简洁,很容易掌握,不管是教师还是学生建模速度都可达到较快的程度,修改也很容易。在课堂上老师于自带电脑上面操作,通过教室投影仪将其展现,在第一个课程设计教学结束后,学生可在课下熟悉操作过程,教师可安排某些课时学生携带电脑。

(2)软件操作直接面对设计过程。教师通过软件操作讲解建筑装饰设计过程;同时,在设计作业阶段,学生可以将直观的三维成果展示以便与教师进行方案探讨与交流。此软件创建和修改都极为容易,可不断修改材质,并调用一些现成的模型。随着方案的进展,模型不断深化,最终可以完成精确度很高的模型成果,可将之渲染成为设计效果图。

三、将SketchUp软件融入建筑装饰设计课堂的程序

1、教师课前准备

(1)收集大量的现成模型

家具、电器、洁具等不需要设计者的设计,这部分可直接利用,关键是要把握住风格、色彩及尺寸。如果可以,可将这些系统的存于软件的模型库,按风格、使用者数量、尺寸等分类储存,必要时可在模型名称上体现尺寸等主要信息。

(2)建立设计面对的建筑空间对象的模型

建筑空间模型的建立方法可于课堂教学生,其思路为导入简化处理过的CAD平面图形,再结合立面图,利用建模工具快速建模。

(3)各风格的案例、各种色调搭配、案例改良分析等需要的建筑装饰设计模型。

(4)进行装饰造价运算的excel文件。

2、教师课堂设计基础知识的讲解

(1)家具、电器、洁具

建筑装饰设计中会涉及很多尺寸相对固定的物件,如各种家具、电器、卫生洁具。由于课前已存入SketchUp模型库,有预览功能,且可注明物件的相关说明,比如尺寸、价格、适用人数等,教师在讲课的时候可方便调出相应的模型,结合SketchUp非常方便的测量标注功能,边标注边讲解,提高学生对常规尺寸的认知。3D展示加上动态的标注,让学生更有学习的热情。

(2)定制家具

建筑装饰设计中很多元素尺寸并不固定,如各类柜子,其尺寸需要配合建筑体进行一定范围的灵活调整。在已建好建筑空间模型中,结合设计规范与方法、借助定位辅助线条向学生展示如何设计。讲理论的同时让学生看到设计过程,让理论学习变得不再空洞。

(3)各类通道、竖向空间

结合事先建好的建筑室内设计模型,导入一些人物模型,现场标注空间尺寸,直观地展示通道、房间空间尺寸与人们行为心理的关系,让学生理解合理设计空间尺寸的重要性。

总体而言,SketchUp软件因其极易上手的建模功能、非常方便的备注及标注功能,使得上课的时候让师生的思维能较容易地保持同步。

3、教师课堂设计方法讲解的程序

(1)立体地展现建筑空间,分析空间的特点,用自带功能快速地标出主要尺寸,与学生讨论应该如何对此房间进行建筑装饰设计,在尝试的过程中调模型、建模。当尝试过程到了一定阶段,进入下阶段的案例学习。

(2)展示已经准备好的此类设计的各风格案例模型。结合相关的理论知识,全方面立体地对风格特点进行讲解,让学生能理解与掌握风格元素。

(3)展示事先准备的由配色较优良的方案提炼而来、忽略设计元素具体形的建筑室内整体色块的模型,对其色彩的明度、纯度及色相对比运用进行审美分析。

(4)再回到需要进行建筑装饰设计的建筑空间模型中,讨论如何选择风格元素、如何配色,再进行方案的深入设计。

4、教师课堂上关于设计的扩展讲解

(1)造价估算

SketchUp软件可方便地统计出模型中的组件名称及数量,也可算某些面的面积、某体体的体积,再结合Excel软件(表中已列出名称及计量单价)算出它们的大致总价格。

(2)平、立、剖面图的绘制

设计一般需要绘制平、立、剖面,我们可利用SketchUp软件的视图功能,于平、立、剖角度导出CAD文件进行修改,即绘制出平、立、剖面二维图。这样可高效率地将三维设计模型向二维设计图纸转化。

(3)效果图的制作

可將设计场景模型优化,利用相关渲染插件渲染效果图,也可导出为能在3ds Max、Atlantis等软件中打开的文件进行渲染。此过程由于较耗时,教师可简单介绍。

四、总结

教师可将SketchUp软件运用于建筑装饰设计教学中,能起到师生充分互动的效果,寓教于乐。但应该要注意的是,不可过度依赖于此,须在一些设计知识的讲解后并让学生按传统方式完成过作业以后适度引入课堂,提升学生的学习兴趣,并为将来的工作打下基础。

【参考文献】

[1]康赛飞 室内设计资料图集 中国建筑工业出版社 2009.6第一版

SAP软件中的程序对象管理 篇7

第一个字段PGMID是指程序标识的一组编码, 一般包括:R3TR、LIMU、CORR几个值, 其各自的具体含义如下:

R3TR是表示其内容是程序对象, 指SAP中各种类型的开发内容的一种抽象叫法, 是程序开发内容的一种载体, 如类、可执行程序、接口等。

LIMU也是指其包含的内容是程序对象, 但其与R3TR的区别在于, 其标识的是R3TR类型的对象的子对象, 举例以“可执行程序”这种程序对象来说, 一个“可执行程序”类型的对象, 包括多个子类型的对象, 如“程序屏幕”, 指可给用户看到的主屏幕、子屏幕、选择屏幕等;再如“源代码”对象, 指程序中执行的主体ABAP代码语句;可执行程序还可以包括“文本元素”对象, 用于在选择屏幕上展示字段的标签, 或在程序源代码中作为文本常量进行使用。

CORR是指备注、注释之类的信息, 其不包含具体的程序对象和开发内容。如一批对象所在的传输请求号, 对象释放的具体日期、时间, 以及开发者信息。

第二个字段OBJECT是用来表明对象的类型具体是什么的一组编码, 如为主程序 (PROG) 类型、源代码 (REPT) 类型、文本元素 (REPS) 类型、程序屏幕 (DYNP) 等。OBJECT所包含的类型, 涵盖了ABAP程序语言所有已定义的程序对象类型, 从而将所有的程序对象, 进行了明确的分类, 用以管理程序对象在软件平台中的存储、分析、以及组织整个系统有效地运行。

第三个字段OBJ_NAME就是指具体的程序对象名称了, 如程序的名称, 数据库表的名称, 接口的名称等等。

当一个程序对象激活时, SAP系统会从数据库中读取需要的对象内容, 然后根据其类型不同, 执行不同的处理机制, 形成不同的实际物理对象, 如数据库表、编译后的程序文件等。

SAP中所有基于ABAP开发的程序对象都有一个对象类型, 不同的对象类型与对象类型之间, 存在着特定架构关系。如某个报表, 其对象类型可以是主程序 (PROG) 类型, 其可能包含源代码 (REPT) 类型、文本元素 (REPS) 类型、程序屏幕 (DYNP) 类型, 这说明他们之间是父子关系, 而文本元素 (REPS) 类型和程序屏幕 (DYNP) 类型是相互独立的关系, 不存在关联关系。因此可以理解为一个“主程序类型”的父开发对象, 包含“源代码类型”、“文本元素类型”、“程序屏幕类型”几个子类型的开发对象, 也可以说成“主程序”开发对象由“源代码”、“文本元素”、“程序屏幕”几个子开发对象组成。

以上只是列举了其中的一个例子, 来说明对象类型之间的关系, 那么SAP系统中存在很多的开发对象类型, 问题来了, 如此多的对象类型, SAP是如何进行有组织的管理呢?作为开发者, 该如何找到这些关系模型呢?

实际上SAP在开发ABAP开发平台时已经考虑到这一点, 其在ABAP平台中设立了管理这些程序对象类型的方法。这里将SAP开发对象类型定义成两种大的类型集合, 用以组织对象类型之间的关系。一种以PGMID为R3TR的父类型集合, 一种是以PGMID为LIMU的子类型集合, 根据这种定义方式, 一个父类型可以包含一个或者多个子类型, 一个子类型只属于一个父类型。另外根据SAP数据视图EUOBJV, 可以查询某个父类型包含哪些子类型, 以及一个子类型属于哪个父类型。

上图1描述了实现流程, 从ABAP的代码角度具体的实现方法如下:

1.设计ABAP程序函数, 实现子类型寻找父类型的功能函数。函数输入为子类型OBJECT编码, 定义类型为CHAR4, 输出为父类型OBJECT编码, 定义类型为CHAR4。

2.函数逻辑参考逻辑流程图“子类型寻找父类型”, 首先判断输入的类型是否存在, 再使用下列实例SQL语句取出父类型

SELECT SINGLE tadir INTO ex_object

FROM euobjv WHERE id=in_object.

3.上述SQL语句输出的ex_object变量作为返回参数, 即为父类型OBJECT编码。

4.设计ABAP程序函数, 实现父类型寻找子类型的功能函数。函数输入为父类型OBJECT编码, 定义类型为CHAR4, 输出为子类型OBJECT编码列表, 定义为内表格式。

5.函数逻辑参考逻辑流程图“父类型寻找子类型”, 首先判断输入的类型是否存在, 再使用下列实例SQL语句取出子类型内表

SELECT e071 INTO CORRESPONDING FIELDS OF TABL E e071_object FROM euobjv WHERE tadir=object.

6.上述SQL语句输出的e071_object即为子类型内表, 但其中包含重复项, 使用下面的ABAP语句可以去除重复项, 得到父类型的所有子类型内表。

DELETE ADJACENT DUPLICATES FROM e071_object

7.返回e071_object内表, 作为父类型所有的子类型集合。

通过这种方式, 我们可以方便地得到程序对象类型与程序对象类型之间的关系, 从而可以帮助使用SAP软件的企业, 或从事SAP软件开发咨询的软件公司, 了解SAP源程序的关系, 理解系统将各种类型的程序对象组织运行的机制。在国内的企业中, 尤其是在中国大型国有企业, 如中国石化、国家电网等, 这些企业对SAP系统进行大批量本地化开发, 本文所阐述的对象与对象之间关系的分析方法, 可以帮助企业更加有效地组织自己开发代码, 管理自己的开发对象, 加强自开发程序对象的版本管理, 从而帮助企业在系统分析、系统安全方面取得进一步的提升。

摘要:SAP系统是一种企业资源管理软件, 其由德国SAP公司开发, 并成功应用于80%的世界500强企业, 而在SAP软件的使用过程中, 大部分公司都会使用SAP公司提供的ABAP高级开发语言进行了本地化系统改造, ABAP语言编写的SAP程序一般由多种类型的程序对象组成, 这些程序对象类型之间ABAP语言定义了之间的关联关系, 但是SAP公司却没有明确说明, 本文通过对程序对象类型的分析, 得到常用的程序对象类型之间的父子关系。这一点可以帮助我们理解ABAP语言的整体架构, 有助于我们进行程序开发及企业对自己定制化开发的程序对象进行有效管理。

软件程序员 篇8

下面就程序的几种结构做简单的分析。

一般来说,任何复杂的程序都是由顺序、循环、选择这三种基本的结构组成的,这三种结构既可以单独使用,也可以相互结合组成较为复杂的程序结构。

我们首先来看一下顺序结构。顺序结构是程序结构中最基本的,也就是说,程序是按从上往下的顺序执行的。比如表现两个角色进行对话的作品 ,两个角色的程序脚本如图1所示。

在这个作品中,每个角色的程序脚本都是按照先后顺序从前向后执行的,因此我们把这种结构称为顺序结构。

有些程序需要我们不断重复同样的内容,比如在制作不断切换造型来实现的动画效果时,需要不断重复切换不同的造型,这就是循环结构。循环结构一般用于重复某段需要不断重复执行的代码,如图2所示。

第三种程序结构是选择结构。选择结构也称为判断结构或分支结构,是在顺序结构中提供了程序的分支,也就是说在程序的一个顺序流程中加入子程序流程,这样可以使得程序更具交互性,分支结构又可分为单分支结构和双分支结构。在Scratch中相应提供了这两个模块,如图3所示。

我们先来看单分支结构模块的流程图,如图4所示。

从流程图中我们能够看出,如果条件为真(满足条件),和前面的顺序结构完全相同,如果条件为假(不满足条件)时,程序就会绕行。

在这里我们举一个例子:商场进行商品促销,凡购买超过两百元商品的顾客可享受九折优惠,200元以下(包括200元)按原价付款,请使用Scratch编写计算付款金额的程序。

在此应用中要对付款的金额做出判断,如果金额满足大于200元这个条件则打九折,不满足这个条件则不运行判断语句中的指令,绕行程序,如图5所示。

我们再来看一下双分支结构的流程图,如图6所示。

从分流程图中可以看出,在双分支结构中当条件为真(满足条件),执行语句序列1,如果条件为假(不满足条件),将执行语句序列2。

比比如如::判判断断奇奇偶偶数数的的例例子子,当我们输入一个数字后后,,计计算算机机通通过过计计算算看看它它能能否否被被二整除。如果这个数字除除以以二二后后所所得得余余数数为为零零,,那那么么输输出“此数为偶数”,如果果不不满满足足这这个个条条件件,,执执行行序序列列2的模块,输出“此数为奇奇数数””,,如如图图77所所示示。。

这这三三种种结结构构是是计计算算机机程程序序语语言中最基本的结构,在实实际际编编程程过过程程中中我我们们通通常常还还会会把把它们结合起来使用,比如如在在SSccrraattcchh11..44中中还还有有这这样样两两个个模模块,如图8所示。

软件工程专业学生程序设计能力培养 篇9

经济和社会的快速发展对应用型人才培养质量的要求越来越高。本文主要探讨应用型本科院校如何提高软件工程专业学生的专业核心能力———编程能力。

1 科学制定人才培养计划

人才培养计划是人才培养的纲领性文件, 在教学中起着举足轻重的作用。在制定人才培养计划时要突出学生编程能力的培养。编程能力是软件工程专业学生必备的能力[1], 在制定人才培养计划时, 需考虑以下几个因素: (1) 编程能力的培养贯穿于学生在校学习整个阶段, 将编程类课程分散在不同的学期; (2) 遵循“循序渐进”的原则, 根据不同语言课程的难易程度和相关性, 合理安排课时和学习时间, 如面向对象的编程语言安排在面向过程的语言之后开设; (3) 体现出“差别化”, 分“模块”培养, 根据学生的不同需求和就业方向, 设置不同的课程模块; (4) 注重学生不同层次编程能力的培养, 阶梯培养学生的基础编程能力、综合能力和创造能力; (5) 适应时代发展, 适时修订培养计划。

2 注重编程课程教学

学生在校大部分时间是参加课堂教学活动, 需要充分利用课堂教学培养和提高学生编程能力。

(1) 科学制定教学大纲。课程大纲是一门课程的纲领性文件, 是实践教学活动的依据和参考。制定编程语言课程教学大纲时需考虑以下要素: (1) 合理分配理论教学和实践教学学时, 让学生有充足的时间进行编程练习; (2) 适当安排综合性实验和验证性项目。综合性试验需要学生综合使用专业知识, 有利于学生编程综合能力的提高, 需根据实验课时、学生学习进度及已有知识水平恰当设计。

(2) 注重编程示范理论教学。编程语言课程一般分为理论教学和实践教学两部分, 在讲解基本理论时, 可结合基本知识点适当穿插编程实例进行教学[2,3], 灵活选取学生易于接受和有趣的案例, 不仅提高学生编程兴趣, 还可训练学生编程习惯, 在不知不觉中提高编程能力。

(3) 提高实验课实效。编程语言实验课是对编程思想和语法的直接运用。实验内容安排要遵循以下原则: (1) 容量适中, 既不能太大导致多数学生做不完, 也不能太少让大部分学生剩余时间太多; (2) 难度适中, 让大多数学生都能很好地完成。此外, 对重要细节进行示范, 加深学生理解。

3 加强课程设计教学环节

编程语言课程结束后一般会安排1-2周课程设计。课程设计是综合性的实践教学环节[4]。课程设计要结合课程教学目标, 精心设计教学内容, 有效组织、实施多元评价[5], 提高学生编程能力。

(1) 精心设计课程选题, 让所选的开发项目能用到所学课程相关知识, 尤其是主要知识点。让学生主动参与, 尽量为每个学生制定不同的题目, 这对于教师来说有一定难度。在实际教学中, 可由教师事先拟定部分有代表性的题目供学生选择, 部分选题可由学生根据兴趣自选, 激发学生编程的积极性。

(2) 对课程设计过程进行有效监管。教学过程监管在教学中起到举足轻重的作用。需要在课程设计前制定详细的课程计划和具体任务安排, 细化到每节课, 使学生了解整个流程。在课程设计教学环节中, 教教师随时为学生答疑解惑。

(3) 创新考核方式。以往的考核方式主要以学生提交学习报告为主, 其弊端在于学生容易应付, 以至于课程设计过程中不会全力参与。鉴于此, 可以在原有考核方式的基础上, 可以增加平时表现和面试环节, 并加大其在总成绩中所占比重, 如平时表现分占总分30%, 面试占50%, 课程设计报告占20%。引导学生注重平时的学习积累。

4 注重课外辅助

(1) 建立软件学术社团。可以建立软件学术社团, 吸引对编程有兴趣的学生参与, 组织各类编程活动, 学校为社团开展活动提供一定便利条件, 如实验室开放等。一方面, 通过社团激发学生的编程热情, 促进水平提高;另一方面, 通过社团成员影响周围同学, 起到辐射和带动作用。

(2) 组织学生参加各类编程竞赛。可组织学生参加一些大型程序设计类竞赛, 如ACM程序设计大赛、“领航杯”信息技术应用技能大赛、“挑战杯”大学生课外学术科技作品竞赛、电子信息安全竞赛等, 也可以组织校级“软件设计”竞赛等。采取激励措施鼓励学生积极参与, 对在竞赛中取得优异成绩的学生给予适当奖励, 如根据奖项设置奖励学分。

(3) 布置编程任务。对于已经具备一定编程水平的学生, 可以为其布置实际编程任务, 如开发校内部门需要的应用软件, 使学生学以致用, 促使主动学习。

5 结语

软件工程专业学生的编程能力培养是专业教育的核心目标。可从课堂内外等多方面为学生提供编程环境, 激发学生编程兴趣, 提高学生编程能力。

参考文献

[1]郑旭飞, 方永慧.软件工程专业中澳合作办学模式和运行机制研究[J].西南师范大学学报:自然科学版, 2014 (5) :204-208.

[2]于启红.不同专业《计算机网络》课程案例教学探讨[J].现代计算机:专业版, 2011 (33) :46-48.

[3]刘远军.培养计算思维的C语言实验方案设计[J].软件导刊, 2014 (1) :189-190.

[4]王跃辉, 胡晓平, 李彩花.课程设计质量的有效值分析法评价[J].黑龙江教育 (高教研究与评估) , 2012 (12) :26-27.

软件工程中程序设计方法的比较 篇10

本文对三类方法——面向过程程序设计方法、面向对象程序设计方法、泛型程序设计方法,进行了深入分析和比较。

1 面向过程、面向对象、泛型概述

20世纪70年代,面向过程的程序设计方法(也称结构化方法)出现并在早期的软件工程领域占用主导地位。面向过程采用是自顶向下、逐步求精、模块化等设计原则,将软件系统分解为若干可独立的子模块。各个模块完成后组合起来,成为一个最终的软件系统。随着软件工程的发展,出现了软件生产率低、软件维护困难等难以解决的问题[1]。

20世纪80年代,面向对象的程序设计方法应运而生,它解决了面向过程的程序设计方法的缺点,提高了软件的生产率和方便软件的维护。现在已成为目前主流的程序设计方法。面向对象将软件系统分解成一个个的对象,每个对象都是通过对现实世界的分析、理解而得出的。面向对象更接近于人类认知世界的方式,并通过以类和继承为构造机制将现实世界构建成对应的软件系统。对于面向对象一些难以克服的缺点,如它不能将所有关系都用继承来实现,抽象程度不够高,通用性不足等问题,提出了泛型程序设计[2,3]。

近年来,泛型程序设计出现并发展。泛型的特点是抽象程度很高,将程序写得尽可能通用,可适合多种数据类型的操作,同时不损失效率。泛型程序设计的过程是发现类型需求、分析类型需求之间的关系,并运用这种类型需求关系实现软件系统的结构和逻辑[2]。

2 面向过程、面向对象、泛型的比较

面向过程程序设计以模块为中心,采用自顶向下、逐步求精的开发方法,将软件系统分解为若干可独立的子模块,这些模块形成树状结构,表现了各个模块相互调用的关系;每一个模块内部均由顺序、选择和循环三种基本结构组成。各个模块完成后组合起来,成为一个最终的软件系统。面向过程注重实现过程的顺序,它的抽象层次低,实现简单。它适合解决简单问题和小规模的问题。

面向对象程序设计以对象为中心,将软件系统分解成一个个的对象,把属性和这组属性上的专用操作进行封装放在一起作为一个对象,以类和继承为构造机制将客观世界构建成软件系统。同一个对象间通过消息传递来实现服务的请求。和面向过程相比,面向对象使用对象分解取代了传统的功能分解。面向对象的特征是封装(将数据和代码放到对象里面,从对象外部不能直接访问或修改数据和代码)、继承(从父类直接获得的属性和操作,可重新定义)、多态(父对象定义的一个方法,允许子对象以适合自己的方式去实现消息)等。面向对象注重对象的分析和设计,它的抽象层次高,实现复杂。它适用于复杂问题,特别是对象间形成层次关系的问题。

泛型程序设计以类型需求为中心,将程序写得尽可能通用,可适合多种数据类型的操作,同时不损失效率。泛型程序设计的过程是发现类型需求、分析类型需求之间的关系,并运用这种类型需求关系实现软件系统结构和逻辑的过程。泛型设计的目标是将算法从对象的行为中分离出来,做到算法的设计与数据结构无关,从而实现软件的复用。它通过将数据结构与算法之间的强祸合关系削弱为弱祸合关系,来实现软件的复用。它有三个重要概念:概念、模型、强化[2],概念是与具体数据类型无关的一组定义,支持数据类型的操作。模型是当某数据类型使用此概念时,称为此概念的一个模型。如果某个概念拥有了其他一个或概念的所有功能,称为这个概念是其他一个或多个概念的强化。泛型注重软件的高度抽象和通用性,因而实现很复杂。它适用于很复杂问题,特别是需要高度抽象和通用性的问题。

同时,三类程序设计方法在安全性和可靠性方面都是安全和可靠的。表1给出三类程序方法的比较。

通过上面的分析,我们得出,三种方法各有其优点。对于简单的、小规模的问题域,面向过程的程序设计是最合适的;对于继承和行为多态起主要作用的应用域,面向对象的程序设计是最合适的;而对于那些需要解决一类相似需求的应用域,泛型程序设计是最合适的。

3 结束语

软件工程为研究和克服“软件危机”而出现,在软件工程领域的程序设计方法方面,先后出现了三种程序设计方法,面向过程的程序设计、面向对象的程序设计和泛型程序设计。本文对三类方法——面向过程程序设计方法、面向对象程序设计方法、泛型程序设计方法,进行了深入分析和比较。三种方法各有其特点,如果能将三种方法的优点结合,将会更好地解决软件开发领域的实际问题。

参考文献

[1]李惠明,敖广武.软件工程[M].沈阳:东北大学出版社,2010.

[2]孙斌.面向对象、泛型程序设计与类型约束检查[J].计算机学报,2004(11).

上一篇:领导力的心理分析视角下一篇:党务公开