【项目管理知识】面向对象软件开发和过程
- 格式:docx
- 大小:10.14 KB
- 文档页数:3
软件开发的过程、模型和分类摘要当代计算机应用的主流是计算机软件,尤其是数据库软件。
掌握正确的开发手段成为了软件开发人员必须掌握和了解的,知晓软件开发的模型,才能达到事半功倍的效果。
关键词软件;开发;模型1 对软件开发的认识打开电脑,各种软件的更新提示窗口不断闪烁,刺激着每一个软件开发人员的神经。
这就要求开发员不断地更新自己的知识库。
要做好软件开发的事情,是一个长时间的过程,要不断积累学习工作经验,在实践中成长。
知识面要宽,还要能够不断补充自己的知识和完善知识结构,更难得的是要有耐心,上帝只垂青刻苦的人。
开发前还要做好准备工作。
一般软件项目在开发前都有系统任务书,系统的目标、任务、结构、功能、规模、进度要求及人员计划、经费等都要包括在内的,这只是基本要求。
针对具体情况,软件开发人员和需求分析人员还要联合对软件项目的细节进行具体分析,必要时还要进行实地调研,然后共同商讨写出系统的需求分析,包括各方面实现的可行性、必要性和分析原系统(工作环境)现状,描述待开发系统的功能需求,使用范围,业务流程,用户界面,输出要求,故障处理以及对使用环境的要求,包括网络环境,硬件环境,软件环境,与其他系统的关系,安全与保密。
提供用户和开发人员之间沟通的基础,提供项目设计的基本信息。
给出结论和意见。
2 软件开发的实践操作件开发过程可以包括以下几个阶段:1)设计软件设计可分为概要设计阶段和详细设计阶段。
事实上,软件设计的主要任务是软件模块分解,模块,以及模块的设计。
概要设计是结构设计,其主要目标是让软件的模块结构用软件结构图表示。
详细设计的主要任务是设计模块的程序流程,数据结构与算法,次要任务是设计一个数据库。
2)编码软件编码是指软件设计成一个计算机可以接受的程序。
在当前软件开发中除特殊场合,已很少使用在第二十世纪80年代的高级语言,取代它的是面向对象的开发语言。
面向对象的编程语言和开发环境完美融合,大大提高了发展的速度。
软件开发流程的具体内容软件开发是一个复杂而又精细的过程,需要经历多个阶段和环节。
下面将介绍软件开发的具体流程,以便更好地了解软件开发的全貌。
1. 需求分析阶段。
软件开发的第一步是需求分析阶段。
在这个阶段,开发团队与客户进行沟通,了解客户的需求和期望。
通过讨论和调研,确定软件的功能和特性,明确软件的用户群体和使用场景,为后续的开发工作奠定基础。
2. 设计阶段。
在需求分析的基础上,开发团队进行软件的设计工作。
包括系统架构设计、数据库设计、界面设计等。
设计阶段的目标是确定软件的整体结构和各个模块的功能,为后续的编码工作提供指导。
3. 编码阶段。
编码阶段是软件开发的核心阶段,开发团队根据需求和设计文档,进行具体的编码工作。
根据需求文档和设计文档,开发团队使用相应的编程语言和开发工具,编写软件的源代码。
4. 测试阶段。
编码完成后,软件需要进行测试。
测试阶段包括单元测试、集成测试、系统测试等多个环节。
测试人员根据测试计划和测试用例,对软件进行全面的测试,确保软件的质量和稳定性。
5. 部署和维护阶段。
软件通过测试后,进入部署和维护阶段。
开发团队将软件部署到目标环境中,并进行相关的配置和优化。
同时,开发团队需要对软件进行维护和更新,确保软件的稳定性和安全性。
总结。
软件开发流程包括需求分析、设计、编码、测试、部署和维护等多个阶段。
每个阶段都有其独特的任务和目标,需要开发团队的密切合作和高效协调。
只有经过严格的流程管理和质量控制,才能保证软件开发的顺利进行和最终的成功交付。
2022-2023年高级软考《信息系统项目管理师》历年真题高频考点汇总(附带答案)(图片大小可自由调整)一.全考点综合测验(共35题)1.【单选题】以下关于质量保证的叙述中,不正确的是:()。
A.实施质量保证是确保采用合理的质量标准和操作性定义的过程B.实施质量保证是通过执行产品检查并发现缺陷来实现的C.质量测量指标是质量保证的输入D.质量保证活动可由第三方团队进行监督,适当时提供服务支持正确答案:B2.【单选题】某软件开发企业, 在平面媒体上刊登了其开发的财务软件销售商业广告,概要介绍了产品的功能。
按照合同法规定, 该商业广告属于()A.要约B.承诺C.要约邀请D.承诺邀请正确答案:C3.【单选题】() 主要是针对用户使用的绩效, 而不是针对软件自身的度量指标A.内部质量B.使用质量C.外部质量D.可用性度量正确答案:B4.【单选题】() 不属于信息系统项目的生命周期模型A.瀑布模型B.迭代模型C.螺旋模型D.类-对象模型正确答案:D5.【单选题】某公司任命小王为某信息系统开发项目的项目经理。
小王组建的团队经过一段时间的磨合,成员之间项目熟悉和了解。
矛盾基本解决,项目经理能够得到团队的认可。
由于项目进度落后,小王又向公司提出申请,项目组假如了 2 名新成员。
此时项目团队处于()。
A.震荡阶段B.发挥阶段C.形成阶段D.规范阶段正确答案:C6.【单选题】产品分析属于哪个过程的工具A.范围规划B.范围定义C.范围核实D.范围控制正确答案:B7.【单选题】假设和制约因素最初被拟成文件是在哪个过程组?A.启动B.计划C.实施D.收尾正确答案:A8.【单选题】某项目已制定了详细的范围说明书, 并完成了WBS分解。
在项目执行过程, 项目经理在进行下一周工作安排的时候, 发现WBS遗漏了一项重要的工作, 那么接下来他应该首先()A.组织项目组讨论, 修改WBSB.修改项目管理计划, 并重新评审C.汇报给客户, 与其沟通, 重新编写项目文档D.填写项目变更申请, 对产生的工作量进行估算, 等待变更委员会审批正确答案:D9.【单选题】对项目的投资效果进行经济评价的方法,包含静态分析法和动态分析法,这两种方法的区别主要体现在()。
软件开发过程与方法软件开发过程与方法是指在开发软件过程中所采用的一系列规范、步骤和方法论,以确保软件的高质量、高效率和可维护性。
本文将探讨软件开发过程与方法的重要性、常见的软件开发过程模型以及一些常用的软件开发方法。
一、重要性软件开发过程与方法的重要性不可忽视。
通过规范化的开发过程,可以提高软件开发的效率和质量,降低开发成本,减少后期维护和修复的工作量。
同时,合理选择和应用软件开发方法,能够更好地满足用户需求,提升软件的用户体验。
二、软件开发过程模型1. 瀑布模型瀑布模型是传统的软件开发过程模型,将软件开发划分为需求分析、设计、编码、测试和维护等阶段,且各阶段按顺序依次进行。
瀑布模型有利于项目管理和文档控制,但缺乏灵活性和迭代性。
2. 增量模型增量模型采用渐进式的方式进行软件开发,先开发出可用的原型产品,然后逐步增加新功能和特性。
增量模型适用于需求不确定或需求变化频繁的项目,能够更快地交付可用的软件,便于与用户沟通和反馈。
3. 敏捷开发模型敏捷开发模型是一种迭代、自适应的软件开发方法,强调团队合作、用户参与和快速响应需求变化。
敏捷开发模型适用于中小型项目,能够更快地交付高质量的软件,并提供更好的用户满意度。
三、软件开发方法1. 面向对象开发(OOP)面向对象开发是一种将现实世界中的事物表示为对象,并通过对象之间的交互来完成系统功能的方法。
OOP具有模块化、可复用和易维护等特点,能够提高软件系统的可扩展性和可重用性。
2. 领域驱动设计(DDD)领域驱动设计是一种通过将软件系统设计与业务领域的模型紧密结合,来提高软件系统的设计质量和性能的方法。
DDD注重对业务领域的深入理解和建模,能够更好地满足用户需求,并减少开发过程中的误解和风险。
3. DevOpsDevOps是一种将开发(Development)和运维(Operations)紧密结合的软件开发方法。
通过自动化和协作工具,DevOps能够加快软件的交付速度,减少软件的错误和故障率,提高软件的稳定性和可靠性。
软件开发过程CMMI着重于软件项目的质量管理,强调过程控制,确保产品在软件开发的每一个阶段的质量都要达到客户的要求,这里我们就按项目的开发阶段详细讲述CMMI是如何在项目中监控并把握项目质量的。
(按照软件工程理论,项目一般划分为立项阶段、需求分析阶段、概要设计阶段、详细设计阶段、编码阶段、集成测试阶段、产品形成&验收测试阶段)。
1项目立项阶段项目立项阶段CMMI主要管理工作有:1、建立项目组:同时为了确保项目能够如期完成,在立项阶段,将由高层管理者(总经理室成员)召开正式的项目启动会议,共同商讨确定项目组成员,主要包括项目经理、产品管理、程序管理、开发人员、技术支持人员;为了确保项目的质量,还要确定相关独立于项目组之外的成员(其活动不受项目组约束,便于监督项目质量),主要包括独立测试人员、SQA(质量保证人员)、SCCB配置管理委员会成员,这些组织成员将按照CMMI要求形成正式项目文档(立项书),立项书将向所有项目组相关人员及客户公布。
2、制定SOW :已经和客户签定了合同,为了确保客户的利益,CMMI要求项目组建立SOW(目标范围定义说明书),确定客户的需要什么,不需要什么,以及需要的技术目标和业务目标(比如项目工期、成本、功能需求等等),客户有权利和项目组技术管理委员会一起评审SOW。
3、项目初期计划制定:项目经理确定后,根据CMMI软件项目策划要求,项目经理将根据合同需求、合同工期等内容采用科学的计算方法(目前采用国际上知名的Delphi法)估计项目的规模、工作量、进度、风险、关键计算机资源,并依据集团本身的历史项目数据计算生产率,根据以上数据计算项目的进度及人员安排,最后才制定出符合项目实际情况的计划。
所有的这些规程,在CMMI软件项目策划中有明确规范的定义。
4、项目跟踪及监督计划制定:为了确保制定的项目计划能够反映项目的实际情况,CMMI要求项目经理有责任制定项目的跟踪监督计划,根据本计划,项目所有活动都能够得到合理的监控,及时发现项目组出现的各类偏差。
软件工程一、引言在当今信息技术高速发展的时代,软件的开发和维护变得越来越重要。
为了有效管理软件项目,提高开发效率和质量,软件工程的概念应运而生。
软件工程是一门研究如何按照系统化、规范化、定量化和可重复性的方式开发和维护软件的学科。
在软件工程中,结构化方法和面向对象是两种常用的开发方法。
本文将对结构化方法和面向对象进行比较,并探讨它们在软件工程中的优劣和适用场景。
二、结构化方法2.1 定义和特点结构化方法是一种基于数据流和流程的软件开发方法。
它将软件系统视为一系列逐步细化的模块,通过分析数据流和流程来设计和实现软件系统。
结构化方法强调模块化、层次化和自顶向下的设计思想,以确保程序逻辑清晰、易于理解和修改。
2.2 优点1.结构化方法强调模块化,将软件系统分解为多个模块,每个模块负责特定的功能。
这种模块化的设计使得程序易于理解、修改和测试,提高了软件的可维护性和可测试性。
2.结构化方法采用自顶向下的设计思想,先设计系统的总体框架,再逐步细化到具体的模块。
这种逐步细化的设计方式使得开发过程更加可控,项目管理更加容易。
同时,自顶向下的设计过程也便于团队协作和分工。
3.结构化方法将程序逻辑分解为一系列有序的步骤,每个步骤都有明确的输入和输出。
这种严格的输入输出规定使得程序的设计和测试更加方便。
4.结构化方法在软件开发初期就明确定义了数据流和流程,使得开发人员能够更好地理解和掌握软件系统的整体架构,从而减少了项目失败的风险。
2.3 缺点1.结构化方法的设计过程较为复杂,需要详细分析系统的数据流和流程。
对于较大规模的软件系统,分析和设计的工作量较大,容易导致项目开发周期延长。
2.结构化方法强调模块化,但对于一些复杂的问题,模块化的设计可能不够灵活和强大。
这就需要在设计阶段尽可能考虑全部的需求和功能,否则可能会在后期的修改过程中遇到困难。
三、面向对象3.1 定义和特点面向对象是一种以对象为基础的软件开发方法。
在面向对象方法中,软件系统由一组相互作用的对象组成。
第5章面向对象的软件开发过程5.1软件开发过程软件开发过程指开发软件产品的一整套活动,其中主要包括软件描述、软件开发、软件有效性验证和软件演化。
不同的软件开发商,针对不同的开发项目可能会采用不同的方式组织上述4项活动的实施。
软件开发模型软件开发模型是对软件开发的全过程、活动和任务的抽象描述。
选择合适的软件开发模型将有利于提高软件开发的效率、软件产品的质量,以及日后的软件维护能力。
5.1.1软件开发面临的主要问题软件开发主要面临以下几个迫切需要解决的问题:1.软件可靠性软件可靠性是指软件系统能否在既定环境下运行并达到预期的结果。
尽管通过对软件进行调试和测试可以排除大约40%的错误,任何人也不能保证任何一个软件产品没有错误。
2.软件生产率计算机硬件的迅猛发展,带动了人们对软件需求的急剧增长。
与计算机硬件的发展速度相比,软件的生产效率极其低下。
3.软件重用性不同的应用领域要开发不同的应用软件,既使相同的应用目的也会由于需求上的微小差别,导致重新开发整个应用软件。
4.软件维护性多么优秀的软件开发队伍也无法保证软件产品在使用过程中不会出现任何错误,因此,日后的维护工作将显得格外重要,而修改和完善软件产品在使用过程中显现出来的错误和不足之处是软件维护阶段的主要任务。
5.1.2软件的生命周期软件工程将按照工程化的方法组织和管理软件的开发过程,具体地说,它将软件开发过程划分成若干个阶段,每个阶段按照制定的规范标准完成相应的任务。
软件的生命周期是指从某个软件的需求被提出并开始着手开发到这个软件被最终废弃的整个过程。
通常在这个过程中,应该包括制定计划、需求分析,系统设计、程序编码、系统测试、系统运行及维护阶段。
1.制定计划在正式开始开发软件项目之前,充分地研究、分析待开发项目的最终目标,整理出其功能、性能、可靠性及接口等方面的需求,计算出所需人力、物力的资源开销,推测日后可能获取的经济效益,提供支持该项目的技术能力以及给出开发该项目的工作计划。
1、建立企业信息系统应该遵循一定的原则,以下原则不适当的是()。
A、必须支持企业的战略目标B、应该自上而下地规划和实现C、应该支持企业各个管理层的需求D、应该向整个企业提供一致的信息2、关于电子政务与传统政务的比较,以下论述不正确的是()。
A、办公手段不同B、与公众沟通方式存在差异C、业务流程一致D、电子政务是政务活动一种新的表现形式3、以下叙述正确的是()A、ERP软件强调事后核算,而财务软件强调及时调整B、财务软件强调事后核算,而ERP软件强调事前计划和及时调整C、ERP软件强调事后核算,而进销存软件比较关心每种产品的成本构成D、进销存软件强调事后核算,而财务软件强调及时调整4、()是企业信息系统的重要目标。
A、技术提升B、数据标准化C、企业需求分析D、信息共享和业务协同5、企业信息系统项目的基础是企业信息战略规划,规划的起点是将()与企业的信息需求转换成系统目标,实施信息系统项目是要为企业建立起数据处理中心,以满足各级管理人员关于信息的需求,它坚持以应用为中心的原则。
A、事务处理B、现行人工和电算化混合的信息系统C、企业战略目标D、第一把手要求6、适用于项目需求清晰、在项目初期就可以明确所有需求、不需要二次开发的软件生命周期模型是();适用于项目事先不能完整定义产品所有需求、计划多期开发的软件生命周期模型是()。
A、瀑布模型B、迭代模型C、快速原型开发D、快速创新开发A、快速原型开发B、快速创新开发C、瀑布模型D、迭代模型7、在软件开发的V模型中,应该在()阶段制定系统测试计划。
A、需求分析B、概要设计C、详细设计D、代码编写8、RUP是信息系统项目的生命周期模型之一,“确保软件结构、需求、计划足够稳定;确保项目风险已经降低到能够预计完成整个项目的成本和日程的程度。
针对项目的软件结构上的主要风险已经解决或处理完成”是该模型()阶段的主要任务。
A、构造B、细化C、初始D、移交9、极限编程技术XP适用于()。
软件项目开发流程以及人员职责
初步商业计划书来完成项目的计划草案,确定、分析项目风险并确定其优先级,还要制定风险解决方案。
本阶段的目的是确立产品开发的经济理由。
当确定开发之后则制定软件开发计划、人员组织结构定义及配备、过程控制计划。
(1)项目计划草案
项目计划草案应包括产品简介、产品目标及功能说明、开发所需的资源、开发时间和里程碑。
(2)风险管理计划
也就是把有可能出错或现在还不能确定的东西列出来,并制定出相应的解决方案。
风险发现得越早对项目越有利。
(3)软件开发计划
软件开发计划的目的是收集控制项目时所需的所有信息,项目经理根据项目计划来安排资源需求并根据时间表跟踪项目进度。
项目团队成员根据项目计划以了解他们的工作任务、工作时间以及他们所依赖的其他活动。
可将计划分成总体计划和详细计划,总体计划中每个任务为一个里程碑,详细计划中必须将任务落实到个人。
软件开发计划还应包括产品的应收标准及应收任务(包括确定需要制订的测试用例)。
(4)人员组织结构定义及配备
常见的人员组织结构有垂直方案、水平方案、混合方案。
垂直方案中每。
2020智慧树,知到《面向对象与UML》章节测试【完整答案】智慧树知到《面向对象与UML》(山东联盟)章节测试答案绪论1、UML是面向对象的软件建模语言,可应用到软件开发全过程。
A:对B:错正确答案:对2、面向对象是当今主流的软件开发思想。
( )A:对B:错正确答案:对3、下列哪些工具可以用来进行UML建模?( )A: Rational RoseB: Enterprise Architect (EA)C: Microsoft Office VisioD:StarUML正确答案:Rational Rose, Enterprise Architect (EA), Microsoft Office Visio,StarUML4、本课程的主讲教师是烟台大学计算机与控制工程学院的哪位老师?( )A: 螃蟹B: 郭艳燕C: 机器猫D: 哈利波特正确答案:郭艳燕5、我们要从本课程中学到哪些知识?( )A:面向对象的基础知识B:UML软件建模C:面向对象的设计原则D:面向对象编程语言正确答案:面向对象的基础知识,UML软件建模,面向对象的设计原则第一章1、以下对软件建模描述正确的是( )A:要正确建模,模型必须准确反映软件系统的真实情况。
B:每个模型可以有多种表达方式,从不同角度来刻画系统。
C:模型是对现实世界的简化,但不能掩盖重要的细节。
D:描述同一个系统的多个模型只能相对孤立,不能完全孤立,完全孤立的模型是不完整的E:越庞大复杂的系统,建模的重要性越大。
正确答案:要正确建模,模型必须准确反映软件系统的真实情况。
,每个模型可以有多种表达方式,从不同角度来刻画系统。
,模型是对现实世界的简化,但不能掩盖重要的细节。
,描述同一个系统的多个模型只能相对孤立,不能完全孤立,完全孤立的模型是不完整的,越庞大复杂的系统,建模的重要性越大。
2、模型的实质是什么?( )A:便于交流B:对现实的简化C:可视化D:对现实的复杂化正确答案:对现实的简化3、对软件模型而言,下面说法错误的是( )A:是人员交流的媒介B:是软件的中间形态C:是软件升级和维护的依据D:是软件的标准文档正确答案:是软件的标准文档4、以下关于模型的说法错误的是( )A:模型是对现实的简化。
软件开发流程迭代化软件开发技术 1. 传统开发流程的问题传统的软件开发流程是⼀个⽂档驱动的流程,它将整个软件开发过程划分为顺序相接的⼏个阶段,每个阶段都必需完成全部规定的任务(⽂档)后才能够进⼊下⼀个阶段。
如必须完成全部的系统需求规格说明书之后才能够进⼊概要设计阶段,编码必需在系统设计完成之后才能够进⾏。
这就意味着只有当所有的系统模块全部开发完成之后,我们才进⾏系统集成,对于⼀个由上百个模块组的复杂系统来说,这是⼀个⾮常艰巨⽽漫长的⼯作。
随着我们所开发的软件项⽬越来越复杂,传统的瀑布型开发流程不断地暴露出以下问题:需求或设计中的错误往往只有到了项⽬后期才能够被发现例如:系统交付客户之后才发现原先对于需求的理解是错误的,系统设计中的问题要到测试阶段才能被发现。
对于项⽬风险的控制能⼒较弱项⽬风险在项⽬开发较晚的时候才能够真正降低,往往是经过系统测试之后,才能确定该设计是否能够真正满⾜系统需求。
软件项⽬常常延期完成或开发费⽤超出预算项⽬开发进度往往会被意外发⽣的问题所打乱,需要进⾏返⼯或其他⼀些额外的开发周期,造成项⽬延期或费⽤超⽀。
项⽬管理⼈员专注于⽂档的完成和审核来估计项⽬的进展情况所以项⽬经理对于项⽬状态的估计往往是不准确的,当他回答系统已完成了80%的开发任务时,剩下20%的开发任务实际上消耗的是整个项⽬80%的开发资源。
在传统的瀑布模型中,需求和设计中的问题是⽆法在项⽬开发的前期被检测出来的,只有当第⼀次系统集成时,这些设计缺陷才会在测试中暴露出来,从⽽导致⼀系列的返⼯:重新设计、编码、测试,进⽽导致项⽬的延期和开发成本的上升。
2. 采⽤迭代化开发控制项⽬风险为了解决传统软件开发流程中的问题,我们建议采⽤迭代化的开发⽅法来取代瀑布模型。
在瀑布模型中,我们要完成的是整个软件系统开发这个⼤⽬标。
在迭代化的⽅法中,我们将整个项⽬的开发⽬标划分成为⼀些更易于完成和达到的阶段性⼩⽬标,这些⼩⽬标都有⼀个定义明确的阶段性评估标准。
2023年高级软考《信息系统项目管理师》考试历年真题摘选附带答案第1卷一.全考点综合测验(共20题)1.【单选题】某公司中标一个企业信息化系统开发项目,合同中该项目包括:人事系统、OA系统和生产系统。
下图为项目经理制作的WBS,此处项目经理违反了关于WBS的()原则。
A.WBS需要考虑将不同的人员的工作分开B.WBS中各项工作是为提供可交付成果服务的C.可以按照系统子系统来逐层分解WBSD.一个工作单元只能从属于某个上层单元2.【单选题】() 不属于管理文档A.变更控制记录B.开发计划C.项目总结报告D.需求文件评审记录3.【单选题】2015 年国务院发布的《关于积极推进“互联网+”行为的指导意见》提出:到()年,网络化、智能化、服务化、协同化的“互联网+”产业生态体系基本完善,“互联网+”称为经济社会创新发展的重要驱动力量。
A.2018B.2020C.2025D.20304.【单选题】以下网络安全防御技术中,()是一种较早使用、实用性很强的技术,它通过逻辑隔离外部网络与受保护的内部网络的方式,使用本地系统免于受到威胁。
A.防火墙技术B.入侵检测与防护技术C.VPN 技术D.网络蜜罐技术5.【单选题】()不属于项目经理的岗位职责A.为严格控制项目成本,可不全面执行所在单位的技术规范标准B.对项目的全生命周期进行有效控制,确保项目质量和工期C.在工作中主动采用项目管理理念和方法D.以合作和职业化方式与团队和项目干系人打交道6.【单选题】项目经理张工带领团队编制项目管理计划,()不属于编制项目管理计划过程的依据。
A.项目章程B.事业环境因素C.组织过程资产D.工作分解结构7.【单选题】产品分析属于哪个过程的工具A.范围规划B.范围定义C.范围核实D.范围控制8.【单选题】以下关于大型复杂项目和多项目管理的叙述中,不正确的是()。
A.大型复杂项目必须建立以过程为基础的管理体系B.为了确保大型复杂项目的过程制度起到预期作用,必须在项目团队内部建立统一的体系,包括制定过程、计划过程、执行过程C.大型复杂项目的项目过程确定后,再制定项目计划D.大型IT 项目大都是在需求不十分清晰的情况下开始的,所以项目自然分成需求定义和需求实现两个主要阶段9.【单选题】某集成企业的软件著作权登记发表日期为20XX年9 月30 日, 按照著作权法规定,其权利保护期到()A.2063年12 月31 日B.2063年9月29 日C.2033年12 月31 日D.2033年9月29 日10.【单选题】项目整体绩效评估中风险评估是一个十分重要的技术。
软件项目开发流程RUPRUP(Rational Unified Process,统一软件开发过程,统一软件过程)是一个面向对象且基于网络的程序开发方法论。
根据Rational(Rational Rose和统一建模语言的开发者)的说法,好像一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针,模版以及事例支持。
RUP和类似的产品——例如面向对象的软件过程(OOSP),以及OPEN Process都是理解性的软件工程工具-—把开发中面向过程的方面(例如定义的阶段,技术和实践)和其他开发的组件(例如文档,模型,手册以及代码等等)整合在一个统一的框架内。
一、六大经验迭代式开发.在软件开发的早期阶段就想完全、准确的捕获用户的需求几乎是不可能的。
实际上,我们经常遇到的问题是需求在整个软件开发工程中经常会改变。
迭代式开发允许在每次迭代过程中需求可能有变化,通过不断细化来加深对问题的理解。
迭代式开发不仅可以降低项目的风险,而且每个迭代过程以可以执行版本结束,可以鼓舞开发人员。
管理需求。
确定系统的需求是一个连续的过程,开发人员在开发系统之前不可能完全详细的说明一个系统的真正需求。
RUP描述了如何提取、组织系统的功能和约束条件并将其文档化,用例和脚本的使用以被证明是捕获功能性需求的有效方法。
基于组件的体系结构。
组件使重用成为可能,系统可以由组件组成。
基于独立的、可替换的、模块化组件的体系结构有助于管理复杂性,提高重用率. RUP描述了如何设计一个有弹性的、能适应变化的、易于理解的、有助于重用的软件体系结构。
可视化建模。
RUP往往和UML联系在一起,对软件系统建立可视化模型帮助人们提供管理软件复杂性的能力。
RUP告诉我们如何可视化的对软件系统建模,获取有关体系结构于组件的结构和行为信息。
项目管理论坛验证软件质量。
在RUP中软件质量评估不再是事后进行或单独小组进行的分离活动,而是内建于过程中的所有活动,这样可以及早发现软件中的缺陷。
面向对象软件开发和过程
代码是核心
面向对象发展到今天,已经出现了许许多多的实践、方法和技术。
很多的技术都能够有效的提高软件质量,而要用好这些技术,我们需要从过程和管理的角度来看待它们,而不是为了使用技术而使用技术。
此系列文章包括:代码是核心、案例实战(上)、案例实战(下)、重用、优化代码的组织、针对契约设计、业务建模。
在一个有效的组织中,必定拥有杰出的一线人才。
软件设计也是一样的,一线人才的素质决定了软件的质量。
从敏捷的观点来看,代码是检验软件过程是否有效的终标准。
目前为止,以及在短时间的未来,我们都不太可能完全脱
离代码进行软件设计。
所以,软件过程中的任何一个活动都是为了能够产出的代码。
所以,代码才是核心。
1.代码是软件开发的基础
编码是软件开发过程中基本、底层的技艺,然而也是重要的技艺。
任何一个领域的专家都需要花费大量的时间来进行基本技艺的锻炼,木匠需要花费大量的时间来锻炼他们对各种工具的掌握,厨师则需要练习刀工和火候。
程序员也是一样的,对我们来说,语言的各种特性必须要了然于胸。
而对软件的管理也需要从代码做起。
从____ 年到现在,国内兴起了一股软件工程热,需求管理、配置管理、甚
至CMM。
面对纷至沓来的各种方法学、UML、00A大家似乎已经热衷于这些概念本身了,却往往忽略了软件开发中基本的元素-代码。
在和很多软件组织的接触过程中,我们认为大多数组织急切需要的并不是这些工程理论,不是说这些理论不重要,而是这些组织的症结不在于此。
很多的组织连代码的质量都管理不好,又何谈其它呢?代码管理是基础的基础,从管理的角度上来看,任何一个组织的管理都需要一个从上至下的管理过程,有基层的管理人员,也有
高层的管理人员。
对代码的管理就是软件开发中的基层管理,它起到的作用就是能够把需求、设计的思路贯彻到终的代码中。
"管理无大事"。
对软件的管理也是一样,大部分的问题都是由于很小的原因
引起的。
例如,一个产品如果后期在debug上花费了大量的时间,那么,这种现象是由于什么原因引起的?一种可能的原因是前期的代码设计中对代码质量的把握不严。
每一次代码功能的演化并不会产生太多的问题,但是当代码累积
越来越多的时候,问题也就慢慢出现了。
那么如何解决呢?可以加强QA的力量,也可以引入复审,还可以引入单元测试。
总之,要有一种方法对代码进行控制。
软件的开发过程就象是一部精密的机器,任何一个环节的变化,都会对其它的环节产生影响。
把软件过程按照瀑布的形式进行划分是一种分解的处理思路,但同时我们还应该看到不同活动之间的相互影响。
软件开发中的生命周期模型也是一个层次模型,从业务建模一直到软件实现,需要跨越数个层次,同
样会出现执行不力的情况,例如,代码设计偏离需求、偏离设计的情况比比皆是。
如何避免这种情况呢?这就需要我们从源代码的角度,反思其上游的实践活动,是否足以约束代码设计?就拿XP来说,他解决这个问题的方式是尽快的进入代码开发阶段,从代码开发中发现问题,并在下一轮的开发中解决。
这种
思路是正确的,但XP毕竟是方法论,他不会告诉你过于细节的东西,尽管XP 已经提供了大量面向代码的实践。
因为方法论的抽象级别比较高,使得他必须舍弃部分的细节。
而这篇文章告诉你的,就是这些细节。
就像我们在下一节中讨论的例子,需要在代码中加入对异常的处理,那么,异常的源头在哪里呢?
是需求,在需求中,我们发现了一些业务的非正常的处理序列,发现了一些业务实体的限制性的要求,所以在代码实现中,就需要有相应的异常处理。
在例
如,一个的异常处理,还需要让客户端程序员了解可能发生的异常,以保证不同代码间正确的集成。
2.面向对象的代码
面向对象的代码已经在现在的软件开发中占据了主流的位置,面向对象的思路也有其优势所在,就像后文所讨论的,面向对象代码有着非面向对象代码的很多优势,而软件业中很多新的思潮的产生,也都是基于面向对象语言的,所以我们关注的代码将是面向对象代码。
面向对象的思想来自于抽象数据类型。
对于面向对象来说,它重要的改进就是把世间万物都描述为对象,而类则描述了同一种对象的特征,而不是像传统的开发方法那样,按照机器指令的执行顺序来进行设计。
当然,面向对象代码终仍然是要按照时序来执行的,但是从程序员的角度看来,面向对象代码更侧重于对象之间的交互,多个对象各司其职,相互协作以完成目标。
而面向对象技术的发展,也是朝着更加贴近我们世界观的方向发展。
从这点来看,有人说完全没有程序设计经验的人学习面向对象可能会更加的容易,因为他不需要从原先的时序程序的桎梏中摆脱出来,但这未必是事实。
面向对象决不是一种简单的程序设计思路。
这是我们的观点,也会在下文中反复的论证。
和所有的职业一样,程序员,或者是面向对象程序员,始终坚持的一点就是严谨。
你会看到各种各样的代码,但那决不是一次能够写成的,要不断的尝试,不断的改进。
为什么重构和测试优先是敏捷方法中很重要的一项实践?因为程序员不是神,他们需要慢慢改进他们的代码。
虽然罗马不是一天能够建成的,但是在编写面向对象代码的过程中,有一些实践是需要坚持的,它体现了我们所说的严谨。
3.编写并管理面向对象的代码
编写的面向对象代码并不是一件容易的事情,的OO 代码如行云流水,糟
糕的00代码让人觉得浑身起鸡皮疙瘩。
编写的00代码要求程序员有一定的自我修养,能够以抽象的思路看待问题,找到问题的核心并对问题域进行分解。
它强调的是一种解题的思路,但这个解不是一的。
典型的例子是设计模式,设计模式确实给了我们以很大的启发,通过它,我们能够了解到的代码是如何用于解决实际问题的。
但是是不是你必须在软件中照搬设计模式呢?如果你这么做,那么你对设计模式的理解仍然不够。
我曾和在建筑行业的朋友聊起ChristopherAlexander 的建筑的永恒之道。
他很兴奋的告诉我,那确实是一本很好的书,能够引发人很深的思考,但是现在也有另外的一种观点,认为美仍然是无形的,应该发自建筑师的内心。
对这句话我思考了很久,其实建筑是给人使用的,因此重要的是它能都给人带来的价值,隐含在其中的那种活生生的气质,这是建筑师文化底蕴的外在表露。
所以,
ChristopherAlexander 在那本书中的目的,也是为了找到一种总结自己观点的方法,
来总结自己对人文的认识。
至于现在大家对他的思路提出了质疑,那也是一件好事,这
说明大家对建筑之道的认识到了新的高度。
建筑是这样,软件中的模式也是一样的,我
也曾热衷于研究模式的使用,直到某一天我猛然惊醒,与其沉迷于模式的表面形式,为
什么不去研究隐藏在它背后的文化底蕴呢?武侠小说中常说无招胜有招,模式的应用也
应当到达这个境界,你如果可以在不经意间应用模式的思想,那又何必拘泥于模式的形
式呢?。