IPv6基础知识
IPv6(Internet Protocol Version 6)是网络层协议的第二代标准协议,是IPv4的升级版本。IPv6的主要优势包括更大的地址空间、更高效的路由、支持即插即用和更好的安全性保障。
IPv6地址
IPv6地址是一个128位的二进制数,通常用冒号十六进制表示法表示。为了简化表示,可以使用“左侧零”省略和“连续零”压缩。例如,地址2001:0db8:0000:cd30:0000:0000:0000:0000可以简化为2001:db8:0:cd30::。
地址类型
IPv6地址有三种基本类型:单播地址、多播地址和任播地址。单播地址用于点对点通信,多播地址用于一点对多点通信,而任播地址用于将数据报发送到离发送方最近的一个接收方。
特殊地址
未指明地址:全0的地址,用于表示一个未配置的接口。
环回地址:::1,用于主机自我通信。
多播地址:以FF00::/8开头,用于组播通信。
本地链路单播地址:以FE80::/10开头,用于同一链路上的通信。
IPv6数据报的首部
IPv6数据报的基本首部长度固定为40字节,包含8个字段。相比IPv4,IPv6取消了一些不必要的字段,如首部长度、区分服务、总长度、标识、标志和片偏移等。此外,IPv6引入了扩展首部的概念,用于处理选项。
基本首部字段
版本:表示IP协议的版本,IPv6的值为6。
通信量类:用于区分不同类别的数据报。
流标号:用于标识同一流的数据报。
有效载荷长度:指明基本首部后面的有效载荷长度。
下一个首部:指明下一个扩展首部或上层协议的类型。
跳数限制:防止数据报在网络中无限循环。
源地址和目的地址:分别表示发送方和接收方的IPv6地址。
IPv6过渡技术
由于IPv4和IPv6的共存,过渡技术是必不可少的。常见的过渡技术包括双协议栈和隧道技术。
双协议栈:在同一设备上同时运行IPv4和IPv6协议栈,使其能够与IPv4和IPv6设备通信。
隧道技术:将IPv6数据报封装在IPv4数据报中进行传输。
子网划分
1、满足不同网络对IP地址的需求2、实现网络的层次化3、节省IP地址
4、默认子网掩码可以进一步划分,称为可变长子网掩码“VLSM”
有类IP地址规划的缺陷:使用默认掩码的问题:地址范围过大或过小,导致IP地址的浪费!
我们先通过几个例题来了解了解其中的规律 熟能生巧
例1:192.168.1.100/29=255.255.255.248求网络地址、主机地址和广播地址
解:C类网络24位,此借了5位,可以划分出25=32个子网,每个子网可以容纳23-2=6台主机
块=2^3(主机位数)=256-248(掩码)=8
8的倍数最接近100的为=96
所以:网络地址:192.168.1.96/29
主机地址:192.168.1.97~192.168.1.102
广播地址:192.168.1.103
例2: 现有一个C类网络地址段192.168.1.0/24,请使用变长子网掩码给三个子网分别分配IP地址
需求:三个区域第一个部门需要30个主机,第二个部门需要20个主机,第三个部门需要10个主机
方法一(主机数有点浪费):
3个部门,至少借2位有4个子网,每个部门主机数2^6=62,满足3个部门需求,这时掩码数为/26=255.255.255.192
块=2^6=64
所以:第一个部门网段为:192.168.1.0/26
第二个部门网段为:192.168.1.64/26
第一个部门网段为:192.168.1.128/26
方法二(更加精确划分节约IP地址):
第一个部门30台主机至少保留5位主机位(2^x-2>=30),最多借3位,有8个子网,此时掩码为/27
块=2^5=32
所以:子网地址为:192.168.1.0/27
主机地址范围:192.168.1.1~192.168.1.30
广播地址为:192.168.1.31/27
第二个部门20台主机至少保留5位主机位(2^x-2>=20),最多借3位,有8个子网,此时掩码为/27
块=2^5=32
所以:子网地址为:192.168.1.32/27
主机地址范围:192.168.1.33~192.168.1.62
广播地址为:192.168.1.63/27
第三个部门10台主机至少保留4位主机位(2^x-2>=10),最多借4位,有16个子网,此时掩码为/28
块=2^4=16
所以:子网地址为:192.168.1.64/28
主机地址范围:192.168.1.65~192.168.1.78
广播地址为:192.168.1.79/28
综上:
第一个部门网段为:192.168.1.0/27
第二个部门网段为:192.168.1.32/27
第一个部门网段为:192.168.1.64/28
例3: 某公司有生产部、销售部、财务部、客服部四个部门,每个部门主机数最多不超过50台。若该公司获得了一个C类地址192.168.100.0/24,应该如何划分子网呢?
解:四个部门,至少借2位网络位,每个部门就有62(主机位还剩6位:2^6-2)台主机
块=2^6=64
生产部网段:192.168.100.0/26
销售部网段:192.168.100.64/26
财务部网段:192.168.100.128/26
客服部网段:192.168.100.192/26
思考:如果该公司有五个部门,每个部门主机数最多不超过30台,应该如何划分子网呢?
解:五个部门,至少借3主机位,每个部门就有30(主机位还剩5位:2^5-2)台主机
块=2^5=32
第一个子网:192.168.100.0/27
第二个子网:192.168.100.32/27
第三个子网:192.168.100.64/27
第四个子网:192.168.100.96/27
第五个子网:192.168.100.128/27
例4:子网划分相关面试题
第一问:61.179.150.39/28 子网号为多少?广播号为多少?可用IP地址范围是多少?
解:块=2^4=16
16的倍数最接近39的为=32
所以:子网号为:61.179.150.32/28
广播号为:61.179.150.47/28
可用IP地址范围:61.179.150.33~61.179.150.46
第二问:19.224.17.0/17 可不可以配置在路由器的接口上?如果可以,是为什么?不可以又是为什么?
解:块=2^7=128
所以子网地址为:192.224.0.0/17
可用的地址范围为:192.224.0.1~192.224.127.254
所以19.224.17.0/17 可以配置在路由器的接口上
第三问:37.95.221.16/5 和 41.222.221.16/5 两个地址在不在同一网段,能不能Ping通?为什么?
37.95.221.16/5 块为=2^3=8;8的倍数最接近37的为=32
所以网段地址为:32.0.0.0/5
可用地址段为:32.0.0.1~39.255.255.254
41.222.221.16/5 块为=2^33=8;8的倍数最接近41的为=40
所以网段地址为:40.0.0.0/5
可用地址段为:40.0.0.1~47.255.255.254
所以两个地址不在同一个网段,也不能互相Ping通
第四问:给出第三问的IP地址 37.95.221.16 的子网号和广播号
同上问:子网号:32.0.0.0/5
广播号:39.255.255.255
通过以上例题相信你也大致已经会了,求出这些地址使用块来解是很快的!
2^m=向主机借位后产生的子网个数,m为所借的位数
2^n-2=①向主机借位后产生的每个子网中可用的主机IP数②n为源主机位剔除被借位后的剩余位数 ③-2的原因是因为每个子网中的网络号及广播号不可用
浏览器访问网页的过程:
(1)浏览器本身是一个客户端,当输入URL的时候,首先浏览器会去请求DNS服务器通过DNS获取相应的域名对应的IP:
(2)然后通过IP地址找到IP对应的服务器后,要求建立TCP连接;
(3)浏览器发送HTTPRequest(请求)包;
(4)服务器收到请求之后,调用自身服务,返回HTTPResponse(响应)包;
(5)客户端收到来自服务器的响应后开始渲染这个Response包里的主体(body),等收到全部的内容后断开与该服务器之间的TCP连接。
综上所述,本题中输入的URL是IP地址,不需要进行域名解析。根据上述流程,首先要执行的操作是建立TCP连接。
网络综合布线的七个子系统
网络综合布线系统根据GB50311-2007《综合布线系统工程设计规范》分为七个子系统,每个子系统在综合布线中都有其独特的作用和功能。以下是对这七个子系统的详细介绍:
工作区子系统
工作区子系统又称为服务区子系统,由跳线和信息插座等终端设备组成。常见的终端设备包括计算机、传真机、电话机、报警探头、摄像机、监控器、各种传感器和音响设备等。在设施时,主要注意以下几点:
从RJ45插座到终端设备间的连接宜用双绞线,不要超过五米。
RJ45插座应安装在墙壁上不易被触摸到的地方。
RJ45插座与电源插座应保持20cm以上的距离。
墙面型信息插座和电源插座的底面离地面应为30cm。
水平子系统
水平子系统又称为配线子系统,连接工作区信息插座模块到楼层管理间。主要包括工作区与楼层管理间所有电缆连接硬件信息插座、插头、端接水平传输介质的跳线架等。在设施时,主要注意以下几点:
确定布线方法和线缆的走向。
双绞线的长度不应超过90米。
避免水平线长距离与供电线路平行走线,应两者间至少相隔30cm(非屏蔽线缆)或7cm(屏蔽线缆)。
线缆必须走线槽或在天花板吊顶内布线。
垂直子系统
垂直子系统又称为干线子系统,连接管理间子系统到设备间子系统。主要由钢缆和光缆组成。在设施时,主要注意以下几点:
垂直子系统选用光缆。
垂直子系统干线光缆的拐角处不要用直角拐角,干线电缆和光缆的交接不应超过两次。
管理间子系统
管理间子系统也称配线间,主要安装配线架、楼层机柜、交换机等设备,连接垂直子系统和水平干线子系统。在设施时,主要注意以下几点:
当楼层信息点很多时,可以设置多个管理间。
配线架的对数由所管理的信息点数决定。
进出线路跳线应采用色表或者标签等进行标识。
设备间子系统
设备间子系统又称为网络中间机房,由电缆和相关支撑硬件组成,主要设备有计算机网络设备、服务器、防火墙、路由器等。在设施时,主要注意以下几点:
设备间的位置和大小应根据建筑物的结构布线规模和管理方式及应用系统设备的数量综合考虑。
温度应在0度到27度,相对湿度在60%-80%,亮度适宜。
进线间子系统
进线间是建筑物外部通信信息管线的入口,连接设备间子系统与建筑群子系统。进线间一般通过地埋管线进入建筑物内部。
建筑群子系统
建筑群子系统也称为楼宇层子系统,包括缆线、端接设备和电气保护装置,实现楼宇之间的连接。在设施时,主要注意以下几点:
室外缆线铺设方式一般有架空、直埋、管道和隧道四种情况。
这些子系统共同构成了一个完整的综合布线系统,确保了建筑物内外部的通信和信息传输的高效性和可靠性。
网络协议,端口号,作用
FTP服务基于传输层TCP协议,使用21和20端口,其中建立TCP连接使用端口21, 数据传输使用端口20。
工作流参考模型
逆向工程
与相关的概念有重构、设计恢复、再工程和正向工程。
(1)重构(restructuring)。重构是指在同一抽象级别上转换系统描述形式。
(2)设计恢复(design recovery)。设计恢复是指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面的信息。
(3)再工程(re-engineering)。再工程是指在逆向工程所获得信息的基础上,修改或重构已有的系统,产生系统的一个新版本。再工程是对现有系统的重新开发过程,包括逆向工程、新需求的考虑过程和正向工程三个步骤。它不仅能从已存在的程序中重新获得设计信息,而且还能使用这些信息来重构现有系统,以改进它的综合质量。在利用再工程重构现有系统的同时,一般会增加新的需求,包括增加新的功能和改善系统的性能。
(4)正向工程(forward engineering)。正向工程是指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量。
需求管理
需求管理通常包括定义需求基线、处理需求变更及需求跟踪等方面的工作。根据考试大纲和培训指南的规定,本节要求考生掌握需求变更、需求跟踪和需求变更风险管理3个方面的知识。本节只简单介绍有关需求跟踪方面的知识。有关定义需求基线和需求变更的知识,请阅读12.7.3节;有关风险管理方面的知识,请阅读12.11节。
需求跟踪的主要目的如下:
(1)审核。跟踪能力信息可以帮助审核确保所有需求被应用。
(2)在增加、删除、修改需求时可以确保不忽略每个受到影响的系统元素。
(3)使得维护时能正确、完整地实施变更,从而提高生产率。
(4)获得计划功能当前实现状态的记录。
(5)再工程。可以列出旧系统中将要替换的功能,记录它们在新系统的需求和软件组件中的位置。
(6)重新利用跟踪信息可以帮助开发人员在新系统中对相同的功能利用旧系统相关资源。
(7)可以减少由于关键成员离开项目带来的风险。
(8)可以在测试出错时指出最可能有问题的代码段。
在信息系统项目中,需求变更是不可避免的,如何以可控的方式管理软件的需求,对于项目的顺利进行有着重要的意义。如果匆匆忙忙地完成用户调研与分析,则往往意味着不稳定的需求。所以需求管理要保证需求分析各个活动都得到了充分的执行。对于需求变更的管理,则主要使用需求变更流程和需求跟踪矩阵的管理方式。
需求跟踪包括编制每个需求与系统元素之间的联系文档。这些元素包括别的需求、约束、其他设计部件、源代码模块、测试、帮助文件、文档等。需求跟踪分为正向跟踪和逆向跟踪,一般合称为“双向跟踪”。不论采用何种跟踪方式,都要建立与维护需求跟踪矩阵(即表格)。需求跟踪矩阵保存了需求与后续工作成果的对应关系,通过需求跟踪矩阵可以跟踪一个需求使用期限的全过程,即从需求源到实现的前后生存期。它跟踪的是已明确的需求的实现过程,不涉及需求开发人员的职责,也无法用于防止变更矩阵单元之间的可能存在“一对一”、“一对多”或“多对多”的关系。由于对应关系比较复杂,最好在表格中加必要的文字解释。当需求文档或后续工作成果发生变更时,要及时更新需求跟踪矩阵。
软件需求
在进行需求获取之前,首先要明确需要获取什么,也就是需求包含哪些内容。软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。通常,这些需求包括功能需求、性能需求、用户或人的因素、环境需求、界面需求、文档需求、数据需求、资源使用需求、安全保密需求、可靠性需求、软件成本消耗与开发进度需求等,并预先估计以后系统可能达到的目标。此外,还需要注意其他非功能性的需求。具体内容如下。
(1)功能需求。
(2)性能需求。
(3)用户或人的因素。
(4)环境需求。
(5)界面需求。
(6)文档需求。
(7)数据需求。
(8)资源使用需求。
(9)安全保密要求。
(10)可靠性要求。
(11)软件成本消耗与开发进度需求。
(12)其他非功能性要求。
需求分析的任务
需求分析主要是确定待开发软件的功能、性能、数据、界面等要求。具体来说有下面几点。
(1)确定软件系统的综合要求,包括系统界面、功能、性能、安全性、保密性、可靠性、运行等方面的要求。
(2)分析软件系统的数据要求,包括基本数据元素、数据元素之间的逻辑关系、数据量、峰值等。
(3)导出系统的逻辑模型,在结构化方法中可用数据流图来描述;在面向对象分析方法中可以用类模型来描述。
(4)修正项目开发计划。
(5)如有必要,可开发一个原型系统以验证用户的需求。
软件需求的分类
下面介绍软件需求的分类。
(1)功能需求。所开发的软件必须具备什么样的功能。
(2)非功能需求。它是指产品必须具备的属性或品质,如可靠性、性能响应时间、容错性和可扩展性等。
(3)设计约束。其也称为限制条件、补充规约,这通常是对解决方案的一些约束说明。
软件需求分析方法
需求分析方法由对软件的数据域和功能域的系统分析过程及其表示方法组成。它定义了表示系统逻辑视图和物理视图的方式。大多数的需求分析方法是由数据驱动的,数据域具有数据流、数据内容和数据结构3种属性。通常一种需求分析方法总要利用其中一种或几种属性。
需求工程
需求工程就是包括创建和维护系统需求文档所必需的一切活动的过程,也就是指需求开发和需求管理两大工作。
(1)需求开发。包括需求捕获、需求分析、编写规格说明书和需求验证4个阶段。在需求开发阶段需要确定产品所期望的用户类型、获取每种用户类型的需求、了解实际的用户任务和目标,以及这些任务所支持的业务需求。同时还包括分析源于用户的信息、对需求进行优先级分类、将所收集的需求编写成为软件规格说明书和需求分析模型,以及对需求进行评审等工作。
(2)需求管理。通常包括定义需求基线、处理需求变更及需求跟踪等方面的工作。
这两个方面是相辅相成的,需求开发是主线,是目标;需求管理是支持,是保障。换句话来说,需求开发是努力更清晰、更明确地掌握客户对系统的需求;而需求管理则是对需求的变化进行管理的过程。
针对整个需求工程,通常有以下一些指导原则。
(1)在开始建立分析模型前先理解问题。人们通常总存在急于求成的倾向,甚至在问题被很好地理解前就已开始建模,这经常会导致产生一个解决错误的问题。
(2)开发原型,使得用户能够了解将如何发生人机交互。因为人们对软件质量的感觉经常基于对界面“友好性”的感觉,所以强力推荐使用原型方法(以及相应产生的迭代)。
(3)记录每个需求的起源及原因,这是建立回溯到客户的可追踪性的第一步。
(4)使用多个需求视图。建立数据、功能和行为模型,为软件工程师提供三种不同的视图,这将减少忽视某些东西的可能性,并增加识别不一致性的可能性。
(5)给需求赋予优先级。过短的时限可能使每个软件需求得以实现的可能性减小,如果采用增量模型,则必须标识那些将在第一个增量中要交付的需求。
(6)努力删除含糊性。因为大多数需求以自然语言描述,存在含糊性的可能,正式的技术复审是发现并删除含糊性的一种方法。
结构化分析方法
系统分析模型的核心是数据字典,围绕这个核心,有三个层次的模型,分别是数据模型、功能模型和行为模型(也称为状态模型)。在实际工作中,一般使用E-R图表示数据模型,用数据流图DFD表示功能模型,用状态转换图STD表示行为模型。
结构化设计
结构化设计包括体系结构设计、接口设计、数据设计和过程设计等任务。它是一种面向数据流的设计方法,是以结构化分析阶段所产生的成果为基础,进一步自顶而下、逐步求精和模块化的过程。
在结构化方法中,模块化是一个很重要的概念,它是指将一个待开发的软件分解成为若干个小的简单部分——模块。每个模块可以独立地开发、测试。这是一种复杂问题的“分而治之”原则,其目的是使程序的结构清晰、易于测试与修改。
具体来说,模块是指执行某一特定任务的数据结构和程序代码。通常将模块的接口和功能定义为其外部特性,将模块的局部数据和实现该模块的程序代码称为内部特性。在模块设计时,最重要的原则就是实现信息隐蔽和模块独立。模块通常具有连续性,也就意味着作用于系统的小变动将导致行为上的小变化,同时规模说明的小变动也将影响到小部分模块。
抽象化
对软件进行模块设计的时候,可以有不同的抽象层次。在最高的抽象层次上,可以使用问题所处环境的语言描述问题的解法。而在较低的抽象层次上,则宜采用过程化的方法。抽象化包括对过程的抽象、对数据的抽象和对控制的抽象。
(1)过程抽象。在软件工程过程中,从系统定义到实现,每进展一步都可以看做是对软件解决方案的抽象化过程的一次细化。在从概要设计到详细设计的过程中,抽象化的层次逐渐降低,当产生源程序时到达最低的抽象层次。
(2)数据抽象。数据抽象与过程抽象一样,允许设计人员在不同层次上描述数据对象的细节。
(3)控制抽象。控制抽象可以包含一个程序控制机制而无须规定其内部细节。
自顶向下,逐步求精
将软件的体系结构按自顶向下的方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个体系的结构。最初的说明只是概念性地描述了系统的功能或信息,但并未提供有关功能的内部实现机制或有关信息的内部结构的任何信息。设计人员对初始说明仔细推敲,进行功能细化或信息细化,给出实现的细节,划分出若干成分。然后再对这些成分,施行同样的细化工作。随着细化工作的逐步展开,设计人员就能得到越来越多的细节。
信息隐蔽
信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,并且尽可能少地暴露其内部的处理过程。通常会将困难的决策、可能修改的决策、数据结构的内部连接,以及对它们所做的操作细节、内部特征码、与计算机硬件有关的细节等隐蔽起来。
通过信息隐蔽可以提高软件的可修改性、可测试性和可移植性,它也是现代软件设计的一个关键性原则。
模块独立
模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系最简单。保持模块的高度独立性,也是在设计时的一个很重要的原则。通常用耦合(模块之间联系的紧密程度)和内聚(模块内部各元素之间联系的紧密程度)两个标准来衡量,我们的目标是“高内聚、低耦合”。
模块的内聚类型通常可以分为7种,根据内聚度从高到低的排序如下表所示。
模块的内聚类型
模块的耦合类型通常也分为7种,根据耦合度从低到高排序如下表所示。
模块的耦合类型
除了满足以上两大基本原则之外,通常在模块分解时还需要注意:保持模块的大小适中;尽可能减少调用的深度;直接调用该模块的次数应该尽量多,但调用其他模块的次数则不宜过多;保证模块是单入口、单出口的;模块的作用域应该在模块之内;功能应该是可预测的。
敏捷方法
敏捷方法是一种以人为核心、迭代、循序渐进的开发方法。在敏捷方法中,软件项目的构建被切分成多个子项目,各个子项目成果都经过测试,具备集成和可运行的特征。在敏捷方法中,从开发者的角度来看,主要的关注点有短平快的会议、小版本发布、较少的文档、合作为重、 客户直接参与、自动化测试、适应性计划调整和结对编程;从管理者的角度来看,主要的关注点有测试驱动开发、持续集成和重构。
敏捷软件开发简称敏捷开发,是从20世纪90年代开始逐渐引起广泛关注的一些新型软件开发方法,以应对快速变化的需求。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面沟通、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重人的作用。
敏捷开发的发展过程中,出现了多个不同的流派,例如,极限编程(ExtremeProgramming, XP)、自适应软件开发、水晶方法、特性驱动开发等。但其中的基本原则是一致的。从开发者的角度,主要的关注点有短平快会议(Stand Up)、小版本发布(Frequent Release)、较少的文档(Minimal Documentation)、合作为重(Collaborative Focus)、客户直接参与(Customer Engagement)、自动化测试(Automated Testing)、适应性计划调整(Adaptive Planning)和结对编程(Pair Programming);从管理者的角度,主要的关注点有测试驱动开发(Test-Driven Development)、持续集成(Continuous Integration)和重构(Refactoring)。
XP是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学且充满乐趣的软件开发方式,适用于小型或中型软件开发团队,并且客户的需求模糊或需求多变。与其他方法相比,其最大的不同如下:
(1)在更短的周期内,更早地提供具体、持续的反馈信息。
(2)迭代地进行计划编制,首先在最开始迅速生成一个总体计划,然后在整个项目开发过程中不断地发展它。
(3)依赖于自动测试程序来监控开发进度,并及早地捕获缺陷。
(4)依赖于口头交流、测试和源程序进行沟通。
(5)倡导持续的演化式的设计。
(6)依赖于开发团队内部的紧密协作。
(7)尽可能达到程序员短期利益和项目长期利益的平衡。
XP由价值观、原则、实践和行为4个部分组成,它们彼此相互依赖、关联,并通过行为贯穿于整个生命周期。XP的核心是其总结的4大价值观,即沟通、简单、反馈和勇气。它们是XP的基础,也是XP的灵魂。XP的5个原则是快速反馈、简单性假设、逐步修改、提倡更改和优质工作。而在XP方法中,贯彻的是“小步快走”的开发原则,因此工作质量决不可打折扣,通常采用测试先行的编码方式来提供支持。
在XP中,集成了12个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户和编码标准。
敏捷方法主要适用于小规模软件的开发和小型团队的开发。这些方法所提出来的一些所谓的“最佳实践”并非对每个项目都是最佳的,需要项目团队根据实际情况来决定。而且,敏捷方法的有些原则在应用中不一定能得到贯彻和执行。因此,在实际工作中,我们可以“取其精华,去其糟粕”,把敏捷方法和其他方法结合起来。
模型驱动架构
基于MDA(Model Driven Architecture 模型驱动架构)软件范型,利用UML对一个原生的软件项目进行可视化设计,从业务模型(BM)、计算无关模型(CIM)、平台无关模型(PIM)、平台相关模型(PSM)分析建模。
IDEF (集成定义方法)
IDEF (Integration DEFinition method,集成定义方法)是一系列建模、分析和仿真方法的统称,每套方法都是通过建模来获得某种特定类型的信息。最初的IDEF方法是在美国空军ICAM项目建立的,最初开发3种方法:功能建模(IDEF0)、信息建模 (IDEF1)、动态建模(IDEF2),后来,随着信息系统的相继开发,又开发出了下列IDEF族方法:数据建模(IDEF1X)、过程描述获取方法(IDEF3)、面向对象的设计(OO设计)方法(IDEF4)、使用C++语言的OO设计方法(IDEF4C++)、实体描述获取方法 (IDEF5)、设计理论(rationale)获取方法(IDEF6)、人-系统交互设计方法(IDEF8)、业务约束发现方法(IDEF9)、网络设计方法(IDEF14)等。
测试的阶段
为了保证系统的质量和可靠性,应力求在分析、设计等各个开发阶段结束前,对软件进行严格的技术评审。而软件测试则是为了发现错误而执行程序的过程,根据测试的目的、阶段的不同,可以把测试分为单元测试、集成测试、确认测试和系统测试等几类。
单元测试
单元测试又称为模块测试,是针对软件设计的最小单位(程序模块)进行正确性检验的测试工作。其目的在于检查每个程序单元能否正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求,以及发现各模块内部可能存在的各种错误。单元测试需要从程序的内部结构出发设计测试用例,多个模块可以平行独立地进行单元测试。
单元测试根据详细设计说明书进行测试,包括模块接口测试、局部数据结构测试、路径测试、错误处理测试和边界测试等。单元测试通常由开发人员自己负责。由于通常程序模块不是单独存在的,因此常常要借助驱动模块(相当于用于测试模拟的主程序)和桩模块(子模块)来完成。单元测试的计划通常是在软件详细设计阶段完成的,单元测试一般使用白盒测试方法。
集成测试
集成测试也称为组装测试、联合测试(对于子系统而言,则称为部件测试)。它将已通过单元测试的模块集成在一起,主要测试模块之间的协作性。从组装策略而言,可以分为一次性组装和增量式组装(包括自顶向下、自底向上及混合式)两种。集成测试计划通常是在软件概要设计阶段完成的,集成测试一般采用黑盒测试方法。
模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测模块相联系的其他模块。这些辅助模块分为两种。
(1)驱动模块:相当于被测模块的主程序。它接收测试数据,把这些数据传送给被测模块,最后输出实测结果。
(2)桩模块:用于代替被测模块调用的子模块。桩模块可以做少量的数据操作,不需要把子模块所有功能都带进来,但不允许什么事情也不做。
各种模块之间的关系如下图所示。
各种模块之间的关系
在自底向上增殖式集成时,因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测试完成,所以不再需要桩模块。在模块的测试过程中需要从子模块得到的信息可以直接运行子模块得到。
软件集成的过程是一个持续的过程,会形成多个临时版本。在不断的集成过程中,功能集成的稳定性是真正的挑战。在每个版本提交时,都需要进行“冒烟”测试,即对程序主要功能进行验证。冒烟测试也称为版本验证测试或提交测试。
确认测试
确认测试也称为有效性测试,主要包括验证软件的功能、性能及其他特性是否与用户要求(需求)一致。确认测试计划通常是在需求分析阶段完成的。根据用户的参与程度,通常包括以下4种类型。
(1)内部确认测试:主要由软件开发组织内部按软件需求说明书进行测试。
(2)Alpha测试:由用户在开发环境下进行测试。
(3)Beta测试:由用户在实际使用环境下进行测试。
(4)验收测试:针对软件需求说明书,在交付前以用户为主进行测试。
系统测试
如果项目不只包含软件,还有硬件和网络等,则要将软件与外部支持的硬件、外设、支持软件、数据等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列集成与确认测试。一般来说,系统测试的主要内容包括功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、安装与反安装测试等。系统测试计划通常在系统分析阶段(需求分析阶段)完成。
Alpha测试和Beta测试
事实上,开发人员不可能完全预见用户实际使用程序的情况。例如,用户可能错误地理解命令,或提供一些奇怪的数据组合等。因此,软件是否真正满足最终用户的要求,应由用户进行一系列“验收测试”,通常执行Alpha测试(α测试)和Beta测试(β测试),其目的是从实际终端用户的使用角度,对软件的功能和性能进行测试,以便发现可能只有是最终用户才能发现的错误。
Alpha测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成,Alpha测试发现的错误,在测试现场立刻反馈给开发人员,由开发人员及时分析和处理。目的是评价软件产品的功能、可使用性、可靠性、性能和支持。尤其要注重产品的界面和特色。Alpha测试可以从软件产品编码结束之后开始,或在模块(子系统)测试完成后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后开始。
Beta测试是多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,不由程序员或测试员完成;因而,Beta测试是在开发者无法控制的环境下进行的软件现场应用。在Beta测试中,一旦遇到问题应向开发者报告,开发者根据用户报告,做出修改后交付给全体用户使用:Beta测试着重于产品的支持性,包括文档、客户培训和支持产品的生产能力;当Alpha测试达到一定的可靠程度后,即可开始Beta测试。
面向对象OOA
面向对象的设计
原则包括开闭原则、里氏替换原则、依赖倒置原则、组合/聚合复用原则、接口隔离原则和最少知识原则等。
开闭原则是指软件实体应对扩展开放,而对修改关闭,即尽量在不修改原有代码的情况下进行扩展。此处的“实体”可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类。
应用开闭原则可扩展已有的系统,并为之提供新的行为,以满足对软件的新需求,使变化中的系统具有一定的适应性和灵活性。对于已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的系统有一定的稳定性和延续性,这样的系统同时满足了可复用性与可维护性。在面向对象设计中,开闭原则一般通过在原有模块中添加抽象层(例如接口或抽象类)来实现,它是其他OOD原则的基础,而其他原则是实现开闭原则的具体措施。
UML(统一建模语言)
UML用关系把事务结合在一起,UML中的关系主要有四种。
①依赖:两个事物之间的语义关系,其中一个事物发生变化会影响另一个事物的语义。
②关联:一种描述一组对象之间连接的结构关系,如聚合关系。
③泛化:一种一般化和特殊化的关系,描述特殊元素的对象可替换一般元素的对象。
④实现:类之间的语义关系,其中的一个类指定了由另一个类保证执行的契约。
UML的结构
UML的结构包括基本构造块、支配这些构造块如何放在一起的规则(体系结构)和一些运用于整个UML的机制。
构造块
UML有三种基本的构造块,分别是事物(thing)、关系(relationship)和图(diagram)。事物是UML中重要的组成部分,关系把事物紧密地联系在一起,图是很多有相互相关的事物的组。
公共机制
公共机制是指达到特定目标的公共UML方法,主要包括规格说明(详细说明)、修饰、公共分类(通用划分)和扩展机制4种。
(1)规格说明:规格说明是事物语义的文本描述,它是模型真正的核心。
(2)修饰:UML为每一个事物设置了一个简单的记号,还可以通过修饰来表达更多的信息。
(3)公共分类:包括类与对象(类表示概念,而对象表示具体的实体)、接口和实现(接口用来定义契约,而实现就是具体的内容)两组公共分类。
(4)扩展机制:包括约束(添加新规则来扩展事物的语义)、构造型(用于定义新的事物)、标记值(添加新的特殊信息来扩展事物的规格说明)。
规则
UML用于描述事物的语义规则分别是为事物、关系和图命名。给一个名字以特定含义的语境,即范围;怎样使用或看见名字,即可见性;事物如何正确、一致地相互联系,即完整性;运行或模拟动态模型的含义是什么,即执行。
UML对系统体系结构的定义是系统的组织结构,包括系统分解的组成部分、它们的关联性、交互、机制和指导原则等这些提供系统设计的信息。而具体来说,就是指5个系统视图,分别是逻辑视图、进程视图、实现视图、部署视图和用例视图。
(1)逻辑视图:以问题域的语汇组成的类和对象集合。
(2)进程视图:可执行线程和进程作为活动类的建模,它是逻辑视图的一次执行实例,描绘了所设计的并发与同步结构。
(3)实现视图:对组成基于系统的物理代码的文件和构件进行建模。
(4)部署视图:把构件部署到一组物理的、可计算的节点上,表示软件到硬件的映射及分布结构。
(5)用例视图:最基本的需求分析模型。
另外,UML还允许在一定的阶段隐藏模型的某些元素、遗漏某些元素以及不保证模型的完整性,但模型要逐步地达到完整和一致。
公共机制
公共机制是指达到特定目标的公共UML方法,主要包括规格说明(详细说明)、修饰、公共分类(通用划分)和扩展机制4种。
(1)规格说明:规格说明是事物语义的文本描述,它是模型真正的核心。
(2)修饰:UML为每一个事物设置了一个简单的记号,还可以通过修饰来表达更多的信息。
(3)公共分类:包括类与对象(类表示概念,而对象表示具体的实体)、接口和实现(接口用来定义契约,而实现就是具体的内容)两组公共分类。
(4)扩展机制:包括约束(添加新规则来扩展事物的语义)、构造型(用于定义新的事物)、标记值(添加新的特殊信息来扩展事物的规格说明)。
构造块
UML有三种基本的构造块,分别是事物(thing)、关系(relationship)和图(diagram)。事物是UML中重要的组成部分,关系把事物紧密地联系在一起,图是很多有相互相关的事物的组。
事物
UML中的事物也称为建模元素,包括结构事物(structural things)、行为事物(behavioral things,动作事物)、分组事物(grouping things)和注释事物(annotational things,注解事物)。这些事物是UML模型中最基本的面向对象的构造块。
(1)结构事物。结构事物在模型中属于最静态的部分,代表概念上的或物理上的元素。总共有七种结构事物:
首先是类,类是描述具有相同属性、方法、关系和语义的对象的集合。一个类实现一个或多个接口。
第二种是接口,接口是指类或构件提供特定服务的一组操作的集合。因此,一个接口描述了类或构件的对外可见的动作。一个接口可以实现类或构件的全部动作,也可以只实现一部分。
第三种是协作,协作定义了交互的操作,是一些角色和其他元素一起工作,提供一些合作的动作,这些动作比元素的总和要大。因此,协作具有结构化、动作化、维的特性。一个给定的类可能是几个协作的组成部分。这些协作代表构成系统的模式的实现。
第四种是用例,用例是描述一系列的动作,这些动作是系统对一个特定角色执行,产生值得注意的结果的值。在模型中用例通常用来组织行为事物。用例是通过协作来实现的。
第五种是活动类,活动类是这种类,它的对象有一个或多个进程或线程。活动类和类很相似,只是它的对象代表的元素的行为和其他的元素是同时存在的。
第六种是构件,构件是物理上或可替换的系统部分,它实现了一个接口集合。在一个系统中,可能会遇到不同种类的构件。
第七种是节点,节点是一个物理元素,它在运行时存在,代表一个可计算的资源,通常占用一些内存和具有处理能力。一个构件集合一般来说位于一个节点,但有可能从一个节点转到另一个节点。
(2)行为事物。行为事物是UML模型中的动态部分。它们是模型的动词,代表时间和空间上的动作。总共有两种主要的行为事物。
第一种是交互(内部活动),交互是由在一组对象之间在特定上下文中,为达到特定的目的而进行的一系列消息交换而组成的动作。交互中组成动作的对象的每个操作都要详细列出,包括消息、动作次序(消息产生的动作)、连接(对象之间的连接)。
第二种是状态机,状态机由一系列对象的状态组成。
内部活动和状态机是UML模型中最基本的两个动态事物,它们通常和其他的结构事物、主要的类、对象连接在一起。
(3)分组事物。分组事物是UML模型中组织的部分,可以把它们看成是个盒子,模型可以在其中被分解。总共只有一种分组事物,称为包。包是一种将有组织的元素分组的机制。结构事物、行为事物甚至其他的分组事物都有可能放在一个包中。与构件(存在于运行时)不同的是包纯粹是一种概念上的东西,只存在于开发阶段。
(4)注释事物。注释事物是UML模型的解释部分。
细节
在具体细节方面,对于不同的风险,要采用不同的应对方法。在信息系统开发项目中,常见的风险项、产生原因及应对措施如下表所示。
系统可靠性
系统可靠性是系统在规定的时间内及规定的环境条件下,完成规定功能的能力,也就是系统无故障运行的概率。这里的故障是系统行为与需求的不符,故障有等级之分。系统可靠性可以通过历史数据和开发数据直接测量和估算出来,与之相关的概念主要有平均无故障时间、平均故障修复时间、平均故障间隔时间、系统可用性等。
(1)平均无故障时间。可靠度为R(t)的系统的平均无故障时间(Mean Time To Failure, MTTF)定义为从t=0时到故障发生时系统的持续运行时间的期望值,计算公式如下:
如果R(t)=e-λt,则MTTF=1/λ。λ为失效率,是指器件或系统在单位时间内发生失效的预期次数,在此处假设为常数。例如,假设同一型号的1000台计算机,在规定的条件下工作1000小时,其中有10台出现故障。这种计算机千小时的可靠度R为(1000-10)/1000=0.99。失效率为10/(1000×1000)=1×10-5。因为平均无故障时间与失效率的关系为MTTF=1/λ,因此,MTTF=105小时。
(2)平均故障修复时间。可用度为A(t)的系统的平均故障修复时间(Mean Time ToFix, MTTR)可以用类似于求MTTF的方法求得。设A1(t)是在风险函数Z(t)=0且系统的初始状态为1状态的条件下A(t)的特殊情况,则
此处假设修复率μ(t)=μ(常数),修复率是指单位时间内可修复系统的平均次数,则:
MTTR=1/μ
(3)平均故障间隔时间。平均故障间隔时间(Mean Time Between Failure, MTBF)常常与MTTF发生混淆。因为两次故障(失败)之间必然有修复行为,因此,MTBF中应包含MTTR。对于可靠度服从指数分布的系统,从任一时刻t0到达故障的期望时间都是相等的,因此有:
MTBF=MTTR+MTTF
在实际应用中,一般MTTR很小,所以通常认为MTBF≈MTTF。
(4)系统可用性。系统可用性是指在某个给定时间点上程序能够按照需求执行的概率,其定义为
可用性=MTTF/(MTTF+MTTR)×100%
计算机系统是一个复杂的系统,而且影响其可靠性的因素也非常繁复,很难直接对其进行可靠性分析。但通过建立适当的数学模型,把大系统分割成若干子系统,可以简化其分析过程。
串联系统
假设一个系统由n个子系统组成,当且仅当所有的子系统都能正常工作时,系统才能正常工作,这种系统称为串联系统,如下图所示。
串联系统
设系统各个子系统的可靠性分别用R1,R2,…,Rn表示,则系统的可靠性为:
R=R1×R2×…×Rn
如果系统的各个子系统的失效率分别用λ1,λ2,…,λn来表示,则系统的失效率为:
λ=λ1+λ2+…+λn
并联系统
假如一个系统由n个子系统组成,只要有一个子系统能够正常工作,系统就能正常工作,如下图所示。
并联系统
设系统各个子系统的可靠性分别用R1,R2,…,Rn表示,则系统的可靠性为:
R=1-(1-R1)×(1-R2)×…×(1-Rn)
假如所有的子系统的失效率均为λ,则系统的失效率为:
在并联系统中只有一个子系统是真正需要的,其余n-1个子系统称为冗余子系统,随着冗余子系统数量的增加,系统的平均无故障时间也增加了。
模冗余系统
m模冗余系统由m个(m=2n+1为奇数)相同的子系统和一个表决器组成,经过表决器表决后,m个子系统中占多数相同结果的输出作为系统的输出,如下图所示。
模冗余系统
在m个子系统中,只有n+1个或n+1个以上子系统能正常工作,系统就能正常工作,输出正确结果。假设表决器是完全可靠的,每个子系统的可靠性为R0,则m模冗余系统的可靠性为:
其中为从m个元素中取j个元素的组合数。
在实际应用系统中,往往是多种结构的混联系统。例如,某高可靠性计算机系统由下图所示的冗余部件构成。
显然,该系统为一个串并联综合系统,我们可以先计算出中间2个并联系统的可靠度,根据并联公式R=1-(1-R1)×(1-R2)×…×(1-Rn),可得到3个部件并联的可靠度为1-(1-R)3,2个部件并联的可靠度为1-(1-R)2。然后,再根据串联公式R=R1×R2×…×Rn,可得到整个系统的可靠度为:R×(1-(1-R)3)×(1-(1-R)2)×R。
项目范围管理
范围管理就是要确定项目的边界,也就是说,要确定哪些工作是项目应该做的,哪些工作不应该包括在项目中。这个过程用于确保项目干系人对作为项目结果的产品(或服务(,以及开发这些产品所确定的过程有一个共同的理解。
WBS(工作分解结构(把项目整体或者主要的可交付成果分解成容易管理、方便控制的若干个子项目,子项目需要继续分解为工作包。持续这个过程,直到整个项目都分解为可管理的工作包,这些工作包的总和就是项目的所有工作范围。
创建WBS的目的是详细规定项目的范围,建立范围基准。具体来说,其主要目的和用途如下:
①明确和准确说明项目范围,项目组成员能够清楚地理解任务的性质和需要努力的方向。
②为各独立单元分派人员,规定这些人员的相应职责,可以确定完成项目所需要的技术和人力资源。
③针对各独立单元,进行时间、费用和资源需求量的估算,提高估算的准确性。
④为计划、预算、进度安排和费用控制奠定共同基础,确定项目进度测量和控制的基准。
⑤将项目工作与项目的财务账目联系起来。
⑥清楚地定义项目的边界,便于划分和分派责任,自上而下将项目目标落实到具体的工作上,并将这些工作交给项目内外的个人或组织去完成。
⑦确定工作内容和工作顺序。可以使用图形化的方式来查看工作内容,任何人都能够清楚地辨别项目的阶段、工作单元,并根据实际进展情况进行调节和控制。
⑧估计项目整体和全过程的费用。
⑨有助于防止需求蔓延。当用户或其他项目干系人试图为项目增加功能时,在WBS中增加相应工作的同时,也就能够很容易地让他们理解,相关费用和进度也必须要做相应的改变。
软件著作权
。
软件著作权
根据《计算机软件保护条例》规定,软件著作权人对其创作的软件产品,享有以下9种权利:
(1)发表权:即决定软件是否公之于众的权利。
(2)署名权:即表明开发者身份,在软件上署名的权利。
(3)修改权:即对软件进行增补、删节,或者改变指令、语句顺序的权利。
(4)复制权:即将软件制作一份或者多份的权利。
(5)发行权:即以出售或者赠予方式向公众提供软件的原件或复制件的权利。
(6)出租权:即有偿许可他人临时使用软件的权利。
(7)信息网络传播权:即以信息网络方式向公众提供软件的权利。
(8)翻译权:即将原软件从一种自然语言文字转换成另一种自然语言文字的权利。
(9)使用许可权、获得报酬权、转让权。
软件著作权自软件开发完成之日起生效。
(1)著作权属于公民。著作权的保护期为作者终生及其死亡后的50年(第50年的12月31日)。对于合作开发的,则以最后死亡的作者为准。
(2)著作权属于单位。著作权的保护期为50年(首次发表后的第50年的12月31日),若50年内未发表的,不予保护。单位变更、终止后,其著作权由承受其权利义务的单位享有。
当得到软件著作权人的许可,获得了合法的计算机软件复制品后,复制品的所有人享有以下权利:
(1)根据使用的需求,将该计算机软件安装到设备中(电脑、PDA等信息设备)。
(2)制作复制品的备份,以防止复制品损坏,但这些复制品不得通过任何方式转给其他人使用。
(3)根据实际的应用环境,对其进行功能、性能等方面的修改。但未经软件著作权人许可,不得向任何第三方提供修改后的软件。
如果使用者只是为了学习、研究软件中包含的设计思想、原理,而以安装、显示和存储软件等方式使用软件,可以不经软件著作权人的许可,不向其支付报酬。
著作权
根据著作权法及实施条例规定,著作权人对作品享有5种权利:
(1)发表权:即决定作品是否公之于众的权利。
(2)署名权:即表明作者身份,在作品上署名的权利。
(3)修改权:即修改或授权他人修改作品的权利。
(4)保护作品完整权:即保护作品不受歪曲、篡改的权利。
(5)使用权、使用许可权和获取报酬权、转让权:即以复制、表演、播放、展览、发行、摄制电影、电视、录像,或者改编、翻译、注释和编辑等方式使用作品的权利,以及许可他人以上述方式使用作品,并由此获得报酬的权利。
根据著作权法的相关规定,著作权的保护是有一定期限的。
(1)著作权属于公民。署名权、修改权、保护作品完整权的保护期没有任何限制,永远属于保护范围。而发表权、使用权和获得报酬权的保护期为作者终生及其死亡后的50年(第50年的12月31日)。作者死亡后,著作权依照继承法进行转移。
(2)著作权属于单位。发表权、使用权和获得报酬权的保护期为50年(首次发表后的第50年的12月31日),若50年内未发表的,不予保护。但单位变更、终止后,其著作权由承受其权利义务的单位享有。
当第三方需要使用时,需得到著作权人的使用许可,双方应签订相应的合同。合同中应包括许可使用作品的方式,是否专有使用,许可的范围与时间期限,报酬标准与方法,以及违约责任等。若合同未明确许可的权力,需再次经著作权人许可。合同的有效期限不超过10年,期满时可以续签。
对于出版者、表演者、录音录像制作者、广播电台、电视台而言,在下列情况下使用作品,可以不经著作权人许可、不向其支付报酬。但应指明作者姓名、作品名称,不得侵犯其他著作权。
(1)为个人学习、研究或欣赏,使用他人已经发表的作品。
(2)为介绍、评论某一个作品或说明某一个问题,在作品中适当引用他人已经发表的作品。
(3)为报道时事新闻,在报纸、期刊、广播、电视节目或新闻纪录影片中引用已经发表的作品。
(4)报纸、期刊、广播电台、电视台刊登或播放其他报纸、期刊、广播电台、电视台已经发表的社论、评论员文章。
(5)报纸、期刊、广播电台、电视台刊登或者播放在公众集会上发表的讲话,但作者声明不许刊登、播放的除外。
(6)为学校课堂教学或科学研究,翻译或者少量复制已经发表的作品,供教学或科研人员使用,但不得出版发行。
(7)国家机关为执行公务使用已经发表的作品。
(8)图书馆、档案馆、纪念馆、博物馆和美术馆等为陈列或保存版本的需要,复制本馆收藏的作品。
(9)免费表演已经发表的作品。
(10)对设置或者陈列在室外公共场所的艺术作品进行临摹、绘画、摄影及录像。
(11)将已经发表的汉族文字作品翻译成少数民族文字在国内出版发行。
(12)将已经发表的作品改成盲文出版。
计算机软件
计算机软件是指为管理、运行、维护及应用计算机系统所开发的程序和相关文档的集合。如果计算机系统中仅有硬件系统,则只具备了计算的基础,并不能真正计算,只有将解决问题的步骤编制成机器可识别的程序并加载到计算机内存开始运行,才能完成计算。
软件是计算机系统中的重要组成部分,通常可将软件分为系统软件、中间件和应用软件等类型。系统软件的主要功能是管理系统的硬件和软件资源,应用软件则用于解决应用领域的具体问题,中间件是一类独立的系统软件或服务程序,常用来管理计算资源和网络通信,提供通信处理、数据存取、事务处理、Web服务、安全、跨平台等服务。
计算机软件著作权
计算机软件著作权的主体与客体
计算机软件著作权的主体
计算机软件著作权的主体指享有著作权的人。根据《中华人民共和国著作权法》和《中华人民共和国计算机软件保护条例》的规定,计算机软件著作权的主体包括公民、法人和其他组织。《中华人民共和国著作权法》和《中华人民共和国计算机软件保护条例》未规定对主体的行为能力限制,同时对外国人、无国籍人的主体资格,奉行“有条件”的国民待遇原则。
(1)公民。公民(即指自然人)通过以下途径取得软件著作权主体资格:
①公民自行独立开发软件(软件开发者)。
②订立委托合同,委托他人开发软件,并约定软件著作权归自己享有。
③通过转让途径取得软件著作财产权主体资格(软件权利的受让者)。
④公民之间或与其他主体之间,对计算机软件进行合作开发而产生的公民群体或者公民与其他主体成为计算机软件作品的著作权人。
⑤根据《中华人民共和国继承法》的规定通过继承取得软件著作财产权主体资格。
(2)法人。法人是具有民事权利能力和民事行为能力,依法独立享有民事权利和承担义务的组织。计算机软件的开发往往需要较大投资和较多的人员,法人则具有资金来源丰富和科技人才众多的优势,因而法人是计算机软件著作权的重要主体。法人一般通过以下途径取得计算机软件著作权主体资格:
①由法人组织并提供创作物质条件所实施的开发,并由法人承担社会责任。
②通过接受委托、转让等各种有效合同关系而取得著作权主体资格。
③因计算机软件著作权主体(法人)发生变更而依法成为著作权主体。
(3)其他组织。其他组织是指除去法人以外的能够取得计算机软件著作权的其他民事主体,包括非法人单位和合作伙伴等。
计算机软件著作权的客体
计算机软件著作权的客体是指著作权法保护的计算机软件著作权的范围(受保护的对象)。根据《中华人民共和国著作权法》第三条和《中华人民共和国计算机软件保护条例》第二条的规定,著作权法保护的计算机软件是指计算机程序及其相关文档。著作权法规定对计算机软件的保护是指计算机软件的著作权人或者其受让者依法享有著作权的各项权利。
(1)计算机程序。根据《中华人民共和国计算机软件保护条例》第三条第一款的规定,计算机程序是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可被自动转换成代码化指令序列的符号化语句序列。计算机程序包括源程序和目标程序,同一程序的源程序文本和目标程序文本视为同一软件作品。
(2)计算机软件的文档。根据《中华人民共和国计算机软件保护条例》第三条第二款的规定,计算机程序的文档是指用自然语言或者形式化语言所编写的文字资料和图表,用来描述程序的内容、组成、设计、功能规格、开发情况、测试结果及使用方法等。文档一般以程序设计说明书、流程图和用户手册等表现。
计算机软件受著作权法保护的条件
《中华人民共和国计算机软件保护条例》规定,依法受到保护的计算机软件作品必须符合下列条件:
(1)独立创作。受保护的软件必须由开发者独立开发创作,任何复制或抄袭他人开发的软件不能获得著作权。程序的功能设计往往被认为是程序的思想概念,根据著作权法不保护思想概念的原则,任何人可以设计具有类似功能的另一件软件作品。但是,如果用了他人软件作品的逻辑步骤的组合方式,则对他人软件构成侵权。
(2)可被感知。受著作权法保护的作品应当是作者创作思想在固定载体上的一种实际表达。如果作者的创作思想未表达出来,不可以被感知,就不能得到著作权法的保护。因此,《中华人民共和国计算机软件保护条例》规定,受保护的软件必须固定在某种有形物体上,例如固定在存储器、磁盘和磁带等设备上,也可以是其他的有形物,如纸张等。
(3)逻辑合理。逻辑判断功能是计算机系统的基本功能。因此,受著作权法保护的计算机软件作品必须具备合理的逻辑思想,并以正确的逻辑步骤表现出来,才能达到软件的设计功能。毫无逻辑性的计算机软件,不能计算出正确结果,也就毫无价值。
根据《中华人民共和国计算机软件保护条例》第六条的规定,除计算机软件的程序和文档外,著作权法不保护计算机软件开发所用的思想、概念、发现、原理、算法、处理过程和运算方法。也就是说,利用已有的上述内容开发软件,并不构成侵权。因为开发软件时所采用的思想、概念等均属计算机软件基本理论的范围,是设计开发软件不可或缺的理论依据,属于社会公有领域,不能被个人专有。
计算机软件著作权的权利
《中华人民共和国著作权法》规定,软件作品享有两类权利:一类是软件著作权的人身权(精神权利);另一类是软件著作权的财产权(经济权利)。
计算机软件的著作人身权
《中华人民共和国计算机软件保护条例》规定,软件著作权人享有发表权和开发者身份权,这两项权利与软件著作权人的人身权是不可分离的。
(1)发表权。发表权是指决定软件作品是否公之于众的权利,即指软件作品完成后,以复制、展示、发行或者翻译等方式使软件作品在一定数量不特定人的范围内公开。发表权的具体内容包括软件作品发表的时间、发表的形式以及发表的地点等。
(2)开发者身份权(也称为署名权)。开发者身份权是指作者为表明身份在软件作品中署自己名字的权利。开发者的身份权不随软件开发者的消亡而丧失,且无时间限制。
计算机软件的著作财产权
财产权通常是指由软件著作权人控制和支配,并能够为权利人带来一定经济效益的权利。《中华人民共和国计算机软件保护条例》规定,软件著作权人享有下述软件财产权:
(1)使用权。使用权即在不损害社会公共利益的前提下,以复制、修改、发行、翻译、注释等方式合作软件的权利。
(2)复制权。复制权即将软件作品制作一份或多份的行为。复制权就是版权所有人决定实施或不实施上述复制行为或者禁止他人复制其受保护作品的权利。
(3)修改权。修改权即对软件进行增补、删节,或者改变指令、语句顺序等以提高、完善原软件作品的做法。修改权即指作者享有的修改或者授权他人修改软件作品的权利。
(4)发行权。发行是指为满足公众的合理需求,通过出售、出租等方式向公众提供一定数量的作品复制件。发行权即以出售或赠与方式向公众提供软件的原件或者复制件的权利。
(5)翻译权。翻译是指以不同于原软件作品的一种程序语言转换该作品原使用的程序语言,而重现软件作品内容的创作。简单地说,翻译权是指将原软件从一种程序语言转换成另一种程序语言的权利。
(6)注释权。软件作品的注释是指对软件作品中的程序语句进行解释,以便更好地理解软件作品。注释权是指著作权人对自己的作品享有进行注释的权利。
(7)信息网络传播权。信息网络传播权是以有线或者无线信息网络方式向公众提供软件作品,使公众可在其个人选定的时间和地点获得软件作品的权利。
(8)出租权。出租权即有偿许可他人临时使用计算机软件的复制件的权利,但是,计算机软件不是出租的主要标的除外。
(9)使用许可权和获得报酬权。使用许可权和获得报酬权即许可他人以上述方式使用软件作品的权利(许可他人行使软件著作权中的财产权)和依照约定或者有关法律规定获得报酬的权利。
(10)转让权。转让权即向他人转让软件的使用权和使用许可权的权利。软件著作权人可以全部或者部分转让软件著作权中的财产权。
软件合法持有人的权利
根据《中华人民共和国计算机软件保护条例》的规定,软件的合法复制品所有人享有下述权利:
(1)根据使用的需要把软件装入计算机等能存储信息的装置内。
(2)根据需要进行必要的复制。
(3)为了防止复制品损坏而制作备份复制品。这些复制品不得通过任何方式提供给他人使用,并在所有人丧失该合法复制品所有权时,负责将备份复制品销毁。
(4)为了把该软件用于实际的计算机应用环境或者改进其功能性能而进行必要的修改。但是,除合同约定外,未经该软件著作权人许可,不得向任何第三方提供修改后的软件。
计算机软件著作权的行使
(1)软件经济权利的许可使用。软件经济权利的许可使用是指软件著作权人或权利合法受让者,通过合同方式许可他人使用其软件,并获得报酬的一种软件贸易形式。许可使用的方式可分为独占许可使用、独家许可使用、普通许可使用、法定许可使用和强制许可使用。
(2)软件经济权利的转让使用。软件经济权利的转让使用是指软件著作权人将其享有的软件著作权中的经济权利全部转移给他人。软件经济权利的转让将改变软件权利的归属,原始著作权人的主体地位随着转让活动的发生而丧失,软件著作权受让者成为新的著作权主体。《中华人民共和国计算机软件保护条例》规定,软件著作权转让必须签订书面合同。同时,软件转让活动不能改变软件的保护期。转让方式包括出卖、赠与、抵押和赔偿等,可以定期转让或者永久转让。
计算机软件著作权的保护期
根据《中华人民共和国著作权法》和《中华人民共和国计算机软件保护条例》的规定,计算机软件著作权的权利自软件开发完成之日起产生,保护期为50年。保护期满,除开发者身份权以外,其他权利终止。一旦计算机软件著作权超出保护期,软件就进入公有领域。计算机软件著作权人的单位终止和计算机软件著作权人的公民死亡均无合法继承人时,除开发者身份权以外,该软件的其他权利进入公有领域。软件进入公有领域后成为社会公共财富,公众可无偿使用。
计算机软件著作权的归属
我国著作权法对著作权的归属采取了“创作主义”原则,明确规定著作权属于作者,除非另有规定。《中华人民共和国计算机软件保护条例》第九条规定,“软件著作权属于软件开发者,本条例另有规定的情况除外”。这是我国计算机软件著作权归属的基本原则。
计算机软件开发者是计算机软件著作权的原始主体,也是享有权利最完整的主体。软件作品是开发者从事智力创作活动所取得的智力成果,是脑力劳动的结晶。其开发创作行为使开发者直接取得该计算机软件的著作权。因此,《中华人民共和国计算机软件保护条例》第九条明确规定“软件著作权属于软件开发者”,即以软件开发的事实来确定著作权的归属,谁完成了计算机软件的创作开发工作,其软件的著作权就归谁享有。
职务开发软件著作权的归属
职务软件作品是指公民在单位任职期间为执行本单位工作任务所开发的计算机软件作品。《中华人民共和国计算机软件保护条例》第十三条作了明确的规定,即公民在单位任职期间所开发的软件,如果是执行本职工作的结果,即针对本职工作中明确指定的开发目标所开发的;或者是从事本职工作活动所预见的结果或者自然的结果,则该软件的著作权属于该单位;或者主要使用了单位的专用设备、未公开的专门信息等物资技术条件所开发并由法人或者其他组织承担责任的软件。根据《中华人民共和国计算机软件保护条例》规定,可以得出这样的结论:当公民作为某单位的雇员时,如其开发的软件属于执行本职工作的结果,该软件著作权应当归单位享有。若开发的软件不是执行本职工作的结果,其著作权就不属于单位享有。如果该雇员主要使用了单位的设备,按照《中华人民共和国计算机软件保护条例》第十三条第三款的规定,其著作权不能属于该雇员个人享有。
对于公民在非职务期间创作的计算机程序,其著作权属于某项软件作品的开发单位,还是从事直接创作开发软件作品的个人,可按照《中华人民共和国计算机软件保护条例》第十三条规定的三条标准确定。
(1)所开发的软件作品不是执行其本职工作的结果。
任何受雇于一个单位的人员,都会被安排在一定的工作岗位和分派相应的工作任务。完成分派的工作任务就是他的本职工作,本职工作的直接成果也就是其工作任务的不断完成。当然,具体工作成果又会产生许多效益、产生范围更广的结果。但是,该条标准指的是雇员本职工作最直接的成果。若雇员开发创作的软件不是执行本职工作的结果,则构成非职务计算机软件著作权的条件之一。
(2)开发的软件作品与开发者在单位中从事的工作内容无直接联系。
如果该雇员在单位担任软件开发工作,引起争议的软件作品不能与其本职工作中明确指定的开发目标有关,软件作品的内容也不能与其本职工作所开发的软件的功能、逻辑思维和重要数据有关。雇员所开发的软件作品与其本职工作没有直接的关系,则构成非职务计算机软件著作权的第二个条件。
(3)开发的软件作品未使用单位的物质技术条件。
开发创作软件作品所使用的物质技术条件,即开发软件作品所必须的设备、数据、资金和其他软件开发环境,不属于雇员所在的单位所有。没有使用受雇单位的任何物质技术条件构成非职务软件著作权的第三个条件。
雇员进行本职工作以外的软件开发创作,必须同时符合上述三个条件,才能算是非职务软件作品,雇员个人才享有软件著作权。常有软件开发符合前两个条件,但使用了单位的技术情报资料、计算机设备等物质技术条件的情况。处理此种情况较好的方法是对该软件著作权的归属应当由单位和雇员双方协商确定,如对于公民在非职务期间利用单位物质条件创作的与单位业务范围无关的计算机程序,其著作权属于创作程序的作者,但作者许可第三人使用软件时,应当支付单位合理的物质条件使用费,如计算机机时费等。若通过协商不能解决,按上述三条标准作出界定。
合作开发软件著作权的归属
合作开发软件是指两个或两个以上公民、法人或其他组织订立协议,共同参加某项计算机软件的开发并分享软件著作权的形式。《中华人民共和国计算机软件保护条例》第十条规定:“由两个以上的自然人、法人或者其他组织合作开发的软件,其著作权的归属由合作开发者签订书面合同约定。无书面合同或者合同未作明确约定,合作开发的软件可以分割使用的,开发者对各自开发的部分可以单独享有著作权;但是,行使著作权时,不得扩展到合作开发的软件整体的著作权。合作开发的软件不能分割使用的,其著作权由合作开发者共同享有,通过协商一致行使;如不能协商一致,又无正当理由,任何一方不得阻止他方行使除转让权以外的其他权利,但是所得收益应合理分配给所有合作开发者。”根据此规定,对合作开发软件著作权的归属应掌握以下4点:
(1)由两个以上的单位、公民共同开发完成的软件属于合作开发的软件。对于合作开发的软件,其著作权的归属一般是由各合作开发者共同享有。但如果有软件著作权的协议,则按照协议确定软件著作权的归属。
(2)由于合作开发软件著作权是由两个以上单位或者个人共同享有,因而为了避免在软件著作权的行使中产生纠纷,规定“合作开发的软件,其著作权的归属由合作开发者签订书面合同约定”。
(3)对于合作开发的软件著作权按以下规定执行:“无书面合同或者合同未作明确约定,合作开发的软件可以分割使用的,开发者对各自开发的部分可以单独享有著作权;但是,行使著作权时,不得扩展到合作开发的软件整体的著作权。合作开发的软件不能分割使用的,其著作权由合作开发者共同享有,通过协商一致行使;如不能协商一致,又无正当理由,任何一方不得阻止他方行使除转让权以外的其他权利,但是所得收益应合理分配给所有合作开发者。”
(4)合作开发者对于软件著作权中的转让权不得单独行使。因为转让权的行使将涉及软件著作权权利主体的改变,所以软件的合作开发者在行使转让权时,必须与各合作开发者协商,在征得同意的情况下方能行使该项专有权利。
委托开发的软件著作权的归属
委托开发的软件作品属于著作权法规定的委托软件作品。委托开发软件作品著作权关系的建立,一般由委托方与受委托方订立合同而成立。委托开发软件作品关系中,委托方的责任主要是提供资金、设备等物质条件,并不直接参与开发软件作品的创作开发活动。受托方的主要责任是根据委托合同规定的目标开发出符合条件的软件。关于委托开发软件著作权的归属,《中华人民共和国计算机软件保护条例》第十一条规定:“接受他人委托开发的软件,其著作权的归属由委托者与受委托者签订书面合同约定;无书面合同或者合同未作明确约定的,其著作权由受托人享有。”根据该条的规定,委托开发的软件著作权的归属按以下标准确定:
(1)委托开发软件作品须根据委托方的要求,由委托方与受托方以合同确定的权利和义务的关系而进行开发。因此,软件作品著作权归属应当作为合同的重要条款予以明确约定。对于当事人已经在合同中约定软件著作权归属关系的,如事后发生纠纷,软件著作权的归属仍应当根据委托开发软件的合同来确定。
(2)若在委托开发软件活动中,委托者与受委托者没有签订书面协议,或者在协议中未对软件著作权归属作出明确的约定,则软件著作权属于受委托者,即属于实际完成软件的开发者。
接受任务开发的软件著作权的归属
根据社会经济发展的需要,对于一些涉及国家基础项目或者重点设施的计算机软件,往往采取由政府有关部门或上级单位下达任务方式,完成软件的开发工作。对于下达任务开发的软件,其著作权的归属关系,《中华人民共和国计算机软件保护条例》第十二条作出了明确的规定:“由国家机关下达任务开发的软件,著作权的归属与行使由项目任务书或者合同规定;项目任务书或者合同中未作明确规定,软件著作权由接受任务的法人或者其他组织享有。”根据该规定,国家或上级下达任务开发的软件著作权归属应按以下两条标准确定:
(1)下达任务开发的软件著作权的归属关系,首先应以项目任务书的规定或者双方的合同约定为准。
(2)下达任务的项目任务书或者双方订立的合同中未对软件著作权归属作出明确的规定或者约定的,其软件著作权属于接受并实际完成开发软件任务的单位。
计算机软件著作权主体变更后软件著作权的归属
计算机软件著作权的主体,因一定的法律事实而发生变更。如作为软件著作权人的公民的死亡,单位的变更,软件著作权的转让以及人民法院对软件著作权的归属作出裁判等。软件著作权主体的变更必然引起软件著作权归属的变化。对此,《中华人民共和国计算机软件保护条例》也作了一些规定。因计算机软件主体变更引起的权属变化有以下几种:
(1)公民继承的软件权利归属。
《中华人民共和国计算机软件保护条例》第十五条规定:“在软件著作权的保护期内,软件著作权的继承者可根据《中华人民共和国继承法》的有关规定,继承本条例第八条项规定的除署名权以外的其他权利。”按照该条的规定,软件著作权的合法继承人依法享有继承被继承人享有的软件著作权的使用权、使用许可权和获得报酬权等权利。继承权的取得、继承顺序等均按照继承法的规定进行。
(2)单位变更后软件权利归属。
《中华人民共和国计算机软件保护条例》第十五条规定:“软件著作权属于法人或其他组织的,法人或其他组织变更、终止后,其著作权在本条例规定的保护期内由承受其权利义务的法人或其他组织享有。”按照该条的规定,作为软件著作权人的单位发生变更(如单位的合并、破产等),而其享有的软件著作权仍处在法定的保护期限内,可以由合法的权利承受单位享有原始著作权人所享有的各项权利。依法承受软件著作权的单位,成为该软件的后续著作权人,可在法定的条件下行使所承受的各项专有权利。一般认为,“各项权利”包括署名权等著作人身权在内的全部权利。
(3)权利转让后软件著作权归属。
《中华人民共和国计算机软件保护条例》第二十条规定:“转让软件著作权的,当事人应当订立书面合同。”计算机软件著作财产权按照该条的规定发生转让后,必然引起著作权主体的变化,产生新的软件著作权归属关系。软件权利的转让应当根据我国有关法规以签订、执行书面合同的方式进行。软件权利的受让者可依法行使其享有的权利。
(4)司法判决、裁定引起的软件著作权归属问题。
计算机软件著作权是公民、法人和其他组织享有的一项重要的民事权利。因而在民事权利行使、流转的过程中,难免发生涉及计算机软件著作权作为标的物的民事、经济关系,也难免发生争议和纠纷。争议和纠纷发生后由人民法院的民事判决、裁定而产生软件著作权主体的变更,引起软件著作权归属问题。因司法裁判引起软件著作权的归属问题主要有4类:第一类是由人民法院对著作权归属纠纷中权利的最终归属作出司法裁判,从而变更了计算机软件著作权原有归属;第二类是计算机软件的著作权人为民事法律关系中的债务人(债务形成的原因可能多种多样,如合同关系或者损害赔偿关系等),人民法院将其软件著作财产权判归债权人享有抵债;第三类是人民法院作出民事判决判令软件著作权人履行民事给付义务,在判决生效后执行程序中,其无其他财产可供执行,将软件著作财产权执行给对方折抵债务;第四类是根据破产法的规定,软件著作权人被破产还债,软件著作财产权作为法律规定的破产财产构成的“其他财产权利”,作为破产财产由人民法院判决分配。
(5)保护期限届满权利丧失。
软件著作权的法定保护期限可以确定计算机软件的主体能否依法变更。如果软件著作权已过保护期,该软件进入公有领域,便丧失了专有权,也就没有必要改变权利主体了。根据《中华人民共和国计算机软件保护条例》的规定,计算机软件著作权主体变更必须在该软件著作权的保护期限内进行,转让活动的发生不改变该软件著作权的保护期。这也就是说,转让活动也不能延长该软件著作权的保护期限。
计算机软件著作权侵权的鉴别
侵犯计算机软件著作权的违法行为的鉴别,主要依靠保护知识产权的相关法律来判断。违反《中华人民共和国著作权法》《中华人民共和国计算机软件保护条例》等法律禁止的行为,便是侵犯计算机著作权的违法行为,这是鉴别违法行为的本质原则。对于法律规定不禁止,也不违反相关法律基本原则的行为,不认为是违法行为。在法律无明文具体条款规定的情况下,违背《中华人民共和国著作权法》和《中华人民共和国计算机软件保护条例》等法律的基本原则,以及社会主义公共生活准则和社会善良风俗的行为,也应该视为违法行为。在一般情况下,损害他人著作财产权或人身权的行为,总是违法行为。
计算机软件著作权侵权行为
根据《中华人民共和国计算机软件保护条例》第二十三条的规定:“凡是行为人主观上具有故意或者过失对著作权法和计算机软件保护条例保护的计算机软件人身权和财产权实施侵害行为的,都构成计算机软件的侵权行为。”该条规定的侵犯计算机软件著作权的情况,是认定软件著作权侵权行为的法律依据。计算机软件侵权行为主要有以下几种:
(1)未经软件著作权人的同意而发表或者登记其软件作品。软件著作人享有对软件作品公开发表权,未经允许著作权人以外的任何其他人都无权擅自发表特定的软件作品。如果实施这种行为,就构成侵犯著作权人的发表权。
(2)将他人开发的软件当作自己的作品发表或者登记。此种行为主要侵犯了软件著作权的开发者身份权和署名权。侵权行为人欺世盗名,剽窃软件开发者的劳动成果,将他人开发的软件作品假冒为自己的作品而署名发表。只要行为人实施了这种行为,不管其发表该作品是否经过软件著作人的同意,都构成侵权。
(3)未经合作者的同意将与他人合作开发的软件当作自己独立完成的作品发表或者登记。此种侵权行为发生在软件作品的合作开发者之间。作为合作开发的软件,软件作品的开发者身份为全体开发者,软件作品的发表权也应由全体开发者共同行使。如果未经其他开发者同意,又将合作开发的软件当作自己的独创作品发表,即构成本条规定的侵权行为。
(4)在他人开发的软件上署名或者更改他人开发的软件上的署名。这种行为是指在他人开发的软件作品上添加自己的署名,或者替代软件开发者署名以及将软件作品上开发者的署名进行更改的行为。这种行为侵犯了软件著作人的开发者身份权及署名权。此种行为与第二条规定行为的区别主要是对已发表的软件作品实施的行为。
(5)未经软件著作权人或者其合法受让者的许可,修改、翻译其软件作品。此种行为是侵犯了著作权人或其合法受让者的使用权中的修改权、翻译权。对不同版本计算机软件,新版本往往是旧版本的提高和改善。这种提高和改善实质上是对原软件作品的修改、演绎。此种行为应征得软件作品原版本著作权人的同意,否则构成侵权。如果征得软件作品著作人的同意,因修改和改善新增加的部分,创作者应享有著作权。
(6)未经软件著作权人或其合法受让者的许可,复制或部分复制其软件作品。此种行为侵犯了著作权人或其合法受让者的使用权中的复制权。计算机软件的复制权是计算机软件最重要的著作财产权,也是通常计算机软件侵权行为的对象。这是由于软件载体价格相对低廉,复制软件简单易行效率极高,而销售非法复制的软件即可获得高额利润。因此,复制是常见的侵权行为,是防止和打击的主要对象。当软件著作权经当事人的约定合法转让给转让者以后,软件开发者未经允许不得复制该软件,否则也构成本条规定的侵权行为。
(7)未经软件著作权人及其合法受让者同意,向公众发行、出租其软件的复制品。此种行为侵犯了著作权人或其合法受让者的发行权与出租权。
(8)未经软件著作权人或其合法受让者同意,向任何第三方办理软件权利许可或转让事宜。这种行为侵犯了软件著作权人或其合法受让者的使用许可权和转让权。
(9)未经软件著作权人及其合法受让者同意,通过信息网络传播著作权人的软件。这种行为侵犯了软件著作权人或其合法受让者的信息网络传播权。
(10)侵犯计算机软件著作权存在着共同侵权行为。二人以上共同实施《中华人民共和国计算机软件保护条例》第二十三条和二十四条规定的侵权行为,构成共同侵权行为。对行为人并没有实施《中华人民共和国计算机软件保护条例》第二十三和二十四条规定的行为,但实施了向侵权行为人进行侵权活动提供设备、场所或解密软件,或者为侵权复制品提供仓储、运输条件等行为,构成共同侵权应当在行为人之间具有共同故意或过失。其构成的要件有两个:一是行为人的过错是共同的,而不论行为人的行为在整个侵权行为过程中所起的作用如何;二是行为人主观上要有故意或过失的过错。如果这个要件具备,各个行为人实施的侵权行为虽然各不相同,也同样构成共同侵权。两个要件如果缺乏一个,不构成共同的侵权,或者是不构成任何侵权。
不构成计算机软件侵权的合理使用行为
《中华人民共和国计算机软件保护条例》第八条第四项和第十六条规定,获得使用权或使用许可权(视合同条款)后,可以对软件进行复制而无需通知著作权人,亦不构成侵权。对于合法持有软件复制品的单位、公民在不经著作权人的同意的情况下,亦享有复制与修改权。合法持有软件复制品的单位、公民,在不经软件著作权人同意的情况下,可以根据自己使用的需要将软件装入计算机,为了存档也可以制作备份复制品,为了把软件用于实际的计算机环境或者改进其功能时也可以进行必要的修改,但是备份制品和修改后的文本不能以任何方式提供给他人,超过以上权利,即视为侵权行为。区分合理使用与非合理使用的判别标准一般有:
(1)软件作品是否合法取得。这是合理使用的基础。
(2)使用目的是非商业营利性,如果使用的目的是为商业性营利,就不属合理使用的范围。
(3)合理使用一般为少量的使用,所谓少量的界限根据其使用的目的以行业惯例和人们的一般常识综合确定。超过通常被认为的少量界限,即可被认为不属于合理使用。
《中华人民共和国计算机软件保护条例》第十七条规定:“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件的方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”
计算机著作权软件侵权的识别
计算机软件明显区别于其他著作权法保护的客体,它具有以下特点:
(1)技术性。计算机软件的技术性是指其创作开发的高技术性。具有一定规模的软件的创作开发,一般开发难度大、周期长、投资高,需要良好组织,严密管理,且各方面人员配合协作,借助现代化高技术和高科技工具生产创作。
(2)依赖性。计算机程序的依赖性是指人们对其的感知依赖于计算机的特性。著作权保护的其他作品一般都可以依赖人的感觉器官所直接感知。但计算机程序则不能被人们所直接感知,它的内容只能依赖计算机等专用设备才能被充分表现出来,才能被人们所感知。
(3)多样性。计算机程序的多样性是指计算机程序表达的多样性。计算机程序的表达较著作权法保护的其他对象特殊,其既能以源代码表达,还可以以目标代码和微码等表达,表达形式多样。计算机程序表达的存储媒体也多种多样,同一种程序分别可以被存储在纸张、磁盘、磁带、光盘和集成电路上等。计算机程序的载体大多数精巧灵便。此外,计算机程序的内容与表达难以严格区别界定。
(4)运行性。计算机程序的运行性是指计算机程序功能的运行性。计算机程序不同于一般的文字作品,它主要的功能在于使用。也就是说,计算机程序的功能只能通过对程序的使用、运行才能充分体现出来。计算机程序采用数字化形式存储、转换,复制品与原作品一般无明显区别。
根据计算机软件的特点,对计算机软件侵权行为的识别可以将发生争议的某一计算机程序与比照物(权利明确的正版计算机程序)进行对比和鉴别,从两个软件的相似性或完全相同来判断,做出侵权认定。软件作品常常表现为计算机程序的不唯一性,即两个运行结果相同的计算机程序,或者两个计算机软件的源代码程序不相似或不完全相似,前者不一定构成侵权,而后者不一定不构成侵权。
软件著作权侵权的法律责任
民事责任
侵犯计算机著作权以及有关权益的民事责任是指公民、法人或其他组织因侵犯著作权发生的后果依法应承担的法律责任。当侵权人侵害他人的著作财产权或著作人身权,造成权利人财产上的或非财产的损失,侵权人不履行赔偿义务,法律即强制侵权人承担赔偿损失的民事责任。
《中华人民共和国计算机软件保护条例》第二十三条规定了侵犯计算机著作权的民事责任,即侵犯著作权或者与著作权有关的权利的,侵权人应当按照权利人的实际损失给予赔偿;实际损失难以计算的,可以按照侵权人的违法所得给予赔偿。赔偿数额还应当包括权利人为制止侵权行为所支付的合理开支。权利人的实际损失或者侵权人的违法所得不能确定的,由人民法院根据侵权行为的情节,判决给予五十万元以下的赔偿。有下列侵权行为的,应当根据情况,承担停止侵害、消除影响、公开赔礼道歉、赔偿损失等民事责任:
(1)未经软件著作权人许可发表或者登记其软件的。
(2)将他人软件当作自己的软件发表或者登记的。
(3)未经合作者许可,将与他人合作开发的软件当作自己单独完成的作品发表或者登记的。
(4)在他人软件上署名或者涂改他人软件上的署名的。
(5)未经软件著作权人许可,修改、翻译其软件的。
(6)其他侵犯软件著作权的行为。
行政责任
《中华人民共和国计算机软件保护条例》第二十四条规定了相应的行政责任,即对侵犯软件著作权行为,著作权行政管理部门应当责令停止违法行为,没收非法所得,没收、销毁侵权复制品,并可处以每件一百元或者货值金额二至五倍的罚款。有下列侵权行为的,应当根据情况,承担停止侵害、消除影响、公开赔礼道歉、赔偿损失等行政责任:
(1)复制或者部分复制著作权人软件的。
(2)向公众发行、出租、通过信息网络传播著作权人的软件的。
(3)故意避开或者破坏著作权人为保护其软件而采取的技术措施的。
(4)故意删除或者改变软件权利管理电子信息的。
(5)许可他人行使或者转让著作权人的软件著作权的。
刑事责任
侵权行为触犯刑律的,侵权者应当承担刑事责任。《中华人民共和国刑法》第二百一十七条、二百一十八条和二百二十条规定,构成侵犯著作权罪、销售侵权复制品罪的,由司法机关追究刑事责任。
软件复制品持有人一旦知道了所使用的软件为侵权复制品时,应当履行停止使用、销毁该软件的义务。不履行该义务,软件著作权人可以诉请法院判决停止使用并销毁侵权软件。如果软件复制品持有人在知道所持有软件是非法复制品后继续使用给权利人造成损失的,应该承担赔偿责任。