技术开发 频道

软件项目管理过程改进与认知过程

【IT168 技术文章】

    软件项目的过程诊断与改善已经有了很多的有效的参考模型和非常好的实践方法集,其中,最有影响的是SEI的软件过程成熟度模型(SW-CMM/TSP/PSP体系)和敏捷联盟提出的敏捷方法集等。这些模型和方法的提出都基于不同的隐喻,比如,SEI把软件开发过程看作类似于硬件产品的设计与制造过程,关键过程依赖于基于活动和度量的有序过程的管理规范。CMM的基于活动的度量方法和有次序的、基于活动的管理规范与瀑布模型有非常密切的联系(先是需求活动,然后是设计活动,编码活动,单元测试活动,集成活动,以及系统接收测试),过程形成刚性的制度和规范稳定下来。因为CMM的思想受到瀑布式开发思想的很大影响,造成许多组织对CMM的认识停留在瀑布思想上,主要的原因是,以硬件的开发设计过程来类比软件过程。软件开发组织尝试着更加现代和高效的方法改进其项目管理过程,迭代开发技术、软件产业非常好的实践和经济动机驱动组织采用面向结果的过程,重视开发业务案例和原型方案、可用发布、现场版本的发布等,这些方法形成敏捷方法的思想。基于敏捷方法的软件项目过程管理是不同于传统过程管理理念的过程管理方法,过程的可重构性而非稳定性是敏捷过程管理的核心,存在于各种层次的软件过程中,而这些能力在CMM里被认为是在较高级别成熟度的组织中才需要开始考虑并作为管理的重心。敏捷方法集为以过程的可重构性和自组织性为中心的过程度量、控制、改进提供了丰富的手段与思想。过程的动态性体现于定义、执行、控制过程,过程的执行是过程管理的一部分,即过程的动态自组织性(自适应)。

    以传统的生产制造项目和工程建设项目BPR和BPI的方法来进行软件项目的过程改进是不适合的。各个敏捷方法集基于各种各样的隐喻,如极限运动(XP极限编程)、橄榄球赛(SCRUM)、自适应系统(ASD)、集市(Open Source)等,把软件过程作为一个探索过程,不断的以经济原则对客户需求和技术需求进行评判和选择。而总的来说,新提出的软件项目过程模型大多与生物进化过程进行类比,在生物进化过程的隐喻下把软件开发过程看作一个智能体成长的过程,这个智能体一般认为是一个软件产品,或更深刻的认为是一个软件开发组织的知识结构,进化的动力是经济动机和残酷的市场选择。

    软件项目的产品和加工对象都是“软”的信息,软件产品的特点与硬件产品相差太大。事实上,从某种意义上说,软件开发组织为客户提供的不是或不只是软件产品,而是客户所需要的信息,软件产品只是为客户提供信息服务的自动化代理而已。因此,可以为软件开发提出另一个隐喻——信息加工处理过程,即认知过程。

    以信息为产品和加工对象的软件生产与一般的硬件生产过程有根本的不同,软件过程是生产制造过程和信息加工处理过程(即认知过程)的混合过程,而且信息加工过程是软件过程中最核心的过程。以信息加工的观点来解释软件开发过程,认为软件开发过程就是信息的接受、编码、贮存、提取和使用过程。可以把这一过程概括为由四种成分所组织成的模式,即感知系统,记忆系统,控制系统和反应系统。感知系统接受由环境提供的信息,即首先把输入的基本特征抽取出来加以组合;记忆系统是对输入信息的编码、贮存和提取活动;控制系统决定目标的先后顺序,监督当前目标的执行;反应系统则控制信息的输出。这个基于信息处理过程的开发过程并不是按上述顺序单方向进行的,各种成分之间存在着不同方式的相互作用,以保证对信息的加工、输出和反馈,沟通人与环境之间的联系。

    在认知过程的隐喻下,软件项目被认为基于一个建构主义的过程模型,包括了学习与创新的行为,学习不简单是业务知识由外到内的转移和传递,而是学习者(开发者或是客户)主动地建构自己和组织的知识经验的过程,即通过新经验与原有知识经验的相互作用,来充实、丰富和改造自己和组织事实的知识经验。软件项目过程的认知过程参考模型把软件生产过程定义为信息的加工处理过程,软件过程能力是一个认知能力层次概念。

    软件的开发过程是一个信息的加工处理过程,构成一个认知环境下的知识循环(如图1)。

图1 认知模型下的知识循环

    客户的需求,以客户所习得的知识和经验为背景,是以客户的概念、符号和语言表示的信息,软件开发组织中的软件分析人员在获得客户需求表达之后以自己的知识和经验为基础,开始学习过程,在学习客户需求、理解客户的概念、符号和语言的成果上,构建自己的信息系统和知识结构,进而创造出新的以软件专业的概念、符号和语言表示的信息产品,即需求确认文档和系统分析设计报告。这些信息适宜于在软件开发组织内部环境中开发者之间的流动和创新,程序员的责任是把这些信息加工成计算机可以理解的概念、符号和语言,由计算机系统解释和编译。计算机系统是开发者和客户之间的智能媒介,软件的指令控制计算机系统把客户需要的信息转化为客户可以理解的概念、图像、符号和语言表示,传达给客户,实现最终的信息产品。而这还不是整个过程的结束,信息系统必须接受使用者的反馈信息进行持续的运行,所以,客户必须通过理解和应用软件的输入输出信息构建新的知识结构,反馈到信息加工过程,使软件组织和软件产品进行新的学习、改变和创新,使软件组织的知识结构和软件产品的功能结构对反馈信息做出适应性的变化。

    在整个信息加工处理过程中,有三个主要的信息处理器:客户、软件开发者和计算机。软件是在客户→开发者→计算机→客户的信息处理循环过程中构建而成,循环过程中,信息的形态不断发生改变:客户的业务术语表示→软件开发专业术语表示→编程语言→计算机交互表示。

    我倾向于把软件过程认为是一个存在于包括了客户、开发者和计算机系统三个主体在内的完整系统中的知识建构过程,而不是一个仅仅局限于软件开发组织内部的设计制造过程。各个主体都是一个智能体,必须对另外两个主体的信息表示进行学习和加工处理,进而建立自己的知识结构,而软件产品是联结这几个主体的媒介。因此,软件设计开发不是在客户需求形成文档时完成的,不是在编译成机器语言时完成的,也不能说是在交付给用户使用时完成的。客户的目标是信息而非软件,软件是在这个知识循环中为了不断向客户提供其所需信息而构建的信息加工结构。

    把软件开发过程作为一个信息加工过程,可以从人类认知过程的信息加工理论中得到很多启发。

    软件开发过程的SW-PASS模型,将软件生产的过程表示为由计划过程(Planning)、注意力过程(Attention)、同时性加工过程(Simultaneous processing)和继时性加工过程(Successive processing)核心过程构成的有机整体。

图2 SW-PASS模型
0
相关文章