前文
本文对嵌入式软件的质量保证的问题进行说明。
嵌入式软件不仅要体现最终用户的需求,而且也要体现系统设计和硬件的要求。所以,嵌入式软件开发变得很复杂,计划也屡屡推迟。软件开发者们在和测试人员协作的同时,必须时刻意识到自己作业的质量。
嵌入式软件开发就是接受需求方的要求,在系统设计选择技术的前提下,为实现系统而完成的工作.
对于嵌入式软件的需求有机能类需求和实现机能的硬件控制需求两种.
嵌入式软件开发虽然重视缩短产品的投入期,但是,在图1所示的情况下, 需求的最终决定无论怎样都有晚于开发的倾向.
图1嵌入式软件需求图
接受最终用户的需求,系统设计的需求,硬件控制的需求.来开发嵌入式软件.
各种需求的整合性需要在开发中进行检查
软件开发现场陷入的困境
最近由于嵌入软件的缺陷,造成了最终产品的回收。软件的质量问题被提上日程。
实际上,在产品的开发现场,正在重复着以下的状况
- 由于不能决定软件的控制设计,功能的组装没有按计划进行
- 机能增加,组装在不完整的状态下不得不开始测试
- 实施测试的时候,发生软件的质量问题,测试首先停止
- 为了能推进测试,用拍手代替要求和月收入,技能的组装首先停止
- 机能的引入不及时,不能保证最初的产品计划
- 为了让产品的市场投放时间领先,在却少一部分功能的状态下把产品投入市场。
- 质量的认定不及时,产品投入市场后,在市场上问题被发现。
就是这样这样的八方堵塞的状况,软件开发人员为了提高最终产品的软件质量,怎么做才好呢?一开始,怎么做,才能更好的评定[软件的质量]呢?
软件的品质是什么
软件所追求的就是按需求进行动作。为了实现最近的复杂的控制系统,必须进行需求分析,防止需求的遗漏。还有,有必要事先做好即使发生异常也能安全的处理方案。
为了满足这样的要求,有效率的开发是理所当然的。同时,开发人员本身也要时刻意识到自己开发的软件的质量,具备质量是自己的准则。软件质量的测量是按照质量基准进行核对,同时,也是开发人员应该凝聚智慧的地方。
例如,假设要做一个把键盘输入的数据加大一倍,存储到寄存器里的程序。这个程序从起动条件(键盘输入)和数据中算出结果,把结果保存到积寄存器。在这里,如果能够按要求把从键盘输入的数据计算出结果并保存到寄存器,我们就认为它的质量能够保证。定义了有键盘的输入数据和计算结果,就是需求设计的质量。按需求设计要求,把结算后的结果保存到寄存器,就是软件的质量。
所谓的软件质量测量就是对开发的程序,一个一个确认它符合需求设计。在管理上,检查设计内容,用测试点的数目来评定质量状况。
如果着眼于软件开发的过程,那么对软件质量有最大影响的就是成为软件开发中心的设计工程。在设计工程中,造成质量低下的原因,列举一些。
- 没有根据需求分析进行设计(对需求分析中没有明确的内容简单的理解,就进行组装。
- 对产生的制约和问题在没有设计方针的情况下即兴发挥的设计
- 对要求以外的状况发生时的动作没有充分研究就进行组装。
各协作者间没有充分的检查,设计就结束了。
联想最终用户的使用场景来保证品质
软件工程学就是从[怎样使软件通过测试]而一路走过来的.
软件开发人员本身进行测试的时候,把关于缺陷的调查反馈到设计(为了不重复相同的错误),这对为了通过测试的软件开发是有用的.把软件的品质从设计阶段开始提高的思考方法,叫做解决本质的方法.图2表明了开发工程和测试工程的关系.
但是,为了提高设计的质量,应该遗失到那些呢?重新研究基本的开发作业是捷径.要同时考虑上流工程和下流工程进行开发作业,特别是下流工程,尽可能的扩大考虑范围,联想最终用户的场景,设定质量的检查点.
图2 开发工程和质量保证工程关系图
从系统分析到实装是开发工程,每个开发工程都对应测试工程.从而保证质量.
图3 至最终用户的质量检查点
各工程间设置检查点, 尽可能的扩大考虑范围,从最终用户使用的角度设置检查点.
由软件开发人员测试的局限性
为了保证软件的质量,尽可能早的预测可能发生的缺陷,把缺陷事先在上流工程解决掉,这是最理想的.为了尽可能的在上流工程保证质量,象前面所述的,在开发工程中设置几个检查点是必要的.在这个基础上,软件测试的要素如表1所示.
也就是软件测试能够检验开发作业的内容,评定开发作业的质量.但是,现在的情况是,应该检验开发作业内容的软件测试,却作为保证质量的最后要塞发挥着作用.
表1软件测试要素
软件开发的作业内容大致分为分析,设计,制造,测试四个工程。最近由于开发对象的复杂化,有软件开发组分担各工程的倾向。
每个工程的作业者改变的时候,因为必须要明确各工程的成果物(下一个工程的输入),成果物要清晰的完成和管理。另外,结合作业人员的特点(擅长分析,擅长制造等)来分工,能够提高整个队伍的作业效率。
开发人员和测试人员分开作业的场合,有交付日期催促的开发人员象抓住救命稻草似的,把软件质量的保证全权委托给测试人员。这样一来,在测试工程中,很多的缺陷被检查出来,
开发人员反倒要被最佳处理这些缺陷的任务。这种全权委托给开发人员带来的好处,是引起恶性循环的原因。
另外,单元测试由开发人员进行的时候,由于测试的内容是开发者自己完成的东西,一旦开发者误解了设计,就会按照误解的内容进行确认。一旦通过单元测试,到结合测试也没有发现这个缺陷,那么用于对策的时间就会变短,最坏的可能是延迟产品投入市场的时间。
开发人员如果进行测试,虽然能够改善设计的质量,如果不用更多的眼睛进行软件测试,不能防止对需求的误解,丢失等。也就是说,有软件开发人员自己进行测试,还是有局限的。
表2 分析,设计,制造,测试工程由一个工程师完成的利弊
软件开发者自己有效测试的心得 软件测试工程中,有测试设计和实施两个作业,测试设计是决定用什么思想去做测试,
测试实施是根据测试设计结果完成测试用例。
在开发过程中,由开发人员自己做测试工程存在的时候,开发现场经常发生下记的问题。
- 开发量过多,开发人员不能好好的测试就提交
- 开发人员没有充足的测试工数。
- 开发组织没有赋予软件开发人员测试的机会
- 开发人员没有用科学的方法测试
- 开发人员和测试人员不进行相关的技术交流
- 测试人员对软件机能没有充分确认就测试。
这个结果导致从开发人员提交到测试人员的软件质量低下,双方的作业效率低下。
为了开发人员能够有效进行保证质量的测试,怎么做好呢?在这里,试着对软件开发人员积累什么样的经验才能掌握有效的测试方法进行了考虑。
工程师为了能在短时间完成质量高的软件,需要相当的时间和经验。为了尽可能快的掌握这种经验,在实际的开发现场,发生问题,解决问题是最好的捷径。通过发现问题,去实践计划,实施,检验和改善,从而进行改善质量的活动。
仅仅发现问题,谁都能做到。重要的是发现问题后,对于问题能够深入考虑的对应。在充分分析问题的基础上,下足功夫,不能让其再发。保证软件质量的方法之一就是这样的功夫。
充分理解设计内容进行测试设计
为了保证软件的质量,具备[自己提出的软件绝对不出问题]的决心是重要的.也就是说,要有已经发现的缺陷决不能再发生的信心.
作为防止质量问题的再发的对策,有两个观点,一个是一开始就不要加入缺陷.一个是在提出前检查缺陷,防止次品的流出.这里,对于后者尽心了思考.
关于软件测试的教材,参考书出版了很多,但是,软件开发者不是测试担当,和测试担当用同样的方法测试的话,效率不高.开发人员发挥自己的特点进行测试,能够贡献于质量保证.那么这个特点是什么呢?
那就是对设计内容的理解,利用这个进行测试设计,在此基础上进行边界值分析,能够更有效率的实施测试. |