1.1、软件
计算机应用系统由硬件和软件组成。
1.1.1、软件简介
计算机软件=程序+数据+文档
(1) 程序:为实现设计的功能与性能要求而用程序设计语言编写的指令序列。
(2) 数据:程序能够正常处理信息的数据结构。
(3) 文档:描述程序功能需求、程序操作和使用所求的图文资料。
1.1.2、软件分类
(1)系统软件。
(2)实时软件。
(3)事务处理软件。
(4)科学与程序计算软件。
(5)嵌入式软件。
(6)人工智能软件。
(7)个人计算机软件。
(8)工具软件。
1.1.3、软件的发展
(1)程序设计阶段
(2)程序系统阶段
(3)软件工程阶段
1.1.4、软件危机
软件危机是指在计算机软件的开发和维护过程中所遇到一系列严重问题。
软件危机含义主要是:怎样开发软件能满足对软件不断增长的需求,怎样维护数量不断膨胀的已有软件。
软件危机主要有下述几方面表现:
(1) 对软件开发成本和进度的估算常常严重不准确。
(2) 开发完成的软件达不到用户的需求。
(3) 软件质量比用户期望的低。
(4) 软件的可维护性差。
(5) 软件常常没有适当的文档。
(6) 软件成本逐年上升。
(7) 软件生产率低。
产生软件危机的原因:
(1) 软件需求描述和理解不准确。
(2) 软件规模越来越大,结构越来越复杂。
(3) 软件开发的管理困难。
(4) 软件开发技术落后。
(5) 软件开发费用增加。
(6) 生产方式落后。
(7) 开发工具落后,生产率低。
1.2、软件工程
1.2.1、软件工程概念
软件工程是指导计算机软件开发和维护的工程学科。它主要研究的内容是软件开发技术和软件开发管理。
1.2.2、软件工程的基本原理
软件工程的七条基本原理
(1) 用分阶段的生命周期计划严格管理软件工程过程。
(2) 坚持进行软件过程中的阶段评审。
(3) 实行严格的产品控制。
(4) 采用现代开发技术进行软件的设计与开发。
(5) 应能够清楚地审查开发过程中的每个工作结果。
(6) 开发小组的成员应少而精。
(7) 承认不断改进软件工程实践的必要性。
1.2.3、软件工程方法学
n 通常把在软件周期全过程中使用的一整套技术的集合称为方法学,也称为范型。
n 软件工程方法学包括方法、工具和过程三个要素。
n 软件工程方法学当前应用广泛的有传统方法学和面向对象方法学。
n 传统方法学也称生命周期方法或结构范型。它采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。结构化技术包括结构化分析(SA)、结构化设计(SD)、结构化程序设计和结构化测试等技术。
n 面向对象方法学是将数据和对数据的操作紧密结合在一起的方法。
(1) 将数据及在数据上操作的行为集合成一个软件结构,称为对象。程序由对象组成。
(2) 将所有对象分类。
(3) 确定继承。
(4) 对象之间的互相联系是通过传递“消息”来完成地。
1.2.4、软件工程目标
软件工程的目标是:在给定成本和进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性、可互操作性并满足用户需求的软件产品
1.3软件生命周期
软件生命周期:从形成概念开始,经过开发,使用和维护,直到最后退役的全过程称为软件生命周期。
1.3.1、软件定义
n 软件定义部分的任务是确定软件开发工程必须完成的总目标,确定工程的可行性,导出实现工程目标应该采取的措施与系统必须完成的功能,估算完成该工程需要的资源和成本,并制定工程进度表。该任务又称为系统分析,由系统员负责完成。软件定义部分又可划分为问题定义、可行性研究和需求分析三个阶段。
(1) 问题定义
问题定义的任务是:搞清楚“要解决的问题是什么”。该阶段不但不能忽视,而且是非常重要的。系统分析员通过对问题的调研,写出关于问题性质、工程目标和工程规划书的书面报告,并且要得到用户的确认。
(2) 可行性研究
可行性研究的任务是:了解用户的要求及实现的环境,从技术、经济和社会等方面研究并论证软件系统的可行性。可行性论证包括技术可行性,操作可行性和经济可行性三部分。
通过对用户做深入细致地调查研究后,撰写出可行性分析报告。在可行性论证的基础上制定初步的项目开发计划。
(3) 需求分析
需求分析阶段任务是:确定“目标系统必须做什么”。需求分析在可行性分析的基础上,对用户进一步做深入细致地调研,对目标系统提出完整、准确、清晰和具体的要求,以便顺利进行后阶段的工作。
1.3.2、软件开发
n 软件开发部分的任务是具体设计和实现软件定义部分定义的软件。它又可分为概要设计、详细设计、编码与单元测试和综合测试四个阶段。概要设计和详细设计又称为系统设计,编码与单元测试和综合测试又称为系统实现。
(1) 概要设计
概要设计阶段的任务是:确定目标系统必须怎样做。
(2) 详细设计
详细设计阶段的任务是:怎样具体地实现目标系统。
(3) 编码与单元测试
编码阶段的任务是把每个模块的控制结构写成计算机可接受的程序代码。
(4) 综合测试
(5) 综合测后阶段的任务是通过各种类型的测试使软件到预期的效果。综合测试包括组装测试和确认测试。
组装测试主要查找各模块之间接口上存在的问题。确认测试是按照软件需求规格说明书的规定,由用户对目标系统进行验收测试,决定开发软件是否合格。
1.3.3使用与维护和退役
n 使用与维护部分的任务是使软件永久地满足用户的需求。也就是说,改正软件在使用过程中的错误;修改软件适应新环境;改进软件满足用户的新需求。维护阶段是相当复杂的,维护活动是一次压缩和简化了的定义和开发过程,要做大量的工作。软件退役是软件生存周期中的最后一个阶段,终止对软件产品的支持,软件停止使用。
n 为了简单起见,问题定义和可行性研究的主要任务是概括地了解用户的需求,把它们都归并到需求分析中,同样,也可以把概要设计和详细设计合并在一起为“设计”。
1.4软件过程和生命周期的建模
1.4.1、过程的含义
n 软件工程过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
n 软件过程分为以下几种
1.4.2、软件过程模型
n 软件工程过程中的每一个基本活动是由过程模型来实现的。
n 在一个具体的实际工程活动中,软件工程师必须以覆盖软件过程中的基本阶段,确定所涉及的过程、方法和工具为依据,而设计和提炼出一个工程开发策略,这种策略称为软件工程过程模型,也称为软件生存周期模型。
n 所谓模型就是一种策略,这种策略针对软件过程的各个阶段提供一套范型,使工程的进展达到预期的目的。
n 对一个软件的开发无论其大小,我们都需要选择一个合适的软件过程模型,这种选择基于项目和应用的性质、采用的方法、需求的控制,以及要交付的产品的特点。一个错误模型的选择,将导致开发方向迷失。
n 软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。目前有瀑布模型、快速原型模型、增量模型、螺旋模型和变换模型等。
1、瀑布模型
瀑布模型也称软件生存周期模型或线性顺序过程模型,提供软件开发的系统化的和顺序的方法。它是将软件生存周期各活动规定为线性顺序连接的若干阶段的模型,包括问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试和维护。瀑布模型从需求分析开始,逐阶段进行,直至通过测试并得到用户确认的软件产品为止。瀑布模型的上一阶段的输出结果是下一阶段的输入,如同瀑布流水,逐级下落。
(1)模型表示
该模型说明整个软件看法过程是按图中五个阶段进行的。每个阶段的任务完成后,产生相应的文档,经过确认后的文档表明该阶段的工作完成了,可以进行下一阶段的工作。每个阶段均以上一阶段的文档作为开发的基础,如果某阶段的文档出问题,则可能需要追溯到前一些阶段,必要时还要修改前面已经完成的文档。
(2)瀑布模型的优点
² 它提供了一个模板,模板使得分析、设计、编码、测试和维护的方法可以在该模板下有一个共同的指导。
² 虽然有不少缺陷,但比在软件开发中的随意的状态要好的多。
(3)瀑布模型的缺点
² 实际的项目大部分情况难以按照该模型给出的顺序进行,而且这种模型的迭代是间接的,这很容易由微小的变化而造成大的混乱。
² 经常情况下用户难以表达真正的的需求,而这种模型却要求如此,这种模型是不欢迎具有二义性问题存在的。
² 用户要等到开发周期的晚期才看到程序运行的测试程版本,而在这时若发现大的错误,可能引起用户的惊慌,而后果也可能是灾难性的。
² 采用这种线性模型,经常在过程的开始和结束时,要等待其他成员完成后,才能进行下去,有可能花在等待的时间比开发的时间要长。我们称之为“堵塞状态”。
2、快速原型模型
(1)快速原型模型的优点
² 如果用户和开发者达成一致协议:原型被建造仅为了定义需求,之后就被抛弃或者部分抛弃,那么这种模型很合适。
² 迷惑用户以抢占市场,这是一个首选的模型。
(2)快速原型模型的缺点
² 没有考虑软件的整体质量和长期的可维护性。
² 大部分情况是不合适的操作算法被采用,目的是为了演示功能,不合适的开发工具被采用仅仅因为方便,还有不合适的操作系统被选择,等等
² 由于达不到质量要求产品可能被抛弃,而采用新的模型重新设计。
3、增量模型
(1)增量模型的优点
² 人员分配灵活,刚开始不用投入大量人力资源,当核心产品很受欢迎时,可增加人力实现下一个增量。
² 当配备的人员不能在设定的期限内完成产品时,它提供了一个先推出核心产品的途径,这样就可以先发布部分功能给用户,对用户起到镇静剂的作用。
² 具有一定的市场。
(2)增量模型的缺点
² 自始至终开发者和用户纠缠在一起,直到完全版本出来。
4、螺旋模型
(1)螺旋模型的优点
² 对于大型系统及软件的开发,这种模型是一个很好的方法。开发者和客户能够较好地对待和理解每一个演化级别上的风险。
(2)螺旋模型的缺点
² 需要相当的风险分析评估的专门技术,且成功就依赖于这种技术。
² 很明显,一个大的没有被发现的风险存在的话,将会导致问题的发生,可能导致演化的方法失去控制。
这种模型相对比较新,应用不广泛,其功效需要进一步的在验证。
5、变换模型
(1)变换模型的优点
² 形式化规约可直接作为程序验证的基础,可以尽早地发现和纠正错误(包括其他情况下不能发现的错误)。
² 开发出来的软件具有很高的安全性和健壮性,特别适合安全部门或者软件错误会造成经济损失的开发项目。
(2)变换模型的缺点
² 开发费用昂贵(对开发人员需要多方面的培训),而且需要的时间较长。
² 不能将这种模型作为对客户通信的机制,因为客户对这些数学语言一无所知。
² 目前还不流行。
² 具有开发无缺陷软件的承诺。
(3)变换模型的特点
² 形式化软件开发方法(形式化需求规格说明;变换技术)。
² 程序自动生成技术。
² 确保正确。
1.4.3、过程建模工具和技术
过程管理工具用来组织分析当前的过程并协调组织工作的任务,控制和监管进度和管理技术质量。例如,利用配置管理工具来进行配置管理和缺陷管理;利用自动测试工具进行测试;利用面向对象统一建模语言UML来进行对象建模、分析、设计和实现;利用Project制定和监测项目计划及其进展;利用第四代技术,根据开发者在较高层次上说明软件的某些特征,然后自动地生成源代码等等。
计算机辅助软件工程CASE是在软件工程活动中,软件工程师和管理员按照软件工程的方法和原则,借助于计算机及软件工具的帮助,开发、维护和管理软件产品的过程。它包括下列产品内容:
1) 事务系统规划工具
2) 项目管理工具
3) 支撑工具
4) 分析和设计工具
5) 程序设计工具
6) 测试工具
7) 原型建造工具
8) 维护工具
9) 框架工具