必须从确定的需求开始
软件开发过程中需求必定会发生变更,这一点无一例外。即使仅写下几行程序,我们对任务的理解也可能改变。变更从需求开始,贯穿实现、使用,以至今后的强化过程。即使能在计划中包揽一切,人为开发的软件在计算机上运行时,也需要对软件本身进行调整。就其本质而言,需求是不会确定不变的,因为我们无法准确预测自动化运行时,各项任务可能的变化方式。
软件开发是一个学习的过程,步伐宜小不宜大。即使在小型项目里,每一步也需要掌握大量的定义、功能和选择。总的说来,最好的实践经验是采取一种渐进式的开发过程,就是说,在需求不断细化的同时,实现也逐步细化。这意味着:
客户并不完全了解其需求,更不用说其他人。
最初的需求常常是错误的,必须更改。
我们必须和了解产品应用的人建立联系、共同工作,直到整个工作完成为止。系统越大越复杂,我们需要的应用领域的专门知识就越多。
1.稳定需求
构建任何东西,至少在构建和测试这段时间,都要求一定的需求稳定性。这说明渐进的开发过程必须从我们和客户共同确认的最小需求开始。经过试行实施、测试,然后制定一个开发计划。解决方案不断进化的方式更像客户需求不断满足的过程。
对于大型或集成的系统,系统设计组必须是这个过程的一部分。重要的是从客户问题的专门知识人手,通过不断提炼的系统和软件设计,逐步增强对客户问题及相关知识的理解。如果上层设计选择正确,则很多低层设计将不会影响需求。当然,这也不是绝对的。需求问题可能在开发的任何阶段出现,而且必须在需求水平上恰当解决,不能只是在设计或编码修补了事。
2.冻结不成熟的需求
当项目建立在固定但不准确的需求之上时,如果不采用渐进方法,到项目后期再重新开始将更加耗费时间和金钱。
基于需求的过程实际上鼓励的是一种不利于提高生产率的开发行为。最终用户必须在开发前期明确说明其要求,双方共同将其冻结,并在此基础上磋商签署合同。接着,双方就会争论合同中到底应该包括哪些功能。由于每一项需求变动所带来的成本都必须有人支付,因此,也必须有人对需求的确定负责。
对于软件来说,问题就是如何在需求的不确定性和固定合同关系的商业要求之间进行平衡。虽然问题的解决方法各异,但如果缺乏对任务的真实理解,所签订的合同多半难以成功实施。
只要通过测试,就不会有问题
如果我们尚无法全而测试各种程序,则应如何应对复杂的系统呢?这里先提几条基本原则以供参考:
?建立尽可能高质量的软件过程。?确定利用这一过程可以开发的最复杂的、基本没有错误的程序。?当需要开发可靠度更高的程序时,限定其复杂性,不要超过利用现有的、基本无缺陷的过程的已知开发能力。?在经济预算空间内,尽可能彻底地测试程序。?相信通过管理和改进现有过程,将会增强我们的能力,以便逐渐开发更大的无缺陷程序。软件质量无法度量
没有任何一项度量可以全面而综合地反映编程的质量。对于其他复杂的产品,也没有这种综合的度量。质量度量的价值要求我们必须找到并采用一些合适的度量指标。幸运的是,即使最基本的度量,都会对我们的工作有所帮助。反之,如果不对产品质量进行度量,我们只能模糊地理解其好坏。离开度量工作,质量管理将难以产生有益的活动。
软件问题是技术问题
很多软件组织面临的至关紧要的问题并非技术问题。多数软件组织成熟度处于l级或2级的水平,最优先需要解决的问题是建立一个有序的过程,以提高员工的工作效率。在一个相当混沌、不连贯的过程中工作的人们,根本没有时间去考虑复杂的技术问题。
低成熟度级别的软件组织将主要精力花在应付大量变更、清除发现较晚的缺陷、应对各种难以预测的风险上。这类组织生产的产品,成本总是难以控制,质量总是难以保证。其主要问题并非缺乏足够的语言、重用技术、先进工具或集成的环境。但最关键的问题并非如此复杂。技术工作不容忽视,但技术解决不了管理问题。
我们需要更好的人才
我们需要更好的人才很多组织的过程缺乏管理,处于无序状态。只要各自仍采用自己的方法做事,人们就会继续犯错误和重犯同样的错误的真正原因是过程,不是人。错误是由人制造的,其原因在于这些人只能得到混沌、错误、不完整的信息,在于这些人未经过培训,在于缺乏必要的设施,在于错误的方法和程序,在于这些人无法执行其程序。当然,我们必须尽我们所能,招募充满活力的高素质人才,但仅靠人才并不能解决所有的问题,大部分问题只能通过管理活动来解决。
软件管理与众不同
很多因素使软件和其他工程领域不同:
?软件—般比其他工程产品更加复杂。?由于软件工程是一个新领域,因此至今没有多少拥有足够经验的管理人员和高级专家肯定有效过程的效益。?由于软件开发返工的成本较低,因此,对于发现较晚的系统问题不得不通过返工等形式来解决。虽然返工常常是惟一可行的办法,但进一步增加了软件工作的复杂性。?在其他工程领域,将设计成果投入生产制造为设计开发提供了一个自然的准则,而在软件设计开发领域,则不存在类似的现象。当独立的相关方必须在生产成本和进度安排上签字时,设计定义或者已经完成,或者停止所有工作等待它完成。?软件这一行并非以自然科学为基础。软件属于凝聚了人类智慧的工作产品,并不依赖于物理原理。?软件常常是系统中将其功能直接展现给最终用户的一个组成部分。它是最明显、最易受到抱怨、最易受到需求变更影响的—个部分。?软件也经常是将系统所有其他元素结合到一起的重要系统部分。?在外行看来,软件是一种奇妙的医术。这也导致很多管理者在它面前退避三舍,不用自己的管理本能去解决软件问题。最后一个问题也是软件管理的症结所在。软件具有很多特殊的特点,这些特点增加(而不是减少)了对管理规律的需求。管理人员因此需要详尽的计划、跟踪体系、定期的技术和管理评审。软件管理可以说完全是传统的管理。遗憾的是,很多在硬件方面坚持不懈地推行和实施管理的管理人员,却忽略了他们的软件团队。
最重要的是,软件管理人员应当坚持对简单的问题取得清晰的答案。他们应当要求详细的计划和分阶段的成本估计。技术计划应当进行技术评审,评审的结果应当用通俗的语言进行描述。除非您想深究其中的技术方法、算法或使用的语言,大多数软件过程主题应当能被不同领域资深管理人员理解。技术背景可能有助于理解这些主题。但不是必须的。另—方面,管理人员也不必为自己对软件技术知之不多而感到难堪。我们软件人员制造那么多错误.如果真要难堪,我们可能要难堪很长时间。
本文摘自:瓦茨·S·汉弗莱著《软件过程管理》
白癜风怎么回事北京哪个医院有白癜风专科