当前位置:文档之家› 软件的概念

软件的概念

软件的概念:软件=程序+文档。

软件是能够完成预定功能的可执行计算机程序包括使程序正常执行所需要的以及有关描述程序操作和使用的文档。

特点:软件是一种逻辑实体,而不是具体的物理实体。

因此,它具有抽象性。

软件的生产与硬件不同,没有明显的制造过程。

对软件的质量控制,必须立足于软件开发方面。

在软件的运行和使用期间,没有像硬件那样的磨损、老化问题。

软件的开发和运行往往受到计算机系统的限制,对计算机系统有不同程度的依赖性。

迄今为止,软件的开发尚未完全摆脱手工艺的方式。

软件本身是复杂的软件的成本相当昂贵相当多的软件工作涉及到社会因素。

分类:按软件的功能划分:系统软件、支撑软件、应用软件按软件的规模划分:微型、小型、中型、大型、超大型按软件的工作方式划分:实时、分时、交互、批处理按软件服务对象的范围划分:项目软件、产品软件(2)软件的发展和软件危机(一般)计算机软件发展的各个时期1. 第一代(60年代中期之前)程序设计阶段硬件通用,软件专用;程序规模小,编写者和使用者为同一人(同组人)。

2. 第二代(60年代中期-70年代中期)程序系统阶段出现“软件作坊”、产品软件;“个体化”开发方法。

3. 第三代(70年代中期之后)软件工程阶段软件开发成为一门新兴的工程学科——软件工程。

4. 第四代(90年代后)现代软件工程阶段。

软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

主要是两个问题。

1. 如何开发软件,怎样满足对软件的日益增长的需求。

2. 如何维护数量不断膨胀的已有软件软件危机的主要表现:1. 对软件开发成本和进度的估计不准确2. 用户不满意3. 软件质量不高、可靠性差4. 软件常常不可维护、错误难以改正。

5. 缺乏适当的文档资料6. 软件成本占系统总成本的比例逐年上升7. 软件开发速度跟不上计算机发展速度(3)软件工程过程(重点)软件工程的基本原理:1. 用分阶段的生命周期计划严格管理2. 坚持进行阶段评审3. 实行严格的产品控制4. 采用现代程序设计技术5. 结果应能清楚地审查6. 开发小组的人员应该少而精7. 承认不断改进软件工程实践的必要性软件工程方法学3要素:方法、工具和过程第二部分软件过程2(1)软件生命周期的基本任务(重点)软件生命周期的各个阶段:(定义、开发、使用及维护)(1)问题定义(2)可行性分析(3)需求分析: 分析软件需求,编写软件需求规格说明(4)概要设计和详细设计: 确定软件体系结构,设计软件模块(5)程序编写(6)软件测试(7)运行和维护(2)Rational 统一过程(次重点)识记:RUP(统一软件开发过程)的6条软件开发经验(①迭代式开发②管理需求③体系结构④可视化建模⑤验证软件质量⑥控制软件变更)理解:RUP软件开发生命周期(初始阶段、细化阶段、构造阶段、迁移阶段)第三部分结构化分析(一)考核知识点及考核目标(1)软件需求分析概述(重点)需求分析:是指开发人员要准确地理解用户的要求,进行细致的调查分析,将用户非形式化的需求陈述转化为完整的需求定义,再由需求定义转化为相应的软件需求规格说明书(即需求分析的结果)的过程需求分析的任务:是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求过程:可行性分从收集资料到形成软件需求分析文档,一般来说要经过四个过程:获取用户需求,分析用户需求,编写需求文档,评审需求文档可行性分析的内容?经济可行性技术可行性运行可行性法律可行性需求分析的主要原则?一. 确定对系统的综合要求1. 功能需求2. 性能需求3. 可靠性和可用性需求4. 出错处理需求5. 接口需求6. 约束7. 逆向需求8. 将来可能提出的要求二 .分析系统的数据要求三. 导出系统的逻辑模型四. 修正系统开发计划(2)结构化分析方法(重点)结构化分析方法的含义:结构化分析方法就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止第四部分结构化设计(1)软件设计的目标和任务(重点)软件设计的重要性:软件设计是后续开发步骤及软件维护工作的基础。

如果没有设计,只能建立一个不稳定的系统结构。

软件设计的任务:将需求分析的结果(分析模型与需求分析规约)转化为实际软件系统的一个模型或软件表达式,即用于构造软件的“蓝图”。

(2)程序结构与程序结构图(重点)(3)模块的独立性(重点)所谓模块,是指具有相对独立性的,由数据说明、执行语句等程序对象构成的集合。

程序中的每个模块都需要单独命名,通过名字可实现对指定模块的访问。

在高级语言中,模块具体表现为函数、子程序、过程等。

一个模块具有输入/输出(接口)、功能、内部数据和程序代码四个特征。

模块的独立性:模块独立性, 是指软件系统中每个模块只涉及软件要求的具体的子功能, 而和软件系统中其它的模块的联系最小且接口是简单的.一般采用两个准则度量模块独立性。

即模块间耦合和模块内聚耦合是模块之间的互相连接的紧密程度的度量。

内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。

模块独立性比较强的模块应是高内聚低耦合的模块。

模块化:模块化是指将整个程序划分为若干个模块,每个模块用于实现一个特定的功能。

