实用软件工程
为什么要学软件工程?\r\n在软件工程中学什么?\r\n应该怎么学软件工程?
本章对读者的要求(1)
要求了解 \r\n 1)微软的企业文化 \r\n 2)CMMI的由来及其实质 \r\n 3) 敏捷文化现象的由来及其实质 \r\n 4)软件工程与信息系统工程的关系 \r\n 5)信息系统工程的内容 \r\n 6)信息系统的建设方法 \r\n 7)信息系统建设的成功案例
本章对读者的要求(2)
要求理解\r\n 1)软件工程的定义和作用\r\n 2)软件工程四个方面的内容:软件开发模型,软件开发方法,软件支持过程,软件管理过程\r\n 3)IT企业ISO 9000的文档编写方法和具体实施步骤
本章对读者的要求(3)
要求关注 \r\n 1)软件工程中常用的三种开发方法:“面向过程的方法、面向数据的方法、面向对象的方法”\r\n 2) 软件工程中的形式化方法\r\n 3)软件工程的五个面向实施理论:“面向流程分析、面向数据设计、面向对象实现、面向功能测试、面向过程管理”
1.1 软件工程的定义
Computer:由硬件和软件组成。\r\n硬件:是看得見、摸得着的电子机械设备块。\r\n软件:是依附在硬件上面的程序、数据和文档的集合,是指挥控制计算机系统(包括硬件和软件)工作的神经思维中枢。
如果将硬件比作人的身体素质,那么软件就相当于人的神经中枢和知识才能。\r\n软件开发:既非常艰苦(因为软件设计思想与开发工具不断更新),又无限快乐(因为软件成果是人类智慧与艺术的结晶)。
软件的定义
软件 == 程序 数据 文档。 \r\n 数据 == 初始化数据 测试数据\r\n 文档 == 开发文档 管理文档。\r\n 今天仍然有人认为:软件等于程序。这些人一上来就写程序。Roger S.Pressman说:“越早开始写代码的人,就是越迟完成代码的人”。
对管理文档的全面认识,那就更晚了。\r\n1974年,美国人认识到软件需要管理。\r\n1984年,美国人认识到软件管理是一个过程管理,或是一个管理过程。\r\n1991年,出现了软件过程能力成熟度模型CMM (Capability Maturity Model)版。
软件的最新定义
软件 == 知识 程序 数据 文档\r\n对这一定义的讨论:\r\n 正方:因为软件是知识在网络上的体现,所以这个定义非常好。\r\n 反方:程序、数据、文档本身就是知识的表现,所以这个定义是画蛇添足。
软件文档具有严格的层次关系
(1)《目标程序》覆盖《源程序》;\r\n(2)《源程序》覆盖《详细设计说明书》;\r\n(3)《详细设计说明书》覆盖《概要设计说明书》;\r\n(4)《概要设计说明书》覆盖《需求规格说明书》;
(5)《需求规格说明书》覆盖《用户需求报告》;\r\n(6)《用户需求报告》覆盖《软件合同》。\r\n管理文档具有严格的时序关系:因为管理是一个过程。
程序的定义
(1).面向过程的程序 == 算法 数据结构。\r\n(2).面向对象的程序 == 对象 消息。\r\n(3).面向数据的程序 == 数据库表 在表上的操作(如存贮过程、触发器或视图)。\r\n(4).面向构件的程序 == 构件 构架。
优秀的程序(或模块),必须满足“高内聚、低耦合”的性质。所谓高内聚,就是程序(或模块)内部结构紧凑,凝聚力和向心力强。所谓低耦合,就是程序(或模块)之间彼此依赖关系很低。\r\n有人说:“人生就是一段程序,这段程序是用特殊代码写成的,只是算法极其复杂而已。”
软件工程的定义
(1).1990年,IEEE对软件工程的定义是:软件工程是将系统化的、严格约束的、可量化的方法,应用于软件开发、运行和维护中去。\r\n(2).2001年,Roger S.Pressman 对软件工程的定义是:软件工程是一个过程、一组方法和一系列工具。
(3).2003年,赵池龙对软件工程的定义是:软件工程是研究软件开发和软件管理的一门工程科学。\r\n可见:软件工程的定义是与时俱进的。
软件工程研究的内容
(1). 软件开发模型,如:瀑布模型、增量模型、原型模型、螺旋模型、迭代模型等。\r\n(2). 软件开发方法,如:面向过程的方法、面向数据的方法、面向对象的方法(包括面向业务基础平台的方法、面向工作流方法、面向主体的方法、面向方面的方法、面向代理的方法等等),以及形式化方法。
(3). 软件支持过程,如:CASE工具Rose、北大青鸟系统、Power Designer、ERWin,以及配置管理工具等。\r\n(4). 软件管理过程,如:ISO9000、CMM/CMMI、软件企业文化(微软企业文件、敏捷文化现象、IBM企业文化)。
【例】 请读者开发一个“图书馆信息系统”,即图书馆MIS。\r\n 这是一项软件工程,为了完成这项任务,读者首先要选择软件开发模型,确定开发方法,准备开发工具,设计开发环境和运行环境,然后进行需求分析、概要设计、详细设计、编程、测试、试运行、正式运行、验收和交付,最后是系统维护或系统升级换代。\r\n 这一系列的软件开发过程和管理过程,就是软件工程。
软件工程的基本原理
(1).用分阶段的生命周期计划,严格管理软件开发。\r\n(2).坚持进行阶段评审。\r\n(3).实行严格的产品版本控制。\r\n(4).采用现代程序设计技术。
(5).结果应能清楚地审查。文档要有严格要求。\r\n (6).开发小组的成员要少而精。\r\n (7).要不断地改进软件工程实践的经验和技术。\r\n (8).二八定律,这条原理特别重要,项目经理与高层经理,要特别牢记。
1.2 软件工程的作用
【例】 20世纪90年代初,有两个软件团队,一个较大(10多人),一个较小(6人),都在开发财务系统。\r\n 较大的那个团队,工作不规范,没有文档,没有评审,没有团队精神,结果开发出来的产品可维护性差,没有打开市场,致使产品与团队最后同归于尽。
较小的那个团队,分工明确:\r\n 一人负责原始凭证和输出报表的收集、归类和整理,这实际上是做需求分;\r\n 一人负责科目和数据字典(代码),这实际上是做信息的标准化与规范化;\r\n 一人负责记账凭证的录入和修改,这实际上是做数据库的设计和加载工;
一人负责日记账、明细账和总账之间的平衡与对账,这实际上是做数据处理;\r\n 一人负责统计、报表和查询,这实际上是做数据输出工作;\r\n 一人负责总体设计和项目管理,这就是项目经理的工作。\r\n 他们最后发展成为一个大型IT企业。
软件工程的作用
从软件项目团队来讲,解决在规定的时间内,按照规定的成本,完成预期质量目标(软件的功能、性能和接口达到需求报告标准)的软件。\r\n 从软件企业本身来讲,解决持续地规范软件开发过程和软件管理过程,不断地优化软件组织的个人素质和集体素质,从而逐渐增强软件企业的市场竞争实力。
从软件发展进程来讲,克服软件危机,控制软件进度,节约开发成本,提高软件质量。\r\n 从院校来讲,以前它只是作为一门课或一本书。现在它成为一个学科,一个体系,一个计算机学位,即软件工程硕士学位和软件工程博士学位。
软件工程作用的具体表现
在选择开发工具上,软件工程的基本观点是:工具不是越新越好,而是你越熟悉越好;\r\n 在风险评估上,软件工程的基本观点是:任何项目组都存在技术风险和技能风险;\r\n 在项目策划上,软件工程的基本观点是:需求分析在前,项目策划在后;
在开发进度上,软件工程的观点是:宁愿慢些,也要保证软件的质量;\r\n 在开发质量上,软件工程的观点是:质量蕴涵于开发过程之中,而不是过程之后;\r\n 在开发人员上,软件工程的观点是:项目组在中途靠增加开发人员来提高开发速度是无效的;\r\n 在项目经理的职责上,软件工程的观点是:80%的时间是写文档,20%的时间是内部勾通.
1.3 软件的开发方法1.3.1 三种开发方法
到目前为止,共有4种软件开发方法:(1).面向过程的方法\r\n (2).面向数据的方法\r\n (3).面向对象的方法(包括面向业务基础平台的方法、面向工作流方法、面向方面的方法、面向服务的方法) 。\r\n (4).此外还有形式化方法。
开发方法来自于程序设计语言
(1).面向过程的程序==算法 数据结构。\r\n (由顺序、分支、循环三种结构组成) \r\n 由它产生了面向过程的方法。\r\n(2).面向数据的程序==表 表上的操作。\r\n 由它产生了面向数据的方法。\r\n(3).面向对象的程序==对象 消息。\r\n 由它产生了面向对象的方法。
1.3.2 面向过程的方法
内容:面向过程需求分析、面向过程设计、面向过程编程、面向过程测试、面向过程维护、面向过程管理。\r\n 面向过程的方法,又称为面向功能的方法,或称为结构化方法。
面向过程的方法
特点:程序的执行过程,不由用户控制,完全由程序员控制。\r\n 优点:简单实用。\r\n 缺点:企图用有穷的方法(枚举法)来描述无穷的(随机的)信息世界,所以不能完全描述信息世界;维护困难。
【例】 面向过程的方法,在军事上的实时跟踪监控系统中有很好的应用。如我方侦察卫星发射后其飞行轨迹的捕获、测量、跟踪和预报,导弹防御系统中敌方导弹发射后飞行轨迹的捕获、测量、跟踪和预报,其软件系统都是采用面向过程的方法设计和实现的。\r\n 使用面向过程的方法,系统的执行路径可由系统自动控制,也就是程序自动控制,这是一切自动控制与跟踪系统所必须的。
1.3.2 面向对象的方法
内容:面向对象需求分析、面向对象设计、面向对象编程、面向对象测试、面向对象维护、面向对象管理。\r\n 在分析、设计、实现中用到“对象、类、继承、消息通信”这四个基本概,就是面向对象的方法。\r\n 今天用UML来开发软件,就是面向对象的方法。
面向对象的方法
特点:\r\n (1).程序的执行过程,不由程序员控制,完全由用户控制。\r\n (2).分析设计时面向类,编程时面向对象。 \r\n 优点:用无穷的方法来描述无穷的(随机的)信息世界,所以能完全描述信息世界;易于维护。 \r\n 缺点:较难掌握 。
【例】 面向对象的方法在电子商务中的应用有:网站前台界面的制作,信息的发布和处理,用户在网上浏览和录入信息等应用软件都是利用面向对象的方法设计与实现的。\r\n 个人网页的制作也是面向对象方法的应用例子。\r\n 窗口操作系统与互联网的出现,为面向对象方法开辟了无限的前景。
面向对象方法的特例1:面向业务基础平台的方法
内容:业务基础平台屏蔽了操作系统平台、数据库平台的诸多技术细节,采用面向业务的建模方法进行开发,有效弥合了技术人员和业务人员之间的沟通鸿沟,可以使开发人员更多地关注业务部分,而不是技术细节。
面向业务基础平台的方法
特点:面向业务领域的、而与技术无关的开发模式。本质上仍然是面向对象的方法。 \r\n 优点:提升了构件的复用性。 \r\n 缺点:业务基础平台是面向业务行业的,不同行业之间的通用平台标准尚出产生。
1.3.3 面向数据的方法
这里讲的面向数据的方法,既不是传统软件工程中所讲的“面向数据流”的方法,也不是传统意义上的面向数据结构的Jackson方法。\r\n 事实上,这两种方法早已过时,但是许多书上还在讲,真是有点误人子弟。
面向数据的方法
我们讲的面向数据的方法,是面向元数据(Metadata)的方法,它是建设信息系统数据库和数据仓库的基本方法。\r\n 该方法将与关系数据库同生死、共患难。
面向数据的方法
内容:\r\n (1) 数据位于信息系统的中心。\r\n (2) 由元数据构成的数据模型是稳定的。\r\n (3) 对元数据的处理方法是可变的。\r\n (4) 企业信息系统的核心是数据模型。\r\n (5) 系统的实现方法主要是面向对象。\r\n (6) 用户始终参与信息系统的开发。
面向数据的方法
特点:程序的执行过程,有时由程序员控制,有时由用户控制 。 \r\n 优点:适合数据层(数据库服务器)设计与实现。 \r\n 缺点:实现窗口界面较困难。
【例】面向数据的方法在电子商务中也有应用。\r\n 网站后台数据库服务器上的数据处理和数据传输,其软件都是利用面向数据的方法设计与实现的。\r\n 实际上,不管网络应用系统结构是两层结构或三层结构,在数据库服务器上对数据的分析、设计和实现,都自觉或不自觉地使用了面向数据的方法。
*1.3.4 软件工程的形式化方法
不讲,考研的人可以自学。\r\n 因为在IT企业用不上。
1.3.5 四种开发方法总结对比
1.4 软件工程的五个面向理论
面向过程的方法、面向对象的方法、面向数据的方法,这三种开发方法哪个最好呢?当然是面向对象。\r\n 但是,任何好与坏,都是相对的,有条件的,不是绝对的。这三种开发方法各有千秋,面向对象方法稍强,它们分别适合于不同的环境和不同的场合。
五个面向理论
综合这三种开发方法的优势,特别提出 “五个面向”的实施理论:\r\n 1. 面向流程分析\r\n 2. 面向数据设计\r\n 3. 面向对象实现\r\n 4. 面向功能测试\r\n 5. 面向过程管理
面向流程分析
面向流程分析,就是面向流程需求分析。\r\n 在需求分析时,系统分析员要面向业务流、资金流、信息流进行分析。只有将这“三个流”分析透了,才建立好系统的业务模型和功能模型。因为计算机网络在本质上只认识数据及数据流(二进制数据的流动),而且这“三个流”,可以用“数据流”这一个流程来代替,或者说“三个流”是“数据流”在三个不同方向的投影。
面向数据设计
面向数据设计,就是面向元数据进行概要设计。\r\n 在系统设计时,系统设计师要采用面向数据的方法进行概要设计。面向数据就是面向“元数据”(Metadata)。
面向数据设计
概要设计的主要任务是建立系统的概念数据模型CDM和物理数据模型PDM,以及体现业务规则的存储过程和触发器,然后以数据模型为支撑,去实现系统的业务模型和功能模型。\r\n 为此,要对元数据进行分析,只有将元数据分析透了,才能建立好由元数据所构成的数据模型。\r\n 这里讲的面向数据设计,主要表现在数据库服务器上的关系数据库设计。
面向对象实现
面向对象实现,就是面向对象进行详细设计和编程实现。\r\n 在两层结构(C/S)的客户层上,在三层结构(B/A/S)的表示层和业务逻辑层上,进行详细设计和编程实现时,要采用面向对象的方法。当然,在数据服务层上的设计和编程实现,仍然要采用面向数据的方法,因为主要是设计和编写存储过程,它们是面向数据的,不是面向对象的。
面向对象实现
详细设计和编程实现,实质上是用构件加上程序来实现系统的业务模型和功能模型。只有对三个模型思想(业务模型、功能模型、数据模型)吃透了,才能设计和编写出合格的程序。\r\n 面向对象实现,实质上是面向类实现,因为实例化的类称为对象。
面向功能测试
面向功能测试,就是面向功能进行单元测试、集成测试、Alpha测试和Beta测试。\r\n 在进行测试时,测试人员要采用面向功能的方法。这里讲的功能,包括系统的功能、性能和接口三部分内容。面向功能测试的方法就是黑盒子测试方法,今后采用白盒子测试方法(面向程序执行路径测试)的人,只有从事软件构件生产和核心代码编程的极少数人员。
面向过程管理
面向过程管理,就是面向过程对软件生命周期各个阶段进行管理和控制。\r\n 因为软件产品质量的提高与改进,完全取决于软件企业生产过程的改善。无论是CMM/CMMI、ISO9000、微软企业文化,都是站在软件生命周期过程的观念上去提高软件企业的素质。
1.5 软件的支持过程
软件工程中的过程,是指软件生命周期(Life Cycle)中的时间序列。\r\n 过程作为一个时间序列,它自然有起始点和终止点。例如,可以将一个软件的生命周期划分为市场调研、立项、需求分析、策划、概要设计、详细设计、编程、单体测试、集成测试、运行、维护这几个过程。过程与阶段(Phase)相对应,阶段与里程碑(Milestone)相对应。某些重要的里程碑上的文档,又对应基线(baseline)。
软件的支持过程
软件工程的支持过程,由支持软件生存周期各个阶段的生产工具所组成。\r\n生产工具如需求分析工具、设计工具、实现工具、测试工具、维护工具、配置工具,开发环境。\r\n软件开发环境又称CASE工具,如北大青鸟系统,San Francisco,Rose,面向行业领域开发的业务基础平台(包括软件企业内部使用的各种J2EE平台和.Net平台)。
1.6 软件的管理过程
“外行关注结果,内行关注过程”。\r\n 管理过程和支持过程又称为“软件过程工程” 。\r\n 1974年,美国人始认识到“软件需要管理”。\r\n 1984年,美国人认识到“软件管理是过程管理”。
软件的管理过程
软件中的过程,分为“基本过程、支持过程、组织过程”三种.\r\n 基本过程是需求、设计、实现、测试、验收过程;\r\n 支持过程是支持过程开发和过程管理的各种CASE工具;\r\n 组织过程是建立的有关小组,如软件工程组、质量保证组、测试组、文档组。
软件的管理过程
软件工程中主要存在3类过程管理模型:\r\n (1). ISO9000质量管理和质量保证体系\r\n (2). CMMI过程能力成熟度模型集成\r\n (3). 企业文化 (微软企业文化、敏捷文化现象等 )
1.6.1 ISO9000体系
1. “质量手册”内容:质量方针和目标、公司简介、组织机构、质量体系要求、质量手册管理细则等\r\n2. “程序文件”内容:规定每个质量要素在何时、在何地、由何人、按照什么标准、规范或规程去做。做完后书写质量记录的模板格式(如:用户需求报告模板或指南、设计说明书模板或指南、测试报告模板或指南、用户手册模板、评审报告模板)
ISO9000体系
3. “质量记录”内容:对每个质量要素,在执行活动中,按照书写质量记录的模板格式书写的文档(如:用户需求报告、设计说明书、测试报告、用户手册、各种评审与审计报告)
1.6.2 微软企业文化
“平等、自由、亲和、融洽、创新、激情、沟通和主人翁精神”的企业文化,是“以人为本”企业文化的具体表现,是微软的精神管理模式。\r\n 企业文化实质上是一种企业环境,而环境就是一种生产力。微软的用人之道是“人品、智慧、团队精神”三要素,以及“宁缺勿滥”和“不拘一格”的原则,它是微软招聘、培养、考察、提升员工的标准。
软件招聘人才例子
上世纪末,国内软件公司人才跳槽现象普遍,软件版权观念淡薄,有这样一个人到微软公司去应聘,你们认为能成功吗?\r\n 这个人自称,在原公司掌握了某软件产品的核心技术,而且将原代码也偷出来了,因此可为你公司创造很大经济效益。
1.6.3 CMM/CMMI
CMM/CMMI的作用\r\n 概括地讲,软件企业的过程能力成熟度模型CMM的作用,是软件组织的能力评估和过程改进,它的应用领域具体表现在三个方面:\r\n (1) 软件组织:用它来不断改进自身的软件过程管理能力;\r\n (2) 评估机构:用它来评估某软件组织当前软件能力成熟度的级别;\r\n (3) 客户:用它来评价某承包商 (软件外包商) 的软件能力。
CMM/CMMI的实质
(1) 以“过程”为核心抓软件组织的管理,即软件“组织”的过程改进。\r\n (2) 以“项目”为手段抓团队开发过程的“活动”,即落实过程改进的措施。\r\n (3) 以“活动”记录为基础抓软件过程的“度量”,即“度量”软件组织改进的情况。\r\n 通过以上三项措施,使软件过程逐渐变为可视、可控,从而实现CMMI精神:质量源于过程、过程需要改进、改进需要模型、改进永无止境。
CMM/CMMI的实质
“过程”,既包括软件开发过程,又包括软件管理过程。\r\n “组织”,是指软件企业自己,或自己内部的一个软件研发部门。\r\n “项目”,是指软件企业的项目开发团队。\r\n “活动”,包括项目的开发活动和项目的管理活动两个方面。\r\n “度量”,是指对软件测量数据库中的项目管理记录数据进行统计和分析。
CMM的级别
CMM1级:初始级,无序管理。\r\n CMM2级:可重复级,项目级管理。\r\n CMM3级:已定义级,组织级管理。\r\n CMM4级:已管理级,数据级管理。\r\n CMM5级:优化级,优化级管理。
CMM/CMMI的内容
(1) CMM的内容:\r\n 五个级别、18个关键过程域(KPA)\r\n (2) CMMI的内容:\r\n 阶段式模型:五个级别、24个过程域(PA)\r\n 连续式模型:六个级别、24个过程域(PA)
1.7 软件工程与信息系统工程
利用计算机网络技术、数字通信技术与数据库技术实现信息采集和处理的系统,称为当代信息系统。\r\n 信息系统由社会环境、网络环境、数据环境和程序环境这四个部分组成。
软件工程与信息系统工程
信息标准化,就是信息代码化和规范化。\r\n 代码化就是用数字或字符代码来表示信息,这种表示方式便于在信息系统中交流。\r\n规范化就是代码要遵守一套规定和标准,不能自行其事。
1.8 信息系统建设案例分析
港口综合MIS系统包括如下子系统:\r\n (1)货物运输子系统\r\n (2)船舶调度子系统\r\n (3)设备管理子系统\r\n (4)物资管理子系统\r\n (5)客运管理子系统\r\n (6)外轮代理子系统\r\n (7)集装箱子系统\r\n (8)人事劳资子系统
港口信息系统建设案例分析
成功的秘密归纳起来,有4点:\r\n (1)自始至终坚持采用“面向数据的方法”不动摇。即坚持面向数据分析、面向数据设计、面向数据实现、面向数据测试、面向数据维护。\r\n (2)自始至终坚持采用Oracle关系数据库管理系统不动摇。客观地说,建设大型信息系统,Oracle数据库具有稳定可靠的强大功能和优秀性能。
港口信息系统建设案例分析
(3)自始至终坚持采用CASE工具不动摇。这些工具包括设计工具Power Designer和实现工具Developer 2000,它们都是面向数据的开发工具。\r\n (4)自始至终坚持港口信息系统建设不动摇。要做行业ERP,就必须熟悉并精通该行业的业务流程和规则,长期坚持某一行业的方向不动摇,才能做该行业领域的业务专家,才能与时俱进地把握该行业领域的客户需求。
港口信息系统建设最新动态
Justep X3业务基础平台 \r\n 当代信息系统应该构建在业务基础平台上,而不是直接构建在技术平台上.\r\n 当代信息系统的开发应该采用业务建模的方式,而不是采用原始的编程工具.\r\n 业务基础平台实现了上述思想.\r\n 业务基础平台的核心能力包括 团队协作、流程控制、业务集成、系统智能、决策支持和持续完善 .
1.9 本章小结
本章介绍了软件工程的定义、内容、作用,以及三种开发方法、五个面向理论。这些都是软件工程的精华;\r\n 本章既是研究软件工程的出发点,又是研究软件工程的归宿。既是绪论,又是总结。\r\n 由于软件工程是一门实践性很强的科学,所以要真正弄懂它,吃透它,一定要理论联系实际,学以致用。