论文部分内容阅读
【摘要】软件质量的优劣已经直接关系到软件项目的成败。在本文中主要阐述了在软件系统开发中为了保证软件质量而采用的方法和策略,内容包括:坚决贯彻执行工程化开的原则;重视文档建设,以及文档和代码的一致性以及版本控制和跟踪管理;重视工程每一阶段的质量控制,包括计划、评审、变更管理、责任制的明确;重视人员的管理机制;在软件质量的量化控制方面的努力以及重视软件的测试几个方面。软件工程的科学理论在不断地发展,要提高软件质量,需要从整体的软件过程以及管理模式入手。
关键词:软件工程 ,软件质量 ,软件管理 ,软件测试
30多年前美国软件工程师F.P.Brooks把组织开发IBM360操作系统时的失败教训总结出来,写了至今仍为人们常常引用的一本书《难忘的软件开发日日夜夜》(The Mytieal ManMonth)。这本现已成为软件工程重要文献的书告诫我们千万不可忽视软件开发的管理,从何时起由于人们广泛接受了这一忠告,开始重视软件的工程化开发,使得软件项目的成功率大大提高,然而,近年来软件质量问题逐渐突出,有些问题十分严重,不断传来的报道告诉我们,软件质量不佳引发的事故已直接伤害到生命和社会安全。
目前,我国已有上万家软件企业。虽然较前些年有了很大发展,但从数量上与国民经济发展相比,与13亿人口的庞大需求相比仍不能适应。我们更要注意到的是软件质量的差距,这在很大程度上表现在软件质量管理上的差距。
在我国,引起软件质量问题的原因主要有以下几个方面:
1.对软件工程标准化重视不够。从80年代中期开始我国已制订和公布了20多项软件工程国家标准,其中许多标准是从国际标准转化的,具有很好的指导性。但只有少数部门和行业在参考国家标准的基础上制订和实施了部标和行标(如航空、航天、外贸、石化等)。个别企业制订和实施了自己的企业标准和规范。许多企业缺乏质量意识,缺乏标准化管理意识。
2.软件产品的质量问题时有暴露,有的企业提供用户的手册版本搞错,许多企业开发的程序可读性极差,产品的用户界面不统一,产品测试不充分等等。1995年在申报参加全国优秀软件的产品评测中发现,由于系统兼容性差等质量问题,有30%的产品不具备评测资格。在市场上流通的软件质量更是屡见不鲜。
3.软件开发工具和管理工具的提供与使用不够充分。致使大量的开发工作和开发管理工作停留在手工劳动阶段,不仅效率低而且往往不能保证质量。例如许多软件企业没有采用配置管理工具、测试工具、度量工具等。
软件作为一种面向市场的产品,现在已经有了规范化的方法,以工程化的思想去“生产”,它再也不是个人智慧的小产物,它经常是以若干人力的大投入去生产,而且它运作的性能和可靠性往往有着至关重要的意义和后果。所以提高软件质量已经成为整个软件开发过程中的关键问题之一。在保证软件质量的方面,本人的看法有以下一个方面:
1.重视每一个步骤中的文档建设,以及文档版本管理和文档与代码的一致性管理。这里我主要采用了需求变更矩阵来控制和记录文档的变更路线和一致性。每一个步骤的文档和代码都有明确的版本代号,每一个版本的文档和代码的变更原因、提出变更的人员、对于变更请求的讨论意见记录、最后是否采纳变更请求都有相应的记录。如果采纳,则选择实现的相应措施、变更将要影响到的模块有哪些、相关的人员有哪些,全部都要记录在案;然后每个相应模块的实现情况以及相应的后续跟踪情况全部记录在案。对于那些已经接受的功能请求,它的完成情况、可能出现的潜在问题全部在专门的会议上作确定,并有详细的文档记录。每一项决定的负责人都有记载。对于文档和代码的版本都要有一个矩阵来跟踪和管理。
2.重视人员的管理。软件产品毕竟是由人生产出来的。人员管理直播关系到软件本身的质量。每个人都要就自己的工作负责任。人员管理按照总负责人到项目负责人,到下层的开发人员,协调人员划分,既有从上到下的责任层,又按照系统本身的功能模块分块。每一个人既对上级领导负责,又对横向的分块的项目组长负责。责任明确到人,到天,按照完成情况进行考核。以人员的责任感来保障软件的质量。
3.重视工程每一阶段的质量控制。每个阶段都有详细的计划,包括此阶段的目标,工作内容,参加人员,每个人员的工作内容和目标,以及每个阶段的时限,每个人员的每项工作的时限。一般计划到每人每天。每三天有一改小组碰头会,总结计划完成情况,及时发现问题,尽量解决。影响较大的问题就要及时召开项目会议,作讨论,给出解决的方案。每周有一个开发会议,作周汇报,及时审核计划的完成情况。在有突发事件时,要求当天召集人员解决,绝不“留待以后”,造成祸患。每个阶段完成时的阶段总结是非常重要的,要求开发方和客户方的领导和技术人员都要参加,尤其对于有变更和有分歧的问题,务必要达成明确的共识。这样,每个阶段每个人员的计划、目标、工作内容,出现的问题,解决的情况,还可能会有潜在问题以及给予的评价全部有详细明确的记录以供跟踪。这样一切都尽量做到有章可循,并且在有人员变动的情况下,可以把对开发工作的影响程度降低到最小。
4.在保障软件质量的量化方面做努力。尽量采用当前先进的软件质量度量方式,以科学的方法试题和检测软件的质量,而不仅仅是从定性的方面来衡量。无论是需求开发的产品,还是设计阶段的产品,当然也包括代码,以及相应的文档,每个阶段的产物都要在阶段总结的时候给予定量的质量考核和评估,然后对质量评估的结果给予分析和评价。对于不达标的阶段产品要给出处理意见,力争做到步步为营。
5.坚决以工程化的方法,按部就班地开展每一步工作,绝不急于求成。从最初的需求获取阶段开始,首先是双方决策人员和技术人员的沟通,尽量在战略目标上统一,在总体的资金投入、人员投入和系统目标上达成一个尽量明确的共识;然后进行可行性研究(在资金、时间和人员的限制之下是否可以达到系统目标);在此基础上再进行需求分析和开发。经过不断的修正,得到一个适当的原型。然后开始总体设计和详细设计,以及代码设计和各级测试。先产生一个可试运行的产品,再不断地完善它。在每一个步骤中,都保证每个步骤的工作质量。
6.重视软件的测试。测试软件测试是软件质量控制中的关键活动。业界的统计数据表明,测试的成本大约占软件开发总成本的 50 %左右。软件测试的目的是要发现软件中的错误。一个好的测试是发现至今没有被发现的错误。传统的软件测试专注于动态测试范畴,如:单元测试,集成测试和系统测试。而测试工程的发展已经进入到了全流程的测试,包括开发过程前期的静态测试。一般我们可以把测试分为白盒测试和黑盒测试。白盒和黑盒这两类测试是从完全不同的出发点,并且是两个完全对立点,反映了事物的两个极端,两种方法各有侧重,不能替代。但是在现代测试理念中,这两种测试往往不是决然分开的,一般在白盒测试中交叉使用黑盒测试的方法,在黑盒测试中交叉使用白盒测试的方法。软件测试是产品最终交付到用户之前的最后一道防线,有着举足轻重的地位。
当然,要提高软件的质量,远远不只这几个方面。追根究底,要从根本上提高软件的质量,最重要的是提高软件开发企业对软件质量的关注程度,我想如果一开始都将质量放到一个比较高的位置,软件产业一定会有更加突飞猛进的发展。
关键词:软件工程 ,软件质量 ,软件管理 ,软件测试
30多年前美国软件工程师F.P.Brooks把组织开发IBM360操作系统时的失败教训总结出来,写了至今仍为人们常常引用的一本书《难忘的软件开发日日夜夜》(The Mytieal ManMonth)。这本现已成为软件工程重要文献的书告诫我们千万不可忽视软件开发的管理,从何时起由于人们广泛接受了这一忠告,开始重视软件的工程化开发,使得软件项目的成功率大大提高,然而,近年来软件质量问题逐渐突出,有些问题十分严重,不断传来的报道告诉我们,软件质量不佳引发的事故已直接伤害到生命和社会安全。
目前,我国已有上万家软件企业。虽然较前些年有了很大发展,但从数量上与国民经济发展相比,与13亿人口的庞大需求相比仍不能适应。我们更要注意到的是软件质量的差距,这在很大程度上表现在软件质量管理上的差距。
在我国,引起软件质量问题的原因主要有以下几个方面:
1.对软件工程标准化重视不够。从80年代中期开始我国已制订和公布了20多项软件工程国家标准,其中许多标准是从国际标准转化的,具有很好的指导性。但只有少数部门和行业在参考国家标准的基础上制订和实施了部标和行标(如航空、航天、外贸、石化等)。个别企业制订和实施了自己的企业标准和规范。许多企业缺乏质量意识,缺乏标准化管理意识。
2.软件产品的质量问题时有暴露,有的企业提供用户的手册版本搞错,许多企业开发的程序可读性极差,产品的用户界面不统一,产品测试不充分等等。1995年在申报参加全国优秀软件的产品评测中发现,由于系统兼容性差等质量问题,有30%的产品不具备评测资格。在市场上流通的软件质量更是屡见不鲜。
3.软件开发工具和管理工具的提供与使用不够充分。致使大量的开发工作和开发管理工作停留在手工劳动阶段,不仅效率低而且往往不能保证质量。例如许多软件企业没有采用配置管理工具、测试工具、度量工具等。
软件作为一种面向市场的产品,现在已经有了规范化的方法,以工程化的思想去“生产”,它再也不是个人智慧的小产物,它经常是以若干人力的大投入去生产,而且它运作的性能和可靠性往往有着至关重要的意义和后果。所以提高软件质量已经成为整个软件开发过程中的关键问题之一。在保证软件质量的方面,本人的看法有以下一个方面:
1.重视每一个步骤中的文档建设,以及文档版本管理和文档与代码的一致性管理。这里我主要采用了需求变更矩阵来控制和记录文档的变更路线和一致性。每一个步骤的文档和代码都有明确的版本代号,每一个版本的文档和代码的变更原因、提出变更的人员、对于变更请求的讨论意见记录、最后是否采纳变更请求都有相应的记录。如果采纳,则选择实现的相应措施、变更将要影响到的模块有哪些、相关的人员有哪些,全部都要记录在案;然后每个相应模块的实现情况以及相应的后续跟踪情况全部记录在案。对于那些已经接受的功能请求,它的完成情况、可能出现的潜在问题全部在专门的会议上作确定,并有详细的文档记录。每一项决定的负责人都有记载。对于文档和代码的版本都要有一个矩阵来跟踪和管理。
2.重视人员的管理。软件产品毕竟是由人生产出来的。人员管理直播关系到软件本身的质量。每个人都要就自己的工作负责任。人员管理按照总负责人到项目负责人,到下层的开发人员,协调人员划分,既有从上到下的责任层,又按照系统本身的功能模块分块。每一个人既对上级领导负责,又对横向的分块的项目组长负责。责任明确到人,到天,按照完成情况进行考核。以人员的责任感来保障软件的质量。
3.重视工程每一阶段的质量控制。每个阶段都有详细的计划,包括此阶段的目标,工作内容,参加人员,每个人员的工作内容和目标,以及每个阶段的时限,每个人员的每项工作的时限。一般计划到每人每天。每三天有一改小组碰头会,总结计划完成情况,及时发现问题,尽量解决。影响较大的问题就要及时召开项目会议,作讨论,给出解决的方案。每周有一个开发会议,作周汇报,及时审核计划的完成情况。在有突发事件时,要求当天召集人员解决,绝不“留待以后”,造成祸患。每个阶段完成时的阶段总结是非常重要的,要求开发方和客户方的领导和技术人员都要参加,尤其对于有变更和有分歧的问题,务必要达成明确的共识。这样,每个阶段每个人员的计划、目标、工作内容,出现的问题,解决的情况,还可能会有潜在问题以及给予的评价全部有详细明确的记录以供跟踪。这样一切都尽量做到有章可循,并且在有人员变动的情况下,可以把对开发工作的影响程度降低到最小。
4.在保障软件质量的量化方面做努力。尽量采用当前先进的软件质量度量方式,以科学的方法试题和检测软件的质量,而不仅仅是从定性的方面来衡量。无论是需求开发的产品,还是设计阶段的产品,当然也包括代码,以及相应的文档,每个阶段的产物都要在阶段总结的时候给予定量的质量考核和评估,然后对质量评估的结果给予分析和评价。对于不达标的阶段产品要给出处理意见,力争做到步步为营。
5.坚决以工程化的方法,按部就班地开展每一步工作,绝不急于求成。从最初的需求获取阶段开始,首先是双方决策人员和技术人员的沟通,尽量在战略目标上统一,在总体的资金投入、人员投入和系统目标上达成一个尽量明确的共识;然后进行可行性研究(在资金、时间和人员的限制之下是否可以达到系统目标);在此基础上再进行需求分析和开发。经过不断的修正,得到一个适当的原型。然后开始总体设计和详细设计,以及代码设计和各级测试。先产生一个可试运行的产品,再不断地完善它。在每一个步骤中,都保证每个步骤的工作质量。
6.重视软件的测试。测试软件测试是软件质量控制中的关键活动。业界的统计数据表明,测试的成本大约占软件开发总成本的 50 %左右。软件测试的目的是要发现软件中的错误。一个好的测试是发现至今没有被发现的错误。传统的软件测试专注于动态测试范畴,如:单元测试,集成测试和系统测试。而测试工程的发展已经进入到了全流程的测试,包括开发过程前期的静态测试。一般我们可以把测试分为白盒测试和黑盒测试。白盒和黑盒这两类测试是从完全不同的出发点,并且是两个完全对立点,反映了事物的两个极端,两种方法各有侧重,不能替代。但是在现代测试理念中,这两种测试往往不是决然分开的,一般在白盒测试中交叉使用黑盒测试的方法,在黑盒测试中交叉使用白盒测试的方法。软件测试是产品最终交付到用户之前的最后一道防线,有着举足轻重的地位。
当然,要提高软件的质量,远远不只这几个方面。追根究底,要从根本上提高软件的质量,最重要的是提高软件开发企业对软件质量的关注程度,我想如果一开始都将质量放到一个比较高的位置,软件产业一定会有更加突飞猛进的发展。