划分模块对于解决大型复杂的问题是非常必要的,可以大大降低解决问题的难度。

模块化可以降低解决问题的复杂度,从而降低软件开发的工作量。

模块化不但可以降低软件开发的难度,而且可以使程序结构清晰,增加易读性和易修改性。

此外,模块化还有利于提高代码的可重用性及团队合作开发大型软件的可行性。

抽象是人类在解决复杂问题过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节.软件系统进行模块设计时,可有不同的抽象层次。

在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。

在较低的抽象层次上,则采用过程化的方法。

结构化程序中自顶向下、逐步求精的模块划分思想正是人类思维中运用抽象方法解决复杂问题的体现。

此外,在程序设计中运用抽象的方法还能够提高代码的可重用性。

(4)结构化设计方法(次重点)(5)结构化数据系统开发方法(一般)1.系统规则用结构化系统开发方法开发一个系统,将整个开发过程划分为首尾相连的五个阶段,即一个生命周期(Life Cycle)根据用户的系统开发请求,进行初步调查,明确问题,确定系统目标和总体结构确定分阶段实施进度,然后进行可行性研究;2. 系统分析:分析业务流程、分析数据与数据流程、分析功能与数据之间的关系,最后提出分析处理方式和新系统逻辑方案;3. 系统设计:进行总体结构设计、代码设计、数据库(文件)设计、输入/输出设计、模块结构与功能设计,根据总体设计,配置与安装部分设备,进行试验,最终给出设计方案;4. 系统实施:同时进行编程(由程序员执行)和人员培训(由系统分析设计人员培训业务人员和操作员),以及数据准备(由业务人员完成),然后投入试运行;5.系统运行与维护:进行系统的日常运行管理、评价、监理审计,修改、维护、局部调整,在出现不可调和的大问题时,进一步提出开发新系统的请求,老系统生命周期结束,新系统诞生,构成系统的一个生命周期。

在每一阶段中,又包含若干步骤,步骤可以不分先后,但仍有因果关系,总体上不能打乱。

第五部分结构化实现(1)软件测试的基础(重点)软件测试是动态查找程序代码中的各类错误和问题的过程,软件测试是保证软件可靠性的主要手段。

测试阶段的主要任务是发现并改正软件中的错误。

白盒测试和黑盒测试是软件测试的两类基本方法。

软件测试通常至少分为单元测试、集成测试和系统测试三个基本阶段。

软件维护的目的是要保证软件的正常运行,尽可能延长软件生命周期。

软件测试的对象:软件测试并不等于程序测试。

软件测试应贯穿于软件定义与开发的整个期间。

需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成为软件测试的对象。

(2)测试用例设计(重点)黑盒法该方法把被测试对象看成一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件的接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求。

因此,黑盒测试又称为功能测试或数据驱动测试。

黑盒测试是功能测试,根据程序的功能来测试设计用例。

白盒法该方法把被测试对象看成一个白盒子,测试人员须了解程序的内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。

白盒法根据被测程序的内部结构设计测试用例。

(3)白盒测试用例设计(重点)1逻辑覆盖:是以程序内部逻辑为基础的测试技术,2语句覆盖的含义是选择足够多的测试用例,使得被测程序中的每条语句至少执行一次。

3判定覆盖就是设计若干个测试用例,运行所测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。

判定覆盖又称为分支覆盖。

判定覆盖的每个语句至少经历一次。

4条件覆盖就是设计若干个测试用例,运行所测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。

(条件覆盖使得每个语句至少执行一次。

)5判定/条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行一次。

即要求各个判断的所有可能的条件取值组合至少执行一次。

6条件组合覆盖就是设计足够的测试用例,运行所测程序,使得每个判断的所有可能的条件取值组合至少执行一次(4)黑盒测试用例的设计(重点)等价类的划分:输入数据的可能值划分为若干个等价类,使每类中的任何一个测试用例,都能够代表同一等价类中的其他测试用例,把漫无边界的随即测试变成有针对性的等价类测试。

(需要考虑有效等价类和无效等价类)边界值分析的方法过程:使被测程序能在边界值及其附近运行,从而更有效得暴露从程序中隐藏的问题;(5)软件测试的策略(重点)测试步骤:单元测试(测试模块功能)编译→静态分析器检查→代码评审→动态测试(白盒黑盒)组装测试(测试软件设计信息)自顶向下测试:先广后深、先深后广;自底向上测试;两种测试混合。

确认测试(测试软件需求信息)测试组装完毕的程序是否满足SRS系统测试(测试与系统其它部分的兼容性等)对硬件或其他软件是否实现SRS要求第六部分维护(一)考核知识点(1)软件维护的定义(重点)1. 纠错性维护:纠正在开发期间未能发现的问题2. 适应性维护: 适应性维护就是为了和变化了的环境适当地配合而进行的修改软件的活动。

3:完善性维护:不断改善和加强,以满足用户的新需求等,4. 预防性维护:“把今天的方法学应用于昨天的系统以满足明天的需要”。

改善软件的可维护性(2)软件维护的特点(一般)1 结构化维护与非结构化维护差别悬殊2 维护的代价高昂3 维护的困难性(3)软件维护过程(一般)首先必须建立一个维护组织,随后必须确定报告和评价的过程,而且必须为每个维护要求规定一个标准化的事件序列。

相关主题