第六讲信息系统开发的基本思想学习信息系统开发的目的是为了提高企业的效率(Efficiency)和效益(Effectiveness),更重要的是后者。信息系统开发的基本思想实际系统软件结构程序软件数据库模型库知识库软件工具转换与维护业务流程重组先进的管理理论和方法软件工程识别&转换转换是一种超越从实际系统到程序软件的两次转换决不是对实际系统的简单模拟和复制,而是融入了先进的管理理念、管理思想、优化的业务流程和接纳新的企业文化的新型管理平台。这种转换应该是一种超越:在管理思想、方法和业务流程上的超越。信息系统开发中的四个不能一不能:不能以先进的管理思想来迁求落后的管理思想;二不能:不能以重组的合理流程来服从不合理的现实的流程;三不能:不能用对新系统的肆意裁剪来迎合老系统;四不能:不能忽视与新系统相适应的企业文化建设。信息系统的开发策略独立开发企业有开发信息系统的专业人员优点:满足本企业的个性化需求,系统维护比较容易;缺点:系统优化不够,开发水平较低,流程不易改变委托开发企业无开发信息系统的专业人员优点:也满足本企业的个性化需求,系统省时、省心、省力且开发的技术水平较高;缺点:系统的开发费用高,需要开发单位的长期支持合作开发企业的人员和专业人员合作优点:也满足本企业的个性化需求,有利于锻炼和培育本企业的系统开发人员,有利于系统的维护;缺点:系统的开发费用相对高,需要双方的长期沟通和协调。咨询开发优点:满足本企业的个性化需求,系统维护比较容易,改进了独立开发的弊病。引进应用软件应用的专业化方向优点:系统的技术水平高,升级容易,成本较低维护相对比较容易;缺点:较难满足企业的个性化需求,需要进行较大规模的二次开发。信息系统开发失败的原因1、没有建立信息系统开发的目标体系:●仅仅想以计算机系统代替人工系统。2、缺少“用户至上”观点:●仅仅作为一个技术系统开发,而不是一个管理应用系统。3、开发人员与用户无法有效沟通:●专业背景不同及无有效的沟通工具。4、开发过程没有明确的阶段与分工:●信息系统是一个涉及面广,技术复杂的系统。●一着手马上开始编程。5、不留开发文档:●导致系统修改维护工作无法进行。信息系统的开发方法1、结构化系统开发方法●SSA&D(StructuredSystemAnalysis&Design)2、原型法●Prototyping3、面向对象技术●OOD(Object-OrientedDesign)结构化系统开发方法结构化系统开发方法的特点“软件工程学”是专门研究计算机软件系统开发的学科,它要求在开发计算机软件系统时,以系统为理论依据,将系统开发视同一项工程分步骤地进行,并在每一步骤中使用规定的方法、工具,编制规定的文档,从而通过控制开发过程,达到加快开发速度,降低开发成本,保证最终所获软件系统的质量等目的。所以,计算机软件工程学是指导软件开发的方法论,其内容涉及到软件开发的步骤、方法、工具、开发文档规定等。按照软件工程的规定,软件系统开发的成果由两部分组成:一部分是计算机可以运行的程序(计算机命令的集合);另一部分是按各开发步骤编制的文档。所以我们把软件定成为:软件=程序+文档引子--软件工程学方法生命周期法正像人的生命周期要经历从出生、幼年期、少年期、青年期、壮年期、老年期到死亡一样,软件也有生命周期,它是指软件产品从形式概念开始,经过开发,使用和不断增补修订,直到最后被淘汰的整个过程,通常这个生命周期分为七个阶段:(1)可行性研究与计划;(2)系统分析;(3)系统设计;(4)程序设计(系统实施);(5)系统测试;(6)运行和维护;(7)废弃(终结)。软件生命周期瀑布图在系统分析阶段的常用技术有结构化系统分析方法(SA)、结构化系统设计方法(SD),在系统分析阶段的相应软件工具有信息关联图(IRD),管理业务流程图(TFD),数据流程图(DFD),数据词典(DD)等等。在系统设计阶段的软件工具有系统模块结构图,Jackson设计方法。在程序设计阶段用结构化程序设计方法(SP)。通常软件的生命周期又可分为三大部分:(1)系统分析期系统分析:包括可行性研究与计划、系统分析;(2)系统设计期:包括系统设计;(3)系统实施期:包括程序设计、系统测试、系统运行和维护。面向用户的观点用户是信息系统开发的起点和最终归宿:1、系统功能面向用户;2、开发过程面向用户;3、二次开发面向用户;4、系统评价面向用户。结构化、模块化开发系统将自顶向下的分析与设计和自底向上的实施相结合。严格划分系统开发阶段系统规划阶段系统分析阶段系统设计阶段系统实施阶段系统运行阶段开发过程工程化制定系统开发的标准规范系统开发的步骤结构化系统开发方法存在的问题开发者与用户沟通障碍:●专业背景不一样。●用户难于描述系统的现状与未来的目标。●开发者理解的偏差甚至错误。不符合人的认识规律:●用户:实践-认识-再实践-……●系统:已经基本定型。●开发者:将立足点放在技术上。周期长、文档多:●不能适应变化,定性时与开发初衷存在差异;●用户难以真正理解这些文档。生命周期法基本前提的动摇●由于用户需求的多变性与环境的不确定性。原型法PROTOTYPING原型的含义指开发对象可运行的早期的一个软件系统版本。原型法开发技术采用通常的软件开发技术和工具来开发系统原型,显然是不值得的,开销太大,而且开发系统原型在将来系统实现时最终是要废弃不用的。开发系统原型的目的是为了增进软件人员和用户对系统服务需求的理解,建立和确认一个完整的软件需求规格说明。为了减少开发系统原型的开销,可以采用一些特殊的有别于通常软件开发时使用的技术和工具。例如:⑴采用非常高级语言实现系统原型;⑵暂不考虑速度、空间等性能效率方面的要求;⑶不考虑错误恢复和处理;⑷降低可靠性和软件质量标准。软件包含的内容程序模块数据文件用户界面(输入/输出界面)与其他系统的接口原型法的特点周期短,见效快。符合人的认识规律。对企业内外环境变化适应能力较强。对开发平台要求较高:▲高性能的关系数据库管理系统;▲第四代语言4GLs实现自动编程;▲交互式、可视式工作环境;▲数据字典管理系统(DDMS)。构造原型的方法●组件式构造法。●构造规模较小的原型。●利用高效软件工具。原型法开发流程系统需求系统识别系统原型系统使用系统建立系统否定系统建议系统修改原型法应用中应注意的问题充分了解和重视原型法的使用环境及开发工具一般认为,第四代语言(4GL)和软件开发工具是支持原型开发的有力工具。原型法和结构化方法的有机结合系统整体的分析和设计用结构化系统开发方法,将系统分析设计和建造系统原型结合起来,用原型法的开发工具实施系统。原型法的适用范围不适用大型系统;不适用运算量大、逻辑性强的程序模块;不适用基础管理不善的企业;系统开发方法的发展历程发展历程:系统开发方法的发展历程年份19601970198019902000系统开发早期系统开发方法雏型系统开发的工程化方法系统开发的面向对象技术传统的“面向过程”的方法学是把世界分成两个部分,分别认知:1)数据(Data):用于描述各种状态的数据结构;2)过程(Procedures):就是操作这些状态数据的程序,有时也称为“算法”。说得形象一些,它认为数据是静态的,不会自行改变的,而需要各种各样的过程来改为数据。您还记得“数据结构”+“算法”=程序,这一个伟大的等式吗?这就是“面向过程”方法学的精髓。面向对象的系统开发方法举个例子,我们要将一块木头从目前的位置向北搬到距原地10米的地方,我们首先会定义一个表示木头的数据结构,存储位置、质量等状态信息,然后再编写一个算法操作这个表示木头的数据结构,以达到目的。而“面向对象”的方法学则认为世界是由各种各样的对象(object)组成的,而每一个对象都有两个特征:状态(也称为属性)与行为(也称为方法)。说得形象一些,每个组成世界的对象都是通过自己的行为来变化自身的状态,一切变化都是对象自身、或对象间的协调而产生的。所谓“面向对象”是一种认识客观世界的世界观,从结构组织角度模拟客观世界的一种方法,人们在认识和理解现实世界的过程中,普遍运用以下三个构造法则:(1)区分对象及其属性,如区分车和车的大小;(2)区分整体对象及其组成部分,如区分车和车轮;(3)不同对象类的形成及区分,如所有车的类和所有船的类。因而,客观世界可以看成由许多不同种类的对象构成,每个对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用构成了完整的客观世界。面向对象的基本概念1、对象:是一种对客观事物的抽象,它由状态(属性)和行为(方法)组成。下面,我们就使用一个图,来帮助大家认识对象。正如图所示,我们使用一个大圆来表示一个对象,中间的一个小圆圈定义了这个对象的各种状态信息,外面则是各种各样的行为,通过执行这个对象的行为,就会改变这个对象的状态。类:是对象的集合也就是由所有相似对象的状态变量(属性变量)与行为(方法)所构成的模板或原型。我们首先定义了“笔店”这个类,它拥有4个属性:1)铅笔;2)钢笔;3)圆珠笔;4)其它笔同时还定义了三个行为:1)卖出:将属性的值减少,表示卖出;2)进货:将属性的值增加,表示进货;3)盘点:打印出属性的值;消息传递在前面,我们说到在面向对象的世界中,一切变化都是对象自身、或对象间的协调而产生的。那么它们是如何进行协商的呢?在面向对象的程序设计中,我们采用一种叫消息传递(MessagePassing)的机制来实现。消息从一个对象发到另一个对象,使另一个对象完成某一个行为。通常,我们把发送消息的对象称为“发送对象”(sender),而把接受消息的对象称为“接受对象”(receiver)。其工作如下图所示:消息传递机制工作示意图继承:是指一个类(即称子类)因承袭而具有另一个类(或称父类)的能力和特征的机制或关系。例如,汽车中有货车、客车、轿车……:1)用于运输货物的汽车叫货车;2)用于运输旅客的汽车叫客车;3)豪华的、较低矮、较小的、有钱人(:-P)坐的汽车叫轿车。而汽车、货车、客车、轿车都是类!在本例中,汽车这个类是货车、客车、轿车这三个类的超类(Superclass),而货车、客车、轿车这三个类则是汽车这个类的子类(subclass)。这四个类(超类与子类)的关系,可以通过下面这个图来表示:为什么要引入继承的概念呢?继承机制提高了“软件可复用性”。大家应该知道,在结构化的程序设计中,我们常常将一些经常要使用的功能模块写成子程序,供程序调用,这样会大大提高开发效率。这也就是“软件复用”。而通过继承,我们可以在已定义类的基础上无限地繁衍出更多的类,并且通过直接继承、新增、局部修改来重复使用超类。这样必将使软件开发的速度更快,同时可以使程序共享成为可能。封装性:就是把一组数据和与其有关的操作集合组装在一起,形成一个能动的实体,也就是对象。例:就象电路设计,以前是用一个个晶体管的,后来把能完成某一功能的晶体管做在一起封装起来,并只提供几只引脚,外界只能通过这些引脚而不能通过别的途径来访问内部功能,这就成了集成电路。封装使得一个对象具备独立和明确的功能,并提供接口便于和其它对象作用,而其内部的代码和数据都是受保护的。好处不言自明。多态性多态性很有意思,不同的对象可以调用相同名称的函数,却能导致完全不同的行为的现象。这在现实生活中也会发生,比如我这个对象去调用玩电脑这个函数时,一般发生的是打字的行为,而我表弟去调用玩电脑这个函数时,总是发生游戏大战的行为。这是由于玩电脑这个函数它能根据不同的对象做出不同的反应。我们只管玩电脑就行了。多态性:同一消息发送至不同类或对象可导致不同的操作结果,使软件开发设计更便利,编码更灵活。易维护性:面向对象的抽象封装使对象信息隐藏在局部。当对象进行修改,或对象自身产生错误的时候,由此带来的影响仅仅局限在对象内部而不会波及其他对象乃至整个系统环境,这极大方便了软件设计、构造和运行过程中的检错、修改。面向对象的系统开发方法的原理面向对象开发一般经历三个阶段:面向对象系统分析(OOA),面向对象系统设计(OOD)和面向对象系统实现(OOP)。