软件危机:
软件危机是指在计算机软件开发和维护时所遇到的一系列问题。 软件危机主要包含两方面的问题:一是 如何开发软件以满足社会对软件日益增长的需求;二是如何维护数量不断增长的已有软件。
软件危机的主要表现形式:
1.软件的发展速度跟不上硬件的发展和用户的需求。
2.软件的成本和开发进度不能预先估计,用户不满意。
3.软件产品质量差,可靠性不能保证。
4.软件产品可维护性差。
5.软件没有合适的文档资料。
解决软件危机的途径:
1.使用好的软件开发技术和方法。
2.开发软件时有良好的组织、严密的管理,各方面人员相互配合共同完成任务。
3.使用好的软件开发工具,提高软件生产率。
软件(是一种逻辑产品)
软件是指能够实现预定功能和性能的可执行的计算机程序,使程序正常运行所需要的数据,描述软件开发及其管理、程序的操作和使用的有关文档的完整集合。
简单地讲:软件是计算机程序及其有关的数据和文档的完整集合。
程序是实现相应功能的一些指令代码序列。
文档是与软件开发、维护和使用有关的图文材料。
ISO9000定义:
把输入转化为输出的一组彼此相关的资源和活动。
软件需求的分类:
1、业务需求 表示组织或客户高层次的目标。业务需求通常来自项目投资人、购买产品的客户、实际用户的管理者、市场营销部门或产品策划部门。业务需求描述了组织为什么要开发一个系统,即组织希望达到的目标。使用前景和范围文档来记录业务需求,这份文档有时也被称作项目轮廓图或市场需求文档。
2、用户需求 描述的是用户的目标,或用户要求系统必须能完成的任务。用例、场景描述和事件――响应表都是表达用户需求的有效途径。也就是说用户需求描述了用户能使用系统来做些什么。
3、功能需求 规定开发人员必须在产品中实现的软件功能,用户利用这些功能来完成任务,满足业务需求。功能需求有时也被称作行为需求 ,因为习惯上总是用“应该”对其进行描述:“系统应该发送电子邮件来通知用户已接受其预定”。功能需求描述是开发人员需要实现什么。注意:用户需求不总是被转变成功能需求。产品特性,所谓特性,是指一组逻辑上相关的功能需求,它们为用户提供某项功能,使业务目标得以满足。对商业软件而言,特性则是一组能被客户识别,并帮助他决定是否购买的需求,也就是产品说明书中用着重号标明的部分。客户希望得到的产品特性和用户的任务相关的需求不完全是一回事。一项特性可
以包括多个用例,每个用例又要求实现多项功能需求,以便用户能够执行某项任务。
4、系统需求 用于描述包含有多个子系统的产品(即系统)的顶级需求。系统可以只包含软件系统,也可以既包含软件又包含硬件子系统。人也可以是系统的一部分,因此某些系统功能可能要由人来承担。
软件工程的定义:
软件工程是应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户要求的软件产品的定义、开发、发布和维护的工程或进行研究的学科。它采用工程的概念、原理、技术和方法来开发与维护软件。
软件工程的目标是实现软件的优质高产。
软件工程的目的是在规定的时间和开发费用内,开发出满足用户需求的、高质量的软件产品。
软件工程方法学三要素:
方法:完成软件开发任务的技术方法。
过程:规定了完成任务的工作阶段、工作内容、产品、验收的步骤和完成准则。
工具:为方法的运用提供自动或半自动的软件支撑环境。
软件生存周期分为哪几个阶段
软件生存周期( Software Life Cycle)是从设计软件产品开始到产品不能使用为止的时间周期。它通常包括需求阶段、设计阶段、实现阶段、测试阶段、安装和验收阶段操作和维护阶段,有时还包括退役阶段。
软件生存周期各个阶段的任务:
软件生存周期一般由软件计划、软件开发和软件运行维护3个时期组成。
(1) 问题定义。确定系统的目标、规模和基本任务。
(2)可行性研究。从经济、技术、法律等方面分析确定系统是否值得开发,及时建议停止不值得开发的项目,避免人力、物力和时间的浪费。
(3)需求分析。确定软件系统应具备的具体功能。通常用数据流图、数据字典和简明算法描述表示系统的逻辑模型,以防止产生系统设计与用户的实际需求不相符的后果。
(4)概要设计。确定系统设计方案、软件的体系结构。确定软件由哪些模块组成以及这些模块之间的相互关系。
(5)详细设计。描述应该如何具体地实现系统。详细设计的每个模块应确定实现模块所需要的算法和数据结构。
(6)软件实现阶段。进行程序设计(编码)和模块测试。
(7)综合测试阶段。通过各种类型的测试,查出软件设计中的错误并改正,确保软件质量:还要在用户的参与下进行验收,才可交付使用。
(8)软件运行和维护。在软件运行期间,通过各种必要的维护,使系统改正错误或修改扩充功能以适应环境变化,从而延长软件的使用寿命,提高软件的效益。每次软件维护的要求及修改过程都应详细准确地记录下来,并作为文档加以保存。
软件开发模型:
瀑布模型、快速原型模型、增量模型、喷泉模型、螺旋模型、统一过程
瀑布模型把软件生存周期划分为计划时期、开发时期和运行时期。瀑布模型要求开发过程的每个阶段结束时要进行复审,复审通过了才能进入下一阶段,复审通不过要进行修改或回到前面的阶段进行返工。
瀑布模型:规范的、文档驱动的方法。开发阶段按顺序进行,适合于需求分析较明确、开发技术较成熟的情况。
快速原型模型是快速开发一个可以运行的原型系统,该原型系统所能完成的功能往往是最终产品能完成的功能的一个子集。
快速原型模型: 构建原型系统让用户试用并收集用户意见,获取用户真实需求。
增量模型:优点是能在早期向用户提交部分产品且易于维护,缺点是软件的体系结构必须是开放的。
喷泉模型:适用于面向对象方法。
螺旋模型:适用于大规模内部开发项目,分析风险和排除风险。
统一过程: 适用于面向对象方法,使用统一建模语言UML, 采取用例驱动和构架优先的策略,迭代增量的建造方法
瀑布模型的特点:
1、 软件生存周期的顺序性
2、 尽可能推迟软件的编码
3、 保证质量
快速原型模型三种类型的原型
1、 渐增式原型 渐增式的原型开发模型也称增量模型。
2、 用于验证软件需求的原型
3、 用于验证设计方案的原型
可行性研究
可行性研究的目的就是用最小的代价在尽可能短的时间内确定该软件的开发问题是否能解决。
1. 技术可行性
技术可行性是指对设备条件、技术解决方案的实用性和技术资源的可用性的度量。
2. 经济可行性
经济可行性是指希望以最小的成本开发出具有最佳的经济效益的软件产品。
3. 社会因素方面的可行性
社会因素方面的可行性主要从法律、用户等方面分析可行性;
需求分析
需求分析是研究用户要求,以得到目标系统的需求定义的过程。
需求分析的基本任务是软件人员和用户一起完全弄清用户对系统的确切要求。
需求分析阶段要建立数据模型、功能模型和行为模型。
需求分析表达方式:
1.建立模型
建立模型就是描述用户需求,可使用的工具有实体-关系图、数据流图、状态转换图、数据字典、层次图、Warnier图、IPO图等。
2. 规格说明
软件需求分析阶段要求用需求规格说明表达用户对系统的要求。
3. 复审
复审是指需求分析的结果要经过严格的审查,以确保软件产品的质量。
如何进行调查研究:
1.访谈
2.分发调查问卷
3.开会
E-R图三要素:
实体、属性、关系。
实体:软件中必须理解的、具有一系列不同性质或属性的事物。
属性:定义实体的性质。
关系:实体之间相互连接的方式。
模块
模块是能够单独命名,由边界元素限定的程序元素的序列。在软件的体系结构中,模块能独立地完成一定的功能,是可以组合、分解和更换的单元。
模块化是把系统分割成能完成独立功能的模块;模块独立性要求模块之间低耦合、模块内部高内聚。
模块的属性:
1. 名称:模块的名称必须表达该模块的功能,指明每次调用它时应完成的功能。
2. 接口:模块的输入和输出。
3. 功能:模块所实现的功能。
4. 逻辑:模块内部如何实现功能及所需要的数据。
5. 状态:模块的调用与被调用关系。
模块化特点:
1、 减少复杂性
2、 提高软件的可靠性
3、 提高软件的可维护性
4、 有助于软件工程的组织管理
5、 有助于信息隐蔽
耦合
软件结构中模块之间互相依赖的程度用耦合来度量。耦合的强弱取决于模块间接口的复杂程度,一般由模块之间的调用方式、传递信息的类型和数量来决定。
内聚
一个模块内各个元素彼此结合的紧密程度用内聚来度量。理想的模块只完成一个功能,模块设计的目标之一是力求做到高内聚。
结构化程序设计的三种基本结构:
顺序结构、条件分支结构、循环结构。
盒图的作用:
盒图是由Nassi和Shneiderman提出的,因此又称N-S图。盒图没有箭头,不允许随意转移, 只允许程序员用结构化设计方法来思考问题、解决问题。
盒图的特点:
(1)清晰地描述功能域。
(2)不允许任意转移控制,因而只能表示结构化设计结构。
(3)易于确定数据的作用域是全局量还是局部量。
(4)易于描述系统的层次结构和嵌套关系。
是为自动化测试数据提供有利的工具。
开发大型软件时,产生困难的根本原因是____A__。
A.大系统的复杂性
B.人员知识不足
C.客观世界千变万化
D.时间紧、任务重
问题分析图(PAD图)的特点
(1)用PAD图所表示的程序从最左边的竖线的上端开始执行,自上而下、自左向右执行
(2)用PAD符号设计的过程必然是结构化的程序结构。
(3)结构清晰、层次分明。
(4)既可表示程序逻辑,也可用于描绘数据结构。
(5)用def逐步详细描述,可支持自顶向下、逐步求精的设计方法。
PAD图为常用高级程序设计语言的各种控制语句都提供了对应的图形符号,显然将PAD图转换为对应的高级语言程序是很容易的。
软件测试
软件测试是由人工或计算机来执行或评价软件的过程,以验证软件是否满足规定的需求或识别期望的结果和实际结果之间有无差别。
软件测试是指通过人工或计算机执行程序,来有意识地发现程序中的设计错误和编码错误的过程。
软件测试目标
(1)测试是为了发现程序中的错误而执行程序的过程。
(2)好的测试方案能够发现尚未发现的错误。
(3)成功的测试是发现了尚未发现的错误的测试。
软件测试方法
1.静态分析与动态测试
静态分析不执行被测试软件,通过对需求分析说明书、软件设计说明书及源程序做结构检查、流程图分析、编码分析等来找出软件错误,这是十分有效的软件质量控制方法。
动态测试以执行程序并分析程序来查错。
为了进行软件测试,需要预先准备好两种数据:输入数据和预期的输出结果。
2.黑盒测试与白盒测试
黑盒法又称功能测试,其测试用例完全是根据程序的功能说明来设计的。在应用这种测试法时,测试者完全不考虑程序的内部结构和内部特性,而是把软件看成是一个黑盒,测试时仅关心如何寻找出可能使程序不按要求运行的情况,因而测试是在程序接口进行的。
黑盒法是最基本的测试法,主要测试软件能否满足功能要求,检查输入能否被正确地
接收,软件能否正确地输出结果。
白盒法又称结构测试,其测试用例是根据程序内部的逻辑结构和执行路径来设计的。用白盒法测试时,从检查程序的逻辑着手。
模块测试也称单元测试,其目的是集中检验软件设计的最小单元—模块,检查每个模块是否能独立、正确地运行。通常,在编码阶段就进行模块测试。单元测试常用白盒法测试。
集成测试(渐增式测试、非渐增式测试)
把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。这种每次增加一个模块的方法称为渐增式测试,这种方法实际上同时完成单元测试和集成测试。
先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,这种方法称为非渐增式测试;
在进行集成测试时普遍使用渐增式测试方法。
有两种不同的渐增式集成策略:自顶向下集成和自底向上集成。
测试的根本任务是发现软件中的错误。测试过程的早期使用白盒法,后期使用黑盒法。
软件维护
软件维护就是在软件产品交付之后对其进行修改,以排除故障,或改进性能和其他属性,或使产品适应改变了的环境。
软件重用是指在软件开发、维护过程中不作修改或稍加修改就可以重复使用相同或相似的软件元素的过程。
软件重用的目的是能更快、更好、成本更低地生产软件。
在软件维护时,目前常采用软件重用技术、逆向工程和再工程。
软件维护的种类
1)改正性维护
软件测试不大可能找出一个大型软件系统的全部隐含错误。也就是说,几乎每一个大型程序在运行过程中,都会不可避免地出现各种错误。为克服现有软件故障而进行的维护称为改正性维护。
2)适应性维护
计算机技术的发展十分迅速,计算机的软件、硬件环境也在不断发生变化,而应用软件的使用寿命往往比原先开发时的系统环境更为长久,因此,常常需对软件加以修改使之适应改变了的环境。为使软件产品适应环境的变化而进行的软件维护称为适应性维护。
3)完善性维护
软件交给用户使用后,用户往往会因为工作流程、应用环境的变化,要求增加新的功能和完善性能等。为增加软件功能、增强软件性能、提高软件运行效率而进行的维护称为完善性维护。
4)预防性维护
为了进一步提高软件的可维护性和可靠性,为改进软件性能创造条件,需要对软件进行的其他维护称为预防性维护。
软件维护的特点
1)结构化维护与非结构化维护差别巨大
2)维护的问题很多
3)维护的代价高昂
软件维护的副作用
维护的副作用有编码副作用、数据副作用和文档副作用3种。
1)编码副作用
使用程序设计语言修改源程序时可能引入错误。例如,修改程序的标号、标识符、运算符、边界条件、程序的时序关系等,要特别仔细、避免引入新的错误。
2)数据副作用
修改数据结构时可能造成软件设计与数据结构不匹配,从而导致软件错误。例如,修改局部量、全局量、记录或文件的格式、初始化控制或指针、输入/输出或子程序的参数等容易导致设计与数据不一致。
3)文档副作用
对数据流、软件结构、模块逻辑或任何其他特性进行修改时,必须对相关的文档进行相应修改,否则可能会导致文档与程序功能不匹配、文档不能反映软件当前的状态。因此,必须在软件交付之前对软件配置进行评审,以减少文档的副作用。
提高软件的可维护性
1.明确软件的质量目标
2.利用先进的软件技术和工具
3.选择便于维护的程序设计语言
4.采取有效的质量保证措施
5.完善程序的文档
软件维护分为4种,即改正性维护、适应性维护、完善性维护、预防性维护。
在软件维护时,目前常采用软件重用技术、逆向工程和再工程。
面向对象方法的四要素:
1. 对象
在应用领域中,有意义的、与所要解决的问题有关系的任何事物都可以作为对象,可以是具体的物理实体的抽象、人为的概念等。
2. 类
类是对具有相同数据和相同操作的一组相似对象的定义。
3. 继承
特殊类的对象拥有其一般类的全部属性与服务,称为特殊类对一般类的继承。继承是子类自动地拥有父类中定义的属性和方法的机制。
4. 用消息通信
多态性是指允许属于不同类的对象对同一消息做出响应。
软件不会磨损;软件开发资源最重要
因篇幅问题不能全部显示,请点此查看更多更全内容