软件设计与体系结构复习
第一章:软件工程与软件设计
1.1软件工程
1.1.1 软件概述
- 计算机软件是与计算机系统操作有关的程序、规程、规则及任何与之有关的文档及数据,计算机软件=程序+数据+文档
- 软件由两部分组成:一是机器可执行的程序及有关数据;二是机器不可执行的,与软件开发、运行、维护、使用、培训有关的文档。
- 软件是逻辑产品而不是物理产品
- 软件分为:系统软件、实时软件、嵌入式软件、科学和工程计算软件、事务处理软件、人工智能软件、个人计算机软件
1.1.2 软件危机
产生软件危机的原因:
- 用户对软件需求的描述不精确,可能存在遗漏、二义性、错误等。在软件开发过程中,用户甚至还提出修改软件功能、界面、支撑环境等方面的要求,导致需求不断变更。
- 软件开发人员对用户需求的理解与用户的期望有所差异,这种差异必然导致开发出来的软件产品与用户要求不一致。
- 大型软件项目需要组织一定的人力共同完成,但多数管理人员缺乏开发大型软件系统的经验,而多数软件开发人员又缺乏管理方面额经验。各类人员的信息交流不及时、不准确,有时还会产生误解。
- 软件项目开发人员不能有效、独立自主地处理大型软件的全部关系和各个分支,因此容易产生疏漏和错误。
- 缺乏有力的方法学和工具方面的支持,过分依靠程序设计人员在软件开发过程中的技巧和创造性,加剧了软件产品的个性化。
- 软件产品的特殊性和人类智力的局限性,导致人们无力处理“复杂问题”。一旦人们采用先进的组织形式、开发方法和工具提高了软件的开发效率和能力,新的、更大且复杂的问题又出现在人们面前。
1.1.3 软件工程的概念
- 软件工程的定义包括:
- 软件工程是将系统的、规范的、可度量的方法应用于软件的开发、运行和维护过程,以及对上述方法的研究
- 软件工程是用工程、科学和数学的原则和方法,研制、维护计算机软件的有关技术及管理方法
- 一般认为,软件工程由方法、工具和过程三个要素组成。
1.1.4 软件工程的目标与原则
- 软件工程的目标是:在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可复用性、可适应性、可移植性和可追踪性,并满足用户需求的软件产品。
- 可修改性:可修改性是指允许对系统进行修改而不增加原系统的复杂性。
- 有效性:有效性是指软件系统能最有效的利用计算机的时间资源和空间资源,一般将系统的时空开销作为衡量软件质量的一项重要技术指标。
- 可靠性:可靠性是指软件在给定环境和时间下不发生故障的概率。
- 可理解性: 可理解性是指系统具有清晰的结构,能直接反应问题的需求。
- 可维护性: 可维护性是指软件产品交付用户使用后能够方便地对它进行修改,已改正潜在的错误以及改进性能和其他属性,是软件产品适应环境的变化等。
- 可复用性:概念或功能相对独立的一个或一组相关模块定义为一个软部件,软部件可在多种场合应用的程度成为部件的可复用性。
- 可适应性:可适应性是指软件在不同的系统约束条件下,使用户需求得到满足的难易程度。
- 可移植性:可移植性是指软件冲一个计算机系统或环境移植到另一个计算机系统或环境的难易程度。
- 可追踪性: 可追踪性是指根据软件需求对软件设、程序进行正向追踪,或根据程序、软件设计对软件需求进行一行追踪的能力。
- 软件工程原则:抽象、信息隐藏、模块化、局部化、一致性、完全性、可验证性
- 抽象:抽象指抽取事务最基本的特性和行为,忽略非基本的细节。
- 信息隐藏:信息隐藏是将模块中的软件设计决策封装起来的技术。
- 模块化:模块是程序中逻辑上相对独立的成分,它是一个独立的变成单位,应有良好的接口定义。模块化有助于信息隐藏和抽象,有助于表示复杂的软件系统。
- 局部化:局部化要求在一个物理模块内集中逻辑上相互关联的计算资源,从物理和逻辑两个方面保证系统模块之间具有松散的耦合关系,而在模块内部有较强的内聚性,这样有助于控制设计的复杂性。
- 一致性:一致性指整个软件系统(包括文档和程序)的各个模块均应嚼规格说明与系统
和术语;程序内部接口应保持一致;软件与硬件接口应保持一致;系统机
行为应保持一致;用于形式化规格说明的公理系统应保持一致等。 - 完全性: 完全性指软件系统不丢失任何重要成分,达到完全实现系统所需功能的程度;当系统处于出错或非预期状态时,系统行为保持正常的能力。
- 可验证性:开发大型软件系统需要对系统逐步分解,系统分解应该遵僦案容易检查、测试评审的原则,以便保证系统的正确性。
1.2软件的生存周期
软件产品从形成概念开始,经过开发、使用和维护,直到最后退役的全过程称为软件生存周期
- 可行性研究
- 需求分析:
- 需求分析的任务是确定待开发软件的功能需求、性能需求和运行环境约束,编制软件需求规格说明、软件系统的确认测试准则和用户手册概要
- 软件的功能需求应指明软件必须完成的功能;软件的性能需求包括软件的安全性、可靠性、可维护性、精度、错误处理、适应性、用户培训等
- 软件系统在运行环境方面的约束指待开发的软件系统必须满足的运行环境方面的需求。
- 软件需求不仅是软件开发的依据,也是软件验收的标准。
- 概要设计
- 详细设计
- 软件构造
- 单元测试
- 集成测试
- 确认测试
- 使用与维护
- 退役
1.3软件开发过程模型
1.3.1 瀑布模型
-
什么是瀑布模型
它根据软件生存周期各阶段的任务从可行性研究开始,逐步进行阶段性变换,直至通过确认测试并得到用户确认的软件产品为止
-
优点
- 瀑布模型在软件工程出现的早期占有重要的地位,它提供了软件开发的基本框架。
- 有利于大型软件开发过程中人员的组织、管理
- 有利于软件开发方法和工具的研究与使用,从而提高了大型软件项目开发的质量和效率
-
缺点
- 瀑布模型在需求分析阶段要求用户和系统分析员必须指明软件系统的全部需求才能开展后续阶段的工作,因此难以适应大规模、复杂软件系统的开发
- 需求确定后,用户和软件项目负责人要等相当长的时间才能得到一份软件的最初版本。如果用户对这个软件提出比较大的修改意见,那么整个软件项目将会蒙受巨大的人力、财力和时间方面的损失。