第二章企业管理信息系统开发概述王念新江苏科技大学经济管理学院E-mail:wangnianxin@163.com主要内容•主要内容–2.1软件工程与软件能力成熟度–2.2系统开发方法–2.3系统开发方式–2.4企业信息系统的专业人才2.1软件工程与软件能力成熟度模型•主要内容–管理信息系统软件–软件危机–软件工程–软件能力成熟度模型CMM2.1.1管理信息系统软件•一般认为软件是由三部分组成的:–程序:指在运行时,能提供所希望的功能和性能的指令集;–数据结构:为使程序能够正确运行的数据结构;–文档:描述程序研制过程、方法及使用的文件资料。•管理信息系统软件和许多系统软件一样具有以下特点:抽象性,即逻辑实体,可记录,但看不到;可复制性,即与开发成本相比,复制成本很低;无折旧,但需长期维护;受硬件制约;未完全摆脱手工工艺;开发费用高。2.1.1管理信息系统软件•从计算机投入商业使用到现在,企业管理信息系统的发展过程可以分为三个阶段:阶段面向事务处理阶段面向系统阶段面向决策阶段开始应用(单项应用)单个管理系统应用企业内部管理、生产集成企业内部和外部管理集成开始时间20世纪50年代20世纪70年代20世纪80年代20世纪90年代特征简单数据处理如数据录入、存储、打印等单机、单项应用应用于管理的各个环节构成管理信息系统将企业内部的生产、管理集成在一起将企业内部的管理与外部的市场、客户管理集成在一起信息技术计算机LAN、PCLAN、WANInternet、Intranet应用模式EDP、EDPSMIS、MRP、DSS等MRPII、GDSS等EDI、ERP、EC、CRM、电子政务系统等2.1.1管理信息系统软件•随着管理信息系统的发展,与其相伴的管理信息系统软件的发展也经历了三个时期:–程序设计阶段(20世纪60年代中期之前):在该阶段,硬件通用,软件专用;程序规模小,编写者和使用者为同一人(或同一组人)。软件的范围即程序。–程序系统阶段(20世纪60年代中期至20世纪70年代中期):此时出现“软件作坊”、产品软件,开发方法“个体化”。软件的范围包括程序及说明书。–软件工程阶段(20世纪70年代中期之后):软件的范围为软件产品(项目软件)。软件开发自此成为一门新兴的工程学科——软件工程。2.1.3软件工程•软件工程作为一个新兴的工程学科,主要研究软件生产的客观规律,建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件生产成本、改进软件产品质量、提高软件生产率水平的目标。•软件工程的准则:–用分阶段的生命周期计划严格管理–坚持进行阶段评审–实行严格的产品控制–采用现代程序设计技术–结果应能清楚地审查–开发小组的人员应该少而精–承认不断改进软件工程实践的必要性2.1.3软件工程•软件工程实施过程中的四条基本原则是:–选取适宜的开发模型;–采用合适的设计方法;–提供高质量的工程支持;–重视开发过程的管理。2.1.4软件能力成熟度模型CMM•1987年,美国卡内基·梅隆大学软件研究所(SEI,SoftwareEngineeringInstitute)受美国国防部的委托,率先在软件行业从软件过程能力的角度提出了软件能力成熟度模型(CMM,CapabilityMaturityModelforSoftware),随后在全世界推广实施。CMM作为一种软件评估标准,主要用于评价软件承包能力并帮助其改善软件质量,及软件开发过程和软件开发能力的评价和改进,它侧重于软件开发过程的管理及工程能力的提高与评估。CMM自1987年开始实施认证,现已成为软件业最权威的评估认证体系。CMM包括5个等级,共计18个过程域,52个目标,300多个关键实践。2.1.4软件能力成熟度模型CMM2.2系统开发方法•主要内容–结构化生命周期法–原型法–面向对象的开发方法–CASE工具–模型驱动开发方法–其他开发方法–系统开发方法的新趋势自学内容2.2.1结构化生命周期法•基本思想序号开发阶段基本任务完成者阶段成果1系统规划初步调查总体规划研究可行性论证制定开发计划用户企业高层领导用户系统分析员系统总体规划报告可行性分析报告2系统分析详细调查分析用户环境、需求、流程、数据结构确定系统目标与功能建立新系统逻辑模型系统分析员系统分析报告数据库概念模型3系统设计总体设计(系统模块设计)、计算机及网络配置设计详细设计(代码设计、数据库设计、输入/输出设计、处理过程描述)系统分析员系统设计员测试计算系统设计报告数据库设计4系统实施设备购置与安装程序编制子程序调试系统联调用户培训系统测试试运行程序员分析员设计员用户源程序清单测试报告用户手册操作手册5系统运行运行管理硬件、软件维护系统评价用户运行手册维护手册系统评价报告2.2.1结构化生命周期法•特点计划需求分析设计编码测试运行、维护定义阶段开发阶段维护阶段2.2.1结构化生命周期法•结构化系统开发方法具有如下特点:–运用系统的思想和方法–信息系统有其生命周期及其严格的阶段性–要求预先严格定义系统的需求–抽象方法–自顶向下,逐步求精–模块化方法2.2.1结构化生命周期法•优点–强调系统的思想和系统的方法,整体思路清楚,能够从全局出发思考问题。由于强调从整体来分析和设计整个系统,在系统分析时,可以诊断出原系统中存在的问题和结构上的缺陷。–将系统生命周期分解为几个阶段,每个阶段的目标明确,任务相对独立、简单,便于不同专业的人员分工协作,从而降低软件开发的难度。–每个阶段都有明确的要求、严格的标准与规范,以及与开发的软件系统完全一致的高质量的文档资料。每一阶段的工作成果是下一阶段工作的依据,比较容易把握工作进度,有利于系统开发的总体管理和控制。–该方法是面向功能和流程的,能够进行流程的优化和流程再造,这一点是其它开发方法难以做到的。2.2.1结构化生命周期法•缺点–1)在结构化系统开发方法中,用户与系统开发人员之间的对话交流,主要发生在系统分析阶段。以后在设计、编码,直到系统提交的各个阶段中,开发人员极少与用户接触,难以确保系统真正符合用户需求。软件开发是一个知识密集型的活动,需要相互合作完成,但结构化生命周期法没有体现这一点。–2)希望在系统分析阶段内,就将所有的问题讨论清楚,完全确定系统的目标和需求,以文档的形式固定下来,并以此作为以后开发工作的根据。但是实际上这种做法潜藏着某种危机,因为参与开发的管理者在没有见到具体的物理系统之前,常常不知道计算机究竟能够完成哪些内容,他们的专业素养很难把握未来系统的需求。从认识论角度看,人的认识是一个多次反复循环的过程,不可能一次完成。但结构化生命周期法中划分的几个阶段,没有反映出这种认识过程的反复性。–3)系统的开发周期较长。–4)系统的开发成本较高。2.2.2原型法•人们认识事物的规律和如下特点:–人们认识任何事物都不可能一次完全了解,并把工作做得尽善尽美;–人们对于事物的认识和描述,往往是受相关事物的启发而逐渐产生并不断完善的;–人们讨论评价已有的具体事物,要比理解描述抽象的设想方案容易得多;–人们改进一些事物要比创造一些事物容易得多。2.2.2原型法•基本思想:用户提出要求识别基本需求建立初始原型讨论修改原型整理原型、提供文档评价不满意满意2.2.2原型法•优、缺点:–优点:•1、开发效率高;•2、开发工具先进,与用户交流直观;•3、符合人们认识事物的规律;•4、能及早暴露系统实施后潜在的一些问题;•5、能调动用户参与的积极性。–缺点:•1、不适合大型系统的开发;•2、不适合大量运算及逻辑性强的模块;•3、对原企业基础管理工作要求较高;否则容易走上机械模拟原手工系统的轨道。•4、不适合批处理系统。2.2.3面向对象的开发方法•面向对象方法和面向过程方法的比较:•面向对象方法认为,客观世界由各种各样的对象组成,每种对象都有各自的内部状态和运动规律,不同对象之间的相互作用和联系构成各种不同的系统。面向过程面向对象研究方法将数据和过程分离的结构化设计方法将数据和对数据的操作作为一个不可分割的对象基本构件(模块)过程对象程序设计范式数据结构+算法对象+消息模块驱动方式数据驱动事件(消息)驱动2.2.3面向对象的开发方法•术语(对象、属性、方法、事件和类)•对象(Object):现实世界中各种各样的实体,既可以是具体的事物也可抽象的事物,如学生、表单、按钮等。•属性(Property):对象的内部状态和运动规律。–属性用来表示对象的状态–每个对象都有自己各种不同的属性–对象的每一种属性,都具有一定的含义,并赋予一定值。–对象的属性值既能在设计时也能在运行时进行设置。–VFP中设置属性的格式为:•表单名.对象名.属性名=属性值•对象引用.属性=属性值2.2.3面向对象的开发方法•方法:改变属性状态的各种操作,描述了对象的行为–方法也称方法程序,是对象能够执行的操作–在VFP中,方法的过程代码是预先定义的,对用户是不可见的。–VFP中常用的方法:Release、Refresh、Additem、Hide、SetFocus等。–方法的调用格式:•对象引用.方法•事件:对象识别的一个动作,通常是由一个用户动作产生–事件过程是处理特定事件而编写的一段程序–事件包括事件过程和事件触发方法–事件可以由用户引发,也可以由系统引发–事件一般由代码引发–VFP中常用的事件:Activate、Click、GetFocus、Timer等2.2.3面向对象的开发方法•方法和事件之间的相同点:–都是为了完成某一任务。•方法和事件之间的不同点:–事件集合是固定的,用户不能创建新的事件;方法集合可由用户无线扩展;–同一事件可以完成不同的任务;方法是任何时间、任何地点调用都完成同一任务。•属性看作一个对象的性质,把方法看作对象的动作,把事件看作对象的响应。2.2.3面向对象的开发方法•特征–封装性:一个对象由数据和对数据的操作封装而成,封装是将一个对象的属性(数据)和操作(程序代码)集成为一个对象整体,并隐藏了对象行为实现的细节。用户只需根据对象提供的外部特性接口访问对象。接口用于描述对象之间的相互作用、请求和响应,即对消息的说明。–继承性:是父类和子类之间共享数据和方法的机制,子类可以继承父类的属性和操作(方法),这就是类的继承机制。如果在一个对象类中加入新对象,则这个新对象可自动地继承本对象类的全部属性和操作(方法)。继承性使面向对象的系统具有较好的可重用性、可扩充性和灵活性,因而有利于软件系统的维护。–多态性:对象之间的相互操作、调用和应答都是通过将发送消息(Message)到对象的外部接口来实施的。在收到消息时,对象要予以响应。不同的对象收到同一消息可产生完全不同的结果,这一现象叫做多态。用户可以发送一个通用消息,而实现的细节则由接收对象自行决定。这样,同一消息就可以调用不同的方法。2.2.3面向对象的开发方法•面向对象的开发方法可以分为四个阶段:–需求分析–面向对象分析(Object-OrientedAnalysis,OOA)–面向对象设计(Object-OrientedDesign,OOD)–面向对象程序设计(Object-OrientedProgramming,OOP)2.2.3面向对象的开发方法•OOA–目标:找出和规定一组根据系统的各项要求而行动和相互作用的问题领域对象。–步骤:•1-找出问题领域对象和类,并确定这些对象和类的属性和行为。•2-确定这些类(或对象)之间的关系及其结构。如实体之间的一对一、一对多和多对多。•3-识别主题。主题是由概括和聚集而组成的部分,按主题把对象和类分组,可减少系统的复杂性。•4-动态行为的规定。在动态行为方面要描述消息传送、控制,对象在时间上的行为变动。2.2.3面向对象的开发方法•OOD–目标:根据OOA的对象和类,进一步整理和求精。如对对象结构、属性、方法等内容,进行增添、分裂、合并等分析,改正错误的内容,删去不必要和重复的内容,以及进行分类整理等。•OOP–目标:到了实现阶段,采用一种面向对象程序设计语言来编