1.1软件危机
软件危机的表现
软件危机是指在计算机软件的开发、使用和维护过程中遇到的一系列重问题。
1)成本难以估计、成本高。
2)软件开发进度估计不准确,项目延期比比皆是。
3)软件质量得不到保证(功能和性能)。
4)用户对“已完成的”软件系统不满意的现象经常发生。
5)维护非常困难(多样性、复杂性、副作用)。
6)软件通常没有适当的文档。
7)软件产品供不应求,跟不上计算机普及速度。
产生软件危机的原因
(1)与软件本身的特点有关(逻辑复杂,成本高,风险大,难于维护)。
(2)与软件开发与维护的法不正确有关:
软件≠程序(软件是程序、数据及相关文档的完整集合)急于求成=拔苗助长(软件从定义、开发、使用和维护、废弃要经历一个漫长的生命期)
各自为阵无法学(应要组织良好、管理密、各类人员协作共同完成的工程项目)
1.2软件工程定义
软件工程是应用计算机科学、数学、心理学及管理科学等原理开发软件的工程。它借鉴传统工程的原则、法,以提高质量、降低成本和提高效率为目的。
软件工程包括技术和管理两面的容,是技术与管理紧密结合所形成的工程学科。
软件工程的特性:
1. 软件工程关注于大型程序的构造
(传统的程序设计技术和工具是支持小型程序设计的)
2. 软件工程的中心课题是控制复杂性(问题分解)
3. 软件经常变化(考虑将来要发生的变化)
4. 开发软件的效率非常重要(寻求更好、更有效的工具)
5. 和谐地合作是开发软件的关键(运用标准和规程)
6. 软件必须有效地支持它的用户(软件要服务于用户)
7. 在软件工程领域常是由具有一种文化背景的人替具有另一种文化背景的人创造产品
软件工程的7条基本原理
1.用分阶段的生命期计划格管理
2.坚持进行阶段评审
3.实行格的产品控制
4.采用现代程序设计技术
5.结果应能清楚地审查
6.开发小组的人员应该少而精
7.承认不断改进软件工程实践的必要性
软件工程法学
通常把在软件生命期全过程中使用的一整套技术法的集合称为法学(methodology),也称为型(paradigm)。
目前使用得最广泛的软件工程法学,分别是传统法学和面向对象法学。
软件工程法学包含3个要素:法、工具和过程。
1.3软件生命期
每阶段的基本任务:
1. 问题定义
2. 可行性研究
3. 需求分析
4. 总体设计
5. 详细设计
6. 编码和单元测试
7. 综合测试
8. 软件维护
1.4软件过程
软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
通常包括四种基本的过程活动:(1)软件规格说明;(2)软件开发;(3)软件确认;(4)软件演进
软件过程模型:
软件开发程模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。
几种典型的模型:瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、RUP等。
软件过程模型的选择基于项目和应用的性质、采用的法工具以及需要的控制和交付的产品。
瀑布模型(Waterfall Model ):
传统瀑布模型:规定了各项软件工程活动,包括:制定开发计划、需求分析和说明、软件设计、程序编码、测试、运行维护。并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
特点:
1、阶段间具有顺序性和依赖性。
2、推迟实现。
3、质量保证。
优点:
1、可强迫开发人员采用规的法(例如,结构化技术);格
地规定了每个阶段必须提交的文档;要求每个阶段交出的所有
产品都必须经过质量保证小组的仔细验证。
2、瀑布模型的成功在很大程度上是由于它基本上是一种
文档驱动的模型。
3、瀑布模型适合于用户需求明确、完整、无重大变化的
软件项目开发!!
问题:
1、不适应需求经常发生变更的环境:在项目的开发过程
中,变更可能会引起混乱。所以,有人形象地把采用线性模型
进行商业软件工程称之为“在沙滩上盖楼房”。(适合于用户需
求明确、完整、无重大变化的软件项目开发)
2、线性顺序模型每一步的工作都必须以前一阶段的输出
为输入,这种特征会导致工作中发生“阻塞”状态。
3、由于瀑布模型几乎完全依赖于书面的规格说明,很可
能导致最终开发出的软件产品不能真正满足用户的需要。
4、是一种整体开发模型,程序的物理实现集中在开发阶
段的后期,用户在最后才能看到自己的产品。在可运行的软件
产品交付给用户之前,用户只能通过文档来了解产品是什么样
的。
快速原型模型(Rapid Prototype Model)
步骤:第一步进行试验开发,得出产品的“原型”,其目的在于弄清软件需求并探索可行性;第二步在原型的基础上开发出较为满意的软件产品。
该模型克服了瀑布模型的部分缺陷,减少了软件需求不明确给开发工作带来的风险。
前提:
(1)是用户必须积极参与原型的建造,建造原型仅仅是为了
定义需求,之后就必须被全部抛弃(至少是部分抛弃),实际的软件必须在充分考虑到软件质量和可维护性之后才被开发。从这个意义上说,原型模型又往往被称为“抛弃原型模型”。
(2)是必须有快速开发工具可供使用。
增量模型(Incremental Model)
是一种渐进地开发逐步完善的软件版本的模型,该模型一般首先开发产品的基本部,然后再逐步开发产品的附加部分。
整个软件产品被分解成多个增量构件。每个构件由多个相互作用的功能模块构成,并能够完成特定的功能。
该增量模型表明:必须在开始实现各个构件之前就全部完成需求分析、规格说明和概要设计,因此风险较小。
优点:是十分有用的一种模型。在克服瀑布模型缺点、减少由于软件需求不明确而给开发工作带来风险面,确有显著的效果;缩短产品提交时间都能够起到良好的作用。
困难:
1、在把每个新的增量构件集成到现有软件体系结构中时,
必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种式进行扩充,向现有产品中加入新构件的过程必须简单、便,也就是说,软件体系结构必须是开放的。
2、开发人员既要把软件系统看作整体。又要看成可独立的
构件,因此相互矛盾。除非开发人员有足够的技术能力协调好。
3、多个构件并行开发,具有无法集成的风险
螺旋模型(Spiral Model)
优点:对于高风险的大型软件,螺旋模型是一个理想的开发法。
缺点:风险驱动,需要相当丰富的风险评估经验和专门知识,否则风险更大。
适合场合:
主要适用于部开发的大规模软件项目,随着过程的进展演化,开发者和用户能够更好地识别和对待每一个演化级别上的风险。只有部开发的项目,才能在风险过大时便地中止项目。
如果进行风险分析的费用接近整个项目的经费预算,则风险分析是不可行的。
喷泉模型(Fountain Model)
特点:喷泉模型的各阶段均采用了“对象”这一统一式,整个过程看起来像喷泉从喷出到落下再喷出的而复始过程产生的光滑水柱,体现了软件创建所固有的迭代和无间隙的特征。
适合场合:喷泉模型主要用于面向对象的软件项目,软件的某个部分通常被重复多次,相关对象在每次迭代中随之加入渐进的软件成分。
Rational统一软件开发过程
RUP软件开发生命期是一个二维的软件开发模型。横轴代表时间,体现生命期特征;纵轴代表工作流,体现了开发过程的静态结构。
RUP中的软件生命期在时间上被分解为四个顺序的阶段:初始、细化、构造和移交。每个阶段围绕着9个核心工作流分别迭代。
适合场合:可开发或大或小、分布在各个领域的项目,表明了RUP的多功能性和广泛适应性。适合于需求不稳定、不全面的软件项目开发。
1.5小结
软件=程序+数据+文档
软件危机: 原因,现象,办法(软件工程学)
软件工程:指导计算机软件开发和维护的一门工程科学
软件工程3个要素:法、工具和过程。
软件生命期:定义,开发,运行维护
软件过程: 瀑布模型,快速原型模型、增量模型、螺旋模型、喷泉模型、RUP等
2.1 可行性研究目的:
用最小的代价在尽可能短的时间确定问题是否能够解决。2.2 可行性研究的主要容
(1) 技术可行性
(2) 经济可行性
(3) 操作可行性
(4) 法律可行性
(5) 社会可行性
2.3 数据流图
1、一种图形化技术,它描绘信息流和数据从输入移动到输
出的过程中所经受的变换。
2、它只是描绘数据在软件中流动和被处理的逻辑过程,是
系统逻辑功能的图形表示。
3、设计数据流图时只需考虑系统必须完成的基本逻辑功能,
完全不需要考虑怎样具体地实现这些功能。
画数据流图的法:
1、自顶向下,逐步求精
2、先画顶层DFD,描绘系统的整体逻辑概貌;顶层流图仅
包含一个加工,它代表被开发系统。它的输入流是该系统的输入数据,输出流是系统所输出数据。
3、其次画中间层流图:对上层父图的处理的细化,形成子
图。底层流图是指其加工不需要在做分解的数据流图,它处在最底层。
注意:数据流图应该分层,并且在把功能级数据流图细化后得到的处理超过9个时,应该采用画分图的办法。当把一个处理分解为一系列处理时,分解前和分解后的输入输出数据流必须相同!
数据流图用途:
1、画数据流图的基本目的是利用它作为交流信息的工具。
2、分析员把他对现有系统的认识或对目标系统的设想用数
据流图描绘出来,供有关人员审查确认。
3、由于在数据流图常仅仅使用4种基本符号,而且不包含
任有关物理实现的细节,因此,绝大多数用户都可以理解和评价它。
4、数据流图着重描绘系统所完成的功能,其另一个主要用
途是作为辅助物理系统的分析和设计的工具。
2.4 小结
1、可行性研究的任务: 技术, 经济,社会
2、可行性研究过程: 8 步骤
3、数据流图: 源点或终点,处理,数据存储和数据流
4、数据字典: 是分析阶段的工具,包括流,元素,存储,处理4类元素组成。
5、成本/效益分析:从经济角度判断是否继续投资于这项工程的主要依据。
3.1 需求分析的具体任务
确定对系统的综合要求:
1、功能需求
2、性能需求
3、可靠性和可用性需求
4、出错处理需求
5、接口需求
6、约束
7、逆向需求
8、将来可能提出的要求
分析系统的数据要求:
建立数据模型,用图形化的工具描述数据结构(如层次框图和warnier图)。
导出系统的逻辑模型
数据流图、实体-联系图、状态转换图、数据字典等。
修正系统开发计划: