CN104346152B - 用于代码开发的方法及其系统 - Google Patents
用于代码开发的方法及其系统 Download PDFInfo
- Publication number
- CN104346152B CN104346152B CN201310326818.8A CN201310326818A CN104346152B CN 104346152 B CN104346152 B CN 104346152B CN 201310326818 A CN201310326818 A CN 201310326818A CN 104346152 B CN104346152 B CN 104346152B
- Authority
- CN
- China
- Prior art keywords
- module
- nfr
- functional requirement
- code
- type
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Abstract
本发明提供了一种用于代码开发的方法和系统。本发明的实施方式总体上涉及代码开发。本发明的实施方式涉及地理数据处理方法及其系统。为了尽早发现并修正代码设计中的缺陷以使开发完成的代码能够尽量满足NFR的要求,本发明的发明人创造性的提出了一种在代码设计阶段就可以对总NFR进行分配的方案,具体而言该方案根据包括IO类型在内的特征将所述总NFR自动分配到所述多个模块中的至少一个模块,作为模块NFR,从而使得模块开发人员在开发模块时就知道本模块需要达到的模块NFR从而按照这个目标进行模块的开发与测试。
Description
技术领域
本发明的实施方式总体上涉及代码开发,进一步本发明的实施方式涉及非功能性需求的分配。
背景技术
在软件开发领域,功能性需求(functional requirement,FR)旨在描述软件开发的目的,通常比较明确和具体,较容易通过用例的方式进行捕获和描述。而非功能性需求(non-functional requirement,NFR)旨在描述软件成品的质量指标,通常比较抽象且主观成分较多,包括软件的响应时间(response time)、吞吐量(throughput)等。在软件开发的前期,架构师必须对软件的功能性需求进行详细的定义与设计。然而对于NFR,在现有技术中没有一个早期量化的方法,代码设计的架构师往往不知道如何将总体NFR分配到各个模块,代码开发者也不知道其所开发的模块应当满足什么样的模块NFR。这样很有可能导致开发出来的代码没有办法满足整体的NFR,从而造成开发失败。于是在一些现有的开发过程中,会在代码测试阶段检测开发的代码性能是否能够满足NFR。如果在代码测试阶段发现无法能够满足代码设计的总非功能性需求,可能导致代码的重新设计和开发,仍然需要耗费大量的人力纠正代码设计和开发中的不足之处。
发明内容
为了解决现有技术中的问题,对NFR进行分配,本发明的发明人创造性的发现了NFR与模块的输入输出IO类型之间存在密切的关系,比如对内存进行访问的代码所需的响应时间远远快于同等条件下对网络进行访问的代码所需的响应时间,借助代码模块的IO类型可以实现对总NFR的分配。因此为了尽早发现并修正代码设计中的缺陷以使开发完成的代码能够尽量满足NFR的要求,本发明的发明人创造性的提出了一种在代码设计阶段就可以对总NFR进行分配的方案,具体而言该方案根据包括IO类型在内的特征将所述总NFR自动分配到所述多个模块中的至少一个模块,作为模块NFR,从而使得模块开发人员在开发模块时就知道本模块需要达到的模块NFR,进而按照这个目标进行模块的开发与测试。
具体而言,本发明提供了一种用于代码开发的方法,包括:a.获得总非功能性需求NFR;b.在代码设计架构中确定多个模块,所述总NFR将在所述多个模块间进行分配;c.确定所述多个模块的特征,所述特征包括输入输出IO类型;以及d.根据所述特征将所述总NFR自动分配到所述多个模块中的至少一个模块,作为模块NFR。
本发明还提供了一种用于代码开发的系统,包括:第一获得装置,被配置为获得总非功能性需求NFR;第一确定装置,被配置为在代码设计架构中确定多个模块,所述总NFR将在所述多个模块间进行分配;第二确定装置,被配置为确定所述多个模块的特征,所述特征包括输入输出IO类型;以及分配装置,被配置为根据所述特征将所述总NFR自动分配到所述多个模块中的至少一个模块,作为模块NFR。
通过本发明中的一个实施例的用于代码开发的方法或系统,可以在早期开发中,根据代码设计架构实现NFR的自动分配,从而尽早纠正代码设计中的缺陷与不足,并且使得开发出来的代码尽量满足NFR的要求。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了适于用来实现本发明实施方式的示例性计算系统100的框图。
图2示出了根据本发明的一个实施例的用于代码开发的方法流程图。
图3示出了根据本发明的一个实施例的UML模型中的顺序图(sequence diagram)。
图4示出了根据本发明的一个实施例的UML模型中的类图(class diagram)。
图5示出了根据本发明的一个实施例的将部署环境所能达到的NFR转换为开发环境所能达到的NFR的示意图。
图6示出了根据本发明的一个实施例的用于代码开发的系统框图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整的传达给本领域的技术人员。通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(DPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
下面将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instructionmeans)的制造品(manufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图1所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VDSA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
在一个例子中,借助本发明的一个实施例,可以将总非功能性需求NFR在代码设计阶段分配到各个模块,从而使得每个模块的开发者在代码开发阶段就知道本模块所要达到的模块NFR,并且按照这一目标进行代码开发和测试。当本模块无法达到所述模块NFR时对代码进行调整,或者在代码进行调整后仍然无法达到所述模块NFR时,汇报该情况,从而重新调整系统总NFR的分配或者重新调整代码设计。
图2示出了根据本发明的一个实施例的用于代码开发的方法流程图。在步骤a,获得总非功能性需求NFR。在步骤b,在代码设计架构中确定多个模块,所述总NFR将在所述多个模块间进行分配。在步骤c,确定所述多个模块的特征,所述特征包括输入输出IO类型。以及在步骤d根据所述特征将所述总NFR自动分配到所述多个模块中的至少一个模块,作为模块NFR。
根据本发明的一个实施例,所述NFR包括下列各项中的至少一项:响应时间、吞吐量。所述响应时间表示处理一个或多个请求/数据所需要的时间,其单位可以是秒、毫秒等。所述吞吐量表示单位时间内处理的请求/数据数量,其单位可以是请求数(hits)/秒或者数据量(MB)/秒等。对于一个软件模块而言,同等条件下,响应时间越快,则吞吐量越大,响应时间越慢,则吞吐量越小。所述响应时间可以表示一段时期内的最快响应时间、最慢响应时间、平均响应时间等,所述吞吐量可以表示一段时期内的最大吞吐量、最小吞吐量、平均吞吐量等。当然,所述NFR还可以包括除响应时间和吞吐量外的其他需求。
在步骤a,获得总非功能性需求NFR。所述总NFR既可以是人为指定的,比如指定整个软件系统所要达到的平均响应时间。所述总NFR也可以是从上一步的计算结果中获得的,比如循环应用本发明的步骤a-d可以获得一个复杂的软件设计架构中的从最粗粒度到最细粒度的各个模块的模块NFR,而在上一个步骤中获得的模块NFR可以作为下一个步骤中的总NFR,从而再更细粒度的模块中进行NFR的分配。
在步骤b,在代码设计架构中确定多个模块,所述总NFR将在所述多个模块间进行分配。代码设计是代码开发的早期阶段,代码设计是代码的骨架,通常以模块的形势描述各个模块的功能以及各个模块间的逻辑关系。本发明中的代码设计架构可以是由架构师草拟的代码设计结构框图、代码设计文字描述、或者由统一建模语言(Unified ModelingLanguage,UML)展现的软件设计图形等。UML是用来对软件密集系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。
具体而言,按照本发明的一个实施例,步骤b进一步包括根据所述代码设计架构的逻辑关系自动确定所述多个模块。图3示出了根据本发明的一个实施例的UML模型中的顺序图(sequence diagram)。图3中模块A调用模块B1、B2,模块B2调用模块C和模块E,模块C调用模块D。模块B1、B2属于顺序调用关系(sequential invocation pattern),模块C、D属于嵌套调用关系(nesting invocation pattern),模块C为调用模块(invoker module),模块D为被调用模块(invoke module),可以根据UML自动获得各个模块间的逻辑关系(包括顺序调用关系、嵌套调用关系等),并且根据所述逻辑关系确定需要满足总NFR的多个模块。按照本发明的一个实施例,如果总NFR为模块A所需要满足的NFR,则所述多个模块可以例如下列各项组合中的至少一组:(1)B1、B2,(2)B1、B2、C、E,(3)B1、B2、C、D、E。所述总NFR将在上述每组中的多个模块间进行分配。
在上述例子中假设模块A调用模块B1、B2的成本可以被忽略不计(比如模块A通过内存调用调用模块B1、B2,且模块A几乎没有自身需要执行的代码),因此模块A并不参与总NFR的分配。按照本发明的另一个例子,如果模块A也参与总NFR的分配,那么所述多个模块可以是下列各项组合中的至少一组:(1)A、B1、B2,(2)A、B1、B2、C、E,(3)A、B1、B2、C、D、E。其中模块A的模块NFR表示模块A自身代码所需要满足的模块NFR(比如模块A自身代码所需要满足的响应时间)。所述总NFR将在上述每组中的多个模块间进行分配。
按照本发明的一个实施例,根据所述代码设计架构的逻辑关系自动确定所述多个模块进一步包括根据预定的最大调用级别(maximum invocation depth)确定所述多个模块,从而使得在所述最大调用级别内的同一级上且被同一模块所调用的所有被调用模块都被确定到所述多个模块之内。仍然以图3为例,假设总NFR为模块A所需满足的NFR,所述多个模块的嵌套调用的最大级别为1级,因此所述多个模块为B1、B2。同理,如果所述多个模块的嵌套调用的最大调用级别为2级,则所述多个模块为B1、B2、C、E,其中B1、B2为同在第1级上且同被模块A所调用的所有被调用模块,模块C、E为同在第2级上且同被模块B2所调用的所有被调用模块。以此类推。
按照本发明的一个实施例,也可以通过人工指定的方式确定需要满足所述总NFR的多个模块。
在步骤c,确定所述多个模块的特征,所述特征包括输入输出IO类型。按照本发明的一个实施例,所述IO类型包括下列各项中的至少一种:内存访问(memory access)、数据库访问(database access)、文件访问(file access)(文件访问是通过文件系统的输入输出接口来进行数据访问,所述文件系统可以是本地文件系统、分布式文件系统等)、网络访问(network access),并且IO类型权重值从大到小的顺序为:网络访问、文件访问、数据库访问、内存访问。
IO类型权重值可以如下表1所示。
IO类型 | 内存访问 | 数据库访问 | 文件访问 | 网络访问 |
访问速度 | 非常快 | 比较快 | 快 | 很慢 |
IO类型权重值 | 1 | 8 | 10 | 50 |
表1
从表1中可知,内存访问的访问速度最快,因此其IO类型权重值最小,网络访问的访问速度最慢,因此其IO类型权重值最大。
根据本发明的一个实施例,可以根据代码设计架构中的IO类型关键词自动确定所述多个模块中每个模块的IO类型。仍然以UML模型为例,图4示出了根据本发明的一个实施例的UML模型中的类图(component diagram)。可以根据下述表2所示的IO类型关键词与IO类型的映射关系从图4所示的UML模型中确定各个模块的IO类型。
表2
按照本发明的一个实施例,也可以通过人工指定的方式确定所述多个模块的IO类型。
回到图2,在步骤d根据所述特征将所述总NFR自动分配到所述多个模块中的至少一个模块,作为模块NFR。本发明既可以为所述多个模块中的每个模块分配模块NFR,也可以为所述多个模块中指定的一个或几个模块分配模块NFR。按照本发明的一个实施例,步骤d进一步包括根据下列各项中的至少一项计算所述模块NFR:如果所述NFR为响应时间,则所述模块NFR与所述IO类型权重值成正比;如果所述NFR为吞吐量,则所述模块NFR与所述IO类型权重值成反比。下面分别以响应时间与吞吐量为例进行详细说明。
所述至少一个模块的响应时间可以用下面公式1表示:
公式1
其中RToverall表示总响应时间(作为总NFR),i表示所述多个模块中的至少一个模块,j是一个从1到N的整数变量,N表示所述多个模块的总数,Wj表示第j个模块的IO类型权重值,Wi表示所述至少一个模块的IO类型权重值,RTi表示分配给所述至少一个模块的响应时间。
按照本发明的一个实施例,步骤d进一步包括:如果所述至少一个模块为非调用模块(即其不再调用其他模块),则所述至少一个模块被分配的模块NFR表示执行该模块所需满足的NFR。以图3为例,假设所述多个模块包括B1、B2。则B1为非调用模块,RTB1为执行模块B1所需要满足的NFR。假如所述多个模块包括B1、B2、C、E,则B1、E为非调用模块,RTB1为执行模块B1所需要满足的NFR,RTE为执行模块E所需要满足的NFR。假如所述多个模块包括B1、B2、C、E、D,则B1、E、D为非调用模块,RTB1为执行模块B1所需要满足的NFR,RTE为执行模块E所需要满足的NFR,RTD为执行模块D所需要满足的NFR。
按照本发明的一个实施例,步骤d进一步包括:如果所述至少一个模块为调用模块,且其调用的被调用模块在所述多个模块之内,则所述至少一个模块被分配的模块NFR为执行所述至少一个模块自身代码需要满足的NFR(即不包括所述调用模块所调用的被调用模块所需要满足的NFR)。以图3为例,假如所述多个模块包括B1、B2、C、E,则B2为调用模块,且其调用的被调用模块(C、E)在所述多个模块内,则RTB2为执行模块B2自身代码需要满足的NFR(而不包括执行模块C、E需要满足的NFR)。假如所述多个模块包括B1、B2、C、E、D,则B2、C为调用模块,且B2调用的被调用模块(C、E)以及C调用的被调用模块(D)在所述多个模块内,则RTB2为执行模块B2自身代码需要满足的NFR(而不包括执行模块C、E需要满足的NFR),RTC为执行模块C自身代码需要满足的NFR(而不包括执行模块D需要满足的NFR)。
按照本发明的一个实施例,步骤d进一步包括:如果所述至少一个模块为调用模块,且其调用的被调用模块在所述多个模块之外,则所述至少一个模块被分配的模块NFR为执行所述至少一个模块项下所有模块(包括所述至少一个模块以及其直接或间接调用的所有被调用模块)所需要满足的NFR。以图3为例,假设所述多个模块包括B1、B2,则B2为调用模块,且其调用的被调用模块(C、E)在所述多个模块之外,则RTB2为执行模块B2项下所有模块(包括模块B2、C、D、E)所需要满足的NFR。假如所述多个模块包括B1、B2、C、E,则C为调用模块,且其调用的被调用模块(D)在所述多个模块之外,则RTC为执行模块C项下所有模块(包括模块C、D)所需满足的NFR。
所述至少一个模块的吞吐量可以用下面公式2表示:
公式2
其中TPoverall表示总吞吐量(作为总NFR),i表示所述多个模块中的至少一个模块,j是一个从1到N的整数变量,N表示所述多个模块的总数,Wj表示第j个模块的IO类型权重值,Wi表示所述至少一个模块的IO类型权重值,TPi表示分配给所述至少一个模块的吞吐量。由于TPi与RTi成反比,因此上文中关于RTi的具体实施方式也适用于TPi。
按照本发明的一个实施例,所述特征进一步包括代码规模(software sizing)。所述方法进一步包括获得预估的所述多个模块的总代码规模以及预估的所述至少一个模块的代码规模(图2中未示出)。可选的,获得预估的所述多个模块的总代码规模可以进一步包括通过获得预估的所述多个模块的每个模块的代码规模进而获得所述多个模块的总代码规模。因此步骤d进一步包括根据包括所述IO类型以及代码规模在内的特征将所述总NFR自动分配到所述多个模块中的至少一个模块,作为模块NFR。
如果所述NFR为响应时间,则公式1可以被进一步修改为公式1’:
公式1’
其中RToverall表示总响应时间(作为总NFR),i表示所述多个模块中的至少一个模块,j是一个从1到N的整数变量,N表示所述多个模块的总数,Wj表示第j个模块的IO类型权重值,Wi表示所述至少一个模块的IO类型权重值,Sizej表示预估的第j个模块的代码规模,Sizei表示预估的所述至少一个模块的代码规模,RTi表示分配给所述至少一个模块的响应时间。一个模块的代码规模可以是由架构师根据经验预估的,也可以是该模块的接口数的一个函数(通常情况下接口数越大,代码规模越大),如果根据上述函数预估代码规模,则可以从UML模型的类图中自动计算模块的代码规模。
如果所述NFR为吞吐量,则公式2可以被进一步修改为公式2’:
公式2’
其中TPoverall表示总吞吐量(作为总NFR),i表示所述多个模块中的至少一个模块,j是一个从1到N的整数变量,N表示所述多个模块的总数,Wj表示第j个模块的IO类型权重值,Wi表示所述至少一个模块的IO类型权重值,Sizej表示预估的第j个模块的代码规模,Sizei表示预估的所述至少一个模块的代码规模,TPi表示分配给所述至少一个模块的吞吐量。
按照本发明的一个实施例,步骤d进一步包括根据匹配的历史模块所能达到的NFR确定所述至少一个模块的模块NFR,其中所述匹配的历史模块在所述特征上与所述至少一个模块匹配,并且其中所述特征包括下列各项中包含IO类型的至少一项:IO类型、代码规模、成熟度、行业领域、业务流程领域、系统架构、技术类别、编程语言、运算环境。如果能够根据历史数据找到与所述至少一个模块在特征上匹配的历史模块,则可以直接使用该历史模块所能达到的实际NFR作为所述至少一个模块的模块NFR,而不必为所述至少一个模块计算其模块NFR。这样,可以提高所确定的模块NFR的准确性,因为历史数据可以是经过真实的代码开发从而被验证过的数据,因此匹配的历史模块所能达到的NFR具有更高的可靠性。
按照本发明的一个实施例,所述匹配的历史模块包括其特征与所述至少一个模块的特征相同的历史模块。比如如果所述特征仅包括IO类型,且所述至少一个模块的IO类型为网络访问,则选择IO类型同为网络访问的历史模块的NFR作为所述至少一个模块的模块NFR。为了使得参考历史模块的结果更加准确,可以依据更多的特征来进行历史模块的匹配,比如除IO类型相同以外,还要求在代码规模、成熟度、行业领域、业务流程领域、系统架构、技术类别、编程语言、运算环境等特征上都相同的历史模块的NFR才可以用来作为所述至少一个模块的模块NFR的参考。所述特征中除IO类型以外的特征的示例可以见下表3:
表3
按照本发明的另一实施例,所述匹配的历史模块包括在所述特征上匹配置信度(confidence of matching)高于预定阈值的历史模块。比如如果所述特征包括上述所有9项特征,则为每一个特征分配一个权重,9项特征的权重之和为1,如果在某项特征上,所述历史模块与所述至少一个模块相同则取值为1,如果不同则取值为0,对所述取值与所述权重的乘积进行求和可以获得历史模块的匹配置信度,如果所述历史模块的匹配置信度高于预定阈值,则可以将所述历史模块的模块NFR作为所述至少一个模块的模块NFR。下述表4描述了一个历史模块的取值示例。
特征 | 权重 | 取值 |
IO类型 | 0.45 | 1 |
代码规模 | 0.20 | 1 |
成熟度 | 0.05 | 1 |
行业领域 | 0.04 | 0 |
业务流程领域 | 0.07 | 0 |
系统架构 | 0.05 | 0 |
技术类别 | 0.04 | 0 |
编程语言 | 0.02 | 1 |
运算环境 | 0.08 | 1 |
表4
表4所示的历史模块的匹配置信度为0.80(=0.45+0.20+0.05+0.02+0.08),假设所述阈值为0.70,则所述历史模块的匹配置信度高于所述阈值,因此可以确定将所述历史模块所能达到的NFR作为所述至少一个模块的模块NFR。
由于所述模块NFR采用所述历史模块的参考值,而非计算获得,因此可能出现所述多个模块的每一个模块的模块NFR之和未能满足总NFR的情况,在此情况下可以进一步执行下列各项中的至少一项:放弃根据匹配的历史模块所能达到的NFR确定所述至少一个模块的模块NFR,发出报错通知。可选的,如果放弃根据匹配的历史模块所能达到的NFR确定所述至少一个模块的模块NFR,则还可以进一步通过上述计算方式进行总NFR的分配。如果发出报错通知,架构师可以重新调整程序设计架构,或者重新确定总NFR。
按照本发明的一个实施例,其中所述匹配的历史模块所能达到的NFR为所述匹配的历史模块在部署环境(deployment environment)下所能达到的NFR,所述根据匹配的历史模块所能达到的NFR确定所述至少一个模块的模块NFR进一步包括:将所述匹配的历史模块在部署环境下所能达到的NFR转换为其在开发环境(development environment)下所能达到的NFR,并且根据所述开发环境的NFR确定所述至少一个模块的模块NFR。为了进一步提高所确定的所述至少一个模块的模块NFR的准确度,可以参考在真实的部署环境下运行的匹配的历史模块的NFR,但是由于真实的部署环境与开发环境在系统配置上往往存在差异,因此部署环境下的NFR与开发环境下的NFR往往不同,需要将部署环境下的NFR转换为开发环境下的NFR才能作为所述模块NFR的参考。图5示出了根据本发明的一个实施例的将部署环境所能达到的NFR转换为开发环境所能达到的NFR的示意图。理想状态下,系统配置与所能达到的NFR成线性关系,所述系统配置包括下列各项中的至少一项:内存大小、存储大小、主频、CPU核数等。以内存为例,理想状态下,内存越大响应时间越快,二者成线性关系,但是在实际运行过程中,由于收到环境因素的影响,系统配置与所能达到的NFR成非线性关系(如图5中曲线所示),因此需要按照图5所示的曲线将在部署环境下所能达到的NFR转换为在开发环境下的NFR,再根据所述开发环境的NFR确定所述至少一个模块的模块NFR。由于现有技术中已经能够提供部署环境与开发环境系统配置与所能达到的NFR间的映射关系,因此本公开对如何产生二者的映射关系不再赘述。
按照本发明的一个实施例,所述方法进一步包括判断所开发的所述至少一个模块的模块性能是否能够达到所述模块NFR(图2中未示出)。如果所述模块性能未能达到所述模块NFR,则可以进一步提醒程序开发者修改代码,如果代码被修改后仍无法达到所述模块NFR,则需要进一步反馈给架构师,从而修改程序架构或者修改NFR的分配。这样可以及时纠正在模块开发过程中、架构设计上、或在NFR分配中的错误,从而尽早的反馈给模块开发人员或者系统架构师,从而及时的进行调整,尽量避免重新设计或者重新开发所浪费的成本。
按照本发明的一个实施例,还可以进一步判断所述多个模块的总体性能是否能够达到总NFR(图2中未示出)。如果所述总体性能未能达到总NFR,则可以进一步提醒程序架构师,所述程序设计架构或NFR分配方案需要进一步调整。
综上所述,按照本发明的一个实施例,可以在代码设计阶段按照IO类型对代码模块需要达到的NFR进行分配,从而优化代码开发过程,尽量使得开发的代码能够满足总NFR的要求,避免重新开发、或重新设计所带来的资源浪费。
上文描述了本发明中的用于代码开发的方法,下面将结合图6描述在同一发明构思下的用于代码开发的系统,其中相同或相应的实现细节由于在上文中已经进行了详细和完整的描述,因此在下文中将不再进行赘述。
图6示出了根据本发明的一个实施例的用于代码开发的系统框图。图6中的系统包括第一获得装置、第一确定装置、第二确定装置和分配装置。其中所述第一获得装置,被配置为获得总非功能性需求NFR。所述第一确定装置被配置为在代码设计架构中确定多个模块,所述总NFR将在所述多个模块间进行分配。所述第二确定装置被配置为确定所述多个模块的特征,所述特征包括输入输出IO类型。所述分配装置被配置为根据所述特征将所述总NFR自动分配到所述多个模块中的至少一个模块,作为模块NFR。
根据本发明的一个实施例,所述IO类型包括下列各项中的至少一种:内存访问、数据库访问、文件访问、网络访问,并且IO类型权重值从大到小的顺序为:网络访问、文件访问、数据库访问、内存访问。
根据本发明的一个实施例,所述NFR包括下列各项中的至少一项:响应时间、吞吐量。并且所述分配装置进一步被配置为根据下列各项中的至少一项计算所述模块NFR:如果所述NFR为响应时间,则所述模块NFR与所述IO类型权重值成正比;如果所述NFR为吞吐量,则所述模块NFR与所述IO类型权重值成反比。
根据本发明的一个实施例,所述分配装置进一步被配置为包括下列各项中的至少一项:如果所述至少一个模块为非调用模块,则所述模块NFR表示执行该模块所需满足的NFR;如果所述至少一个模块为调用模块,且其调用的被调用模块在所述多个模块之内,则所述模块NFR表示执行所述至少一个模块自身代码需要满足的NFR;如果所述至少一个模块为调用模块,且其调用的被调用模块在所述多个模块之外,则所述模块NFR表示执行所述至少一个模块项下所有模块所需要满足的NFR。
根据本发明的一个实施例,其中所述特征进一步包括代码规模,所述系统进一步包括第二获得装置。所述第二获得装置被配置为获得预估的所述多个模块的总代码规模以及预估的所述至少一个模块的代码规模。
根据本发明的一个实施例,其中所述第一确定装置进一步被配置为根据所述代码设计架构的逻辑关系自动确定所述多个模块。
根据本发明的一个实施例,其中根据所述代码设计架构的逻辑关系自动确定所述多个模块进一步包括根据预定的最大调用级别确定所述多个模块,从而使得在所述最大调用级别内的同一级上且被同一模块所调用的所有被调用模块都被确定到所述多个模块之内。
根据本发明的一个实施例,其中所述第二确定装置进一步被配置为根据所述代码设计架构中的IO类型关键词自动确定所述多个模块中每个模块的IO类型。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (16)
1.一种用于代码开发的方法,包括:
a.获得总非功能性需求NFR;
b.在代码设计架构中确定多个模块,所述总非功能性需求NFR将在所述多个模块间进行分配;
c.确定所述多个模块的特征,所述特征包括输入输出IO类型;以及
d.根据所述特征将所述总非功能性需求NFR自动分配到所述多个模块中的至少一个模块,作为模块非功能性需求NFR,其中所述IO类型包括下列各项中的至少一种:内存访问、数据库访问、文件访问、网络访问,并且IO类型权重值从大到小的顺序为:网络访问的IO类型权重值、文件访问的IO类型权重值、数据库访问的IO类型权重值、内存访问的IO类型权重值,并且
其中所述总非功能性需求NFR及模块非功能性需求NFR包括下列各项中的至少一项:响应时间、吞吐量,
步骤d进一步包括根据下列各项中的至少一项计算所述模块非功能性需求NFR:
如果所述模块非功能性需求NFR为响应时间,则所述模块非功能性需求NFR与所述IO类型权重值成正比;
如果所述模块非功能性需求NFR为吞吐量,则所述模块非功能性需求NFR与所述IO类型权重值成反比。
2.如权利要求1所述的方法,步骤d进一步包括下列各项中的至少一项:
如果所述至少一个模块为非调用模块,则所述模块非功能性需求NFR表示执行该模块所需满足的非功能性需求NFR;
如果所述至少一个模块为调用模块,且其调用的被调用模块在所述多个模块之内,则所述模块非功能性需求NFR表示执行所述至少一个模块自身代码需要满足的非功能性需求NFR;
如果所述至少一个模块为调用模块,且其调用的被调用模块在所述多个模块之外,则所述模块非功能性需求NFR表示执行所述至少一个模块项下所有模块所需要满足的非功能性需求NFR,所述至少一个模块项下所有模块包括所述至少一个模块以及其直接或间接调用的所有被调用模块。
3.如权利要求1所述的方法,其中所述特征进一步包括代码规模,所述方法进一步包括:
获得预估的所述多个模块的总代码规模以及预估的所述至少一个模块的代码规模。
4.如权利要求1所述的方法,其中步骤b进一步包括:
根据所述代码设计架构的逻辑关系自动确定所述多个模块。
5.如权利要求4所述的方法,其中根据所述代码设计架构的逻辑关系自动确定所述多个模块进一步包括:
根据预定的最大调用级别确定所述多个模块,从而使得在所述最大调用级别内的同一级上且被同一模块所调用的所有被调用模块都被确定到所述多个模块之内。
6.如权利要求1所述的方法,其中步骤c进一步包括:
根据所述代码设计架构中的IO类型关键词自动确定所述多个模块中每个模块的IO类型。
7.如权利要求1所述的方法,其中步骤d进一步包括:
根据匹配的历史模块所能达到的非功能性需求NFR确定所述至少一个模块的模块非功能性需求NFR,其中所述匹配的历史模块在所述特征上与所述至少一个模块匹配,并且其中所述特征包括IO类型及下列各项中的至少一项:
代码规模、成熟度、行业领域、业务流程领域、系统架构、技术类别、编程语言、运算环境。
8.如权利要求7所述的方法,其中步骤d进一步包括:
如果所述多个模块中每一个模块的模块非功能性需求NFR之和未能满足总非功能性需求NFR,则执行下列各项操作中的至少一项:
放弃根据匹配的历史模块所能达到的非功能性需求NFR确定所述至少一个模块的模块非功能性需求NFR,
发出报错通知。
9.如权利要求7或8中任意一个所述的方法,其中所述匹配的历史模块所能达到的非功能性需求NFR为所述匹配的历史模块在部署环境下所能达到的非功能性需求NFR,所述根据匹配的历史模块所能达到的非功能性需求NFR确定所述至少一个模块的模块非功能性需求NFR进一步包括:
将所述匹配的历史模块在部署环境下所能达到的非功能性需求NFR转换为其在开发环境下所能达到的非功能性需求NFR,并且根据所述开发环境的非功能性需求NFR确定所述至少一个模块的模块非功能性需求NFR。
10.如权利要求1所述的方法,进一步包括:
判断所开发的所述至少一个模块的模块性能是否能够达到所述模块非功能性需求NFR。
11.一种用于代码开发的系统,包括:
第一获得装置,被配置为获得总非功能性需求NFR;
第一确定装置,被配置为在代码设计架构中确定多个模块,所述总非功能性需求NFR将在所述多个模块间进行分配;
第二确定装置,被配置为确定所述多个模块的特征,所述特征包括输入输出IO类型;以及
分配装置,被配置为根据所述特征将所述总非功能性需求NFR自动分配到所述多个模块中的至少一个模块,作为模块非功能性需求NFR,其中所述IO类型包括下列各项中的至少一种:内存访问、数据库访问、文件访问、网络访问,并且IO类型权重值从大到小的顺序为:网络访问的IO类型权重值、文件访问的IO类型权重值、数据库访问的IO类型权重值、内存访问的IO类型权重值,并且
所述非功能性需求NFR包括下列各项中的至少一项:响应时间、吞吐量,
所述分配装置进一步被配置为根据下列各项中的至少一项计算所述模块非功能性需求NFR:
如果所述模块非功能性需求NFR为响应时间,则所述模块非功能性需求NFR与所述IO类型权重值成正比;
如果所述模块非功能性需求NFR为吞吐量,则所述模块非功能性需求NFR与所述IO类型权重值成反比。
12.如权利要求11所述的系统,所述分配装置进一步被配置为包括下列各项中的至少一项:
如果所述至少一个模块为非调用模块,则所述模块非功能性需求NFR表示执行该模块所需满足的非功能性需求NFR;
如果所述至少一个模块为调用模块,且其调用的被调用模块在所述多个模块之内,则所述模块非功能性需求NFR表示执行所述至少一个模块自身代码需要满足的非功能性需求NFR;
如果所述至少一个模块为调用模块,且其调用的被调用模块在所述多个模块之外,则所述模块非功能性需求NFR表示执行所述至少一个模块项下所有模块所需要满足的非功能性需求NFR,所述至少一个模块项下所有模块包括所述至少一个模块以及其直接或间接调用的所有被调用模块。
13.如权利要求11所述的系统,其中所述特征进一步包括代码规模,所述系统进一步包括:
第二获得装置,被配置为获得预估的所述多个模块的总代码规模以及预估的所述至少一个模块的代码规模。
14.如权利要求11所述的系统,其中所述第一确定装置进一步被配置为:
根据所述代码设计架构的逻辑关系自动确定所述多个模块。
15.如权利要求14所述的系统,其中根据所述代码设计架构的逻辑关系自动确定所述多个模块进一步包括:
根据预定的最大调用级别确定所述多个模块,从而使得在所述最大调用级别内的同一级上且被同一模块所调用的所有被调用模块都被确定到所述多个模块之内。
16.如权利要求11所述的系统,其中所述第二确定装置进一步被配置为:
根据所述代码设计架构中的IO类型关键词自动确定所述多个模块中每个模块的IO类型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310326818.8A CN104346152B (zh) | 2013-07-31 | 2013-07-31 | 用于代码开发的方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310326818.8A CN104346152B (zh) | 2013-07-31 | 2013-07-31 | 用于代码开发的方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104346152A CN104346152A (zh) | 2015-02-11 |
CN104346152B true CN104346152B (zh) | 2018-10-30 |
Family
ID=52501855
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310326818.8A Expired - Fee Related CN104346152B (zh) | 2013-07-31 | 2013-07-31 | 用于代码开发的方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104346152B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1928814A (zh) * | 2006-07-28 | 2007-03-14 | 中国科学院软件研究所 | 基于组织实体能力的软件过程建模方法和系统 |
CN101114222A (zh) * | 2007-07-26 | 2008-01-30 | 南京大学 | 一种基于本体的反射式体系结构自演化方法 |
CN102547776A (zh) * | 2012-01-10 | 2012-07-04 | 南京邮电大学 | 基于模型驱动和进化算法的无线传感器网络模型转换方法 |
CN102780583A (zh) * | 2012-07-24 | 2012-11-14 | 南京邮电大学 | 物联网业务描述、组合和服务质量评估的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080082577A1 (en) * | 2006-09-29 | 2008-04-03 | Rockwell Automation Technologies, Inc. | Module classification and searching for industrial control systems |
EP2071452A1 (en) * | 2007-12-07 | 2009-06-17 | Alcatel Lucent | Device and method for automatically building applications from specifications and from off-the-shelf components selected by semantic analysis |
-
2013
- 2013-07-31 CN CN201310326818.8A patent/CN104346152B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1928814A (zh) * | 2006-07-28 | 2007-03-14 | 中国科学院软件研究所 | 基于组织实体能力的软件过程建模方法和系统 |
CN101114222A (zh) * | 2007-07-26 | 2008-01-30 | 南京大学 | 一种基于本体的反射式体系结构自演化方法 |
CN102547776A (zh) * | 2012-01-10 | 2012-07-04 | 南京邮电大学 | 基于模型驱动和进化算法的无线传感器网络模型转换方法 |
CN102780583A (zh) * | 2012-07-24 | 2012-11-14 | 南京邮电大学 | 物联网业务描述、组合和服务质量评估的方法 |
Non-Patent Citations (2)
Title |
---|
企业级的B/S模式应用软件非功能性需求分析与研究;黄浪;《中国优秀硕士学位论文全文数据库 信息科技辑》;20090815(第8期);正文第4-22,40,51-54页 * |
面向顾客满意度的软件外包服务质量设计方法;刘曙 等;《计算机集成制造系统》;20120430;第18卷(第4期);第881-887页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104346152A (zh) | 2015-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108595157B (zh) | 区块链数据的处理方法、装置、设备和存储介质 | |
CN109086031A (zh) | 一种基于规则引擎的业务决策方法和装置 | |
US9606530B2 (en) | Decision support system for order prioritization | |
CN109034505A (zh) | 计量用表需求量在线预测方法及终端设备 | |
CN109491784A (zh) | 降低内存占用量的方法、装置、电子设备、可读存储介质 | |
CN109284881A (zh) | 订单分配方法、装置、计算机可读存储介质及电子设备 | |
CN110442737A (zh) | 基于图数据库的数字孪生方法及系统 | |
CN106548261A (zh) | 一种业务流程控制方法、装置及电子设备 | |
TWI780065B (zh) | 資源調度的方法、裝置和系統 | |
WO2022048557A1 (zh) | Ai模型的训练方法、装置、计算设备和存储介质 | |
CN109582452A (zh) | 一种容器调度方法、调度装置及电子设备 | |
US20170236083A1 (en) | System and methods for fulfilling an order by determining an optimal set of sources and resources | |
CN110287332A (zh) | 云环境下仿真模型选择方法与装置 | |
CN107135192A (zh) | 部署vnf的资源授权方法、vnfm和nfvo | |
US8527322B2 (en) | Proactive demand shaping for a configurable product portfolio with uncertain demand | |
CN114356587A (zh) | 算力任务跨区域调度方法、系统及设备 | |
CN113516246A (zh) | 参数优化方法、量子芯片的控制方法及装置 | |
CN109996247A (zh) | 网络化资源调配方法、装置、设备及存储介质 | |
CN110347593A (zh) | 流程测试方法及装置 | |
US20220269835A1 (en) | Resource prediction system for executing machine learning models | |
CN107220120A (zh) | 用于递送软件解决方案的方法和装置 | |
CN110780978B (zh) | 一种数据处理方法、系统、设备和介质 | |
CN106331000A (zh) | 一种确定服务方案的方法及装置 | |
CN104346152B (zh) | 用于代码开发的方法及其系统 | |
US20170180197A1 (en) | Dynamic Planning and Configuration Based on Inconsistent Supply |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20181030 Termination date: 20200731 |