软件
软件的定义:软件是程序、数据及文档的完整集合。
其中,程序是按事先设计的功能或者性能要求执行的指令序列。
数据是使程序能够正常操纵信息的数据结构。
文档是与程序开发,维护和使用相关的图文材料。
软件与硬件、数据库、人、过程等共同构成了计算机系统。
软件的分类: (1)按功能:系统软件、支撑软件、应用软件
(2)按规模:微型、小型、中型、大型、甚大、极大
(3)按工作方式:批处理软件、实时软件、分时软件、分布式软件、嵌入式软件
(4)按服务对象:项目软件、产品软件
(5)按使用频度:一次性使用软件(如开机引导)、频繁使用软件
软件的特点
抽象性(逻辑实体)、软件生产无明显制造过程、无磨损性、对硬件依赖性、手工开发方式、软件本身复杂性、高成本以及社会因素。
软件危机
原因
软件规模越来越大、结构越来越复杂、管理困难、开发费用日趋增长、开发技术落后、生产方式和开发工具比较落后
软件危机的表现
由于缺乏软件开发经验和相关数据的积累,使开发计划很难制定,对进度、费用的估计不准确 ;
软件需求很难确定或不确定,对“已完成的”软件系统不满意的现象经常发生;
测试工作不充分,导致错误多,软件质量不可靠;
开发过程缺乏统一、公认的方法论和规范指导,缺乏文档规范,使软件很难维护。
软件工程
定义
采用工程的概念、原理、技术和方法来开发和维护软件,将工程管理技术的成功经验和思想与软件开发的开发过程、研究、技术相结合,形成一套适合于软件开发的方法、规范和技术。
目标
提高软件生产率、提高软件质量、降低软件成本
三个要素
方法、工具、过程
软件工程必须以有组织的质量保证为基础
软件工程的十大知识领域
①软件需求②软件设计③软件构建④软件测试⑤软件维护⑥软件配置过程⑦软件工程管理⑧软件工程过程⑨软件工程的工具和方法⑩软件质量
基本原理
用分阶段的生命周期计划严格管理
坚持进行各阶段评审
实行严格的产品控制
采用现代程序设计技术
结果应能清楚地审查
开发小组的人员应少而精
承认不断改进软件工程实践的必要性
软件过程
为获得高质量软件,所需完成的一系列软件工程活动。
软件过程是一系列任务的框架,它规定了完成各项任务的工作步骤。
不同的软件开发机构可以规定自己的软件过程。 同一软件开发机构也可以使用不同的软件过程。
四项基本活动过程
Plan:软件规格说明(软件描述)
Do:软件开发
Check:软件确认(有效性验证)
Action:软件演进(进化)
软件生命周期模型
软件从孕育、诞生、成长、成熟到衰亡的生存过程,这个过程即为软件的生命(存)周期。
三个阶段:①软件定义(系统分析)②软件开发③软件运行维护
软件生命周期模型也叫软件过程模型、软件开发模型、软件工程范型,能直观的表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。
(1)瀑布模型
文档驱动的模型
各阶段自上而下互相衔接,如瀑布逐级下落
各阶段的任务完成后,产生相应的文档,经过评审确认后,进入下一阶段
计划
明确问题性质,确定系统的总目标和规模
完成该软件任务的可行性研究
估计资源、成本、开发进度
制定开发任务的实施计划,连同可行性研究报告,提交管理部门审查
需求分析
对提出的需求进行分析给出详细的定义
编写软件需求说明书或者系统功能说明书以及初步的用户手册
提交管理机构评审
设计
概要设计:把需求转换成软件的体系结构,确定各功能的模块
详细设计:具体描述各个模块完成的工作,为源程序的编写打好基础
编写设计说明书,提交评审
编码
将设计转换成某种特定语言表示的源程序
编码应结构良好、清晰易读,与设计一致
测试
按规定的需求进行各种测试,确定软件是否合格,能否交付。单元测试、组装测试······
运行维护
改正性维护:改正软件的错误
适应性维护:适应变化的环境
完善性维护:增强软件的功能
预防性维护:准备将来的维护
特点
阶段间具有顺序性和依赖性
以软件需求完全确定为前提,推迟实现
质量保证的观点:每个阶段必须完成规定的文档,每个阶段结束前完成文档审查;下一阶段以上一阶段的文档作为开发的基础,若某文档出现问题,则返回重新工作。
优点
在消除软件非结构化、促进软件开发工程化方面起了很大作用,提供软件开发的基本框架。
适合功能需求明确、完整、无重大变化的软件产品的开发。
瀑布模型是一种整体开发模型,当开发完成时,向用户提交的是一个完整的系统。
局限性
将软件开发生硬地分成若干确切的阶段,一种理想的线性开发模式,缺乏灵活性。
无法解决软件需求不明确或不准确的问题,导致开发出的软件不是用户真正需要的软件。
相当长的时间才能得到软件的最初版本,发现错误为时已晚,大量修改必须付出巨大的代价。
生成和确认大量文档,极大地增加了工作量。
(2)原型模型(快速增长模型)
背景
业务和需求在不断变化,采用线性开发方式不实际。
根据用户的需求,快速开发一个“原型”,完成部分主要功能,展示给用户。
在征求用户意见的过程中,逐步修改、完善,最终获得满意的软件产品。
优点
统一用户和开发人员的理解,有助于需求的定义和确认;
可以快速实现和提交一个有限的版本,应付市场竞争的压力;
评估关键技术和性能瓶颈;
展示新概念和方法的可行性。
(3)增量模型
简介
增量模型是迭代和演进的过程。
增量模型把软件产品分解成一系列的增量构件,在增量开发迭代中分批、逐步加入。
每个构件由多个相互作用的模块构成,并且能够完成特定的功能。
早先完成的增量可以为后期的增量提供服务。
增量分解的约束条件:新构件集成到现有软件时,形成的产品必须是可测试的。
优点
客户无需等到整个系统的实现,第一个增量会满足最关键的要求,软件很快就能使用;
客户可以将早期的增量作为原型,从中获得对后续增量的需求,适应变化的能力较强;
具有最高优先权的服务首先交付,接受了最多测试,意味着最重要的部分不太可能失败。
因此,项目总体性失败的风险比较低。
局限性
增量应相对较小(不超过20,000行代码),每个增量应该包含一定的系统功能,因此,有时很难把客户的需求映射到适当规模的增量上。
此外,多数系统需要一组在各个部分都会用到的基本服务,但由于增量实现前,需求不能被详细定义,所以明确所有增量都会用到的基本服务比较困难。
(4)螺旋模型
在软件开发过程中,有各种各样的风险,应及时进行风险识别、分析和采取对策,从而消除或减少风险的危害。螺旋模型是一种风险驱动的模型。
对复杂的大型软件,开发一个原型往往达不到要求,螺旋模型吸收了“演化”的概念,加入风险分析,将瀑布模型与原型模型结合起来,弥补了以往模型的不足。
四个工作步骤
制定计划 :确定目标,选定实施方案,弄清项目开发的限制条件;
风险分析 :分析评估所选方案,考虑如何识别和消除风险;
实施工程 :实施软件开发;
客户评估 : 评价开发,提出修正建议。
特点
螺旋模型适合于大型软件的开发,它吸收了软件工程“演化”的概念,使开发人员和用户对每个螺旋周期出现的风险有所了解,从而作出相应的反应。
使用该模型需要有相当丰富的风险评估经验和专业知识,这使该模型的应用受到一定限制。
(5)喷泉模型
喷泉模型是对象驱动的模型,主要用于支持面向对象开发过程。 体现了迭代和无间隙的特性。
迭代:系统某个部分常常重复工作多次,对象在每次迭代中加入演进的软件成分。
无间隙:在各项开发活动,即分析、设计和编码间不存在明显的边界。
软件文档
软件文档的作用与分类
软件文档:软件工程中,对活动、需求、过程或结果进行描述、定义、规定、报告或认证的书面或图示的信息。
软件文档描述和规定了软件定义、设计和实现的细节,说明使用软件的操作命令。
在产品的开发和维护过程中起着桥梁作用。
分类
在形式上大致分为工作表格和文档两类
按使用范围可以分为开发文档、管理文档和用户文档
作用
文档是软件开发规范的体现和指南,在软件工程过程中,必须充分注意软件文档的编制和管理。
软件文档规范
可行性研究报告
说明软件项目的实现在经济上、技术上、使用上和法律上的可行性;
对为合理地达到开发目标可供选择的各种可能的实现方案加以评述;
说明并论证所选定实施方案的理由。
项目开发计划
为项目实施方案制定出的具体计划,包括: 各部分工作的负责人员、开发的进度、开发经费的概概算、 所需的软硬件资源等
项目开发计划提供给管理部门,作为开发阶段评审的基础。
软件需求说明书
也称“软件规格说明书”,对所开发软件的功能、性能、用户界面和运行环境等作出详细说明。
是用户与开发人员双方对软件需求取得共同理解的基础上达成的协议,也是实施开发工作的基础。
数据要求说明书
该说明书给出数据逻辑描述和数据采集的各项要求; 为生成和维护软件系统的数据文件作好准备。
概要设计说明书
概要设计阶段的成果,为详细设计奠定基础:
系统的功能分配和模块划分、程序的总体结构 、数据结构设计、 输入输出及接口设计、 运行设计、 出错处理设计等
详细设计说明书
着重描述每一个模块如何实现; 包括实现算法、程序流程等。
用户手册
详细描述软件的功能、性能和用户界面; 使用户了解如何使用该软件。
操作手册
为操作人员提供软件各种运行情况的有关知识; 特别是操作方法细节的描述。
测试计划
针对单元测试、组装测试和确认测试,需要为组织测试制定计划,包括:
测试的内容、条件 进度安排 人员安排 测试用例的选取原则 测试结果允许的偏差范围等
测试分析报告
测试工作完成以后,应当提交测试计划执行情况的说明; 对测试结果加以分析,并提出测试的结论性意见。
开发进度月报
是软件人员按月度向管理部门提交的项目进展情况的报告,包括:
进度计划与实际执行情况的比较 阶段成果 遇到的问题和解决的办法 下个月的打算等
项目开发总结报告
项目开发完成后,应与项目实施计划对照,总结实际执行的情况,如进度、成果、资源利用、成本和投入的人力等。 此外,还需对开发工作做出评价,总结经验和教训。
维护修改建议
软件产品投入运行后,可能有修改、更正等问题; 应对存在的问题、修改的考虑以及修改影响的估计等作详细的描述,写成维护修改建议,提交审批。
文档编制的质量要求
软件文档在产品开发和维护过程中起到桥梁作用,文档的编制必须保证一定的质量。 高质量的文档应体现在以下几个方面:
针对性:文档编制前应分清读者对象。按不同类型、不同层次的读者,决定怎样适应他们的需要。
精确性:文档的行文应十分准确,不能出现多义性的描述;同一课题中几个文档的内容应协调一致,没有矛盾。
清晰性:文档编写应力求简明,如有可能应配以适当的图表,以增强其清晰性。
完整性:文档应完整、独立、自成体系。例如,前言做一般性介绍,正文给出中心内容,必要时有附录,列出参考资料等。 同一课题的几个文档之间允许部分内容重复。 不要在文档中“转引”其他文档内容。例如,一些段落没有具体描述,而用“见XX文档XX节”的方式,给读者带来许多不便。
可追溯性:由于各开发阶段编制的文档与完成的工作密切相关,前后两阶段生成的文档具有一定的关系。 在一个项目各开发阶段之间提供的文档必须存在着可追溯关系。
灵活性:不同的软件项目其规模和复杂程度有许多差别。①根据具体的项目,确定编制的文档种类。 ②根据任务的规模、复杂性确定文档详细程度。③系统非常大时,一种文档可分卷编写。④文档的表现形式没有限制。⑤程序设计的表现形式没有限制。
软件文档的编写与管理
编写软件文档就是记录系统的分析、设计、开发、应用等各个阶段的设计思想和研究成果。
编制文档的过程,就是采用软件工程方法,有组织、有计划的科学管理和研究开发过程。
编写步骤:准备工作、确定写作内容、编写定稿、更新完善。
文档的管理与维护
软件开发小组应设一位文档保管员,负责集中保管项目已有文档的两套主文本。
开发小组的成员可根据需要保存一些个人文档。
项目结束时,文档保管员应及时回收个人文档。
新文档取代旧文档时,及时注销旧文档;文档内容变更时,及时修订主文本。
主文本的修改必须特别谨慎。