注意力过程是所有过程的基础,是最低层次和最基本的过程,使敏捷过程实现快速的市场反应和合理的资源配置;加工过程处于中间层次,同时性过程和继时性过程实现业务需求向软件产品的编码过程;计划过程是主动适应市场变化的源动力,是系统中较高级的层次。三个层次4个过程以信息的加工处理为中心形成了有机整体。
首先,基于认知过程模型的软件过程基础是注意过程,强调的是注意的选择性和反应的速度。软件过程是以商业目标驱动的,这一点在新的软件工程方法中尤其突出。但事实上,目前软件过程中对业务需求和商业机会的适应很难令人满意。软件开发者和客户都为“什么是需求”而困惑,原因是需求调查与分析的范围过广而难有焦点;因为对每一个需求特性没有建立快速的反馈机制,对于过程的敏捷性得以实现的基础,软件组织在以往过程管理中忽视了如何把注意力集中于一个业务需求的焦点而执行快速的应对流程。注意过程在CMM和敏捷方法中都有很多体现,如CMM中的SSM、SPTO、OPF、DP、TCM等,而在敏捷方法中注意力更是其快速、适应和客户满意度的竞争力源泉。
注意是由商业目标驱动的,包括注意的选择和反应的速度。而注意的选择性在软件开发组织中意味着开发者需要暂时的放弃,XP方法中的YAGNI原则和测试在先方法是注意选择性的例子。在软件开发过程中的注意选择主要应该是理性的。XP的计划博弈是在客户与开发者共同参与的博弈过程中对开发焦点进行的选择。FDD把特性放在开发流程的首要位置,而由特性来驱动后序的软件开发,也是为了使开发工作能够找到稳定的焦点。为了提高反应的速度,敏捷方法中有很多的原则,如:小版本,测试在先,40 小时工作制,简单设计,迭代方法的应用等。目的在于在一定时间内把开发工作集中于尽量小的目标从而得到快速的交付物。
在焦点集中快速反应的注意机制基础上,存在两种信息加工过程:同时性加工过程和继时性加工过程。传统的过程管理理论过于强调过程的顺序性的特点,在继时性加工过程上的分析很多,如CMM的PR和SQA、SQM等,而在同时性加工能力的提高上则范围过窄,如SCM、ISM、SPE。信息加工的主要功能是接受、加工、维护输入的信息,同时性加工进行同步性的整合,如以体系结构为中心的软件过程和持续集成、设计模式,继时性加工进行信息的序列组织,如瀑布模型、迭代方法。过于强调过程的顺序性而忽视同时性、并发性,造成在很多软件组织中,一两个人组成的项目团队可以快速、高效的完成优秀的软件产品,而当成员增加时,效率就大大下降,软件功能不能使客户满意,这不能简单地解释为沟通协调问题,更多的是过程的同时性加工能力太差。分析模式和设计模式概念的提出对过程的同时性加工能力和继时性加工能力提高有极大的意义,可以解决以体系结构为中心的开发过程的结构重用问题,大大提高了体系结构的清晰性和成熟性。
为了提高同时性加工的速度。XP方法中提出了隐喻方法,试图在模式和体系结构之外找到一个沟通成本更少,内涵更丰富的原型,提高开发的同时性加工能力,但实践证明,隐喻是XP中很不成功的一个部分,也说明同时性加工过程的问题比想象中更难解决。XP的另一些方法——持续集成、重构是非常成功的同时性加工过程,持续集成使组织在任何时候都能提供一个可交付的系统全貌,频繁地进行功能的全面检验。而重构是为了打破原有迭代和模块开发造成的混乱状况,革命性地对系统的内部结构进行新的模式识别和模式创新。
计划过程是软件过程中的最高层次,为组织提供了分析活动、解决问题、评价成果的能力。计划过程是CMM的强项,如SPP、RM、TP、IC、QPM、PCM等,也是PMBOK很重视的方面。敏捷方法中不强调计划,但不是不强调计划过程,如XP中的小版本、计划博弈、结对编程、测试在先等都是很强的计划过程。
注意、信息加工和计划过程共同作用,相互影响。
PASS模型的目的是为给组织提供合适的软件开发环境,有利于软件组织的发展,有利于挖掘缺陷所在,并帮助组织克服这些缺陷。PASS不只用认知过程的角度来评价和鉴别各种类别的软件组织,更便于提供一个对组织过程的缺陷进行诊断的框架。
PASS模型的三个层次对于过程的诊断与改善是很重要的。一般的BPR理论以流程的核心程度、具体程度来划分层次。CMM以能力成熟的时间阶段性来划分层次,但过程自身结构的层次性以PASS来表示非常清晰。注意过程是基础层次,是组织对变化的适应、反应和反馈的基础过程。这一过程的敏捷性,决定了组织在市场应变能力、组织运行效率和软件产品服务质量的基本能力,以往以瀑布模型为主要参考过程的大多是因为在这一层次上敏捷性太低而造成计划过程的失灵和加工过程的低效。
但过分强调注意过程也产生问题。目前很多组织应用敏捷方法时难以成功的一个原因是过分强调适应、反馈,忽视了计划和加工能力的提高,把开发过程看作一个探索过程,把注意力只集中于客户需求的优先级,这虽然可以抓住一些市场机遇,或快速发现开发中的质量问题,但过程缺少全局和长远的建构过程指导,造成开发代价过高。
不同加工过程使软件开发过程形成不同的视图。从继时性加工角度,开发过程是迭代和增量的,从同时性加工角度,开发过程是演进的。把加工过程分为同时性加工过程和继时性加工过程使原来混淆的过程性质变得清晰,组织可以从而找到软件过程的缺陷而进行补救。
要保持同时性加工过程与继时性加工过程的平衡。重视继时性加工,如FDD,很难保证所有工作的整体性和同步性,常会造成一个需求的代码和测试已经完成大部分时才发现与整个体系结构或另外一些功能的冲突,或造成过长的接受测试反馈周期。过于强调同时性,容易形成复杂的计划,混乱的标准。如目前很多基于WEB的开放代码GNU开发,使系统混合了太多的标准和版本,影响到非专业用户的应用推广。所以合理的方法组合是必要的,如集成测试+单元测试,结对编程+重构。 项目管理者联盟,项目管理问题。
计划过程是较高级也是对其他过程影响最大的,忽视全局的严格的计划,一味追求市场需求的机会和挑战,不是一个成熟的开发过程。计划过程是决策中理性的方面,但即便CMM也有计划层次上的一些弱点,如需求适应的敏捷性容易低效,一个原因是把需求变化的管理放在配置管理和需求管理的内容中,而没有把关于需求适应的决策过程融入软件项目的全过程中,敏捷方法不强调计划,但理性决策更多的渗透到注意过程和加工过程,使敏捷方法具备其竞争力。