A. 从技术和管理方面谈谈如何提高软件的可维护性
建立明确的软件质量目标和优先级
一个可维护的程序应是可理解的、可靠的、可测试的、可修改的、可移植的、效率高的和可使用的。但要实现这所有的目标,需要付出很大的代价,而且也不一定行得通。因为某些质量特性是相互促进的,例如可理解性和可测试性、可理解性和可修改性。但另一些质量特性却是相互抵触的,例如效率和可移植性、效率和可修改性等。因此,尽管可维护性要求每一种质量特性都要得到满足,但它们的相对重要性应随程序的用途及计算环境的不同而不同。
2使用提高软件质量的技术和工具
模块化是软件开发过程中提高软件质量,降低成本的有效方法之一,也是提高可维护性的有效的技术。它的优点是如果需要改变某个模块的功能,则只要改变这个模块,对其他模块影响很小;如果需要增加程序的某些功能,则仅需增加完成这些功能的新的模块或模块层;程序的测试与重复测试比较容易;程序错误易于定位和纠正;容易提高程序效率。使用结构化程序设计技术,提高现有系统的可维护性。采用备用件的方法,当要修改某一个模块时,用一个新的结构良好的模块替换掉整个模块。这种方法要求了解所替换模块的外部(接口)特性,可以不了解其内部工作情况。它有利于减少新的错误,并提供了一个用结构化模块逐步替换掉非结构化模块的机会。采用自动重建结构和重新格式化的工具(结构更新技术)。采用如代码评价程序、重定格式程序、结构化工具等自动软件工具——把非结构化代码转换成良好结构代码。改进现有程序的不完善的文档。改进和补充文档的目的是为了提高程序的可理解性,以提高可维护性。采用结构化小组程序设计的思想和结构文档工具。软件开发过程中。建立主程序员小组,实现严格的组织化结构,强调规范,明确领导以及职能分工,能够改善通信、提高程序生产率;在检查程序质量时,采取有组织分工的结构普查,分工合作,各司其职,能够有效地实施质量检查。同样,在软件维护过程中,维护小组也可以采取与主程序员小组和结构普查类似的方式,以保证程序的质量。
3进行明确的质量保证审查
质量保证审查对于获得和维持软件的质量,是一个很有用的技术,还可以用来检测在开发和维护阶段内发生的质量变化。一旦检测出问题来,就可以采取措施来纠正,以控制不断增长的软件维护成本,延长软件系统的有效生命期。为了保证软件的可维护性,有4种类型的软件审查。
在检查点进行复审。保证软件质量的最佳方法是在软件开发的最初阶段就把质量要求考虑进去,并在开发过程每一阶段的终点,设置检查点进行检查。检查的目的是要证实已开发的软件是否符合标准,是否满足规定的质量需求。在不同的检查点,检查的重点不完全相同。如图1所示。
验收检查。验收检查是一个特殊的检查点的检查,是交付使用前的最后一次检查,是软件投入运行之前保证可维护性的最后机会。它实际上是验收测试的一部分,只不过它是从维护的角度提出验收的条件和标准。
周期性地维护审查。软件在运行期间,为了纠正新发现的错误或缺陷,为了适应计算环境的变化,为了响应用户新的需求,必须进行修改。因此会导致软件质量有变坏的危险,可能产生新的错误,破坏程序概念的完整性。因此,必须像硬件的定期检查一样,每月一次或二月一次,对软件做周期性的维护审查,以跟踪软件质量的变化。周期性维护审查实际上是开发阶段检查点复查的继续,并且采用的检查方法、检查内容都是相同的。为了便于用户进行运行管理,适时提供维护工具以及有关信息是很重要的。
维护审查的结果可以同以前的维护审查的结果、以前的验收检查的结果和检查点检查的结果相比较,任何一种改变都表明在软件质量上或其他类型的问题上可能起了变化。对于改变的原因应当进行分析,例如,如果使用的是复杂性度量标准,则应当随机地选择少量模块,再次测量其复杂性。
对软件包进行检查。软件包是一种标准化了的,可为不同单位、不同用户使用的软件。软件包卖主考虑到他的专利权,一般不会提供给用户他的源代码和程序文档。因此,对软件包的维护采取以下方法。使用单位的维护人员首先要仔细分析、研究卖主提供的用户手册、操作手册、培训教程、新版本说明、计算机环境要求书、未来特性表,以及卖方提供的验收测试报告等,在此基础上,深入了解本单位的希望和要求,编制软件包的检验程序。该检验程序检查软件包程序所执行的功能是否与用户的要求和条件相一致。为了建立这个程序,维护人员可以利用卖方提供的验收测试实例,还可以自己重新设计新的测试实例。根据测试结果,检查和验证软件包的参数或控制结构,以完成软件包的维护。
B. 计算机技术因素如何改进
计算机应用技术是指利用可以利用的任何一种计算机软件的功能,为人们提供一定的服务。从广义的层面将,所谓的计算机应用技术,就是计算机的所有软件的所有功能给人们生产生活等带来的变化与积极影响。本文将从我国计算机应用技术现状入手,阐述计算机应用技术的发展及出现的问题,提出一定的改进措施。
C. 软件如何用CMMI改进过程
软件过程改进是一种含有大量管理成分的工作技术它主要包括以下三个关键步骤:a)对比目前的状态和期望达到的状态,找出存在的差距;b)确定要改变哪一些差距,要改变到什么程度;c)制定相应的具体的实施计划,其中的“具体”是指:1)要有明确的可以检验的目标;2)要定出检验成功与否的标准;3)要有具体的实施办法;4)指定具体执行计划的人,并明确具体的职责与任务;5)
要明确执行计划的主要领导或协调者,以负责解决在计划执行中出现的问题;6)要列出“实施计划”用的新技术与新工具以及如何获得这些新技术与新工具。
D. 软件维护的不足与改进方式
咨询记录 · 回答于2021-10-21
E. 如何提高软件研发的效率
1、提高代码的规范性。编码规范 可以提高代码的可读性,并且在代码修改的时候很容易。
2.对功能进行分类,并拆分。分析出几种处理逻辑。编写代码时,部分代码可以。可以提编码速度。
3.对功能进行分类,并合并。提出共通类。
4.不同的package对应不同的功能。
简单的说,每天写几百行代码。坚持半年或者1年,就知道什么方式是适合你的了。 不写代码,光想,十年也还是那个水平。每个人的逻辑思维是不一样的,写代码的方式也是不一样的。有时间问,还不如多写写。或者,自己模拟现实个场景(或公司管理制度之类的),然后实现。写几个,很自然的就知道自己该怎么写了。
F. 软件进一步改进思路
软件还在完善之中,还需更多的工程实践加以对比分析,从而进一步细化软件模型的推导,提高软件预测的准确性。具体的改进思路如下:
1)钻遇角和“车轮效应”运用非线性计算,提高模型预测精度;
2)考虑井身结构、地层扩径系数等因素对井眼轨迹的影响,提高预测精度;
3)与可视化编程语言LABview结合使用,进一步改善软件界面友好性,使界面美观化、人性化;
4)软件功能扩展,例如:根据设计井眼轨迹和预测轨迹,给出更合理的钻进工程参数以及泥浆性能参数等,使其对钻井施工有一定的指导意义;
5)数据录入和结果输出更方便快捷,预测成果展示方式更丰富;
6)软件中嵌入数据库技术,加强数据成果管理能力,科学挖掘使用数据成果,获得更有价值的钻井技术数据。
G. 软件过程改进的五条原则
SPI的五条核心原则分别是:
1·注重问题 2·强调知识创新3 ·鼓励参与 4·领导层的统一 5·计划不断地改进。
“问题的解决是过程改进的核心,实践不仅是SPI组的目标也是它的起点。”这条原则为过程改进人员指明了目标,明确了方法。SPI就是要在实践中发现软件过程中的问题,并在实践中寻找和找到解决问题的办法,可以说过程改进就是在不断发现问题和解决问题的过程中不断向前发展。
“改进是一种知识的创新,SPI是受知识的驱动的”。这条原则强调了知识创新在SPI中的作用,提醒了SPI人员在注重知识创新的同时更要注重知识的传播和扩散。
通常从事SPI工作的做法是,过程改进仅仅是过程改进人员的事情,其他人员只是被动地接受。而“合作促使改进产生”这条原则给予了我们很好的启发和提示。它告诉我们,过程改进不仅仅是一个人或几个人的事情,而是整个组织的事情。只有鼓励大家都积极参与,让这些人基于自身的经验和职业的判断力来实实在在地设计和开发新的过程,才能使设计出来的过程真正为他们所理解,为他们所用,从而实现过程的成功。这也是我们在过程改进工作中容易疏忽的地方。
“SPI的关键点在于改变软件开发的方式。然而,改变人的行为并不是件容易的事。”这条原则分析了我们在这项工作中可能会遇到的困难和阻力,本书中也不忘为我们提供了如何克服这些问题的可行方法、建议和实例。
“改进必须是综合了各个层次的人的力量。”SPI人员一定要保证SPI的目标与组织的整体目标是一致的,因为只有这样才能保证SPI工作得到各个领导层的赞同、支持和投入,才能综合利用各个层次的力量来推动SPI工作的前进。这是预防过程改进项目风险的重要手段。
“改进应该是一个不断持续的过程。”这一原则进一步提示和告诫SPI人员一定要认识到改进的不断持续的特性。到达顶点并不重要,关键的是,你现在处在一个上升??达一个目标你就创造了另一个更高的目标,这个目标对我们的过程和环境都具有重要的意义。
这五条原则是从实践中发展而来、相互关联的SPI哲学,对我们SPI工作具有非常重要的指导作用。
H. 软件过程改进的策略
重诊断,轻评估 以诊断和解决企业实际问题为SPI方法论,不追求商业评估。以往实施ISO9000的过程中发现,企业拿证书的愿望常常会冲淡“真正改进”的目的。所以,除非不得已,建议一开始不要把商业评估作为目标,以便将焦点集中在“改进”上。的确,一旦进行商业评估,难保不急功近利,限期取证。SPI如同“治病”,多长时间治好怎么可以人为规定呢?
重诊断,正是前述自底向上方法论的具体贯彻。根据企业的不同状态和症状,实施有针对性的方案,将有望设计出实用性更强、效率更高的应用模型。
重实施,轻宣传 我们不妨来看一组数据,这是北京SPIN去年发起的一次调查,提问是“您认为软件企业中开发不规范,不能突破管理瓶颈的原因是什么?”
可见,以往我们多年来实施ISO9000这样的体系,但效果差得可怜(客户满意度12%)。
据报道,中国通过ISO9000的企业超过了日本和韩国,但是中国并没有因此成为质量强国!
ISO9000在软件企业的现状,并不能仅仅归结于ISO9000不适合软件企业这一点上,更大的问题在于,人们对体系的“可实施性”研究和重视得不太够。
所以我们提出以高的“过程实施率”(定义的文档被很好的遵守)和“过程性能改善”为SPI目标,不追求宣传效应。 实施制度化的同时,并行实施企业文化;既要施压,又要清障。
中小企业往往制度化体系很不健全,存在着随意决策的管理习惯,甚至基本的企业纪律都不具备,企业还处于“人治”和“法制”的争论中,这样的状态和某些大企业实施SPI的状况是不同的,需要特别强调行政施压。由于缺乏统一的企业文化,所以理念的统一也要加以重视。
CMM的实质是制度化体系,实施CMM也是实施全面制度化的有效途径。但是制度和组织文化总是辨证存在的,没有良好的文化保障,制度化将困难重重,而没有制度的支撑,文化也将是无源之水。企业文化的实施从改造企业价值观开始,价值观是企业文化的核心,一个企业中如果好的行为不能得到鼓励,坏的行为不能得到惩罚,那怎么能倡导出有利于制度生存的价值观呢?
两手抓还包括另外一个层次的含义,过程改进要加强推进和减少阻力并重。这针对两种现实中的错误认识:一种认为,员工都是自觉的,只要把道理讲清楚了,制度就能得到实施。这种假定是不现实的,如同法律,如果假设人们都是遵纪守法的,那么法律本身就没必要存在了。实际情况是,人们在组织中总是有区分的,有的人主动顺应变革,有的人推一推也能动,有的人可能推十下也不动,从而成为变革的障碍。所以变革的落实需要一个强的“推力”。另外一个观点刚好相反,认为没必要对员工讲为什么,只要告诉怎样做就行了。这又走到另外一个极端,体系在强力的推动下可能会暂时得到执行,但是由于并没有解决观念转变的问题,一定难以持久。 要推行配置管理工具和项目管理工具这两种工具,工具将有效分解事务性工作,从而缓解人力资源投入不足的矛盾。
配置管理工具根据不同的平台推荐使用VSS和CVS,项目管理工具使用微软公司的MSP。使用工具,可有效分解管理工作量,提升工作效率;有助于管理制度的真正落实,使体系更加固定化。 为了解决基础薄弱的问题,需要在SPI前期为企业补基础管理和基本软件工程两门课。
CMM的设计是以美国的软件企业为研究对象,它假定企业在实施CMM前,已经具备了基本软件工程和基本管理的能力,所以有“先管理、后工程”的观点。就是先把项目管理到位,再实施软件工程(即软件工程到位)。
但是这个假定对于绝大部分的中国软件企业是不成立的。
软件企业需要补的基础管理内容包括:基本时间管理、角色转变、目标管理、沟通管理、基本人力资源管理等。基本软件工程则包括基本的软件工程生命周期、阶段划分、基本文档编制等。 按照ISO9000的说法叫全员参与,分成三个层面就是:
一是高于项目管理的层面,称为高层经理。他们提供资源和战略两方面的支持,所以高层经理应该对体系总体架构、体系实施必要性、可行性、障碍和风险、资源等负有责任。
二是项目管理层面,含项目经理和SPI人员。SPI人员作为制度化体系的执行者和推行者应该加强自身修养,要求别人的事,一定要自己能做到。而项目经理作为主要的一线实施人员,需要对整个体系的细节有深入了解和研究,应该把日常工作时间的30%~50%放在工程化管理相关事宜上,要贯彻公司的SPI整体制度,积极主动在项目组内进行推行。
三是项目组成员,包括开发和测试人员,要求团队以纪律性要求自己,做好局部和整体、短期和长期的矛盾平衡。
特别要关注试点项目的PM(项目经理)选择,选择好的PM意味着SPI一半的成功。
需要说明的是,自底向上并不是绝对不做正式评估,如果需要,等到水到渠成再实施评估,不仅使得过程改进更实在,而且只需投入少量的资金就可获得评估。
I. psp4000的软件改进
软件改动
一:屏幕锁定 即:**指针时钟**作画面
二:固件中增加CPU**被屏蔽的内容**
三:系统改进 更省电 因采用新的CPU制程(45纳米)技术(比原来的PSP1000,PSP2000,PSP3000省电一半)游戏时间更长 几乎是以前掌机的一倍多
四:系统安全增加 无法破解 采用新的防破解技术!!无法安装自制系统以及运行盗版游戏和自制软件
五:可直接在系统下调整CPU频率 两个CPU可同时调整
六:两个CPU同时为默认频率环境下 运行游戏更快 更流畅
七:增加PS1模拟器插件 可直接运行PS2转换后的游戏文件
八:PS3主机可与PSPgo联机后 直接用PS3主机上的手柄控制PSPgo的游戏画面 可当PS4的显示屏
九:系统固件增加skype聊天软件
十:可玩性更高 可与支持蓝牙的手机互传文件共享资源
十一:运算速度增加 提升性能50%左右
十二:增加无转视频播放(Real播放功能 该技术有可能不在PSP4000中增加 可能在PSP5000中增加)
十三:无线蓝牙手柄技术 (需要购买PSP4000专用手柄)于2009年年底推出!
十四:新的PSP4000将增加专用的网络游戏!游戏内每个房间人数增至16人 增强互动性 增加的游戏有(怪物猎人PSP网络版 梦幻之星PSP网络版 真三国无双PSP网络版 无双大蛇PSP网络版 等
十五:网络电话功能
十六:增加语音PSP游戏!
十七:增加模式选项(PSP4000共有两个选项 基本模式和游戏模式)
PSPgo待机时间大揭晓
PSPgo基本模式下(CPU频率111 即两个CPU同时运行下待机时间约8-10小时)
PSPgo游戏模式下(CPU频率222 既两个CPU同时运行下待机时间约6-8小时)
基本模式下 能运行PSP游戏 基本玩游戏 无法启动录制游戏功能 可运行音乐 视频文件 等等基本功能
游戏模式下 能运行PSP的游戏录制功能 并正常玩PSP游戏 能够运行所有固件系统下的功能
J. 谁知道如何提高软件质量
【摘要】 软件质量是软件产品的灵魂。本文全面介绍了质量的概念,提出了从流程、技术、组织管理、人员技能发展等多个角度提高软件质量的重要性;并对目前国际上流行的 CMM 标准进行了介绍,提出了使用 PSP 和 TSP 来实现 CMM 的方法。本文最后还给出了中小型软件公司在提高软件质量方面的一个初步思路。【关键字】 质量管理,软件开发过程模型,软件分析和设计方法,软件测试, CMM 如何提高软件的质量已经不是一个纯粹的技术问题,而是一个工程的问题。自从计算机诞生以来,相应的软件开发就存在了。由于早期的计算机运行性能较低,软件的可编程范围也较狭窄,因此质量问题就没有那么突出。 50 年代后期到 60 年代,高级语言的相继诞生并得到了广泛的应用,随之而来的是软件规模也越来越庞大,越来越复杂。伴随着软件应用的越来越广泛,软件的质量问题就变得越来越突出。根据美国国家宇航局 NASA 的统计,在 80 年代初,软件引起的故障与硬件引起的故障,其比率约为 1.1:1.0 ,到了 80 年代末,这一比率已达到 2.5:1.0 。因此如何提高软件的质量成为软件工程研究的一个重点。自从软件危机产生以来,出现了很多提高产品质量的理论和方法,有的从技术角度出发,例如:面向对象技术的产生和推广,第四代语言的诞生等等;有的从自动化工具入手,例如: CASE 工具、过程控制软件、自动化管理平台等;有的从过程模型角度出发,例如:迭代模型、螺旋模型、 RUP 、 IPD 、净室软件工程等;也有从管理角度出发的,例如:团队管理、绩效管理、 PSP 、 TSP 等;也有从测试角度出发的,例如:加强全流程的测试等;一些相应的规范和标准也孕育而生,例如: ISO9000 系列、 CMM 、 QMS 等。然而每一种技术都不是绝对的,软件质量的提高应该是一个综合的因素,需要从每个方面进行改进,同时还需要兼顾成本和进度。一、什么是质量? 作为软件产品的销售人员,市场人员或维护人员经常会受到客户这样那样的指责或抱怨,客户说:你们产品的质量太差,不稳定等等。那么什么是质量呢?我们该如何来衡量质量呢?质量具有三个维度:" 符合目标。目标是客户所定义的,符合目标即判断我们是不是在做需要做的事情。" 符合需求。即产品是不是在做让它做的事情。" 符合实际需求。实际的需求包括用户明确说明的和隐含的需求。ISO 关于质量的定义表示如下:“ 一个实体(产品或服务)的所有特性,基于这些特性可以满足明显的或隐含的需要。 ” 注意,在这个定义中包含明显的需求和隐含的需求。而往往我们会忽略隐含的需求。因此在控制一个产品的质量的过程中必须关注这些隐含的需求,并给予应有的验证。 另一方面因为我们的产品是为客户提供服务的,因此凡是不满足客户需求的,我们都认为是一个失效( failure )。所以我们的产品必须始终围绕着客户的需求进行开发和验证。 这里我们谈到客户,其实在一个软件的需求收集过程中需要关注客户和用户。而我们经常会忽略客户与用户之间的区别。那么谁是客户?谁是用户呢?简单的来说, 客户是真正能够决定是否购买你软件的人,而用户是实际使用软件的人。了解了这个区别,对于你在分析需求的重要性的时候就可以进行参考。同时在产品质量验证 的时候也可以做出不同的权衡。另一方面我们在考虑我们用户需求的时候,往往只考虑了实际使用软件的人员,而忽略了其它一些人员对软件的要求或对软件造成的 潜在竞争,这包括维护人员的要求、系统管理人员的要求、软件上下游人员的要求、先前版本的情况、市场上竞争对手的软件情况等。 每个人提到质量的时候,经常会遇到下列矛盾,在这些矛盾中隐含着对质量的承诺【 5 】:" 质量需要一个承诺,尤其是高层管理者的承诺。但为了得到质量,高层管理者必须和其雇用的员工进行紧密合作;" 许多人相信没有缺陷的产品和服务是不可能的。但是控制在一定级别的缺陷数是正常并可接受的;" 质量经常是和成本紧密联系在一起,一个高质量的产品同时也意味着高投入。这是设计的质量和一致性质量的一个矛盾;" 一个高的质量要求需求规格说明书足够详细,以便产品可以根据这些规格说明书进行定量的分析。然而许多组织没有能力或者不愿意产生如此详细程度的规格说明书;" 技术人员经常相信规范和标准会束缚他们的创造力,因此就不遵照标准做事。然而如果要得到高质量的产品,就必须遵循良好定义的标准和过程。二、流程对质量的贡献 好了,既然已经了解了什么是质量,那么怎么才能改进软件产品的质量呢?从一个企业的长远发展来看,首先应当从流程抓起,规范软件产品的开发过程。这是一个 软件企业从小作坊的生产方式向集成化、规范化的大公司迈进的必经之路,也是从根本上解决质量问题,提高工作效率的一个关键手段。 软件产品的开发同其它产品(如汽车)的生产有着共同特性,即需要按一定的过程来进行生产。在工业界,流水线生产方式被证明是一种高效且能够比较稳定地保证 产品质量的一种方式。通过这种方式,不同的人员被安排在流程的不同位置,最终为着一个目标共同努力,这样可以防止人员工作间的内耗,极大的提高工作效率。 并且由于其过程来源于成功的实例,因此其最终的产品质量能够满足过程所设定的范围要求。软件工程在软件的发展过程中吸取了这个经验并把它应用到了软件开发 中,这就形成了软件工程过程,简单的说就是开发流程。 无论做什么事情,都有一个循序渐进的过程,从计划到策略再到实现。软件流程就是按照这种思维来定义开发过程,它根据不同的产品特点和以往的成功经验,定义 了从需求到最终产品交付的一整套流程。流程告诉我们该怎么一步一步去实现产品,可能会有那些风险,如何去避免风险等等。由于流程来源于成功的经验,因此, 按照流程进行开发可以使得我们少走弯路,并有效的提高产品质量,提高用户的满意度。 目前流行的流程方法有很多种,不同的过程模型适合于不同类型的项目。瀑布模型是应用的最为广泛的一种模型,也是最容易理解和掌握的模型,然而它的缺陷也是 显而易见的。遗漏的需求或者不断变更的需求会使得该模型无所适从。然而,对于那些容易理解但很复杂的项目,采用瀑布模型会是比较适合的,因为你可以按部就 班的去处理复杂的问题。在质量要求高于成本和进度要求的时候,该模型表现的尤其突出。螺旋模型是也是一个经典模型,它关注于发现和降低项目的风险【 8 】。螺旋型项目从小的规模开始,然后探测风险,制定风险控制计划,接着确定下一步项目是否还要继续,然后进行下一个螺旋的反复。该模型的最大优点就是随着成本的增加,风险程度随之降低。然而螺旋模型的缺点是比较复杂,且需要管理人员有责任心,专注以及有管理方面经验。RUP ( Rational Unified Process )是 Rational 公司提出的一套开发过程模型,它是一个面向对象软件工程的通用业务流程【 9 】。它描述了一系列相关的软件工程流程,它们具有相同的结构,即相同的流程构架。 RUP 为在开发组织中分配任务和职责提供了一种规范方法,其目标是确保在可预计的时间安排和预算内开发出满足最终用户需求的高品质的软件。 RUP 具有两个轴,一个是时间轴,这是动态的。另一个是工作流轴,这是静态的。在时间轴上, RUP 划分了四个阶段:初始阶段、细化阶段、构造阶段和发布阶段。每个阶段都使用了迭代的概念。在工作流轴上, RUP 设计了六个核心工作流程和三个核心支撑工作流程,核心工作流轴包括:业务建模工作流、需求工作流、分析设计工作流、实现工作流、测试工作流和发布工作流。核心支撑工作流包括:环境工作流、项目管理工作流和配置与变更管理工作流。具体可以参考图 1 。 RUP 汇集现代软件开发中多方面的最佳经验,并为适应各种项目及组织的需要提供了灵活的形式。作为一个商业模型,它具有非常详细的过程指导和模板。但是同样由于该模型比较复杂,因此在模型的掌握上需要花费比较大的成本。尤其对项目管理者提出了比较高的要求。图1 RUP 工作流程示意图IPD ( Integrated Proct Development )流程是由 IBM 提出来的一套集成产品开发流程,非常适合于复杂的大型开发项目,尤其涉及到软硬件结合的项目。 IPD 从整个产品角度出发,流程综合考虑了从系统工程、研发(硬件、软件、结构工业设计、测试、资料开发等)、制造、财务到市场、采购、技术支援等所有流程。是 一个端到端的流程。在 IPD 流程中总共划分了六个阶段(概念阶段、计划阶段、开发阶段、验证阶段、发布阶段和生命周期阶段),四个个决策评审点(概念阶段决策评审点、计划阶段决策评 审点、可获得性决策评审点和生命周期终止决策评审点)以及六个技术评审点,具体可以参考图 2 。 IPD 流程是一个阶段性模型,具有瀑布模型的影子。该模型通过使用全面而又复杂的流程来把一个庞大而又复杂的系统进行分解并降低风险。一定程度上,该模型是通过 流程成本来提高整个产品的质量并获得市场的占有。由于该流程没有定义如何进行流程回退的机制,因此对于需求经常变动的项目该流程就显得不大适合了。并且对 于一些小的项目,也不是非常适合使用该流程。图2 IPD 流程示意图三、流程与技术 流程和成功不是等价的。没有流程就成功是不可能得到保证,但有了流程并不意味着肯定能够成功。这恐怕是很多迷信于流程的人所不能接受的。但这的确是个事实。记得有个做了将近 30 多年的需求分析专家说过:即使是一个已经达到 CMM4 级的公司,也完全有可能做不好需求分析。为什么?技术,技术是成功的另外一个必要条件。就好比现在你要从上海到北京去,流程给你指出了最短的路径,技术提供给你最快的交通工具。两者结合就是完美。 对于软件开发来说,要保证软件的质量,需要掌握多方面的技术,包括分析技术、设计技术、编码技术和测试技术等等。在国内有一个普遍的非正常现象,就是大家 觉得只有编程能力才是玩电脑的真正技能。就好像造一套房子,其它都不重要,只要砖瓦匠有高超的技能就行了。尽管这个比喻会打击很多程序员的自尊心,但这的 确是一个事实。我们缺少系统级的工程师,在分析和设计方面的工作做得很不扎实。需求是一个项目的灵魂。模棱两可的需求带来不可避免的后果便是返工 —— 重做一些你认为已做好的事情。返工会耗费开发总费用的 4 0 % ,而 7 0 % ~ 8 5 % 的重做是由于需求方面的错误所导致的( l e ff i n g w e l l1 9 9 7 )【 10 】。想象一下如果你能减少一半的返工会是怎样的情况?你能更快地开发出产品,在同样的时间内开发更多、更好的产品,甚至能偶尔回家休息休息。在《软件需求》一书中关于如何进行需求分析给出了比较详细的介绍【 7 】, RUP 中关于需求的指导也是很实用的。 设计是最能体现一个工程师能力和水平的环节。一个好的设计基本上决定了产品的最终质量。设计是把需求转换成系统的一个关键步骤,它需要从自然语言描述的需求中寻找出设计的基础单元,构建出整个系统的构架。在 RUP 中关于系统构架师和设计师的定位是相当高的。关于设计方面的技能涉及面是很广的,包括传统的结构化设计到面向对象设计。设计人员需要掌握一定的建模技术。 UML 是国际上比较流行的一种建模语言【 11 】。在嵌入式方面, SDL 也是一种非常好的选择。《设计模式》是在设计思想方面总结的非常出色的一本书【 6 】,作为一名设计人员(尤其是面向对象设计人员)必须要好好研究一下。但是对这些模式的应用应当讲究一种自然的应用,千万不要因为模式而去设计模式,否则会适得其反。 现在的程序员热中于掌握多种编程语言,或者讲究语言的过分技巧化,而往往忽略了编程语言的规范化。不规范的语言应用给程序的可理解性、可维护性以及可测试 性带来了大的伤害,进而损害了产品的质量。某公司曾对中国程序员和印度程序员做过一个测验,这个测验要求参加者对一组数进行排序。测试结果发现,印度程序 员设计的程序使用的算法并不是最优,但却是最不容易出错的,并且几个程序员写出来的代码如出一辙。而几个中国程序员写出的代码,有的非常漂亮,很精练,效 率很高;有的却很冗杂,还有错误。如果大家是在做研究性的项目或纯粹兴趣性的项目,那么充分发挥自己的编程天才也无可厚非。然而,对于一个软件公司,产品 最终是要交给用户的,需要遵循的是一个软件产品的开发工程。因此这类软件的开发需要遵循一定的编程规范,毕竟开发的软件不是自己用,还需要和别人的集成, 还需要给以后版本重用和维护。 测试的技术将在第五节进行阐述。总之流程很关键,技术也很重要,我的观点是:鱼和熊掌,两者都不能放。