CN102193797B - 软件设计质量的评价和强制实行 - Google Patents
软件设计质量的评价和强制实行 Download PDFInfo
- Publication number
- CN102193797B CN102193797B CN201110068180.3A CN201110068180A CN102193797B CN 102193797 B CN102193797 B CN 102193797B CN 201110068180 A CN201110068180 A CN 201110068180A CN 102193797 B CN102193797 B CN 102193797B
- Authority
- CN
- China
- Prior art keywords
- design
- designing quality
- accessed
- software application
- rule
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3616—Software analysis for verifying properties of programs using software metrics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/77—Software metrics
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及软件设计质量的评价和强制实行,其中,一种系统向软件应用的设计应用设计质量规则以检测违反,并提供描述所检测的对设计质量规则的一个或多个违反的输出。基于该输出,系统接收用户输入以解决对设计质量规则的一个或多个违反,以及在接收用户输入之后,针对对设计质量规则的违反来评价为软件应用开发的代码,以便基于该软件应用设计来评估为该软件应用开发的代码质量。
Description
相关申请交叉引用
本申请要求以下专利申请的优先权权益:2010年3月18日提交的印度专利申请号716/CHE/2010,以及2010年10月6日提交的印度专利申请号2959/CHE/2010,在此通过参考引入其全部内容。
技术领域
本公开总体上涉及软件设计质量的评价和强制实行。
背景技术
应用可以提供一种建模和开发环境,其利用统一建模语言(UML)来设计软件应用和web服务的架构。应用可以包括这样的能力,即利用UML来关注架构代码分析和模型驱动的开发,以创建有复原能力的应用和web服务。
发明内容
在一方面,一种系统,包括至少一个计算机,以及耦合至该至少一个计算机的至少一个计算机可读介质,其具有存储于其上的指令,当该指令由该至少一个计算机执行时,导致该至少一个计算机执行操作。操作包括:在开发软件应用的代码之前,访问该软件应用的设计;以及访问被限定用于评价该软件应用的设计质量的设计质量规则。操作还包括:向所访问的软件应用设计应用所访问的设计质量规则,以检测对所访问设计质量规则的违反;以及提供描述所检测的对所访问设计质量规则的一个或多个违反的输出。操作进一步包括:基于该输出,接收用以解决对所访问设计质量规则的一个或多个违反的用户输入;以及在接收用以解决对所访问设计质量规则的一个或多个违反的用户输入之后,针对所访问设计质量规则的违反而评价为该软件应用开发的代码,以便基于该软件应用的设计来评估为该软件应用而开发的代码的质量。
实现可以包括以下一个或多个特征。例如,操作可以包括:通过对为软件应用而开发的代码进行逆向工程来获得恢复的软件设计;以及向恢复的软件设计应用所访问设计质量规则,以检测对所访问设计质量规则的违反。在此示例中,操作可以包括:将恢复的软件设计与接收用以解决对所访问设计质量规则的一个或多个违反的用户输入之后存储的软件应用的设计版本进行比较;以及基于比较结果来检测恢复的软件设计与接收用以解决对所访问设计质量规则的一个或多个违反的用户输入之后存储的软件应用的设计版本之间的不一致。可以提供输出,其描述恢复的软件设计与接收用以解决对所访问设计质量规则的一个或多个违反的用户输入之后存储的软件应用的设计版本之间的不一致。
在某些实现中,操作可以包括:接收限定新设计质量规则的用户输入以便向所访问的软件应用设计应用;以及向所访问的软件应用设计应用新设计质量规则,以检测所访问的软件应用设计是否违反新的设计质量规则。操作还可以包括:接收限定对所访问设计质量规则的优先次序的用户输入;以及基于所限定的所访问设计质量规则的优先次序,向所访问的软件应用设计应用所访问设计质量规则。
操作可进一步包括:接收限定所访问设计质量规则针对软件应用的特定适用准则的用户输入;基于所限定的特定适用准则,识别将要向所访问的软件应用设计应用的、所访问设计质量规则的子集;以及向所访问的软件应用设计应用所访问设计质量规则的该子集。此外,操作可以包括:接收限定所访问设计质量规则针对软件应用的排除准则的用户输入;基于该排除标准识别要向所访问的软件应用设计应用的、所访问设计质量规则的子集;以及向所访问的软件应用设计应用所访问设计质量规则的子集。
在某些示例中,操作可以包括:初始化针对所访问的软件应用设计以及针对所访问设计质量规则中每个规则的违反列表;识别被应用以规则的设计元素的类型;以及在所访问的软件应用设计中识别所识别类型的设计元素。对于每个所识别设计元素,操作可以包括:向所识别设计元素应用规则;基于向所识别设计元素应用规则来确定所识别设计元素是否违反该规则;以及在确定所识别设计元素违反该规则的情况下,基于该规则和所识别设计元素向违反列表添加违反。
对于每个所识别设计元素,可以确定所识别设计元素是否被识别为排除在设计质量分析之外;以及在确定所识别设计元素未被识别为排除在设计质量分析之外的情况下,向所识别设计元素应用规则以及确定该规则是否被违反。此外,对于每个所识别设计元素,可以确定规则是否已被应用于所识别设计元素;以及在确定规则尚未应用于所识别设计元素的情况下,向所识别设计元素应用规则以及确定该规则是否被违反。
在某些实现中,操作可以包括:从数据库访问与所检测的对所访问设计质量规则的违反相关的帮助信息;基于所访问帮助信息,生成针对所检测的对所访问设计质量规则的违反的上下文特定帮助消息;以及基于所生成的针对所检测的违反的上下文特定帮助消息而提供输出。操作还可包括:从数据库访问与所检测的对所访问设计质量规则的违反相关的重构(refactoring)信息;基于所访问重构信息,生成针对所检测的对所访问设计质量规则的违反的上下文特定重构建议;以及基于所生成的针对所检测的违反的上下文特定重构建议而提供输出。所生成的上下文特定重构建议可以描述用于纠正所检测的对所访问设计质量规则的违反的建议。操作可以包括:接收更新所访问的软件应用设计以纠正所检测的对所访问设计质量规则的违反的用户输入。
在某些示例中,操作可以包括:接收用以忽略所检测的对所访问设计质量规则的违反的用户输入。在这些示例中,操作可以包括要求忽略所检测的违反以允许所检测的违反被忽略的理由的用户输入;接收描述忽略所检测的违反的理由的用户输入;以及在忽略所检测的违反时记录忽略所检测的违反的理由。此外,在这些示例中,操作可以包括:向活动日志添加指示所检测的违反已被忽略以及忽略所检测的违反的理由的条目;以及允许查看者查看活动日志,其包括指示所检测的违反已被忽略以及忽略所检测的违反的理由的条目。
此外,操作可以包括:访问软件应用的部分设计;以及向软件应用的部分设计应用所访问设计质量规则,以检测对所访问设计质量规则的违反。操作还可包括:在接收用以解决对所访问设计质量规则的一个或多个违反的用户输入之后,生成未解决违反报告,其指定软件应用的设计中尚未纠正的至少一个已检测的违反;以及向查看者提供未解决违反报告。
在另一方面,一种方法,包括:在开发软件应用的代码之前,访问该软件应用的设计;以及访问被限定用于评价该软件应用的设计质量的设计质量规则。该方法还包括:向所访问的软件应用设计应用所访问设计质量规则,以检测对所访问设计质量规则的违反;以及提供描述所检测的对所访问设计质量规则的一个或多个违反的输出。该方法进一步包括:基于该输出,接收用以解决对所访问设计质量规则的一个或多个违反的用户输入;在接收用以解决对所访问设计质量规则的一个或多个违反的用户输入之后,针对所访问设计质量规则的违反而评价为该软件应用开发的代码,以便基于该软件应用的设计来评估为该软件应用而开发的代码的质量。
在又一方面,编码有可执行指令的至少一个计算机可读存储介质,当该可执行指令由至少一个处理器执行时,致使该至少一个处理器执行操作。操作包括:在开发软件应用的代码之前,访问该软件应用的设计;以及访问被限定用于评价该软件应用的设计质量的设计质量规则。操作还包括:向所访问的软件应用设计应用所访问设计质量规则,以检测对所访问设计质量规则的违反;以及提供描述所检测的对所访问设计质量规则的一个或多个违反的输出。操作进一步包括:基于该输出,接收用以解决对所访问设计质量规则的一个或多个违反的用户输入;以及在接收用以解决对所访问设计质量规则的一个或多个违反的用户输入之后,针对所访问设计质量规则的违反而评价为该软件应用开发的代码,以便基于该软件应用的设计来评估为该软件应用而开发的代码的质量。
在另一方面,一种系统,包括至少一个处理器,以及耦合至该至少一个处理器的存储器,其具有存储于其上的指令,当该指令由该至少一个处理器执行时,致使该至少一个处理器执行操作。操作包括:访问软件应用的设计;以及访问与至少一个设计质量属性相关联的设计质量规则。所访问的设计质量规则被限定用于从至少一个设计质量属性方面评价软件应用的设计质量。操作还包括:向所访问的软件应用设计应用所访问设计质量规则,以检测对所访问设计质量规则的违反;以及针对至少一个设计质量属性,累积通过向所访问的软件应用设计应用所访问设计质量规则而检测的违反。操作进一步包括:基于所累积的违反计算针对所访问软件应用设计的设计质量指标;以及基于所计算的设计质量指标提供与软件应用的设计质量相关的输出。
实现可以包括以下一个或多个特征。例如,操作可以包括:识别被分类为涉及至少一个设计质量属性的设计质量规则的子集;向所访问的软件应用设计应用所识别设计质量规则,以检测对所识别设计质量规则的违反;以及累积通过向所访问的软件应用设计应用所识别设计质量规则而检测的所有违反。在另一示例中,操作可以包括:访问被限定用于评价软件应用的设计质量的所有设计质量规则;识别涉及至少一个设计质量属性的所检测的违反;以及累积涉及至少一个设计质量属性的所识别违反。
此外,操作可以包括:针对至少一个设计质量属性,跨所访问的软件应用设计中包括的每个类而聚集所检测的违反;以及针对至少一个设计质量属性,使用针对所访问的软件应用设计中包括的每个类的聚集违反,跨软件应用的设计来累积所检测违反。操作还可以包括:对涉及至少一个设计质量属性的所检测违反进行计数。
在某些实现中,操作可以包括:访问涉及多个不同设计质量属性的设计质量规则;以及针对多个不同设计质量属性的每一个,累积涉及相应设计质量属性的所检测违反。在这些实现中,操作可以包括:针对多个不同设计质量属性的每一个,并且基于针对相应的设计质量属性而累积的违反,计算从相应的设计质量属性方面反映软件设计质量的度量;以及基于针对多个不同设计质量属性中每一个而计算的度量,计算设计质量复合指标。此外,在这些实现中,操作可以包括访问涉及系统所评价的所有设计质量属性的设计质量规则。
在某些示例中,操作可以包括:访问涉及性能设计质量属性、安全设计质量属性以及僵化度(rigidity)设计质量属性的设计质量规则。在这些示例中,操作可以包括:针对性能设计质量属性,累积涉及性能设计质量属性的所检测违反;针对安全设计质量属性,累积涉及安全设计质量属性的所检测违反;以及针对僵化度设计质量属性,累积涉及僵化度设计质量属性的所检测违反。而且,在这些示例中,操作可以包括:针对性能设计质量属性,并且基于针对性能设计质量属性而累积的违反,计算从性能设计质量属性方面反映软件设计质量的性能度量;针对安全设计质量属性,并且基于针对安全设计质量属性而累积的违反,计算从安全设计质量属性方面反映软件设计质量的安全度量;以及针对僵化度设计质量属性,并且基于针对僵化度设计质量属性而累积的违反,计算从僵化度设计质量属性方面反映软件设计质量的僵化度度量。操作可以包括:通过结合性能度量、安全度量和僵化度度量,计算设计质量复合指标。
此外,操作可以包括:访问性能加权因子、安全加权因子和僵化度加权因子;将性能度量与性能加权因子相乘以确定性能值;将安全度量与安全加权因子相乘以确定安全值;将僵化度度量与僵化度加权因子相乘以确定僵化度值。操作还可以包括:对性能值、安全值和僵化度值求和,以确定设计质量复合指标。
在某些实现中,操作可以包括:访问涉及性能设计质量属性的设计质量规则;针对性能设计质量属性,累积涉及性能设计质量属性的所检测违反;以及基于涉及性能设计质量属性的所累积违反,计算针对所访问的软件应用设计的性能度量。性能度量可以从性能方面反映软件设计质量。
另外,操作可以包括:访问涉及安全设计质量属性的设计质量规则;针对安全设计质量属性,累积涉及安全设计质量属性的所检测违反;以及基于涉及安全设计质量属性的所累积违反,计算针对所访问的软件应用设计的安全度量。安全度量可以从安全方面反映软件设计质量。
此外,操作可以包括:访问涉及僵化度设计质量属性的设计质量规则;针对僵化度设计质量属性,累积涉及僵化度设计质量属性的所检测违反;以及基于涉及僵化度设计质量属性的所累积违反,计算针对所访问的软件应用设计的僵化度度量。僵化度度量可以从软件应用设计的改变的灵活程度方面反映软件设计质量。
在某些示例中,操作可以包括:访问涉及软件应用设计的可扩展性的设计质量规则;累积涉及软件应用设计的可扩展性的所检测违反;以及基于涉及软件应用设计的可扩展性的所累积违反,计算所访问的软件应用设计的僵化度度量。操作还可以包括:访问涉及软件应用设计的可修改性的设计质量规则;累积涉及软件应用设计的可修改性的所检测违反;以及基于涉及软件应用设计的可修改性的所累积违反,计算所访问的软件应用设计的僵化度度量。
在某些实现中,操作可以包括:访问涉及软件应用设计的可扩展性的设计质量规则,以及访问涉及软件应用设计的可修改性的设计质量规则。在这些实现中,操作可以包括:累积涉及软件应用设计的可扩展性的所检测违反,以及累积涉及软件应用设计的可修改性的所检测违反。此外,在这些实现中,操作可以包括:基于涉及软件应用设计的可扩展性的所累积违反,计算所访问的软件应用设计的可扩展性度量;基于涉及软件应用设计的可修改性的所累积违反,计算所访问的软件应用设计的可修改性度量;以及结合可扩展性度量和可修改性度量。
在某些示例中,操作可以包括:访问可扩展性加权因子和可修改性加权因子;将可扩展性度量与可扩展性加权因子相乘以确定可扩展性值;以及将可修改性度量与可修改性加权因子相乘以确定可修改性值。在这些示例中,操作可以包括:将可扩展性值与可修改性值相加以确定僵化度度量。
在某些实现中,操作可以包括:确定与所访问的软件应用设计相关联的、与所计算的僵化度度量有关的工作量估计值。在这些实现中,操作可以包括:确定针对所访问的软件应用设计的改变的工作量估计值;基于所计算的僵化度度量而增加所确定的工作量估计值;以及基于增加的工作量估计值,提供与所访问的软件应用设计的改变相关的输出。
在另一方面,一种方法,包括:访问软件应用的设计;以及访问与至少一个设计质量属性相关联的设计质量规则。所访问的设计质量规则被限定用于从至少一个设计质量属性方面评价软件应用的设计质量。该方法还包括:向所访问的软件应用设计应用所访问设计质量规则,以检测对所访问设计质量规则的违反;以及针对至少一个设计质量属性,累积通过向所访问的软件应用设计应用所访问设计质量规则而检测的违反。该方法进一步包括:基于所累积的违反计算针对软件应用的设计质量指标;以及基于所计算的设计质量指标提供与软件应用的设计质量相关的输出。
在又一方面,编码有可执行指令的至少一个计算机可读存储介质,当该可执行指令由至少一个处理器执行时,致使该至少一个处理器执行操作。操作包括:访问软件应用的设计;以及访问与至少一个设计质量属性相关联的设计质量规则。所访问的设计质量规则被限定用于从至少一个设计质量属性方面评价软件应用的设计质量。操作还包括:向所访问的软件应用设计应用所访问设计质量规则,以检测对所访问设计质量规则的违反;以及针对至少一个设计质量属性,累积通过向所访问的软件应用设计应用所访问设计质量规则而检测的违反。操作进一步包括:基于所累积的违反计算针对所访问软件应用设计的设计质量指标;以及基于所计算的设计质量指标提供与软件应用的设计质量相关的输出。
本公开中描述的任何技术的实现都可以包括方法或过程、系统或者存储在计算机可读存储介质上的指令。特定实现的细节在附图和下文描述中记载。通过下文描述,包括附图和权利要求,其他特征将会显而易见。
附图说明
图1、图22和图31为示例性系统的示图。
图2、图3、图4、图21-图23、图25和图27为示例性过程的流程图。
图5示出了示例性设计质量规则类别。
图6示出了示例性设计质量规则。
图7示出了示例性设计质量度量。
图8-图20为示例性用户界面的示图。
图24示出了对设计质量复合指标的计算。
图26示出了对僵化度度量的计算。
图28示出了基于僵化度度量,对于针对设计变化的估计工作量的调整。
图29示出了基于僵化度度量,对于估计的维护工作量的调整。
图30示出了基于僵化度,对于用以实现变化请求的估计的调整。
在全文中相同参考编号表示对应部件。
具体实施方式
图1示出了用于评价和强制实行软件设计质量的示例系统100。模型处理器102可以评价软件应用的设计。例如,模型处理器102可以评价针对从UML(统一建模语言)设计库104访问的模型的UML设计。可以例如在开发用于相关软件应用的代码之前评价UML模型。
作为另一示例,可以评价经逆向工程的模型。例如,如果对于模型的UML设计不存在,则可以根据代码库106中的代码来创建UML模型105。例如,可以使用提取器组件108从代码中提取类、接口和包信息,并且可以使用依赖关系定位器组件110来识别类、包和其他设计元素之间的依赖关系。模型创建器112可以使用提取的类、接口和包信息以及识别出的依赖关系来创建模型105。恢复的设计可以存储在UML设计库104中或者在UML模型库114中。
模型处理器102可以处理原始设计或者经逆向工程的设计,以产生诸如度量、签名元数据和注解之类的模型信息,这些模型信息可以存储在模型信息库116中。此外,用户118可以创建一个或更多包注解120,其亦可存储在模型信息库116中。包注解例如可以包括关于类、包和其他软件元素的设计的注释。
规则引擎122可以访问来自规则库124的设计质量规则。规则库124可以包括预定规则并且还可以包括由用户118使用规则/规则集定制组件126定制的规则。可以定义设计质量规则来评价软件应用的设计质量。
规则引擎122可以处理来自模型信息库116的模型信息,对设计应用获取自规则库124的规则以检测对设计质量规则的违反。如果发现对规则的违反,则可以将违反存储在违反数据库128中。还可以使用可视化和报告组件130将违反报告给用户118。可视化和报告组件130可以向用户118显示重构建议。重构建议可以通过上下文重构组件132来确定,该上下文重构组件132可以基于获取自设计质量知识库134的信息来提供建议。
用户118可以提供用户输入,以解决对设计质量规则的一个或更多违反。例如,用户118可以使用建模应用来提供输入,从而更新设计以纠正检测到的对设计质量规则的一个或更多的违反。作为另一示例,用户118可以提供输入以忽略检测到的违反,并且可以提供对于为什么可以忽略该违反的理由。
图2示出了用于分析软件设计的过程200。可将过程200的操作一般地描述为由系统100来执行。过程200的操作可以由系统100的组件之一(例如,模型处理器102)来执行,或者可以由系统100的组件组合来执行。在一些实现中,过程200的操作可以由包含在一个或更多电子设备中的一个或更多处理器来执行。
当过程200开始时(202),系统100确定是否有用于模型的代码存在(204)。例如,参考图1,模型处理器102可以确定在代码库106中是否存在用于模型的代码。
如果不存在用于模型的代码,则系统100确定是否存在原始设计(206)。例如,参考图1,模型处理器102可以确定在UML设计库104中是否存在用于模型的原始设计。模型处理器102可以确定存在部分设计。
如果不存在原始设计,则过程200结束(207)。如果存在(例如,完整的或部分的)原始设计,则系统100访问原始设计(208)。例如,参考图1,模型处理器102可以访问来自UML设计库104的设计。
系统100分析所访问的原始设计(210)。例如,参考图1,模型处理器102可以处理UML模型,以产生诸如度量、签名元数据和注解之类的模型信息,这些模型信息可以存储在模型信息库116中。规则引擎122可以访问来自规则库124的设计质量规则。规则库124可以包括预定规则并且还可以包括由用户118使用规则/规则集定制组件126定制的规则。规则引擎122可以处理来自模型信息库的模型信息,应用获取自规则库124的规则。如果发现了对规则的违反,则可将违反存储在违反数据库128中。在下文中关于图3更为详细地描述对设计的分析。
如果确定代码存在(例如,在步骤204中),则系统100对该代码进行逆向工程以获得恢复的设计(214)。例如,参考图1,可以使用提取器组件108从代码库106中的代码中提取类、接口和包信息,并且可以使用依赖关系定位器组件110来识别类、包和其他设计元素之间的依赖关系。模型创建器112可以使用提取的类、接口和包信息以及识别的依赖关系来创建模型105。恢复的设计可以存储在UML设计库104中或者在UML模型库114中。
系统100确定是否存在原始设计(216)。例如,参考图1,模型处理器102可以确定在UML库104中是否存在用于模型的原始设计。如果存在原始设计,则系统100访问该原始设计(218)。例如,参考图1,模型处理器102可以访问来自UML库104的设计。
无论是否存在原始设计,系统100都访问恢复的设计(220)。例如,参考图1,模型处理器102可以访问来自UML模型库114的恢复的设计。
系统100分析原始设计和/或恢复的设计(210)。如果恢复的设计和原始设计二者均已被访问,则模型处理器可以将恢复的设计与原始设计相比较,以查看恢复的设计是否偏离原始设计。模型处理器可以以下文关于图3所述的那样分析恢复的设计和/或原始设计。
可以使用不同途径来确定恢复的设计是否偏离原始设计。例如,可以将关联于恢复的设计的UML图与关联于原始设计的UML图相比较。作为另一示例,可以将从在恢复的设计上运行设计质量规则获得的违反报告与从在原始设计上运行设计质量规则获得的违反报告相比较。可以将关联于恢复的设计的违反数量和类型与原始设计的违反数量和类型相比较。如果通过这样的比较识别出了多于阈值数量的差别,则可以确定恢复的设计偏离原始设计。
作为识别原始设计与恢复的设计之间的设计偏离的另一示例,可以将关联于恢复的设计的结构度量与关联于原始设计的结构度量相比较。结构度量例如可以包括设计中包含的类、包和接口的数量、设计实体之间的耦合以及指示出设计中所使用的继承的量和深度的度量。如果在恢复的设计与原始设计之间的结构度量中的差异数量和/或程度超过某一阈值,则可以确定恢复的设计偏离原始设计。
图3示出了用于分析软件设计的过程300。过程300的操作大体被描述为由系统100执行。过程300的操作可以由系统100的组件之一(例如,模型处理器102)来执行,或者可以由系统100的组件组合来执行。在一些实现中,过程300的操作可以由包含于一个或更多电子设备中的一个或更多处理器来执行。
系统100读取设计模型(302)。举例而言并且参考图1,模型处理器102可以访问来自UML设计库104的设计模型。
系统100向用户显示可用的注解(304)。例如,可以在建模应用中显示设计模型,并且可以在建模应用中显示包含于设计中的注解。
系统100确定是否存在新的注解(306)。例如,系统100可以接收来自用户的、表示向设计添加新注解的请求的用户输入。
如果存在新的注解,则系统100接收定义一个或更多新注解的用户输入(308)。例如,用户可以提供关于注解的详情(例如,文本注释)。
系统100接收向模型应用注解的用户输入(310)。例如,用户可以识别与一个或更多注解相关的一个或更多软件元素(例如,类、包)。
系统100向用户显示设计质量规则(312)。例如,可以在用户界面中向用户显示现有设计质量规则。用户界面可以显示每条规则的名称、作用域和解释。可以从规则库(例如,图1的库124)中获取设计质量规则。
系统100确定是否有新的设计质量规则(314)。例如,用户可以提供指示出对于添加新规则的请求的用户输入。
如果有新的设计质量规则,则系统100接收定义一个或更多新规则的用户输入(316)。例如,用户可以为规则提供名称、描述、适用的作用域(例如,包、类、序列图、接口),以及定义规则的条件(例如,基于软件元素的一个或更多属性的条件,诸如类或接口的操作数量、子代数量、包中类的数量或者任何其他属性)。
系统100接收将规则优先的用户输入(318)。例如,用户可以使用用户界面来将规则列表排列在代表期望的规则优先权的顺序之中(例如,置于优先列表的顶部附近的规则可以具有比置于优先列表的底部附近的规则更高的优先权)。
系统100接收指定针对规则执行的适用准则和排除准则的用户输入(320)。例如,用户可以指定要从规则执行中排除的一个或更多规则或者一个或更多规则类型。作为另一示例,用户可以指定要从评价中排除的多设计元素(例如,类、包)。
系统100在模型上运行规则(322)。在下文中关于图4更为详细地描述了规则在模型上的运行。图4示出了用于在软件模型上运行规则的过程400。过程400的操作大体被描述为由系统100执行。过程400的操作可以由系统100的组件之一(例如,模型处理器102)来执行,或者可以由系统100的组件组合来执行。在一些实现中,过程400的操作可以由包含于一个或更多电子设备中的一个或更多处理器来执行。
系统100初始化违反列表(402)。例如,可以将违反列表表示为一个或更多数据结构或者软件对象,或者表示为数据库系统中的一个或更多数据元素。
系统100识别规则(404)。例如,可以从获取自规则库(例如,以上关于图1描述的设计质量规则库124)的规则列表中识别规则。
系统100识别将向其应用规则的设计元素的类型(406)。例如,规则可能适用于诸如类、接口、包或者序列图之类的设计元素。
系统100识别已识别类型的设计元素(408)。例如,如果设计元素类型为类,则系统100识别出包含于软件设计中的类。
系统100确定设计元素是否位于针对该规则的排除列表中(410)。例如,可能存在用户指定的排除列表,而用户指定的设计元素可能包含于在应用设计质量规则时要排除的排除列表之中。如果设计元素在排除列表中,则不向该设计元素应用规则。
如果设计元素不在规则的排除列表中,则系统100确定是否已向该设计元素应用了规则(412),并且如果尚未向该设计元素应用规则,则系统100在该设计元素上应用规则(414)。对于一些规则而言,可以为设计元素确定与规则相关的一个或更多度量(例如,操作数量、祖代数量)。如果已向设计元素应用规则,则系统100不再向该设计元素应用规则。
系统100确定规则是否被违反(416)。例如,可以将用于设计元素的一个或更多度量与某一阈值相比较。例如,如果由一个接口所限定的操作数量超过20这一阈值,则可能违反“神圣的接口”规则(例如,图6的规则614)。作为另一示例,如果一个序列图中的远程调用数量超过3这一阈值,则可能违反过度远离规则(例如,图6的规则628)。
对于某些规则而言,如果设计元素具有特定特征,则可能违反该规则。例如,如果类包括私有构造函数,则可能违反在类中找到的私有构造函数的规则(例如图6中的规则612)。又例如,如果类具有不从该类的包外访问的公有方法,则可能违反非API(应用编程接口)方法访问规则(例如图6中的规则610)。再例如,如果包仅具有实体类而不具有接口,则可能违反面向契约设计的规则(例如图6中的规则620)。
如果违反了规则,则系统100产生违反并向违反列表添加该违反(418)。例如,添加至该违反列表的违反可包括关于下述内容的信息:规则类型、规则优先级、由规则违反影响的非功能属性以及引起该规则违反的设计元素的标识符。
系统100确定是否存在更多的设计元素(420)。例如,如果与规则相关的设计元素种类是类,则系统100确定在所述规则尚未应用的设计模型中是否包括其他类。
如果存在有更多的设计元素,则系统100识别已识别类型的下一个设计元素(408),并将该规则的应用重复至下一个设计元素。例如,如果该设计元素类型是类,则系统100识别在所述规则尚未应用的设计模型中所包括的类,并将该规则应用至已识别的类。
如果不存在更多的设计元素,则系统100确定是否存在更多的规则(422)。例如,系统100可以确定从规则库中获取的所有规则是否已被应用至该设计。如果存在更多规则,则系统100使用已识别的规则来重复步骤404至步骤420。如果不存在更多规则,则系统100识别违反列表中的违反(424)。例如,可使用迭代器对象来对违反列表中的违反对象集进行迭代。又例如,可使用数据库指针来对从数据库中获取的违反数据库记录进行迭代。
系统100使用帮助数据库来创建通用上下文帮助(426)。例如,可从帮助数据库来访问与已访问设计质量规则的已检测的违反相关的帮助信息(例如上文参考图1描述的设计质量知识库134)。基于已访问的帮助信息,可以生成上下文特定帮助信息,该上下文特定帮助信息用于已访问的设计质量规则的已检测的违反,并且该帮助信息可向用户显示。
系统100使用重构数据库来创建一个或多个上下文重构建议(428)。例如,可以从数据库访问与已访问的设计质量规则的已检测的违反相关的重构信息(例如上文参考图1描述的设计质量知识库134)。基于已访问的重构信息,可以生成上下文特定的重构建议,该上下文特定的重构建议用于已访问的设计质量规则的已检测的违反。所生成的上下文特定的重构建议可以描述一种建议,该建议用于纠正已访问的设计质量规则的已检测的违反。可向用户显示所述重构建议。
系统100确定是否忽略违反(430)。例如,如果用户指示他们希望忽略违反或者该违反是包括在用户排除列表中的违反类型,则系统100可确定忽略违反。
如果违反被忽略,则系统100接收该违反删除的理由(432)。例如,当用户详细说明他们希望忽略该违反时,用户可以提供忽略的理由。系统100可以要求用户提供忽略违反的理由,使得留存理由并可在后期审核。
系统100向活动日志添加条目(434)。例如,可以向活动日志添加条目以指示检测的违反已被忽略和指示忽略检测的违反的理由。
系统100确定是否存在更多违反(436)。例如,系统100可以确定违反列表中是否存在未处理的违反。如果存在更多违反,则系统100识别违反列表中的下一个违反(424)并对识别的违反重复步骤426至步骤434。
返回到图3,系统100接收用户输入以对模型进行重构(324)。例如,可接收用户输入以通过更新设计来处理已访问的设计质量规则的一个或多个违反。
系统100确定用户是否对分析满意(326)。例如,设计审核者可指示该设计是否可接受。如果用户对该设计满意,则系统100生成报告(328)。例如,可以生成设计审核问题报告。又例如,可生成未解决的违反报告,例如用于审核的输入。如果用户对于设计不满意,则系统100可能在重构模型之后,对模型重新运行规则(322)。
图5示出了规则类别500的示例。例如,规则可以包括功能组件相关规则502、基于技术的规则504、基于架构的规则506、基于模式的规则508和基于度量的规则510。例如,功能组件相关的规则502可以是项目专用的,而非通用的。例如,用于特定项目的功能组件规则可以说明订单管理组件不应与工资表组件互动。功能组件相关规则502可以包括用户指定的规则,例如,使用规则自定义框架或设计注解框架来限定的规则。
基于技术的规则504可以包括属于使用特定技术或特定框架来最佳地实行的规则,例如特定web技术或电子商务技术框架。又例如,基于技术的规则504可以包括可与在特定环境中改进性能相关的规则。例如,用于网络环境的基于技术的规则可以基于限制在系统组件之间远程调用。
基于度量的规则510可包括主要基于或单独基于从软件代码或软件设计模型(例如UML模型)导出的度量的规则。基于度量的规则可用于评估设计的结构质量。规则可以基于一个或多个复合度量(例如,基于一个或多个其他度量的度量)。一个或多个复合度量可用作获取诸如组件可测试性之类的目标的基础。例如,可测试性规则可基于一个或多个度量,所述一个或多个度量指示类或包中公有操作的数量。基于度量的规则可基于自定义阈值。例如,在某些环境中,用于继承树的最大推荐深度的阈值可以是2,而在其他某些环境中,继承树的最大推荐深度可以是3。
基于模式的规则508可基于比基于度量的规则510更高级别的抽象。例如,基于模式的规则508可包括基于“四元组(gangoffour)”模式(在“设计模式:可重复使用的面向对象软件的元素”中描述的设计模式,该书由Gamma、Helm、Johnson和Vlissides撰写)、或在其他文献中建议的其他模式、或由用户指定的自定义模式的规则。例如,通过分析设计元素之间的依赖关系或通过分析设计元素的签名,可识别模式。基于模式的规则508的示例包括面向契约设计和面向接口程序的模式(将在下文中更详细地描述)。
基于架构的规则506可以包括具有比基于模式的规则508更高抽象的规则。例如,基于架构的规则506可以基于架构组件的结构和架构组件之间的关系。基于架构的规则506可以包括基于预定结构和关系指南的规则,以及基于组织专用或用户专用指南的规则。基于架构的规则506可被模板化,并可基于知识库中所包含的其他结构规则和基于关系规则。
图6示出了示例规则602至630的表600。表600包括作用域栏601,该作用域栏指示了每个示例规则602至603的可应用的作用域,例如类、接口、包或顺序图。例如,规则602至630以及例如由用户定义的自定义规则之类的其他规则可由规则引擎122(图1)使用。例如,如果过量的类(例如相比于阈值)基于特定的类,则可能违反过度扇入度量规则602。例如,如果对类使用了过度继承(例如相比于阈值),则可能违反过度继承规则604。例如,具有高级别继承的类可成为扩展性的瓶颈,并且对该类的改变可影响该类的子类。例如,如果具有非常大量的行为(例如相比于阈值),则可能违反“神圣的类(godlyclass)”规则606。具有大量行为的类(例如功能类)可考虑用于重构。
例如,如果类具有许多向内的依赖关系和高级别继承(例如,相比于阈值),则可能违反高耦合、高继承和高依赖关系出规则608。这种类可表示“脆弱”类,并且,如果这种类失效(例如在测试过程中失效),则从属类可能被影响。例如,如果类具有公有方法但是该类不被该类包外的其他类访问,则可能违反非API方法访问规则610。理想地,仅当由公有方法暴露的特定功能是由其他类访问(特别是来自该类的包外的类)时,类才具有公有方法。如果类具有不被其他包中类访问的公有方法,则类中所暴露的公有方法可最终导致功能的错误使用并破坏系统的API。
例如,如果在类定义的内部找到私有构造函数,则可能违反在类中找到的私有构造函数的规则612。私有构造函数可用于阻止类的实例化。然而,私有构造函数并非某些语言的默认值。因此,私有构造函数可被标记用于进一步的评价。例如,如果接口具有大量的行为(例如相比于阈值),则可能违反“神圣的接口(godlyinterface)”的规则614。具有大量行为的接口可被考虑用于重构。由于接口的每个客户端都依赖于所暴露的类接口,所以在类的每个客户端之间具有无意的耦合。如果一个客户端需要向单类接口添加额外的功能,则当这种功能被添加至所述接口时,每个其他客户端可能需要改变以支持所添加的功能,尽管许多类可能不需要该功能。因此,一个客户端的一个改变可能迫使在整个系统内将改变传播到许多客户端类,这可导致耗时的代码维护并难于定位软件漏洞。
例如,如果包通过实体类而非通过接口被耦合至所述系统的剩余部分,则可能违反PIF(面向接口编程的因素)规则616。理想地,包仅通过接口耦合。使用实体类而非接口可导致低扩展性的包。例如,如果包包括多于阈值数量的类和/或接口,则可能违反“神圣的包”的规则618。具有较大数量的类和/或接口的包可以包括太多的功能,并因此可作为重构的候选。
例如,如果包的类与接口的比例过高或过低(例如相对于阈值),则可能违反面向契约设计的规则620。例如,仅具有类的包可以是绝对实体的并且不可被扩展。然而,仅具有接口的包可以是绝对抽象的,并且如果该包未被标记作为框架包,则它可视为被错误标记。例如,如果低级别模块依赖于高级别模块,则可能违反依赖关系反转规则622。理想地,高级别模块不依赖于低级别模块,并且高级别模块和低级别模块仅依赖于抽象。例如,如果包通过耦合链接至系统中的大量包(例如相对于阈值),则可能违反全向存在包的规则624。通常,全向存在包是包括系统的工具类或核心组件的包。如果存在太多全向存在包,则可以考虑重构所述系统。
例如,如果软件实体不对扩展开放并对修改封闭,则可能违反开放封闭的规则626。一般而言,开放封闭原理可应用于类、模块或函数。对扩展开放但对修改封闭可以阻止对系统不利的改变。如果顺序图包括大量的远程调用(例如相比于阈值),则可能违反过度远程规则628。大量的远程调用可以影响性能。例如,如果类具有多重构造函数,则可能违反工厂规则630。对于类而言,具有多重构造函数可使得在研发期间难于确定调用哪个构造函数。在具有非公有构造函数的类层级中具有所有的类,以及创建客户端可用于直接实例化类的工厂类可能是有用的,该被实例化的类驻留于一个包中并实现共用接口。
可能违反其他规则。例如,如果在类之间存在过度耦合,则可能违反过度耦合规则。如果包的抽象不与其稳定性成比例(例如,如果稳定包不是抽象的或是不稳定的包不是实体的),则可能违反缺乏稳定抽象规则。如果包依赖于另一较不稳定的包,则可能违反稳定的依赖关系规则。如果方法涉及其他类的数据多过涉及自身类的数据,则可能违反“特征依恋(feature-envy)”规则。如果方法包括多于阈值数量的代码行(长的方法可能难于理解、调试和重复使用),则可能违反“长方法(long-method)”规则。如果类具有多于阈值数量的公有访问器方法,则可能违反数据-类规则(触发进一步查询)。
图7示出了示例度量702至744的表700。表700包括作用域栏701,该作用域栏指示每个示例度量702至744的可应用的作用域,例如类、接口、包或顺序图。例如,可与一个或多个基于度量的规则510(图5)结合来使用度量702至744。
NOC(子类数量)度量702指示类的子类(例如UML概括)的数量。“Opslnh”(继承的操作)度量704指示类的继承操作的数量,而“Attrlnh”(继承的属性)指示类的继承属性的数量。“DIT”(继承树的深度)度量708指示继承层级中类的深度,并且可以表明从所述类到继承树的根的最长路径。
“NumDesc”(后代的数量)度量710指示了类的后代数量(例如类的子类数量、类的子类的子类的数量,等等)。“NumAnc”(祖先的数量)度量712指示了类的祖先的数量。“Dep_In”(依赖关系指示符)度量714指示了基于类的元素的数量,并且可以包括传入UML依赖关系(例如UML图上的虚箭头)、方法调用或参数类型依赖关系。
“NumAssEl”(相关元素的数量)度量716指示了作为类的相同作用域(例如,命名空间、包)中的相关元素的数量。鼓励在相同作用域中的元素关联,因为它们不跨越作用域界限并有助于包或命名空间内的内聚。关联可包括合并、组合以及UML关联,并且可包括传入、传出和双向关联。
“NumOps”(操作的数量)度量718指示了类中操作的数量。例如,可包括被明确建模的所有操作,无论其可视性、所有者作用域以及抽象程度。然而,可能不包括继承操作。
“取得器(getter)”度量720可指示具有以“取得”、“是”、“具有”开头的名称的类的操作数量。“设置器”度量722指示具有以“设置”开头的名称的类的操作数量。连接符度量724指示由类所拥有的连接符的数量。
“NumOps”(操作的数量)度量726类似于NumOps度量718,但是指示的是接口的操作数量而非类的操作数量。“Assoc”(关联)度量728指示了接口关联的元素的数量。“NumAnc”(祖先的数量)度量730类似于NumAnc度量712,但是它指示的是接口的祖先数量而非类的祖先数量。“NumlndClients”(间接客户端的数量)度量732指示了实现接口后代的元素数量,而“NumDirClients”(直接客户端的数量)度量734指示了直接实现接口的元素数量。
“NumOpsCls”(类中操作的数量)度量736指示了包的类中操作的数量,而“NumClsRec”(递归的类的数量)度量738指示了包以及该包的子包中的类的数量。嵌套度量740指示了包层级中包的嵌套级别。NumCls(类的数量)度量742指示了包中类的数量,以及“Numlnterf”(接口的数量)度量744指示了包中接口的数量。
图8至图20分别示出了示例用户接口800至2000,其示出了在软件设计上运行设计质量规则的迭代过程的多个方面。例如,图8示出了示例用户接口800。用户接口800包括正在显示示例违反804-814的违反视图802。违反视图802可以列出当向软件设计应用设计质量规则时发现的零个或多个违反,并且可以显示针对每个所示违反的各种信息。违反804-814可以应用于包括在模型视图816中显示的模型815中的软件设计元素。例如,如分别在列820和822中指示的,违反804是可应用于PackageDiagram包的“强制实行依赖关系反转”违反(例如,PackageDiagram包的内容可以显示在模型视图816中)。如分别在列824、826和828中所示,违反804与“高直接耦合”,其会影响非功能的可扩展性属性,并且是中等优先级。
违反806、808和810中的每个也是“强制实行依赖关系反转”违反,其可分别应用于类830、832和834。违反812是可应用于类836的过度耦合违反,其会影响非功能的可维护性和可模块性属性,以及是中等优先级。违反814是“类之间的过度远程调用”违反,并且可应用于AccountCollaboration交互顺序图(未示出)。违反814影响性能并且是严重优先级违反。
图9示出了用户接口900,其包括统计视图902和重构建议视图904。用户可以展开使用树控制906的一个或多个设计元素表示,以显示度量908的相关联集。度量908包括针对“DebitCardAccount”类的信息。例如,除其他统计之外,度量908指示DebitCardAccout类位于继承树中的第二级深度,并且其具有一个祖先、一个继承的操作和三个继承的属性。
例如,如果用户指示他们期望看到针对违反(例如,针对上文参考图8描述的违反804-814中的一个)的重构建议,则可以显示重构建议视图904。例如,关于过度远程调用违反的细节910包括设计者的考虑以及重构提示。重构建议视图904还可以包括一个或多个重构示例,诸如,示例912中示出的“之前和之后”顺序图示例。
图10示出了用于建模软件的用户接口1000。用户接口1000例如可以用于使用UML设计元素(例如,类、接口、包和各种类型的图)对软件设计进行建模。例如,用户接口1000包括示出了UML静态结构模型1003的模型视图1002。例如,模型视图1002示出了类(诸如类1004和1006),以及类之间的关系(诸如类1004与类1006之间的概括关系1008)。
设计违反视图可以与用户接口1000集成。例如,可以在建模应用的其他标签1012之中选择违反视图标签1010,以显示违反视图1013。违反视图1013可以与上文参考图8描述的违反视图802类似,并且可以用于显示在模型1003上运行设计质量规则之后发现的违反。例如,用户可以通过从菜单1016选择“检验设计”菜单项1014来在模型1003上运行设计质量规则(用户可以通过其他方式发起设计质量规则的运行,诸如通过使用热键序列、工具条按钮、命令按钮、下拉菜单或通过某些其他用户输入动作)。同样,设计质量规则可以使用批处理或其他后台处理而在设计上运行,该批处理或其他后台处理不需要用户输入。
图11示出了包括违反视图1102的用户接口1100,该违反视图1102显示在模型视图1104中显示的模型1103上运行设计质量规则之后发现的违反。违反视图1102包括可应用于类1108的非面向接口编程违反1106。违反1106例如指示了类1108较之于实现类具有较少接口。违反视图1102指示了违反1106是中等优先级违反,该违反1106可以影响可维护性和可模块性非功能属性。用户可以例如通过选择违反1106和选择控件(诸如菜单控件1110)来对违反1106了解得更多。
响应于对菜单控制1110的选择,可以显示诸如图12中所示用户接口1200的用户接口。用户接口1200包括帮助视图1202,该帮助视图1202包括关于非面向接口编程违反1206的帮助描述1204。帮助视图1202可以包括一个或多个到外部资源(例如,外部web站点)的链接1208,该外部资源可能包括关于违反1206的进一步信息。用户可以例如通过选择违反1206和选择控件(诸如菜单控件1210)来查看关于违反1206的重构建议。
响应于对菜单控制1210的选择,可以显示诸如图13中所示用户接口1300的用户接口。用户接口1300包括重构建议视图1302,该重构建议视图1302包括重构讨论1304以及包括已重构组件1308的示例,该已重构组件1308是组件1310的重构版本,用于纠正非面向接口编程的违反。用户可以使用该重构建议来解决非面向接口编程违反1306。在重构之后,用户可以诸如通过选择菜单控件1312在设计上重新运行设计质量规则。
图14示出了用户接口1400,该用户接口1400示出了模型视图1404中的重构模型1402以及违反视图1406,该违反视图1406包括在已重构模型1402上运行设计质量规则之后发现的新的过度耦合违反1408。已重构模型1402包括分别表示帐户、logger(记录器)和客户概念的接口1410、1412和1414,引入这些接口用于解决先前讨论的非面向接口编程违反。过度耦合违反1408应用于控制器类1416,并且过度耦合违反1408是由于依赖于类1416的类的数量超过阈值而产生的。违反1408是中等优先级违反,并且可以影响可维护性和可模块性非功能属性。用户可以例如通过选择违反1408和选择控件(诸如菜单控件1418)来对违反1408了解得更多。
响应于对菜单控件1418的选择,可以显示诸如图15中所示用户接口1500的用户接口。用户接口1500包括帮助视图1502,该帮助视图1502包括关于过度耦合违反1506的帮助描述1504。用户可以例如通过选择违反1506和选择控件(诸如菜单控件1508)来查看关于违反1506的重构建议。
响应于对菜单控件1508的选择,可以显示诸如图16中所示用户接口1600的用户接口。用户接口1600包括重构建议视图1602,该重构建议视图1602包括重构讨论1604。用户可以使用该重构建议来解决过度耦合违反1606。例如,如重构讨论1604中所提到的,为了解决过度耦合的问题,设计者可以尝试重设计类或包,并且减少与该类耦合的类的数量。例如,设计者可以选择重设计控件1608以返回到建模视图(例如,上文参考图14描述的建模视图1404)来重设计该模型1402。又例如,如果例如设计者认为具有针对类的高度耦合没有问题并且尽管存在大量的依赖关系但类仍然可理解和易于维护,则设计者可以忽略过度耦合违反。设计者例如可以通过在文本录入控件1610中输入忽略的理由并且选择忽略控件1612来忽略违反。可能要求设计者录入理由以忽略违反。
除了在类、接口和包上运行规则,设计质量规则还可以运行在其他设计元素上,诸如顺序图。例如,图17示出了用户接口1700,其包括模型视图1702。该模型视图1702包括对customer包1706的类与account包1708的类之间的交互进行建模的顺序图1704。用户可以例如通过选择菜单控件1710来在顺序图1704上运行设计质量规则。可以显示违反了设计质量规则的违反,诸如过度远程调用违反1712。该过度远程调用违反1712可以是由于顺序图1704中的远程调用数量超过阈值而产生的。该过度远程调用违反1712是严重违反,并且可以对正在设计的应用性能产生显著影响。用户可以例如通过选择违反1712和选择控件(诸如菜单控件1714)来对违反1712了解得更多。
响应于对菜单控件1714的选择,可以显示诸如图18中所示用户接口1800的用户接口。用户接口1800包括帮助视图1802,该帮助视图1802包括关于过度远程调用违反1806的帮助描述1804。帮助视图1802可以包括一个或多个到外部资源(例如,外部web站点)的链接1808,该外部资源可以包括关于违反1806的进一步信息。用户可以例如通过选择违反1806和选择控件(诸如菜单控件1810)来查看关于违反1806的重构建议。
响应于对菜单控件1810的选择,可以显示诸如图19中所示用户接口1900的用户接口。用户接口1900包括重构建议视图1902,该重构建议视图1902包括重构讨论1904。用户可以使用该重构建议来解决过度远程调用违反1906,诸如通过参考“之前和之后”顺序图示例1908。
设计可以由除该设计者之外的利害关系者来审核。例如,设计审核可以例如由一个或多个主题专家、一个或多个设计者、一个或多个开发者或者一个或多个其他项目利害关系者来参与。用户可以通过选择控件(诸如菜单控件1910)来生成设计审核文档。响应于选择菜单控件1910,可以显示诸如图20中所示的用户接口2000的用户接口。该用户接口2000显示示例设计审核文档2002,该示例设计审核文档2002包括评价问题2004。该评价问题2004可以基于模型中的违反,并且可以用作例如针对设计审核的基础。还可以生成违反的XML(可扩展标记语言)报告(未示出)。
图21示出了用于评价软件的过程2100。过程2100的操作被描述为由设计者2101a、设计审核者2101b、设计工具2101c、开发者2101d和代码审核者2101e来执行。描述为由设计工具2101c执行的过程2100的操作可以例如由系统100的组件中的一个(例如,模型处理器102)来执行,或者可以由系统100的组件的组合来执行。在某些实施方式中,过程2100的某些操作或所有操作可以由包括在一个或多个电子设备中的一个或多个处理器来执行。
设计者2101a创建一个或多个注解(2102),并且创建设计(2104)。例如,设计者2101a可以使用建模应用来创建软件设计,并且可以创建软件设计元素,诸如类、接口、包、顺序图和交互图。设计者2101a可以创建一个或多个注解,该注解使用建模应用来描述一个或多个设计元素。
使用设计工具2101c来配置规则和排除列表(2106)。例如,设计者2101a可以使用设计工具2101c的接口来创建一个或多个自定义规则,或者向一个或多个排除列表添加一个或多个预定规则或者一个或多个软件设计元素。
使用设计工具2101c来分析局部设计(2108)。例如,设计者2101a可以使用设计工具2101c的接口来在设计上运行设计质量规则。可以通过设计工具2101c的接口向设计者2101a报告违反。
设计者2101a纠正设计(2110)。例如,设计者2101a可以基于由设计工具2101c显示的重构建议、使用建模应用来纠正设计。
设计者2101a完成最初设计,并且提交该最初设计以供审核(2112)。例如,可以向设计审核者2101b提交该最初设计以供审核。在向设计审核者2101b提交设计之前,设计者2101a可以例如使用设计工具2101c来生成未解决的违反报告(2114)。
设计审核者2101b审核该未解决的违反报告(2116),并且可以审核其他设计文档,诸如一个或多个建模图。除了检查特定违反,设计审核者还可以考虑设计质量复合指标。设计质量复合指标在下文中更详细地进行讨论。
如果设计审核者2101b确定该设计不可接受(2118),则设计者2101a纠正设计(2120)并且分析该完成的经纠正设计(2121)。例如,设计者2101a可以使用设计工具2101c的接口来在设计上运行设计质量规则。可以通过设计工具2101c的接口向设计者2101a报告违反。
如果设计审核者2101b确定该设计可接受(2118),则生成审核校验表(2122)。例如,审核校验表可以包括诸如上文参考图20描述的评价问题2004之类的评价性问题,并且可以由设计工具2101c生成。开发者2101d通过考虑生成的设计审核校验表(2124)建立系统(例如,基于该设计编写代码)。代码审核者2101e根据代码审核指南开始审核代码(2126)。
在某些情况下,可以对实施了逆向工程的设计进行评价。例如,可以使用设计工具2101c对代码实施设计逆向工程来得到设计(2130)。例如,可以对实施了逆向工程的设计进行评价,用于确定是否检测到实施了逆向工程中的违反,或者用于确定原始设计与基于所实现代码的实施了逆向工程的设计之间是否存在不一致(例如,以确定开发者2101d是否建立了如所设计的系统)。
对实施了逆向工程的设计进行分析(2132)。例如,设计者2101a或开发者2101d可以使用设计工具2101c的接口来在设计上运行设计质量规则。分析实施了逆向工程的设计可以包括:将该实施了逆向工程的设计与原始设计(例如,在步骤2121中分析的设计)进行比较,用于确定将该实施了逆向工程的设计是否与该原始设计不同。如上文参考图2所述,可以使用不同的方法来确定该实施了逆向工程的设计是否与该原始设计不同。例如,可以将与该实施了逆向工程的设计相关联的UML图同与该原始设计相关联的UML图进行比较;可以将与该实施了逆向工程的设计相关联的结构化度量同与该原始设计相关联的结构化度量进行比较;或者可以将从在该实施了逆向工程的设计上运行设计质量规则获得的违反同从在该原始设计上运行设计质量规则获得的违反进行比较。
在某些实现中,可以通过由设计工具2101c生成的用户接口报告违反。又例如,可以生成违反报告(2134)。代码审核者2101e可以审核违反(2136)。如果违反可接受(2138),则过程2100结束(2140)。如果违反不可接受(2138),则开发者2101d做出实现改动(2142),并且可以从更新的代码中获取更新的设计(2130)。分析更新的设计(2132);生成违反报告(2134);以及审核违反(2136)。类似的过程可以重复,直到代码审核者2101e确定违反报告可接受(2138)。
图22示出了用于计算设计质量指标的过程2200。过程2200的操作总体上描述为由系统100执行。过程2200的操作可以由系统100的组件中的一个(例如,模型处理器102)来执行,或者可以由系统100的组件的组合来执行。在某些实现中,过程2200的操作可以由包括在一个或多个电子设备中的一个或多个处理器来执行。
系统100访问软件应用的设计(2210)。例如,参考图1,模型处理器102可以访问UML设计库104中的设计。
系统100访问与至少一个设计质量属性相关联的设计质量规则(2220)。例如,参考图1,规则引擎122可以访问设计质量规则库124中的设计质量规则,其中经访问的设计质量规则被定义以用于根据一个或多个设计质量属性来评价软件应用设计的质量。规则引擎122例如可以访问存储在设计质量规则库124中的所有设计质量规则,或者规则引擎可以访问存储在设计质量规则库124中的规则子集。规则引擎122可以识别分类为与一个或多个经访问设计质量属性有关的设计质量规则的子集。设计质量规则例如可以与性能设计质量属性、安全设计质量属性、僵化度设计质量属性或其他类型的设计质量属性有关。
系统100向访问的软件应用的设计应用所访问的设计质量规则以检测违反(2230)。例如,可以如以上关于图4所述的那样向所访问的设计应用所访问的设计质量规则。在图4的过程400中,对设计质量规则、应用该设计质量规则的设计元素的类型以及所识别的类型的设计元素进行识别。如果该设计元素不在该设计质量规则排除列表内,并且如果该规则尚未应用于该设计元素,则向该设计元素应用该设计质量规则。如果确定违反了该设计质量规则,则将该违反向违反列表添加。向任何其余的可用设计元素应用该设计质量规则。对于其他设计质量规则进行类似的处理,直至应用了所有的设计质量规则。
系统100累积检测的违反(2240)。例如,检测的违反可以存储于违反列表中。系统100可以累积通过应用识别的设计质量规则而检测的所有违反。作为另一示例,系统100可以识别所检测的属于一个或多个设计质量规则属性的违反,并且可以仅仅累积所识别的涉及一个或多个设计质量规则属性的违反。针对一个或多个设计质量规则,系统100可以跨所访问的软件应用的设计中包括的每个类别而聚合所检测的违反;并且针对一个或多个设计质量规则,系统100可以使用针对所访问的软件应用的设计中包括的每个类别而聚合的违反来跨该软件应用的设计累积所检测的违反。系统100可以对涉及一个或多个设计质量规则属性的所检测的违反进行计数。
系统100基于所累积的违反,计算针对软件应用设计的设计质量指标(2250)。为了限定设计质量指标,下面引入多个符号。软件系统可以由设计条目Ent的集合来代表。每个设计条目d∈Ent具有类型。所有的这种设计条目类型的集合可以由Γ来代表,并且个体类型可以由τ∈Γ来代表。在一些实现中,Γ={class(类),interface(接口),method(方法),package(封装)}。另外,τd可以表示设计元素的类型d。设计质量规则集合作为一个整体由R来代表,并且个体设计质量规则由r来代表。设计质量规则r可以应用于一个并且仅一个设计实体类型τ。设计质量规则的子集可被限定为可应用于设计类型τ的设计质量规则的子集。而且,τr可被限定为表示可应用于r的设计类型。不同的设计质量规则可应用于不同的设计质量属性,诸如可维护性、可扩展性、性能、安全、僵化度等等。令QA为设计质量属性的集合,并且QARules(q)为影响属性q的设计质量规则的集合。
设计质量规则r对设计缺陷进行建模。当在设计实体d中存在由r建模的设计缺陷时,可以确定r(d)=true。可以假设设计质量规则精确地对设计缺陷建模。设计质量规则r可以与用户限定的重要性因子α相关联,并且因此,αr可以表示与设计质量规则r相关联的重要性因子。
使用上面限定的符号,τd(R)可被限定为可能存在于设计实体d(设计实体d实际上可能没有设计缺陷)中找到的所有可能设计缺陷的集合。可以限定设计质量规则Vio(d),使得Vioq(d)={r|r∈τd(R)并且r∈QARules(q)并且r(d)=true},这表示:在针对涉及设计质量属性的集合的设计违反而检查实体d之后,可应用于设计实体d的设计质量规则的集合。设计质量指标DQI(d)可以限定为
其中DQI等于0是最差质量的情况,并且DQI等于1是最好质量的情况(意味着没有违反)。在DQIq(d)被限定为相对于质量属性q的、设计元素d的设计质量指标的情况下,整体系统的设计质量指标可被限定为
其中较高的DQI指示较高的质量,而较低的DQI指示较低的质量。使用在贯穿本公开中描述的任何技术,可以将设计质量指标用于评估软件设计质量。
系统100基于计算的设计质量指标,提供与软件应用设计的设计质量有关的输出(2260)。例如,可以在诸如用户界面和/或打印的报告上,将所计算的设计质量指标显示给用户。
图23示出了用于计算设计质量指标的过程2300。过程2300的操作总体上被描述为由系统100来执行。过程2300的操作可以由系统100的一个或多个部件(例如,模型处理器102)来执行或者可以由系统100的部件的组合来执行。在一些实现中,处理2300的操作可以由包括在一个或多个电子设备中的一个或多个处理器来执行。
系统100访问软件应用的设计(2310)。例如,参考图1,模型处理器102可以从UML设计库104访问设计。
系统100访问与多个不同设计质量属性有关的设计质量规则(2320)。例如,参考图1,规则引擎122可以从设计质量规则库124访问设计质量规则。规则引擎122可以访问例如涉及由系统100评价的所有设计质量属性的设计质量规则,或者作为另一示例,规则引擎122可以访问涉及性能设计质量属性、安全性设计质量属性以及僵化度设计质量属性的设计质量规则。
系统100向所访问的软件应用的设计应用所访问的设计质量规则以检测违反(2330)。例如,可以如上文关于图4所述的那样向所访问的设计应用所访问的设计质量规则。
系统100针对每个设计质量属性,累积所检测的与相应设计质量属性有关的违反(2340)。可以使用一个或多个违反列表来累积违反。作为示例并如图24所示,可以使用性能违反列表2402来累积针对性能设计质量属性的性能违反,可以使用安全性违反列表2404来累积针对安全性设计质量属性的安全性违反,并且使用僵化度违反列表2406来累积针对僵化度设计质量属性的僵化度违反。
系统100针对每个设计质量属性并基于针对相应设计质量属性累积的违反,计算在相应的设计质量属性方面反映软件设计质量的度量(2350)。例如,在图24的示例中,可以针对性能设计质量属性而计算性能度量2408,可以针对安全性设计质量属性而计算安全性度量2410,并且可以针对僵化度设计量属性而计算僵化度度量2412。性能度量2408可以基于包括在性能违反列表2402中的违反而被计算,并且可以从性能方面反映软件设计质量。安全性度量2410可以基于包括在安全性违反列表2404中的违反而被计算,并且可以从安全性方面反映软件设计质量。僵化度度量2412可以基于包括在僵化度违反列表2406中的违反而被计算,并且可以从所访问的软件应用设计易于改变的程度方面反映软件设计质量。下文将参照图25更具体地描述计算僵化度度量2412。
返回图23,系统100基于针对每个设计质量属性计算的度量,计算设计质量复合指标(2360)。例如,在图24的示例中,可以计算设计质量符合指标2414。设计质量符合指标2414可以通过对性能值、安全性值以及僵化度值求和来计算。可以通过将性能度量2408与所访问的性能加权因子2416相乘来确定性能值。可以通过将安全性度量2410与所访问的安全性加权因子2418相乘来确定安全性值。可以通过将僵化度度量2412与僵化度加权因子2420相乘来确定僵化度值。
图25示出了用于计算僵化度度量的过程2500。处理器2500的操作总体上被描述为由系统100来执行。过程2500的操作可以由系统100的其中一个部件(例如模型处理器102)来执行或者可以由系统100的部件组合来执行。在一些实施中,过程2500的操作可以由在一个或多个电子设备中包括的一个或多个处理器来执行。
设计审核者可以考虑软件应用设计的僵化度。通常,设计质量规则对特定设计缺陷进行建模,而设计缺陷转而负面影响软件质量。上述若干设计缺陷负面影响软件的可扩展性和可修改性。换言之,如果软件系统中存在这种设计缺陷,则该缺陷可能使软件系统变得不容易扩展且不容易修改。随着软件系统变得不容易扩展且不容易修改,其可能变得更加僵化。一个僵化的系统即使在正确地执行功能时也难于在进行维护时被修改和改变。可以尝试将设计缺陷如何影响系统的僵化度进行量化。
当过程2500开始时,系统100访问软件应用的设计(2510)。例如,参考图1,模型处理器102可以从UML设计库104访问设计。
系统100可以访问与可扩展性和可修改性有关的设计质量规则(2520)。例如,参考图1,规则引擎122可以从设计质量规则库124访问与可扩展性和可修改性有关的设计质量规则。例如,参考图6,可以访问过度继承设计质量规则604、高耦合、高继承以及高依赖关系输出质量规则608、神圣的继承设计质量规则614、PIF设计质量规则616、面向契约设计原理的违反设计质量规则620和开闭原理的违反设计质量规则626。
系统100向所访问的软件应用的设计应用访问的设计质量规则以检测违反(2530)。例如,如以上针对图4描述的,可以向所访问的设计应用访问的设计质量规则。
系统100累积所检测的与可扩展性和可修改性有关的违反(2540)。可以使用一个或多个违反列表来累积违反。例如,如图26所示,可以使用可扩展性违反列表2602来累积与软件应用设计的可扩展性有关的违反,并且可以使用可修改性违反列表2604来累积与软件应用设计的可修改性有关的违反。
系统100基于累积的违反来计算针对软件应用设计的僵化度度量(2550)。例如,在图26的示例中,可以计算僵化度度量2606。僵化度度量2606指示系统对于在系统设计期间由设计重构引起的设计改变或者作为改变请求结果的代码改变的抵抗有多强烈。僵化度度量2606可以基于可扩展性度量2608和可修改性度量2610来计算。可扩展性度量2608可以基于可扩展性违反列表2602中累积的违反来计算,而可修改性度量2610可以基于可修改性违反列表2604中累积的违反来计算。可以访问可扩展性加权因子2612和可修改性加权因子2614。可以将可扩展性度量2608乘以可扩展性加权因子2612以确定可扩展性值,并且可以将可扩展性度量2610乘以可扩展性加权因子2614以确定可修改性值。可以将可扩展性值与可修改性值相加以确定僵化度度量2606。
又例如,僵化度度量2606可以使用以下公式进行计算。
Ω(d)=eλ·(1-DQIq(d))
其中,DQIq是特定于设计质量属性q的DQI,λ是可随设计实体类型(例如,类,包)而变化的用户定义的参数。
图27示出了用于基于计算的僵化度度量来更新估计值的过程2700。过程2700的操作整体上被描述为由系统100执行。过程2700的操作可以由系统100的部件之一(例如,模型处理器102)执行,或者可以由系统100的部件组合来执行。在一些实现中,过程2700的操作可以由包括在一个或多个电子设备中的一个或多个处理器执行。
系统100确定改变软件应用设计所需的工作量估计值(2710)。例如,包d可能需要修改。设计者可以基于改变请求的特点来估计工作量effort(d)。估计effort(d)可能未将可由包d的僵化度引起的附加复杂度纳入考虑。
系统100计算针对软件应用设计的僵化度度量(2720)。例如,僵化度度量可以如上文针对图25描述的那样进行计算。
系统100基于计算的僵化度度量来增加工作量估计值(2730)。通常,僵化度信息可以用来考虑对可维护性的影响。修改的估计可以计算为
effort’(d)=effort(d)Ω(d)
其中Ω(d)是计算的僵化度度量。
当包d完全可塑时(例如,Ω(d)=1),修改的估计effort’(d)的值等于初始估计effort(d)。然而,在包d不能完全可塑的其他情况下,可以利用归因于僵化度的eλ·(1-DQIq(d))的因子来增加估计的工作量effort(d)。
又例如,图28示出了工作量估计的改变。例如,可以通过将针对设计改变的初始估计工作量2804乘以僵化度度量2806来计算针对设计改变的经调整工作量2802。
返回图27,系统100基于增加的工作量估计值来提供与改变软件应用设计有关的输出(2740)。例如,在图28的示例中,可以提供输出2808,其中输出2808包括完成设计改变所需的估计时间2810和完成设计改变所需的估计成本2812。
僵化度度量还可以用来估计维护软件应用的工作量。例如,如图29所示,可以通过将初始估计的维护工作量2904乘以僵化度度量2906来计算调整的维护工作量2902。可以基于调整的维护工作量2902来计算将来维护的预期成本2908。可以生成针对将来软件维护的预算报告2910,并且该预算报告2910可以包括将来维护的预期成本2908与将来维护的预算2912的对比。
图30示出了基于僵化度来估计实现改变请求所需的工作量。可以接收改变请求3002。改变请求3002可以例如是描述针对系统请求的改变(诸如,针对添加、改变或移除功能的请求)的文档。作为影响分析和估计过程3004的一部分,可以分析(3006)改变请求3002,并且可以分析(3008)系统的应用代码以识别受影响组件的集合3010。
改变请求3002可以由人工进行分析,或者由自动过程(例如,文字处理或文字识别过程)进行分析,或者由一个或多个人工或自动过程的组合进行分析,以便识别需要改变以实现改变请求3002的代码组件。改变请求3002可以包括一个或多个请求的改变。针对每个所请求的改变,可以识别一个或多个改变类型。例如,改变可以是或者可以涉及用户接口改变、业务逻辑改变、数据库相关改变,或者预配置对象的定制,这些仅是示例。
受影响组件的集合3010可以包括主要组件,其可以进行改变以实现改变请求3002;和辅助组件,其也可能由于对一个或多个主要组件的依赖而发生改变。针对每个受影响组件3010,可以确定影响严重性的估计(3012)。影响严重性估计可以包括容量估计和复杂度估计。例如,容量可以定义为要改变的代码的单位。在一个示例中,如果改变请求导致了业务逻辑的改变,则可以将容量估计指定为要改变的代码方法的数目。又例如,如果改变请求涉及用户接口改变,可以将受影响的用户接口元素的数目和用户接口的数目包括在容量估计中。容量估计还可以包括测试工作量(例如,测试改变的主要组件和系统其他部分的回归测试)的估计。复杂度估计可以对应于实现改变所需的估计工作量。例如,复杂度可以估计为“高”、“中”或“低”之一。
针对每个受影响组件,基于影响严重性的估计来计算(3014)工作量估计。工作量估计可以是例如改变受影响组件以满足改变请求3002所需的估计的人工小时数。工作量估计可以将受影响组件的僵化度纳入考虑。例如,可以通过考虑受影响组件的影响复杂度和僵化度来修改(3016)估计工作量。可以通过针对所有受影响组件3010合并(例如,相加)经修改的工作量来计算(3017)实现改变请求3002的最终估计。
例如,可以针对设计质量评价应用代码(3018),并且针对每个受影响组件3010,可以计算僵化度度量(3020)。例如,可以如上针对图25所述的那样来计算僵化度度量。还如上所述,针对组件d可以将僵化度度量计算为
Ω(d)=eλ·(1-DQIq(d))
其中,DQIq是特定于设计质量属性q的DQI,λ是可随设计实体类型(例如,类,包)而变化的用户定义的参数。设计质量属性q可以是例如可修改性和/或可扩展性。替代基于设计实体类型来改变λ或者与之结合,λ可以与针对受影响组件的复杂度估计相对应地变化。例如,λ可以基于复杂度估计是“高”、“中”还是“低”进行变化。例如,如果复杂度估计针对受影响组件是“低”,则λ可以设置为0,这可以使得Ω(d)的值为1。如上所述,针对组件d的经修改的effort’d(d)可以计算为
effort’(d)=effort(d)Ω(d)
并且,如果Ω(d)的值为1,则经修改的effort’(d)可以等于原始估计的值。
又例如,如果受影响组件的复杂度估计是“高”,则λ可以设置为1,这意味着Ω(d)的值可以在从1到2.718的范围内,取决于DQI(d)。换言之,经修改的工作量effort’(d)可以是原始工作量估计的1倍到约3倍,这基于组件d的僵化度程度。
图31是通用计算机系统3100示例的示意图。系统3100可以用于根据一个实现结合过程200、300、400、2100、2200、2300、2500和2700描述的操作。例如,系统3100可以包括在系统100中。
系统3100包括处理器3110、存储器3120、存储设备3130和输入/输出设备3140。组件3110、3120、3130和3140中的每一个使用系统总线3150互连。处理器3110能够处理供在系统3100内执行的指令。在一个实现中,处理器3110是单线程处理器。在另一实现中,处理器3110是多线程处理器。处理器3110能够处理存储在存储器3120中的或者存储在存储设备3130上的指令,以针对输入/输出设备3140上的用户接口显示图形信息,该输入/输出设备3140可以包括显示器。
存储器3120存储系统3100内的信息。在一个实现中,存储器3120是计算机可读介质。在一个实现中,存储器3120是易失性存储器单元。在另一实现中,存储器3120是非易失性存储器单元。
存储设备3130能够为系统3100提供海量存储。在一个实现中,存储设备3130是计算机可读介质。在各种不同实现中,存储设备3130可以是软盘设备、硬盘设备、光盘设备或磁带设备。
输入/输出设备3140为系统3100提供输入/输出操作。在一个实现中,输入/输出设备3140包括键盘和/或指点设备。在另一实现中,输入/输出设备3140包括用于显示图形用户接口的显示单元。
所描述的特征可以在数字电子电路中实现,或者在计算机软件、固件或硬件中实现,或在它们的组合中实现。装置可以实现为计算机程序产品实现,其被有形地包含在信息载体(例如,计算机可读存储设备)上以便由可编程处理器执行;并且方法步骤可以由可编程处理器执行,该可编程处理器执行指令程序以便通过在输入数据上进行操作以及生成输出来执行所描述实现的功能。所描述的特征可以在一个或多个计算机程序中实现,这些程序可在包括至少一个可编程处理器的可编程系统上执行,该可编程处理器耦合以在数据存储系统、至少一个输入设备和至少一个输出设备之间收发数据和指令。计算机程序可以由任意形式的编程语言编写,包括编译语言或解释语言,并且该计算机程序可以任意形式部署,包括部署为单独的程序或模块、组件、子例程,或者适于在计算环境中使用的其他单元。
适于执行指令程序的处理器例如包括通用和专用微处理器两者、以及任意类型的计算机的任意一个或多个处理器。通常,处理器将从只读存储器或随机访问存储器或两者处接收指令和数据。计算机的元件可以包括用于执行指令的处理器以及用于存储指令和数据的一个或多个存储器。通常,计算机还将包括用于存储数据文件的一个或多个存储设备,或可操作地与之耦合;这种设备包括磁盘,诸如内部硬盘和可移除盘;磁光盘;和光盘。适于有形地包括计算机程序指令和数据的存储设备包括所有形式的非易失性存储器,例如包括:半导体存储设备,如EPROM、EEPROM和闪存设备;磁盘,如内部硬盘或可移动硬盘;磁光盘;以及CD-ROM和DVD-ROM盘。处理器和存储器可以由ASIC(专用集成电路)补充或是包括在ASIC中。
为了提供与用户的交互,特征可以在具有用于向用户显示信息的显示设备以及用户可以通过其向计算机提供输入的键盘和指点设备的计算机上实现,其中显示设备例如CRT(阴极射线管)或者LCD(液晶显示器)监视器,指点设备例如鼠标或者轨迹球。
特征可以实现在包括后端组件的计算机系统中,例如数据服务器;或实现在包括中间件组件的计算机系统中,例如应用服务器或因特网服务器;或实现在包括前端组件的计算机系统中,例如具有图形用户界面或者互联网浏览器的客户端计算机。系统组件可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括例如LAN,WAN和形成因特网的计算机和网络。
计算机系统可以包括客户端和服务器。客户端和服务器一般相互远离,并且通常通过网络(诸如,描述的网络)进行交互。客户端和服务器的关系是借助于在各自计算机上运行的、彼此具有客户端-服务器关系的计算机程序得到的。
描述了多种实现。但是,应当理解,可以在不脱离所公开精神和范围的前提下做出各种修改。因此,其他实现也落入所附权利要求的范围内。
Claims (33)
1.一种用于评价和强制实行软件设计质量的系统,包括:
用于访问软件应用的设计的装置;
用于访问与至少一个设计质量属性相关联的设计质量规则的装置,所访问设计质量规则被限定用于从所述至少一个设计质量属性的方面来评价软件应用的设计的质量,用于访问与至少一个设计质量属性相关联的设计质量规则的所述装置包括用于访问涉及僵化度设计质量属性的设计质量规则的装置;
用于向所访问的所述软件应用的设计应用所述所访问设计质量规则以检测对所述所访问设计质量规则的违反的装置;
用于针对所述至少一个设计质量属性而累积通过向所访问的所述软件应用的设计应用所述所访问设计质量规则而检测的违反的装置,用于针对所述至少一个设计质量属性而累积通过向所访问的所述软件应用的设计应用所述所访问设计质量规则而检测的所述违反的所述装置包括用于针对所述僵化度设计质量属性而累积涉及所述僵化度设计质量属性的已检测违反的装置;
用于基于所累积的违反计算针对所访问的所述软件应用的设计的设计质量指标的装置,用于基于所累积的违反计算针对所访问的所述软件应用的设计的设计质量指标的所述装置包括用于基于涉及所述僵化度设计质量属性的已累积违反来计算所访问的所述软件应用的设计的僵化度度量的装置,所述僵化度度量从所访问的所述软件应用的设计的改变的灵活程度方面反映软件设计质量;
用于基于所计算的设计质量指标,提供与所述软件应用的设计质量相关的输出的装置;以及
用于确定与所访问的所述软件应用的设计相关联的、与所计算的所述僵化度度量有关的工作量估计值的装置,其中用于确定与所访问的所述软件应用的设计相关联的、与所计算的所述僵化度度量有关的工作量估计值的装置包括:
用于确定针对所访问的所述软件应用的设计的改变的工作量估计值的装置;
用于基于所计算的所述僵化度度量而增加所确定的所述工作量估计值的装置;以及
用于基于增加的工作量估计值而提供与所访问的所述软件应用的设计的所述改变相关的输出的装置。
2.根据权利要求1所述的系统,
其中用于访问与至少一个设计质量属性相关联的设计质量规则的装置包括:用于识别被分类为涉及所述至少一个设计质量属性的设计质量规则的子集的装置;
其中用于向所访问的所述软件应用的设计应用所述所访问设计质量规则以检测对所述所访问设计质量规则的违反的装置包括:用于向所访问的所述软件应用的设计应用所识别的设计质量规则,以检测对所述所识别的设计质量规则的违反的装置;以及
其中用于针对所述至少一个设计质量属性而累积通过向所访问的所述软件应用的设计应用所述所访问设计质量规则而检测的违反的装置包括:用于累积通过向所访问的所述软件应用的设计应用所述所识别的设计质量规则而检测的所有违反的装置。
3.根据权利要求1所述的系统:
其中用于访问与至少一个设计质量属性相关联的设计质量规则的装置包括:用于访问被限定用于评价软件应用的设计质量的所有设计质量规则的装置;以及
其中用于针对所述至少一个设计质量属性而累积通过向所访问的所述软件应用的设计应用所述所访问设计质量规则而检测的违反的装置包括:
用于识别涉及所述至少一个设计质量属性的所检测违反的装置;以及
用于累积涉及所述至少一个设计质量属性的所识别的违反的装置。
4.根据权利要求1所述的系统,其中用于针对所述至少一个设计质量属性而累积通过向所访问的所述软件应用的设计应用所述所访问设计质量规则而检测的违反的装置包括:
用于针对所述至少一个设计质量属性跨所访问的所述软件应用的设计中包括的每个类而聚集所检测的违反的装置;以及
用于针对所述至少一个设计质量属性使用针对所访问的所述软件应用的设计中包括的每个类的聚集违反,跨所述软件应用的设计来累积所检测的违反的装置。
5.根据权利要求1所述的系统,其中用于针对所述至少一个设计质量属性而累积通过向所访问的所述软件应用的设计应用所述所访问设计质量规则而检测的违反的装置包括:用于对涉及所述至少一个设计质量属性的所检测违反进行计数的装置。
6.根据权利要求1所述的系统,
其中用于访问与至少一个设计质量属性相关联的设计质量规则的装置包括用于访问涉及多个不同设计质量属性的设计质量规则的装置;
其中用于针对所述至少一个设计质量属性而累积通过向所访问的所述软件应用的设计应用所述所访问设计质量规则而检测的违反的装置包括:用于针对所述多个不同设计质量属性的每一个而累积涉及相应设计质量属性的所检测违反的装置;以及
其中用于基于所累积的违反计算针对所访问的所述软件应用的设计的设计质量指标的装置包括:
用于针对所述多个不同设计质量属性的每一个并且基于针对相应的设计质量属性而累积的违反计算从所述相应的设计质量属性方面反映软件设计质量的度量的装置;以及
用于基于针对所述多个不同设计质量属性中每一个而计算的所述度量而计算设计质量复合指标的装置。
7.根据权利要求6所述的系统,其中用于访问涉及多个不同设计质量属性的设计质量规则的装置包括用于访问涉及所述系统所评价的所有设计质量属性的设计质量规则的装置。
8.根据权利要求6所述的系统:
其中用于访问涉及多个不同设计质量属性的设计质量规则的装置包括:用于访问涉及性能设计质量属性、安全设计质量属性以及所述僵化度设计质量属性的设计质量规则的装置;
其中用于针对所述多个不同设计质量属性的每一个而累积涉及相应设计质量属性的所检测违反的装置包括:
用于针对所述性能设计质量属性而累积涉及所述性能设计质量属性的已检测违反的装置;
用于针对所述安全设计质量属性而累积涉及所述安全设计质量属性的已检测违反的装置;以及
用于针对所述僵化度设计质量属性而累积涉及所述僵化度设计质量属性的已检测违反的装置;
其中用于针对所述多个不同设计质量属性的每一个并且基于针对相应的设计质量属性而累积的违反计算从所述相应的设计质量属性方面反映软件设计质量的度量的装置包括:
用于针对所述性能设计质量属性并且基于针对所述性能设计质量属性而累积的违反来计算从所述性能设计质量属性方面反映软件设计质量的性能度量的装置;
用于针对所述安全设计质量属性并且基于针对所述安全设计质量属性而累积的违反来计算从安全设计质量属性方面反映软件设计质量的安全度量的装置;以及
用于针对所述僵化度设计质量属性并且基于针对所述僵化度设计质量属性而累积的违反来计算从僵化度设计质量属性方面反映软件设计质量的所述僵化度度量的装置;以及
其中用于基于针对所述多个不同设计质量属性中每一个而计算的所述度量而计算设计质量复合指标的装置包括:用于通过结合所述性能度量、所述安全度量和所述僵化度度量而计算设计质量复合指标的装置。
9.根据权利要求8所述的系统,其中用于通过结合所述性能度量、所述安全度量和所述僵化度度量而计算设计质量复合指标的装置包括:
用于访问性能加权因子、安全加权因子和僵化度加权因子的装置;
用于将所述性能度量与所述性能加权因子相乘以确定性能值的装置;
用于将所述安全度量与所述安全加权因子相乘以确定安全值的装置;
用于将所述僵化度度量与所述僵化度加权因子相乘以确定僵化度值的装置;以及
用于对所述性能值、所述安全值和所述僵化度值求和以确定所述设计质量复合指标的装置。
10.根据权利要求1所述的系统:
其中用于访问与至少一个设计质量属性相关联的设计质量规则的装置包括用于访问涉及性能设计质量属性的设计质量规则的装置;
其中用于针对所述至少一个设计质量属性而累积通过向所访问的所述软件应用的设计应用所述所访问设计质量规则而检测的违反的装置包括:用于针对所述性能设计质量属性而累积涉及所述性能设计质量属性的已检测违反的装置;以及
其中用于基于所累积的违反计算针对所访问的所述软件应用的设计的设计质量指标的装置包括:用于基于涉及所述性能设计质量属性的已累积违反来计算针对所访问的所述软件应用的设计的性能度量的装置,所述性能度量从性能方面反映软件设计质量。
11.根据权利要求1所述的系统:
其中用于访问与至少一个设计质量属性相关联的设计质量规则的装置包括用于访问涉及安全设计质量属性的设计质量规则的装置;
其中用于针对所述至少一个设计质量属性而累积通过向所访问的所述软件应用的设计应用所述所访问设计质量规则而检测的违反的装置包括:用于针对所述安全设计质量属性而累积涉及所述安全设计质量属性的已检测违反的装置;以及
其中用于基于所累积的违反计算针对所访问的所述软件应用的设计的设计质量指标的装置包括:用于基于涉及所述安全设计质量属性的已累积违反来计算针对所访问的所述软件应用的设计的安全度量的装置,所述安全度量从安全方面反映软件设计质量。
12.根据权利要求1所述的系统:
其中用于访问涉及僵化度设计质量属性的设计质量规则的装置包括:用于访问涉及所述软件应用的所述设计的可扩展性的设计质量规则的装置;
其中用于针对所述僵化度设计质量属性而累积涉及所述僵化度设计质量属性的已检测违反的装置包括:用于累积涉及所述软件应用的所述设计的所述可扩展性的已检测违反的装置;以及
其中用于计算所访问的所述软件应用的设计的僵化度度量的装置包括:用于基于涉及所述软件应用的所述设计的所述可扩展性的已累积违反来计算所访问的所述软件应用的设计的僵化度度量的装置。
13.根据权利要求1所述的系统:
其中用于访问涉及僵化度设计质量属性的设计质量规则的装置包括:用于访问涉及所述软件应用的所述设计的可修改性的设计质量规则的装置;
其中用于针对所述僵化度设计质量属性而累积涉及所述僵化度设计质量属性的已检测违反的装置包括:用于累积涉及所述软件应用的所述设计的所述可修改性的已检测违反的装置;以及
其中用于计算所访问的所述软件应用的设计的僵化度度量的装置包括:用于基于涉及所述软件应用的所述设计的所述可修改性的已累积违反来计算所访问的所述软件应用的设计的僵化度度量的装置。
14.根据权利要求1所述的系统:
其中用于访问涉及僵化度设计质量属性的设计质量规则的装置包括:
用于访问涉及所述软件应用的所述设计的可扩展性的设计质量规则的装置;以及
用于访问涉及所述软件应用的所述设计的可修改性的设计质量规则的装置;
其中用于针对所述僵化度设计质量属性而累积涉及所述僵化度设计质量属性的已检测违反的装置包括:
用于累积涉及所述软件应用的所述设计的所述可扩展性的已检测违反的装置;以及
用于累积涉及所述软件应用的所述设计的所述可修改性的已检测违反的装置;以及
其中用于计算所访问的所述软件应用的设计的僵化度度量的装置包括:
用于基于涉及所述软件应用的所述设计的所述可扩展性的已累积违反来计算所访问的所述软件应用的设计的可扩展性度量的装置;
用于基于涉及所述软件应用的所述设计的所述可修改性的已累积违反来计算所访问的所述软件应用的设计的可修改性度量的装置;以及
用于结合所述可扩展性度量和所述可修改性度量的装置。
15.根据权利要求14所述的系统,其中用于结合所述可扩展性度量和所述可修改性度量的装置包括:
用于访问可扩展性加权因子和可修改性加权因子的装置;
用于将所述可扩展性度量与所述可扩展性加权因子相乘以确定可扩展性值的装置;
用于将所述可修改性度量与所述可修改性加权因子相乘以确定可修改性值的装置;以及
用于将所述可扩展性值与所述可修改性值相加以确定所述僵化度度量的装置。
16.一种用于评价和强制实行软件设计质量的方法,包括:
访问软件应用的设计;
访问与至少一个设计质量属性相关联的设计质量规则,所访问设计质量规则被限定用于从所述至少一个设计质量属性的方面来评价软件应用的设计的质量,所述访问与至少一个设计质量属性相关联的设计质量规则包括访问涉及僵化度设计质量属性的设计质量规则;
向所访问的所述软件应用的设计应用所述所访问设计质量规则以检测对所述所访问设计质量规则的违反;
针对所述至少一个设计质量属性而累积通过向所访问的所述软件应用的设计应用所述所访问设计质量规则而检测的违反,所述针对所述至少一个设计质量属性而累积通过向所访问的所述软件应用的设计应用所述所访问设计质量规则而检测的所述违反包括针对所述僵化度设计质量属性而累积涉及所述僵化度设计质量属性的已检测违反;
基于所累积的违反计算针对所述软件应用的设计质量指标,所述基于所累积的违反计算针对所述软件应用的所述设计质量指标包括基于涉及所述僵化度设计质量属性的已累积违反来计算所访问的所述软件应用的设计的僵化度度量,所述僵化度度量从所访问的所述软件应用的设计的改变的灵活程度方面反映软件设计质量;
基于所计算的设计质量指标,提供与所述软件应用的设计质量相关的输出;以及
确定与所访问的所述软件应用的设计相关联的、与所计算的所述僵化度度量有关的工作量估计值,其中确定与所访问的所述软件应用的设计相关联的、与所计算的所述僵化度度量有关的工作量估计值包括:
确定针对所访问的所述软件应用的设计的改变的工作量估计值;
基于所计算的所述僵化度度量而增加所确定的所述工作量估计值;以及
基于增加的工作量估计值而提供与所访问的所述软件应用的设计的所述改变相关的输出。
17.一种用于评价和强制实行软件设计质量的系统,包括:
用于在开发软件应用的代码之前访问所述软件应用的设计的装置;
用于访问被限定用于评价软件应用的设计质量的设计质量规则的装置;
用于向所访问的所述软件应用的设计应用所访问设计质量规则以检测对所述所访问设计质量规则的违反的装置;
用于提供描述对所述所访问设计质量规则的所检测的一个或多个违反的输出的装置;
用于基于所述输出接收用以解决对所述所访问设计质量规则的所述一个或多个违反的用户输入的装置;
用于在接收用以解决对所述所访问设计质量规则的所述一个或多个违反的所述用户输入之后,针对所述所访问设计质量规则的违反而评价为所述软件应用而开发的代码以便基于所述软件应用的所述设计来评估为所述软件应用而开发的所述代码的质量的装置,其中用于针对所述所访问设计质量规则的违反而评价为所述软件应用而开发的代码的装置包括:
用于通过对为所述软件应用而开发的所述代码进行逆向工程来获得恢复的软件设计的装置;
用于向所述恢复的软件设计应用所述所访问设计质量规则以检测所访问设计质量规则的违反的装置;
用于将所述恢复的软件设计与接收用以解决对所述所访问设计质量规则的所述一个或多个违反的所述用户输入之后存储的所述软件应用的设计版本进行比较的装置;
用于基于比较结果来检测所述恢复的软件设计与接收用以解决对所述所访问设计质量规则的所述一个或多个违反的所述用户输入之后存储的所述软件应用的所述设计版本之间的不一致的装置;以及
用于提供描述所述恢复的软件设计与接收用以解决对所述所访问设计质量规则的所述一个或多个违反的所述用户输入之后存储的所述软件应用的所述设计版本之间的一个或多个不一致的输出的装置。
18.根据权利要求17的系统:
其中用于访问被限定用于评价软件应用的设计质量的设计质量规则的装置包括:用于接收限定新设计质量规则的用户输入以便向所访问的所述软件应用的设计应用的装置;以及
其中用于向所访问的所述软件应用的设计应用所访问设计质量规则以检测对所述所访问设计质量规则的违反的装置包括:用于向所访问的所述软件应用的设计应用所述新设计质量规则以检测所访问的所述软件应用的设计是否违反所述新设计质量规则的装置。
19.根据权利要求17所述的系统,其中用于向所访问的所述软件应用的设计应用所访问设计质量规则以检测对所述所访问设计质量规则的违反的装置包括:
用于接收限定对所述所访问设计质量规则的优先次序的用户输入的装置;以及
用于基于所限定的所述所访问设计质量规则的优先次序向所访问的所述软件应用的设计应用所述所访问设计质量规则的装置。
20.根据权利要求17所述的系统,其中用于向所访问的所述软件应用的设计应用所访问设计质量规则以检测对所述所访问设计质量规则的违反的装置包括:
用于接收限定所述所访问设计质量规则针对所述软件应用的特定适用准则的用户输入的装置;
用于基于所限定的特定适用准则而识别将要向所访问的所述软件应用的设计应用的、所述所访问设计质量规则的子集的装置;以及
用于向所访问的所述软件应用的设计应用所述所访问设计质量规则的所述子集的装置。
21.根据权利要求17所述的系统,其中用于向所访问的所述软件应用的设计应用所访问设计质量规则以检测对所述所访问设计质量规则的违反的装置包括:
用于接收限定所述所访问设计质量规则针对所述软件应用的排除准则的用户输入的装置;
用于基于所述排除准则识别要向所访问的所述软件应用的设计应用的、所述所访问设计质量规则的子集的装置;以及
用于向所访问的所述软件应用的设计应用所述所访问设计质量规则的所述子集的装置。
22.根据权利要求17所述的系统,其中用于向所访问的所述软件应用的设计应用所访问设计质量规则以检测对所述所访问设计质量规则的违反的装置包括:
用于初始化针对所访问的所述软件应用的设计的违反列表的装置;
用于处理所述所访问设计质量规则中的每个规则的装置,包括:
用于识别被应用以所述规则的设计元素的类型的装置;
用于在所访问的所述软件应用的设计中识别所识别类型的设计元素的装置;
用于处理每个已识别设计元素的装置,包括:
用于向所述已识别设计元素应用所述规则的装置;
用于基于向所述已识别设计元素应用所述规则来确定所述已识别设计元素是否已经违反所述规则的装置;以及
用于在确定所述已识别设计元素已经违反所述规则的情况下基于所述规则和所述已识别设计元素向所述违反列表添加违反的装置。
23.根据权利要求22所述的系统,其中用于向所访问的所述软件应用的设计应用所访问设计质量规则以检测对所述所访问设计质量规则的违反的装置进一步包括:
用于针对每个已识别设计元素确定所述已识别设计元素是否已经被识别为排除在设计质量分析之外的装置;
其中用于向所述已识别设计元素应用所述规则的装置以及用于确定所述规则是否已经被违反的装置的操作以确定所述已识别设计元素尚未被识别为排除在设计质量分析之外为条件。
24.根据权利要求22所述的系统,其中用于向所访问的所述软件应用的设计应用所访问设计质量规则以检测对所述所访问设计质量规则的违反的装置包括:
用于针对每个已识别设计元素确定所述规则是否已被应用于所述已识别设计元素的装置;
其中用于向所述已识别设计元素应用所述规则的装置以及用于确定所述规则是否被已经违反的装置的操作以确定所述规则尚未应用于所述已识别设计元素为条件。
25.根据权利要求17所述的系统,其中用于提供描述对所述所访问设计质量规则的所检测的一个或多个违反的输出的装置包括:
用于从数据库访问与所述所访问设计质量规则的已检测违反相关的帮助信息的装置;
用于基于所访问的帮助信息生成针对所述所访问设计质量规则的已检测违反的上下文特定帮助消息的装置;以及
用于基于所生成的针对所述已检测违反的所述上下文特定帮助消息而提供输出的装置。
26.根据权利要求17所述的系统,其中用于提供描述对所述所访问设计质量规则的所检测的一个或多个违反的输出的装置包括:
用于从数据库访问与对所述所访问设计质量规则的已检测违反相关的重构信息的装置;
用于基于所访问的重构信息生成针对所述所访问设计质量规则的所述已检测违反的上下文特定重构建议的装置,所生成的上下文特定重构建议描述用于纠正对所述所访问设计质量规则的所述已检测违反的纠正;以及
用于基于所生成的针对所述已检测违反的所述上下文特定重构建议而提供输出的装置。
27.根据权利要求17所述的系统,其中用于接收用以解决对所述所访问设计质量规则的所述一个或多个违反的用户输入的装置包括:用于接收更新所访问的所述软件应用的设计以纠正对所述所访问设计质量规则的已检测违反的用户输入的装置。
28.根据权利要求17所述的系统,其中用于接收用以解决对所述所访问设计质量规则的所述一个或多个违反的用户输入的装置包括:用于接收用以忽略对所述所访问设计质量规则的已检测违反的用户输入的装置。
29.根据权利要求28所述的系统,其中用于接收用以忽略对所述所访问设计质量规则的已检测违反的用户输入的装置包括:
用于要求忽略所述已检测违反以允许所述已检测违反被忽略的理由的用户输入的装置;
用于接收描述忽略所述已检测违反的所述理由的用户输入的装置;以及
在忽略所述已检测违反时记录忽略所述已检测违反的所述理由的装置。
30.根据权利要求29所述的系统,其中用于记录忽略所述已检测违反的所述理由的装置包括:
用于向活动日志添加指示所述已检测违反已被忽略以及忽略所述已检测违反的所述理由的条目的装置;以及
用于允许查看者查看包括指示所述已检测违反已被忽略以及忽略所述已检测违反的所述理由的所述条目的所述活动日志的装置。
31.根据权利要求17所述的系统:
其中用于在开发软件应用的代码之前访问所述软件应用的设计的装置包括:用于访问所述软件应用的部分设计的装置;以及
其中用于向所访问的所述软件应用的设计应用所访问设计质量规则以检测对所述所访问设计质量规则的违反的装置包括:用于向所述软件应用的所述部分设计应用所述所访问设计质量规则以检测对所述所访问设计质量规则的违反的装置。
32.根据权利要求17所述的系统,还包括:
用于在接收用以解决对所述所访问设计质量规则的所述一个或多个违反的所述用户输入之后生成未解决违反报告的装置,所述未解决违反报告指定所述软件应用的所述设计中尚未纠正的至少一个已检测违反;以及
用于向查看者提供所述未解决违反报告的装置。
33.一种用于评价和强制实行软件设计质量的方法,包括:
在开发软件应用的代码之前访问所述软件应用的设计;
访问被限定用于评价软件应用的设计质量的设计质量规则;
向所访问的所述软件应用的设计应用所访问设计质量规则以检测对所述所访问设计质量规则的违反;
提供描述对所述所访问设计质量规则的一个或多个违反的输出;
基于所述输出接收用以解决对所述所访问设计质量规则的所述一个或多个违反的用户输入;
在接收用以解决对所述所访问设计质量规则的所述一个或多个违反的所述用户输入之后,针对所述所访问设计质量规则的违反而评价为所述软件应用而开发的代码以便基于所述软件应用的所述设计来评估为所述软件应用而开发的所述代码的质量,所述针对所述所访问设计质量规则的违反而评价为所述软件应用而开发的代码包括:
通过对为所述软件应用而开发的所述代码进行逆向工程来获得恢复的软件设计;
向所述恢复的软件设计应用所述所访问设计质量规则以检测所访问设计质量规则的违反;
将所述恢复的软件设计与接收用以解决对所述所访问设计质量规则的所述一个或多个违反的所述用户输入之后存储的所述软件应用的设计版本进行比较;
基于比较结果来检测所述恢复的软件设计与接收用以解决对所述所访问设计质量规则的所述一个或多个违反的所述用户输入之后存储的所述软件应用的所述设计版本之间的不一致;以及
提供描述所述恢复的软件设计与接收用以解决对所述所访问设计质量规则的所述一个或多个违反的所述用户输入之后存储的所述软件应用的所述设计版本之间的一个或多个不一致的输出。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
IN716CH2010 | 2010-03-18 | ||
IN716/CHE/2010 | 2010-03-18 | ||
IN2959CH2010 | 2010-10-06 | ||
IN2959/CHE/2010 | 2010-10-06 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102193797A CN102193797A (zh) | 2011-09-21 |
CN102193797B true CN102193797B (zh) | 2016-08-03 |
Family
ID=44148682
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110068180.3A Active CN102193797B (zh) | 2010-03-18 | 2011-03-18 | 软件设计质量的评价和强制实行 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8839211B2 (zh) |
EP (1) | EP2367114B1 (zh) |
CN (1) | CN102193797B (zh) |
CA (1) | CA2734199C (zh) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9336331B2 (en) * | 2010-04-26 | 2016-05-10 | Ca, Inc. | Detecting, using, and sharing it design patterns and anti-patterns |
US20110307802A1 (en) * | 2010-06-10 | 2011-12-15 | Shreyank Gupta | Review of requests to modify contextual data of a programming interface |
US9207935B2 (en) * | 2011-04-07 | 2015-12-08 | Infosys Limited | Early analysis of software design diagrams |
US8660878B2 (en) * | 2011-06-15 | 2014-02-25 | International Business Machines Corporation | Model-driven assignment of work to a software factory |
US20130091423A1 (en) * | 2011-10-11 | 2013-04-11 | Siemens Aktiengesellschaft | Method and Apparatus for Checking a Structure Conformity for a Piece Of Development Documentation with at Least One Development Document |
US8863292B2 (en) * | 2011-12-07 | 2014-10-14 | International Business Machines Corporation | Interactive analysis of a security specification |
US8539421B2 (en) | 2011-12-16 | 2013-09-17 | International Business Machines Corporaton | Layout-specific classification and prioritization of recommended rules violations |
GB2507273A (en) | 2012-10-23 | 2014-04-30 | Ibm | Maintaining integrity of output of code generators |
FR2997777B1 (fr) * | 2012-11-05 | 2015-12-18 | Commissariat Energie Atomique | Procede de conception d'un systeme modelise par une architecture multi-vues |
KR101408870B1 (ko) * | 2012-11-06 | 2014-06-17 | 대구교육대학교산학협력단 | Uml sd로부터 mccfg를 기반으로 하는 다단계 테스트 케이스 생성장치 및 방법 |
US20140229345A1 (en) * | 2013-02-14 | 2014-08-14 | Microsoft Corporation | Application process framework for integrated and extensible accounting system |
US9378477B2 (en) | 2013-07-17 | 2016-06-28 | Bank Of America Corporation | Framework for internal quality analysis |
US9286394B2 (en) | 2013-07-17 | 2016-03-15 | Bank Of America Corporation | Determining a quality score for internal quality analysis |
US10026064B2 (en) | 2013-09-13 | 2018-07-17 | Microsoft Technology Licensing, Llc | Automatically recommending updates based on stored lifecycle information |
US9665359B2 (en) | 2013-09-13 | 2017-05-30 | Microsoft Technology Licensing, Llc | Automatically resolving conflicts after installation of selected updates in a computer system |
US9626176B2 (en) | 2013-09-13 | 2017-04-18 | Microsoft Technology Licensing, Llc | Update installer with technical impact analysis |
US9830142B2 (en) | 2013-09-13 | 2017-11-28 | Microsoft Technology Licensing, Llc | Automatic installation of selected updates in multiple environments |
US9760369B2 (en) * | 2013-12-13 | 2017-09-12 | Infosys Limited | Assessing modularity of a program written in object oriented language |
US10380009B2 (en) | 2015-02-27 | 2019-08-13 | Walmart Apollo, Llc | Code usage map |
US9715421B2 (en) * | 2015-08-25 | 2017-07-25 | Ca, Inc. | Wrapped applications providing operational insight to users based on rules for acceptable operational state performance |
US9619363B1 (en) * | 2015-09-25 | 2017-04-11 | International Business Machines Corporation | Predicting software product quality |
CN105354144B (zh) * | 2015-12-01 | 2018-01-16 | 北京邮电大学 | 业务支撑系统信息模型一致性自动化测试方法与系统 |
FR3045860B1 (fr) * | 2015-12-21 | 2017-12-22 | Sagem Defense Securite | Procede de detection de problemes de testabilite d'un module informatique |
US10644980B2 (en) * | 2017-03-29 | 2020-05-05 | Ca, Inc. | Automated enforcement of architecture guidelines for application programming interfaces |
CN107908558B (zh) * | 2017-11-14 | 2021-01-05 | 广东华仝九方科技有限公司 | 一种手机客户端软件质量自动化评测方法 |
US10534604B1 (en) * | 2018-03-20 | 2020-01-14 | Architecture Technology Corporation | Software refactoring systems and methods |
US10853231B2 (en) * | 2018-12-11 | 2020-12-01 | Sap Se | Detection and correction of coding errors in software development |
CN109857637B (zh) * | 2018-12-25 | 2022-04-15 | 杭州茂财网络技术有限公司 | 基于注解的Java语言方法覆盖率和方法输入输出统计方法 |
US11100009B2 (en) | 2020-01-03 | 2021-08-24 | Bank Of America Corporation | Intelligent detection and ejection of unused application components |
CN113687812B (zh) * | 2021-08-25 | 2022-09-09 | 中国人民解放军国防科技大学 | 信息系统体系结构构建方法、电子设备及存储介质 |
WO2023144140A1 (en) * | 2022-01-28 | 2023-08-03 | Codescene Ab | An approach for classifying source code with a code quality indicator |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101261604A (zh) * | 2008-04-09 | 2008-09-10 | 中兴通讯股份有限公司 | 一种软件质量评价装置及软件质量评价的定量分析方法 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4937765A (en) * | 1988-07-29 | 1990-06-26 | Mentor Graphics Corporation | Method and apparatus for estimating fault coverage |
DE69327389T2 (de) * | 1992-10-29 | 2000-06-15 | Altera Corp., San Jose | Verfahren zum Prüfen von Entwürfen für programmierbare Logikschaltungen |
US6502239B2 (en) * | 1998-11-12 | 2002-12-31 | Computer Associates Think, Inc | Method and apparatus for round-trip software engineering |
US7003560B1 (en) * | 1999-11-03 | 2006-02-21 | Accenture Llp | Data warehouse computing system |
US7451148B2 (en) * | 2002-10-31 | 2008-11-11 | Computer Sciences Corporation | Method of modifying a business rule while tracking the modifications |
US7426716B2 (en) * | 2003-07-11 | 2008-09-16 | Board Of Regents, The University Of Texas System | Recovery and representation of object interaction in an object oriented program |
US7613589B2 (en) * | 2005-07-27 | 2009-11-03 | The Mathworks, Inc. | Measuring productivity and quality in model-based design |
DE102005042126A1 (de) * | 2005-09-05 | 2007-03-15 | Siemens Ag | Verfahren und Vorrichtung zum automatisierten Bewerten der Qualität eines Software-Quellcodes |
US20090070734A1 (en) * | 2005-10-03 | 2009-03-12 | Mark Dixon | Systems and methods for monitoring software application quality |
US20070157116A1 (en) * | 2005-12-30 | 2007-07-05 | Johnson Clare C | System and method for visual messaging |
US7707549B2 (en) * | 2006-03-15 | 2010-04-27 | Microsoft Corporation | Synchronicity in software development |
DE102006046203A1 (de) * | 2006-09-29 | 2007-08-30 | Siemens Ag | Verfahren zur rechnergestützten Bewertung von Softwarequellcode |
TW200907669A (en) * | 2007-08-10 | 2009-02-16 | Asustek Comp Inc | Method and system for servicing hardware of computer and guiding solving errors thereof |
US8566787B2 (en) * | 2008-09-15 | 2013-10-22 | Infosys Limited | System and method for improving modularity of large legacy software systems |
US9021441B2 (en) * | 2009-03-30 | 2015-04-28 | Verizon Patent And Licensing Inc. | Methods and systems of determining a quality level of a software instance |
US8726226B2 (en) * | 2009-06-05 | 2014-05-13 | Microsoft Corporation | Integrated work lists for engineering project change management |
-
2011
- 2011-03-15 CA CA2734199A patent/CA2734199C/en active Active
- 2011-03-17 US US13/050,339 patent/US8839211B2/en active Active
- 2011-03-17 EP EP11002214.2A patent/EP2367114B1/en active Active
- 2011-03-18 CN CN201110068180.3A patent/CN102193797B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101261604A (zh) * | 2008-04-09 | 2008-09-10 | 中兴通讯股份有限公司 | 一种软件质量评价装置及软件质量评价的定量分析方法 |
Non-Patent Citations (1)
Title |
---|
基于量化指标分析的软件质量度量方法;程诺 等;《北京化工大学学报》;20071231;第34卷;正文第1节-第3.4节以及图1-2,表1-2 * |
Also Published As
Publication number | Publication date |
---|---|
US20110231828A1 (en) | 2011-09-22 |
CN102193797A (zh) | 2011-09-21 |
EP2367114A1 (en) | 2011-09-21 |
US8839211B2 (en) | 2014-09-16 |
CA2734199C (en) | 2017-01-03 |
CA2734199A1 (en) | 2011-09-18 |
EP2367114B1 (en) | 2017-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102193797B (zh) | 软件设计质量的评价和强制实行 | |
Tax et al. | The imprecisions of precision measures in process mining | |
CN109426722B (zh) | Sql注入缺陷检测方法、系统、设备及存储介质 | |
Bakota et al. | A probabilistic software quality model | |
Mouchawrab et al. | A measurement framework for object-oriented software testability | |
US20090276757A1 (en) | Systems and methods for inference and management of software code architectures | |
Chen et al. | Software process evaluation: a machine learning framework with application to defect management process | |
ter Beek et al. | Quantitative security risk modeling and analysis with RisQFLan | |
Navas-Sú et al. | A Metrics Suite for Measuring Indirect Coupling Complexity | |
CN105630660A (zh) | 一种软件设计质量的评价和强制实行 | |
Sen et al. | State‐Model‐Based Regression Test Reduction for Component‐Based Software | |
CN106708492A (zh) | 一种软件设计质量的评价和强制实行 | |
Hammad et al. | An approach to automatically enforce object-oriented constraints | |
Bruntink | Testability of object-oriented systems: a metrics-based approach | |
Tanhaei | A model transformation approach to perform refactoring on software architecture using refactoring patterns based on stakeholder requirements | |
Mohammed et al. | GSDetector: a tool for automatic detection of bad smells in GRL goal models | |
Gittens | The Extended operational profile model for usage-based software testing | |
Abushark et al. | A framework for automatically ensuring the conformance of agent designs | |
Herda et al. | Using dependence graphs to assist verification and testing of information-flow properties | |
Satapathy et al. | Automated software engineering: a deep learning-based approach | |
Jeya Mala et al. | Classifying Critical Software Components Using Multi-Level Formalization and Knowledge Graphs | |
Qi et al. | Effort estimation of open source Android projects via transaction analysis | |
Lydall | Quality Impact of Configuration and Customisation on Configurable Software | |
Isa et al. | Model-driven estimation approach for system reliability using integrated tasks and resources | |
Hein | A New Approach for Predicting Security Vulnerability Severity in Attack Prone Software Using Architecture and Repository Mined Change Metrics |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |