一.软件危机产生的原因:
1.客观原因
软件是逻辑部件而不是物理部件,缺乏“可见性”,因此管理和控制软件开发过程相当困难。
软件的规模庞大,程序的复杂性随程序规模增加以指数速度上升。
2.主观原因
忽略软件需求分析的重要性;认为软件开发就是写程序;轻视软件维护。
其中,对用户需求没有完整准确的认识就匆忙着手编写程序是软件开发工程失败的主要原因之一。
二.消除软件危机的途径
1.应该树立对计算机软件的正确认识。软件是程序、数据及文档的完整集合。
- 程序:能够完成预定功能和性能的可执行的指令序列。
- 数据:使程序能够适当地处理信息的数据结构
- 文档:开发、使用和维护程序所需要的图文资料。
2.软件开发应该是能组织良好、管理严密、各类人员团结协作共同完成的工程项目。
3.积极开发和使用计算机辅助软件工程(CASE)工具。
三.传统方法学要点补充
- 1.采用了结构化技术完成软件开发的各项任务。
- 2.把软件生命周期划分成若干个阶段,然后顺序完成各个阶段的任务。
- 3.每个阶段的开始和结束都有严格的标准,前一阶段的结束标准是后一阶段的开始标准。
- 4.在每个阶段结束之前都必须正式地进行严格的技术审查和管理审查。
四.软件过程补充
软件过程定义了运用技术方法的顺序、应该交付的文档资料、为保证软件质量和协调软件变化必须采取的管理措施,以及标志完成了相应开发活动的里程碑。
1.瀑布模型的缺点
在可运行的软件交付给用户之前,用户只能通过文档来了解未来的产品是什么样的,很可能会导致最终的软件不能满足用户的需求。
2.螺旋模型的优点
- 有利于已有软件的重用
- 有助于把软件质量作为软件开发的一个重要目标
- 减少了测试过多或测试不足带来的风险
- 软件维护和软件开发没有本质区别
3.螺旋模型的缺点
要求软件开发人员具有丰富的风险评估知识和经验。
传统的软件工程方法学采用结构化分析技术完成系统分析(问题定义、可行性研究、需求分析)的任务。
结构化分析技术的三个要点:
- 采用自顶向下功能分解的方法
- 强调逻辑功能而不是实现功能的具体方法
- 使用图形(最主要的是数据流图)进行系统分析并表达分析的结果。
情景分析技术:就是对用户将来使用目标系统解决某个问题的方法和结果分析。
模型:就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。
传统的软件工程方法学采用结构化设计技术完成软件设计(概要设计和详细设计)工作。
结构化设计技术的基本要点:
- 软件系统由层次化结构的模块构成
- 模块是单入口和单出口的。
- 构造和联结模块的基本准则是模块独立
- 用图来描述软件系统的结构,并且使软件结构与问题结构尽量一致。
3.1软件设计的任务
3.1.1概要设计
概要设计也称为总体设计或初步设计,这个设计阶段主要完成下述两项任务。
1.方案设计
首先设想实现目标系统的各种可能的方案。然后,根据系统规模和目标,综合考虑技术、经济、操作等各种因素,从设想出的供选择的方案中选取若干个合理的方案。最后,综合分析、对比所选取的各种合理方案的利弊,从中选出一个最佳方案,并且制定这个最佳方案的详细实现计划。
2.软件体系结构设计
所谓软件体系结构设计,就是确定软件系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。设计出初步的软件结构之后,还应该从多方面进一步改价软件结构,以便得到更好的体系结构。
3.1.2详细设计
详细设计主要完成以下三项任务。
过程设计:设计软件体系结构中所包含的每个模块的实现算法
数据设计:设计软件中所需要的数据结构
接口设计:设计软件内部各个模块之间、软件与协作系统之间以及软件与使用它的人之间的通信方式。
详细设计与概要设计衔接的图形工具是SC图(Structure Chart,结构图)。SC图是一种用于表示软件系统的模块结构和模块之间的关系的图形工具。它能够以层次结构的形式展示模块之间的调用关系,帮助开发人员理清模块的功能划分和调用流程。在概要设计阶段,SC图被用来描述系统中各个模块的关系和交互,而在详细设计阶段,SC图则进一步细化每个模块的内部结构和功能。因此,SC图是详细设计与概要设计衔接的图形工具。
3.2分析与设计的关系
系统分析的基本任务:定义用户所需要的软件系统,也就是回答系统必须“做什么”这个问题;
系统设计的基本在务:设计实现目标系统的具体方案,也就是回答“怎样做”这个问题。
体系结构设计的任务:确定程序由哪些模块组成以及这些模块相互间的关系。
需求分析阶段画出的数据流图是进行体系结构设计的主要依据,为体系结构设计提供最基本的输入信息 。
数据设计把需求分析阶段创建的信息模型转变成实现软件所需要的数据结构。在实体-联系图中定义的数据和数据之间的关系,以及数据字典中给出的详细的数据定义,共同为数据设计活动奠定坚实的基础。
接口设计的结果描述了软件内部、软件与协作系统之间以及软件与使用它的人之间的通信方式。接口意味着信息的流动(数据流或控制流),因此,数据流图提供了进行接口设计所需要的基本信息。
过程设计决定程序中包含的每个模块的实现算法,需求分析阶段画出的IPO图(表)为过程设计奠定了基础。
需求分析为结构化设计提供了最基本、最重要的输入信息。
并不能简单地把结构化分析的结果映射成软件结构设计的结果。实际上,结构化设计过程综合了下述诸多因素:
- 从以往开发类似软件的经验中获得的直觉和判断力。
- 指导软件模型演化的一组原理(也称为准则)和启发规则。
- 评价软件质量的一组标准。
- 导出最终的设计结果的迭代过程。
3.9过程设计
过程设计应该在数据设计、体系结构设计和接口设计完成之后进行,它是详细设计阶段应该完成的主要任务。
过程设计的任务还不是具体地编写程序,而是要设计出程序的“蓝图”。
广义的结构程序设计定义为:结构程序设计是尽可能少用 GO TO语句的程序设计方法。
习题
- 软件危机产生的原因有?
- 消除软件危机的途径有?
- 什么是程序,什么是数据,什么是文档?
- 传统方法学的要点?
- 瀑布模型的缺点是什么?
- 螺旋模型的优点是什么?缺点又是什么?
- 结构化分析技术的三个要点是什么?
- 什么是情景分析技术?
- 什么是模型?
- 结构化设计技术的基本要点有?
- 什么是过程设计,什么是数据设计,什么是接口设计?