1、软件工程软件工程课课 名:软件工程名:软件工程教材:教材:软件工程导论软件工程导论 (第四版)(第四版)张海藩张海藩 清华大学出版社(清华大学出版社(2003)参考教材:参考教材:1 1 计算机软件工程规范国家标准汇编计算机软件工程规范国家标准汇编(2000)(2000)2 2 软件工程实践者的研究方法软件工程实践者的研究方法 3 3 软件工程软件工程JavaJava语言实现语言实现教学方式:授课教学方式:授课 、大作业、大作业 课时:课时:18181818软软 件件 工工 程程 实用软件工程实用软件工程(第二版)(第二版)郑人杰郑人杰 殷人昆殷人昆 陶永雷陶永雷 清华清华大学出版社(大学出版
2、社(1996)软件工程软件工程-实践者的研究方法实践者的研究方法(英文版(英文版 第四版)第四版)Roger S.Pressman 机械工业出版社机械工业出版社参考书目参考书目第一章 软件工程学概述Late 1950s:1.软件危机软件危机(Software Crisis)In the early days:“Software”=“Place a sequence of instructions together to get the computer to do something useful”.User ComputerComputer became cheaper and more c
3、ommonHigh level languages were inventedProgrammerUser Computereasier1.软件危机软件危机Early 1960s:Very few large software projects were done by some experts.Middle to late 1960s:Truly large software systems were attempted.例例:美国美国IBM公司在公司在1963年至年至1966年开发的年开发的IBM360机的操作系统。这一项目花了机的操作系统。这一项目花了5000人一人一年的工作量,最多时有
4、年的工作量,最多时有1000人投入开发工作,人投入开发工作,写出了近写出了近100万行源程序。万行源程序。.据统计,这个据统计,这个操作系统每次发行的新版本都是从前一版本中操作系统每次发行的新版本都是从前一版本中找出找出1000个程序错误而修正的结果。个程序错误而修正的结果。.1.软件危机软件危机 这个项目的负责人这个项目的负责人F.D.BrooksF.D.Brooks事后总结了他事后总结了他在组织开发过程中的沉痛教训时说:在组织开发过程中的沉痛教训时说:“.正像正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。扎
5、,陷得越深,最后无法逃脱灭顶的灾难。.程序设计工作正像这样一个泥潭,程序设计工作正像这样一个泥潭,.一批批程一批批程序员被迫在泥潭中拼命挣扎,序员被迫在泥潭中拼命挣扎,.谁也没有料到谁也没有料到问题竟会陷入这样的困境问题竟会陷入这样的困境.”.”。IBM360IBM360操作系操作系统的历史教训成为软件开发项目的典型事例为人们统的历史教训成为软件开发项目的典型事例为人们所记取。所记取。Software Crisis !1.软件危机软件危机 项目没有被很好地理解;计划不周,最终导项目没有被很好地理解;计划不周,最终导致进度拖延。致进度拖延。例例1.In the late 1960s,a brig
6、ht-eyed young engineer*was chosen to“write”a computer program for an automated manufacturing application.The reason for his selection was simple.He was the only person in his technical group who had attended a computer programming seminar.He knew the ins and outs of assembler language and Fortran,bu
7、t nothing about software engineering and even less about project scheduling and tracking.*If youre wondering whether this story is autobiographical,it is!问题出在哪里?问题出在哪里?1.软件危机软件危机His boss gave him the appropriate manuals and a verbal description of what had to be done.He was informed that the project
8、 must be completed in two months.He read the manuals,considered his approach,and began writing code.After two weeks,the boss called him into his office and asked how things were going.“Really great,”said the young engineer with youthful enthusiasm,“This was much simpler than I thought.Im probably cl
9、ose to 75 percent finished.”The boss smiled.“Thats really terrific,”he said.He then told the young engineer to keep up the good work and plan to meet again in a weeks time.1.软件危机软件危机A week later the boss called the engineer into his office and asked,“Where are we?”“Everythings going well,”said the y
10、oungster,“but Ive run into a few small snags.Ill get them ironed out and be back on track soon.”“How does the deadline look?”the boss asked.“No problem,”said the engineer.“Im close to 90 percent complete.”If youve been working in the software world for more than a few years,you can finish the story.
11、Itll come as no surprise that the young engineer stayed 90 percent complete for the entire project duration and only finished(with the help of others)one month late.1.软件危机软件危机 没有充分的文档资料没有充分的文档资料(documentation)Myth:The only deliverable for a successful project is the working program.Reality:A working
12、 program is only one part of a software configuration that includes programs,documents,and data.Documentation forms the foundation for successful development and,more important,provides guidance for the software maintenance task.VITAL!人与人的人与人的交流交流比写程序困难得多。比写程序困难得多。Managers evaluate,track progress,.P
13、rogrammers communicate to each otherMaintainers 1.软件危机软件危机 软件可靠性软件可靠性(reliability)缺少度量的标准,质量缺少度量的标准,质量无法保证。无法保证。如何保证软件产品的质量,是非常复杂困难如何保证软件产品的质量,是非常复杂困难的问题。特别对于规模庞大的软件,如:的问题。特别对于规模庞大的软件,如:.The software supporting the American space shuttle consists of 3 million lines of code,including computers on the
14、 ground controlling the launch and the flight;there were one hundred thousand lines of code in the shuttle itself in 1985.Many computer scientists and software engineers continue to believe there is no way to write and test the software to guarantee adequate reliability.1.软件危机软件危机 软件难以维护软件难以维护(maint
15、ainability)不易升级不易升级(evolvability)Myth:Once we write the program and get it to work,our job is done.Reality:Someone once said that“the sooner you begin writing code,the longer itll take you to get done.”Industry data indicate that between 50 and 70 percent of all effort expended on a program will be
16、expended after it is delivered to the customer for the first time.1.软件危机软件危机 Better management Different team organizations Better languages&tools Uniform coding conventions 必须意识到:必须意识到:“软件软件”编程,它有自己的编程,它有自己的生命周期生命周期(life cycle)。大型软件系统的开发与。大型软件系统的开发与其它工程项目如建造桥梁、制造飞机、轮船等其它工程项目如建造桥梁、制造飞机、轮船等的开发是同理的。的开
17、发是同理的。解决问题的想法:解决问题的想法:1.2 软件工程1.2.1软件工程发展历史“软件工程软件工程”(Software Engineering)术语首次出现:术语首次出现:19681968年年NATONATO会议会议软件工程方法软件工程方法:是采用工程的概念、原理、技是采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。最好的技术方法结合起来。Evolution of software 早期早期 自定义软件自定义软件用户自己开发、用户自己开发
18、、自己使用、自己使用、自己维护自己维护19501960Evolution of software 早期早期 第二阶段第二阶段 多用户多用户 实时实时自定义软件自定义软件 数据库数据库 软件产品软件产品 1950196019701980Evolution of software 早期早期 第二阶段第二阶段 第三阶段第三阶段 多用户多用户 分布式系统分布式系统 实时实时 嵌入嵌入“智能智能”自定义软件自定义软件 数据库数据库 低成本硬件低成本硬件 软件产品软件产品 消费者的影响消费者的影响 19501960197019801990Evolution of software 早期早期 第二阶段第二阶
19、段 第三阶段第三阶段 第四第四阶段阶段 多用户多用户 分布式系统分布式系统 强大的桌面系统强大的桌面系统 实时实时 嵌入嵌入“智能智能”面向对象面向对象技术技术自定义软件自定义软件 数据库数据库 低成本硬件低成本硬件 专家系统专家系统 软件产品软件产品 消费者的影响消费者的影响 人工神经网络人工神经网络 批处理批处理 并行计算并行计算 网格计算网格计算195019601970198019902000软件的特点软件的特点软件具有与硬件不同的特点软件具有与硬件不同的特点:F软件是一种逻辑实体,而不是具体的物理实体,软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。因而它具有抽象性。F软件
20、是由开发或工程化而形成的,而不是传统软件是由开发或工程化而形成的,而不是传统意义上的制造产生的意义上的制造产生的;F在软件的运行和使用期间,没有硬件那样的机在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。械磨损,老化问题。F大多数软件是自定义的,而不是通过已有构件大多数软件是自定义的,而不是通过已有构件组装的。组装的。F软件的开发至今尚未完全摆脱手工艺的开发方软件的开发至今尚未完全摆脱手工艺的开发方式。式。F维护不同。维护不同。软件的分类类别类别参加人员数参加人员数研制期限研制期限产品规模(源程序行数)产品规模(源程序行数)微型微型1 11 14 4周周0.5k0.5k小型小型1 1
21、1 16 6月月1k1k2k2k中型中型2 25 51 12 2年年5k5k50k50k大型大型5 520202 23 3年年50k50k100k100k甚大型甚大型100100100010004 45 5年年1M(=1000k)1M(=1000k)极大型极大型20002000500050005 51010年年1M1M10M10M如果按软件规模进行划分:如果按软件规模进行划分:计算机软件发展的三个时期及其特点 特点特点 时期时期程序设计程序设计程序系统程序系统软件工程软件工程软件所指软件所指 程序程序 程序及说明书程序及说明书 程序程序,文档文档,数据数据主要程序设计语言主要程序设计语言 汇编
22、及机器语言汇编及机器语言 高级语言高级语言 软件语言软件语言软件工作范围软件工作范围 程序编写程序编写 包括设计和测试包括设计和测试 软件生存期软件生存期软件使用者软件使用者 程序设计者本人程序设计者本人 少数用户少数用户 市场用户市场用户软件开发组织软件开发组织 个人个人 开发小组开发小组 开发小组及大中型软件开发机构开发小组及大中型软件开发机构软件规模软件规模 小型小型 中小型中小型 大中小型大中小型决定质量的因素决定质量的因素 个人编程技术个人编程技术 小组技术水平小组技术水平 技术水平及管理水平技术水平及管理水平开发技术和手段开发技术和手段 子程序和程序库子程序和程序库 结构化程序设计
23、结构化程序设计 数据库数据库,开发工具开发工具,开发环境开发环境,工工程化开发方法程化开发方法,标准和规范标准和规范,网络网络及分布式开发及分布式开发,面向对象技术及软面向对象技术及软件复用件复用维护责任者维护责任者 程序设计者程序设计者 开发小组开发小组 专职维护人员专职维护人员硬件特征硬件特征 价格高价格高,存储容量存储容量小小,工作可靠性差工作可靠性差 降价降价,速度、容量及工速度、容量及工作可靠性有明显提高作可靠性有明显提高 向超高速向超高速,大容量大容量,微型化及网微型化及网络化方向发展络化方向发展软件特征软件特征 完全不受重视完全不受重视 软件技术的发展不能满软件技术的发展不能满足
24、需要足需要,出现软件危机出现软件危机 开发技术有进步开发技术有进步,但未获突破性但未获突破性进展进展,价格高未完全摆脱软件危机价格高未完全摆脱软件危机软件构件软件构件要求:标准构件标准构件(components)可复用性可复用性(Reusability)集成化软件开发环境集成化软件开发环境(ISEE)应用应用系统系统 软件生产过程 软件生产过程应用构件应用构件提取车间提取车间 应用应用构件库构件库领域领域 1 1领域领域 2 2应用应用系统系统 软件生产过程应用构件应用构件提取车间提取车间 应用应用构件库构件库构件生构件生产车间产车间领域领域 1 1领域领域 2 2应用应用系统系统1 12 2
25、3 34 41 1基础构件,基础构件,2 2功能构件功能构件 3 3接口构件,接口构件,4 4用户界面构件用户界面构件 软件生产过程应用构件应用构件提取车间提取车间 应用应用构件库构件库构件生构件生产车间产车间 构件库构件库组装组装车间车间领域领域 1 1领域领域 2 2应用应用系统系统 .1 12 23 34 41 1基础构件,基础构件,2 2功能构件功能构件 3 3接口构件,接口构件,4 4用户界面构件用户界面构件 软件技术面临的问题:F 软件软件复杂性复杂性 例例:1 Windows95:1 Windows95程序超过程序超过10001000万行万行 2 WWMCCS2 WWMCCS(军
26、事和控制)花费(军事和控制)花费35003500多人拖多人拖了几年,交付后发现出了几年,交付后发现出100100个错误。最后失个错误。最后失败。败。3 3 城市银行出纳机程序城市银行出纳机程序7.87.8万行,万行,150150人年人年F 软件生产率软件生产率 OOOO技术技术(软件软件IC)IC)软件危机的主要特征u软件开发周期大大超过规定日期软件开发周期大大超过规定日期;u软件系统开发成本高,周期长,质量差,满足不软件系统开发成本高,周期长,质量差,满足不了市场需求了市场需求;u 软件质量无保证软件质量无保证u软件系统开发人员数量少,质量低软件系统开发人员数量少,质量低F软件系统维护难度大
27、软件系统维护难度大F供不应求:软件开发生产率跟不上计算机应供不应求:软件开发生产率跟不上计算机应用的迅速发展用的迅速发展 F软件的版权问题得不到保证软件的版权问题得不到保证F对软件开发成本和进度的估计常常很不准确。对软件开发成本和进度的估计常常很不准确。实际成本比估计成本有可能高出一个数量级,实实际成本比估计成本有可能高出一个数量级,实际进度比预期进度拖延几个月甚至几年的现象并际进度比预期进度拖延几个月甚至几年的现象并不罕见。不罕见。F用户对用户对“已完成的已完成的”软件系统不满意的现象经软件系统不满意的现象经常发生。常发生。软件开发人员常常在对用户要求只有模软件开发人员常常在对用户要求只有模
28、糊的了解,甚至对所要解决的问题还没有确切认糊的了解,甚至对所要解决的问题还没有确切认识的情况下,就匆忙着手编写程序。识的情况下,就匆忙着手编写程序。软件危机的典型表现F软件产品的质量往往靠不住。软件产品的质量往往靠不住。软件可靠性和质软件可靠性和质量保证的确切的定量概念刚刚出现不久,软件质量保证的确切的定量概念刚刚出现不久,软件质量保证技术量保证技术(审查、复审和测试审查、复审和测试)还没有坚持不懈还没有坚持不懈地应用到软件开发的全过程中,这些都导致软件地应用到软件开发的全过程中,这些都导致软件产品发生质量问题。产品发生质量问题。F软件常常是不可维护的。软件常常是不可维护的。很多程序中的错误是
29、很多程序中的错误是非常难改正的,实际上不可能使这些程序适应新非常难改正的,实际上不可能使这些程序适应新的硬件环境,也不能根据用户的需要在原有程序的硬件环境,也不能根据用户的需要在原有程序中增加一些新的功能。中增加一些新的功能。F“可重用的软件可重用的软件”还是一个没有完全做到的、还是一个没有完全做到的、正在努力追求的目标,人们仍然在重复开发类似正在努力追求的目标,人们仍然在重复开发类似的或基本类似的软件。的或基本类似的软件。F软件通常没有适当的文档资料。软件通常没有适当的文档资料。计算机软件不计算机软件不仅仅是程序,还应该有一整套文档资料。仅仅是程序,还应该有一整套文档资料。F这些文档资料应该
30、是在软件开发过程中产生出这些文档资料应该是在软件开发过程中产生出来的,而且应该是来的,而且应该是“最新式的最新式的”(即和程序代码即和程序代码完全一致的完全一致的)。F软件开发组织的管理人员可以使用这些文档资软件开发组织的管理人员可以使用这些文档资料作为料作为“里程碑里程碑”,来管理和评价软件开发工,来管理和评价软件开发工程的进展状况;软件开发人员可以利用它们作程的进展状况;软件开发人员可以利用它们作为通信工具,在软件开发过程中准确地交流信为通信工具,在软件开发过程中准确地交流信息;对于软件维护人员而言,这些文档资料更息;对于软件维护人员而言,这些文档资料更是必不可少的。是必不可少的。F软件成
31、本在计算机系统总成本中所占的比例逐年软件成本在计算机系统总成本中所占的比例逐年上升。上升。由于微电子学技术的进步和生产自动化程度由于微电子学技术的进步和生产自动化程度不断提高,硬件成本逐年下降,然而软件开发需要不断提高,硬件成本逐年下降,然而软件开发需要大量人力,软件成本随着通货膨胀以及软件规模和大量人力,软件成本随着通货膨胀以及软件规模和数量的不断扩大而持续上升。美国在数量的不断扩大而持续上升。美国在1985年软件成年软件成本大约已占计算机系统总成本的本大约已占计算机系统总成本的90%。F软件开发生产率提高的速度,远远跟不上计算机软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋
32、势。应用迅速普及深入的趋势。软件产品软件产品“供不应求供不应求”的现象使人类不能充分利用现代计算机硬件提供的的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。巨大潜力。硬件/软件成本变化趋势硬件软件开发 软件维护100%0%195519701985软件技术进步落后于需求增长F严重的问题是,在软件开发的不同阶段进行修改需要付出的代价是很不相同的。引入同一变动付出的代价随时间变化的趋势改正一个问题需付出的代价需求分析结构设计详细设计编码集成测试系统测试现场改正一个问题的估计费用改正一个问题估计的工作量20200200010005.02.50.050.5(美元)(人天)yet,Success H
33、asnyet,Success Hasn t t Come Easily Come Easily31%31%53%53%16%16%Successfully(成功)Challenged(异议)Canceled(失败)成功的标准:s用户在使用用户在使用s用户使用软件很容易做完要做的事用户使用软件很容易做完要做的事 失败的根本原因:开发人员写出的软件达不到用户要求:开发人员写出的软件达不到用户要求:F 人的能力问题人的能力问题.F 当前技术发展问题当前技术发展问题F 系统平台问题系统平台问题 中国软件产业:挑战与机遇 挑战:挑战:P 外国软件打入外国软件打入J 软件侵权行为软件侵权行为J 软件开发投
34、资力度不足软件开发投资力度不足J 软件人才结构不合理,缺乏高级软件人才结构不合理,缺乏高级系统程序员和项目负责人。系统程序员和项目负责人。软件人员缺乏软件工程化的概念。软件人员缺乏软件工程化的概念。软件工程 (software engineering)软件工程为了经济地获得可靠的和软件工程为了经济地获得可靠的和能在实际机器上高效运行的软件而建能在实际机器上高效运行的软件而建立合使用的好的工程原则。立合使用的好的工程原则。软件工程 一种层次化技术一种层次化技术工具工具方法方法过程过程质量焦点质量焦点Software engineering layers软件工程 一种层次化技术一种层次化技术:支持
35、软件工程的根基就在于对质量的关注。软件工程的过程将技术层结合在一起,使计算机软件合理和及时开发出来。:涵盖一系列的任务:需求分析、设计、编程、测试和维护。:对过程、方法提供自动或半自动的支持。例CASE集成软件、硬件或一个软件工程数据库。软件工程是一门交叉学科软件工程是一门交叉学科u软件开发模型软件开发模型u软件开发方法软件开发方法u 软件立项到终止的全过程软件立项到终止的全过程u 软件开发工具软件开发工具u 软件开发环境软件开发环境 u 计算机辅助软件工程(计算机辅助软件工程(CASECASE)u 软件工程管理软件工程管理u 软件工程经济学软件工程经济学软件工程的主要研究内容软件工程项目的基
36、本目标 F组织实施软件工程项目,从技术上和管理上采组织实施软件工程项目,从技术上和管理上采取了多项措施以后,最终希望得到项目的成功取了多项措施以后,最终希望得到项目的成功。所谓成功指的是达到以下几个主要的目标:。所谓成功指的是达到以下几个主要的目标:付出较低的开发成本;付出较低的开发成本;达到要求的软件功能;达到要求的软件功能;取得较好的软件性能;取得较好的软件性能;开发的软件易于移植;开发的软件易于移植;需要较低的维护费用;需要较低的维护费用;能按时完成开发工作,及时交付使用。能按时完成开发工作,及时交付使用。软件工程框架可可用用性性性性性性确确正正合合算算选取适宜的开发模型选取适宜的开发模
37、型采用合适的设计方法采用合适的设计方法提供高质量的工程支持提供高质量的工程支持重视软件工程的管理重视软件工程的管理基基本本过过程程原则原则 目标目标 过过 程程支支持持过过程程组组织织过过程程“软件工程”课程的教学与实践与其他软件专业课的区别:与其他软件专业课的区别:“软件工程”课程的教学与实践u 对软件的认识:对软件的认识:上升上升 程序程序 系统系统u 思维定式:思维定式:上升上升 程序员程序员 系统工程师系统工程师 (系统分析员系统分析员)系统分析员的地位用户用户分析员分析员程序员程序员“一个好的工业,应有一套良好的标准来配套”软件的工业化生产过程应具备的特点:软件的工业化生产过程应具备
38、的特点:F明确的工作步骤明确的工作步骤F详细具体的规范化文档详细具体的规范化文档F明确的质量评价标准明确的质量评价标准软件工程技术的两个明显特点:u 强调规范化强调规范化u 强调文档化强调文档化软件工程目标之间的关系软件工程目标之间的关系 软件工程的原则(分解和)分解和)抽象:抽象:抽取事物最基本的特性和行为,忽略非基本抽取事物最基本的特性和行为,忽略非基本的细节。采用分层次抽象,自顶向下、逐层分解的细节。采用分层次抽象,自顶向下、逐层分解的办法控制软件开发过程的复杂性。例如,软件的办法控制软件开发过程的复杂性。例如,软件瀑布模型、结构化分析方法、结构化设计方法,瀑布模型、结构化分析方法、结构
39、化设计方法,以及面向对象建模技术等都体现了抽象的原则。以及面向对象建模技术等都体现了抽象的原则。信息隐蔽:信息隐蔽:将模块设计成将模块设计成“黑箱黑箱”,实现的细节隐藏在,实现的细节隐藏在模块内部,不让模块的使用者直接访问。这就是模块内部,不让模块的使用者直接访问。这就是信息封装,使用与实现分离的原则。使用者只能信息封装,使用与实现分离的原则。使用者只能通过模块接口访问模块中封装的数据。通过模块接口访问模块中封装的数据。模块化:模块化:模块是程序中逻辑上相对独立的成分,是独模块是程序中逻辑上相对独立的成分,是独立的编程单位,应有良好的接口定义。如立的编程单位,应有良好的接口定义。如C语言语言程
40、序中的函数过程,程序中的函数过程,C+语言程序中的类。模块语言程序中的类。模块化有助于信息隐蔽和抽象,有助于表示复杂的系化有助于信息隐蔽和抽象,有助于表示复杂的系统。统。局部化:局部化:要求在一个物理模块内集中逻辑上相互关要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块之间具有松散的耦联的计算机资源,保证模块之间具有松散的耦合,模块内部具有较强的内聚。这有助于加强合,模块内部具有较强的内聚。这有助于加强模块的独立性,控制解的复杂性。模块的独立性,控制解的复杂性。确定性:确定性:软件开发过程中所有概念的表达应是确定软件开发过程中所有概念的表达应是确定的、无歧义性的、规范的。这有助于人
41、们之间的、无歧义性的、规范的。这有助于人们之间在交流时不会产生误解、遗漏,保证整个开发在交流时不会产生误解、遗漏,保证整个开发工作协调一致。工作协调一致。一致性:一致性:整个软件系统(包括程序、文档和数整个软件系统(包括程序、文档和数据)的各个模块应使用一致的概念、符号据)的各个模块应使用一致的概念、符号和术语。程序内部接口应保持一致。软件和术语。程序内部接口应保持一致。软件和硬件、操作系统的接口应保持一致。系和硬件、操作系统的接口应保持一致。系统规格说明与系统行为应保持一致。用于统规格说明与系统行为应保持一致。用于形式化规格说明的公理系统应保持一致。形式化规格说明的公理系统应保持一致。完备性
42、:完备性:软件系统不丢失任何重要成分,可以完全软件系统不丢失任何重要成分,可以完全实现系统所要求功能的程度。为了保证系统的实现系统所要求功能的程度。为了保证系统的完备性,在软件开发和运行过程中需要严格的完备性,在软件开发和运行过程中需要严格的技术评审。技术评审。可验证性:可验证性:开发大型的软件系统需要对系统自开发大型的软件系统需要对系统自顶向下、逐层分解。系统分解应遵循系顶向下、逐层分解。系统分解应遵循系统易于检查、测试、评审的原则,以确统易于检查、测试、评审的原则,以确保系统的正确性。保系统的正确性。F软件工程方法学包含软件工程方法学包含3个要素:个要素:方法方法是完成软件开发的各项任务的
43、技术方法,回是完成软件开发的各项任务的技术方法,回答答“怎样做怎样做”的问题;的问题;工具工具是为运用方法而提供的自动的或半自动的软是为运用方法而提供的自动的或半自动的软件工程支撑环境;件工程支撑环境;过程过程是为了获得高质量的软件所需要完成的一系是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步列任务的框架,它规定了完成各项任务的工作步骤。骤。F目前使用得最广泛的软件工程方法学:目前使用得最广泛的软件工程方法学:传统方法学传统方法学面向对象方法学面向对象方法学两种程序设计方法F程序设计的两次飞跃程序设计的两次飞跃F结构化程序设计结构化程序设计 程序程序=数据结构
44、数据结构+算法算法F面向对象程序设计面向对象程序设计 程序程序=对象对象+消息消息 两类软件工程方法F传统软件工程传统软件工程 软件分析软件分析 总体设计总体设计 详细设计详细设计 面向面向过程的编码过程的编码 测试测试 F面向对象软件工程面向对象软件工程 软件分析与对象抽取软件分析与对象抽取 对象详细设计对象详细设计 面面向对象的编码向对象的编码 测试测试 F1.用分阶段的生命周期计划严格管理用分阶段的生命周期计划严格管理经统计发现,在不成功的软件项目中有一半左经统计发现,在不成功的软件项目中有一半左右是由于计划不周造成的。右是由于计划不周造成的。应该把软件生命周期划分成若干个阶段,并相应该
45、把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划应地制定出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。对软件的开发与维护工作进行管理。不同层次的管理人员都必须严格按照计划各尽不同层次的管理人员都必须严格按照计划各尽其职地管理软件开发与维护工作,绝不能受客户其职地管理软件开发与维护工作,绝不能受客户或上级人员的影响而擅自背离预定计划。或上级人员的影响而擅自背离预定计划。软件工程的7条基本原理F2.坚持进行阶段评审坚持进行阶段评审软件的质量保证工作不能等到编码阶段结束之后软件的质量保证工作不能等到编码阶段结束之后再进行。这样说至少有两个理由:再进行
46、。这样说至少有两个理由:第一,大部分错误是在编码之前造成的,根据统第一,大部分错误是在编码之前造成的,根据统计,设计错误占软件错误的计,设计错误占软件错误的63%,编码错误仅占,编码错误仅占37%;第二,错误发现与改正得越晚,所需付出的代价第二,错误发现与改正得越晚,所需付出的代价也越高。也越高。因此,在每个阶段都进行严格的评审,以便尽早因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。遵循的重要原则。F3.实行严格的产品控制实行严格的产品控制在软件开发过程中改变需求是难免的,只能依在软件开发过程中改变
47、需求是难免的,只能依靠科学的产品控制技术来顺应这种要求。也就是靠科学的产品控制技术来顺应这种要求。也就是说,当改变需求时,为了保持软件各个配置成分说,当改变需求时,为了保持软件各个配置成分的一致性,必须实行严格的产品控制,其中主要的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。是实行基准配置管理。所谓所谓基准配置基准配置又称为基线配置,它们是经过阶又称为基线配置,它们是经过阶段评审后的软件配置成分。基准配置管理也称为段评审后的软件配置成分。基准配置管理也称为变动控制:一切有关修改软件的建议,特别是涉变动控制:一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格
48、的及到对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改。绝规程进行评审,获得批准以后才能实施修改。绝对不能谁想修改软件,就随意进行修改。对不能谁想修改软件,就随意进行修改。F4.采用现代程序设计技术采用现代程序设计技术从提出软件工程的概念开始,人们一直把主要从提出软件工程的概念开始,人们一直把主要精力用于研究各种新的程序设计技术,并进一步精力用于研究各种新的程序设计技术,并进一步研究各种先进的软件开发与维护技术。研究各种先进的软件开发与维护技术。实践表明,采用先进的技术不仅可以提高软件实践表明,采用先进的技术不仅可以提高软件开发和维护的效率,而且可以提高软件产品的质
49、开发和维护的效率,而且可以提高软件产品的质量。量。F5.结果应能清楚地审查结果应能清楚地审查软件产品不同于一般的物理产品,它是看不见软件产品不同于一般的物理产品,它是看不见摸不着的逻辑产品。软件开发人员摸不着的逻辑产品。软件开发人员(或开发小组或开发小组)的工作进展情况可见性差,难以准确度量,从而的工作进展情况可见性差,难以准确度量,从而使得软件产品的开发过程比一般产品的开发过程使得软件产品的开发过程比一般产品的开发过程更难于评价和管理。更难于评价和管理。为了提高软件开发过程的可见性,更好地进行为了提高软件开发过程的可见性,更好地进行管理,应该根据软件开发项目的总目标及完成期管理,应该根据软件
50、开发项目的总目标及完成期限,规定开发组织的责任和产品标准,从而使得限,规定开发组织的责任和产品标准,从而使得所得到的结果能够清楚地审查。所得到的结果能够清楚地审查。F6.开发小组的人员应该少而精开发小组的人员应该少而精软件开发小组的组成人员的素质应该好,而人数则软件开发小组的组成人员的素质应该好,而人数则不宜过多。不宜过多。素质高的人员的开发效率比素质低的人员的开发效素质高的人员的开发效率比素质低的人员的开发效率可能高几倍至几十倍,而且素质高的人员所开发率可能高几倍至几十倍,而且素质高的人员所开发的软件中的错误明显少于素质低的人员所开发的软的软件中的错误明显少于素质低的人员所开发的软件中的错误