王 蕊,张碧肖,黄 婧
(国家软件产品质量监督检验中心(江苏),江苏 南京 210012)
我国的软件智能化行业正处于快速发展期,尤其是东南一带经济发达省份的软件行业收入已占全国软件行业收入的绝大部分。随着客户质量意识的不断提升和政府部门信息化工程建设力度不断加大,对于软件智能化产品质量第三方检测服务的需求也越来越大,对软件智能化产品质量的要求也越来越高。
第三方检测机构所承担的检测任务主要来源于政府和企业的委托检验。以2018年三季度为例,我中心共检测软件产品246批次,检测企业数129家,全部为委托检验类型,主要提供实测数据。弱电智能化产品5批次,检测企业数4家,批次合格率80%。
软件产品检测项目主要包括功能性、性能效率、兼容性、易用性、可靠性、信息安全性、维护性、可移植性等质量特性,在委托检验中,检测重点通常集中在软件功能性、性能效率和信息安全性三个方面。由于软件产品属于非传统行业,客户定制化特点非常明显,在通常用于验收测试的委托检验中,通常会进行2-3轮检测,在首轮检测中发现的问题,在与开发方和委托方沟通后,经过进一步修改,更新版本,在后续检测中将问题修正。软件产品的委托检验,通常只提供实测结果,不提供判定结论。弱电智能化产品主要检测项目有综合布线、智能楼宇、机房检测、信息网络等。
软件产品委托检验首轮测试中,共在50个软件样品中发现8940个问题。按照严重等级划分,其中S2级问题1444个,占比16.2%;S3级问题7377个,占比82.5%,S4级和S5级问题119个,占比1.3%。缺陷等级定义见图1:
图1 缺陷等级定义
依据GB/T 25000.10-2016国家标准,软件产品质量模型见图2:
图2 软件产品质量模型
按发现问题所属质量特性统计,功能性问题372个,占比4.2%;性能效率问题19个,占比0.2%;信息安全性问题8547个,占比95.5%;其他质量特性委托检测较少,共发现问题2个,占比忽略不计。
首轮测试后,测试人员将结果通知到开发方,经过修改后再进行二轮甚至三轮测试,复测后问题数量呈现明显收敛趋势。
造成软件缺陷的主要原因,主要有软件本身、团队工作和技术问题等,也与软件产品的特点和开发过程有密切关系:
⊙ 需求不明确,设计方案偏离客户需求,导致产品功能不符合客户预期;
⊙ 系统结构复杂,系统维护困难;
⊙ 对程序逻辑路径或数据范围的边界考虑欠缺,漏掉边界条件,造成容量或边界错误;
⊙ 实时应用要进行精心设计和技术处理以保证精确的时间同步,否则容易引起时间不协调问题;
⊙ 没有考虑系统崩溃后的自我恢复或数据异地备份、灾难恢复等问题,导致系统存在安全隐患;
⊙ 系统运行环境复杂,计算机环境千变万化,用户的各种操作方式或各种不同的输入数据,容易引起一些特定用户环境下的问题;
⊙ 系统应用中突发数据量引起的性能负载问题;
⊙ 通信端口多、存取和加密手段的矛盾性等,会造成系统的安全性或适用性等问题;
⊙ 新技术的采用或涉及系统兼容性问题,事先没有考虑到。
(1)用户沟通方面,需求分析时对客户的需求理解出现偏差
要改进这个问题可以从以下四个方面展开:一是使用项目管理信息系统进行辅助沟通,例如:PMIS。二是建立沟通基础结构:①工具:电话、传真、电邮、PMIS;视频会议系统、文件管理系统、字处理程序。②技术:指导方针、文档模板、会议基本原则和程序;决策过程、解决问题方法、冲突解决和协商技术。③原则:提供开放式对话环境;使用“率直交流”和遵守公认工作道德规范。三是使用项目沟通模板。四是制定项目沟通基本原则。
(2)不同阶段的开发人员相互理解不一致。
(3)设计或编程上的一些假定依赖关系,相关人员没有充分沟通。
(4)项目成员技术水平差异导致代码质量参差不齐。
(1)算法错误:在给定条件下没能给出正确或准确的结果。
(2)语法错误:对于编译性语言程序,编译器可以发现这类问题;但对于解释性语言程序,只能在测试运行时发现。
(3)计算和精度问题:计算的结果没有满足所需要的精度。
(4)系统结构不合理、算法选择不科学,造成系统性能低下。
(5)接口参数传递不匹配,导致模块集成出现问题。
(1)质量意识不足,没有尽早介入测试,或测试不充分。
(2)开发周期短,需求分析、设计、编程、测试等各项工作不能完全按照流程进行,同时给开发人员造成太大压力,引起一些人为错误。
(3)开发流程不完善,存在太多随机性,缺乏严谨的内审或评审机制,容易产生问题。
(4)文档不完善,风险估计不足等。
(1)制订周详的软件开发计划。要进行调查研究,理解工作任务、工作范围和所付的代价,提交可行性研究报告,编制详尽的软件开发计划。
(2)软件需求分析,对用户需求进行具体分析和细化,并用软件需求规格说明书表达出来,作为用户和软件人员之间的共同约定。在进行需求调研时,不但要更多的获取功能或者业务需求,对于客户在软件系统性能上的需求,也应进行详尽的获取。这些需求在实现过程中应具体体现在开发和测试等文档中。针对此类性能需求的深入分析,往往能较好的规避软件系统瓶颈,解决此问题,需要对需求进行全面有效的管理,可以按照以下办法进行管理:
①成立需求分析小组,任务是得到各方签字认可的需求说明书。
②准备文档和帮助客户了解相关技术和项目管理知识。
③访谈客户:了解划分客户所有用户类型及潜在类型;选择每类用户代表,对其访谈和调研;需求分析人员对收集的需求进行分析和整理;需求分析人员将需求以适当方式呈交用户和开发方。
④需求分析:图形表示方式描述整理结构,包括边界和接口;通过原型、页面流等方式向用户提供可视化界面,用户提出评价;系统可行性分析,需求实现的技术可行性、环境、费用、时间分析;模型描述系统功能项、数据实体、外部实体、实体相互关系、实体状态转换。
⑤需求说明书编写。
⑥需求验证和评审:确保说明书准确、完整变大必要的质量特点;用户参与,可外部专家评审;一般评审:用户评审、同行评审。
⑦需求定稿建立基线。
⑧管理和控制需求变更:手段:变更控制委员会、需求变更流程;委员会与项目风险承担着协商。
尤其是针对变更的需求,在面对变更需求时,应该坚持以下原则:谨慎对待变更请求,尽量控制变更;高度重视需求变更;签署变更控制的协议;在基线的基础上,做好变更实施;应有变更控制工具的支持;把项目变化融入项目计划;及时发布变更信息。
(3)软件架构设计决定系统的模块结构,应清晰给出模块的相互调用关系、模块间传递的数据以及每个模块的功能说明,定义数据结构,软件体系架构是为软件系统提供结构、行为和属性的高级抽象。在结构建模时应遵从最直观的结构、以特殊问题为目的建立框架、对机构和框架进行补充,演化“大颗粒”行为、研究步骤和过程、一组功能构建,下层向上层提供服务。(4)软件编码应符合规范要求。
(5)软件测试应尽早并全面介入,及时发现并修改缺陷,降低开发成本和周期。
(6)软件维护,经过测试并应用的软件仍可能有错,用户需求和系统环境也会随时发生变化,开发时应考虑软件可维护性。
(7)非功能性的需求很多时候需要考虑硬件以及网络方面的成本。针对这些问题需要与客户进行良好沟通,设定合理的非功能性目标,做好成本与质量的平衡。
(8)制订完善的测试方案并贯彻落实,它直接影响软件的质量。