一、软件与软件危机
软件是计算机系统中与硬件相互依存的部分,包括:
- 程序。是按事先设计的功能和性能要求执行的指令序列;
- 数据。是程序处理、加工的对象和处理信息的数据结构;
- 文档。是与程序开发、维护和使用相关的各类资料总称。
软件是三者的完整集合。
二、软件工程概述
1、定义
软件工程是应用计算机科学理论、技术及工程管理原则和方法,研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
工程项目的三个基本要素:进度、成本和质量的可控
软件工程是一门工程性学科,目的是成功地建造一个大型软件系统。所谓成功,就是要达到以下几个目标:
付出较低的开发成本。
达到要求的软件功能。
取得较好的软件性能。
开发的软件易于移植。
需要较低的维护费用。
能按时完成开发任务,及时交付费用。
开发的软件可靠性高。
软件工程方法学包括三个要素,即方法、工具和过程。
方法是完成软件工程项目的技术手段,回答“怎么做”问题;
工具是为运用方法提供自动或半自动的支撑环境;
过程是为了获取高质量软件所需要完成的一系列任务框架,包括支持软件开发各个环节的控制和管理。
2、软件开发方法
2.1、传统方法学
也称为结构化方法—结构化分析(SA,Structure Analysis)、结构化设计(SD,Structure Design)和结构化编程(SP,Structure Programming),使用适当的软件工具和软件工程环境来支持结构化技术的应用。
结构化方法是用的开发模式是瀑布模型;
是文档驱动开发的一种方法;
便于分工协作,降低软件复杂度和开发难度;
提高了生产率和软件的可维护性。
适合中小型软件项目的开发。
2.2、面向对象方法学
面向对象方法学解决问题的过程是一个从一般到特殊的演绎思维过程,也包括了从特殊到一般的归纳思维过程。
- 面向对象方法开发软件的过程是一个主动、多次反复迭代(OOA、OOD、OOP)的过程,在概念和表示方法上的一致性保证了在各个开发阶段之间的无缝过渡。
- 往往采用UML语言驱动开发软件。
- 降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护难度。
- 对象的相对独立、继承和多态性,促进和提高了软件的可重用性。
适合大型软件项目的开发。
结构化方法和面向对象方法对于不同的软件系统各有优劣。
结构化方法把解空间分数据和功能两部分,可以更加清晰地进行需求分析和功能分解,数据流图能够细致地说明数据在各个功能模块之间的流动和变化,更适于系统设计的前期阶段。
面向对象方法能够把数据和功能以对象为单位封装成一个整体,更直观地表达对象的状态变化和对象间的交互,更加准确地分析功能的实现过程,更适于在软件后期细化系统的具体行为。
2.3、混合式软件开发方法,开发步骤如下所示
- 使用SA进行需求分析,建立数据字典,构建总的和分层的数据流图。
- 使用模块结构图设计系统的独立功能块,做出模块内的程序流图。
- 结合数据流图,聚合同类模块,规约类(归纳出用例图);根据程序流图,设计类的属性和类的方法。
- 使用OOD建立系统的动态模型,分析对象的行为和协作。
- 总体面向对象程序设计,细节结构化程序设计优化,实现代码层。
无论使用哪种开发方法,或者是混合哪几种开发方法,都要因地制宜,依据需求分析和系统要求,做出最好的选择或组合。
3、基本原则
- 采取适宜的开发模型。与系统设计有关,强调的是控制易变的需求。
- 采用合适的设计方法。有助于实现软件的模块化、抽象与信息隐藏、局部化、一致性以及适应性等。
- 提供高质量的工程支持。在软件过程中,软件开发、测试、管理工具和环境对软件工程的支持颇为重要。
- 重视开发过程的管理。利用可用的资源、提高软件产品的质量、提高软件组织的生产能力等,实现有效的软件工程。
每项基本原则都非常重要,既重视软件技术的应用,又强调软件工程的支持和管理,最重要的是在实践中实施。
4、软件生命周期(Software Life Cycle,SLC)
是指软件从构思之日起,到 废或停止使用的生命周期。
周期内有问题定义、可行性分析、需求分析、系统设计、编码和单元测试、综合测试、验收与运行、维护升级到废弃等阶段。
这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、过程、审查、并形成文档,文档便于交流或备查,以提高软件的质量且便于软件的维护。
6、软件工程模型
软件过程模型就是一种开发策略,这种策略针对软件工程的各个阶段提供了一套泛型,使工程的进展达到预期的目的。
对一个软件的开发无论其大小,都需要选择一个合适的软件过程模型,这种选择基于项目和应用的性质、采用的方法、需要的控制,以及要交付的产品的特点。
通常使用生命周期模型简洁地描述软件工程。生命周期模型规定了把生命周期划分成各个阶段以及各阶段的执行顺序。因此,也称为过程模型。
6.1、瀑布模型
1970年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被广泛采用的软件开发模型。
定义:
- 从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容给出该项活动的工作成果,并作为输出传给下一项活动。
- 评审活动的实施,确认后继续下一项活动;否则,返回前面甚至更前面的活动。
- 需求经常变化的项目而言,瀑布模型毫无价值。
- 克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险。
- 更好地和客户进行沟通,澄清模糊需求,并且对需求的变化有较强的适应能力。
- 可以减少技术、应用的风险,缩短开发时间,减少费用,提高生产率。
- 提供了用户直接评价系统的方法,加强了用户信息的反馈,促进了各类人员的协调交流,减少误解,能够适应需求的变化,最终有效提高软件系统的质量。
- 所选用的开发技术和工具不一定符合主流的发展。
- 快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。
- 在一定程度上可能会限制开发人员的创新。
- 预先不能确定需求。
- 软件实现方法是成熟的。
- 项目周期较短。
- 是一个风险驱动的模型,强调可选方案和约束条件从而支持软件的重用,有助于将软件质量作为特殊目标融入产品开发之中。
- 设计上的灵活性,可以在项目的各个阶段进行变更。
- 以小的分段来构建大型系统,使成本计算变得简单容易。
- 客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
- 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。
- 维护只是模型的另一个周期,维护和开发之间没有本质区别。
- 采用螺旋模型需要具有相当丰富的风险评估经验和专门知识。
- 建设周期长,可能导致技术落后因而无法满足当前用户需求。
- 过多的迭代次数会增加开发成本,延迟提交时间。
- 需求不明确软件项目适合用螺旋模型开发,便于风险控制和需求变更。
- 螺旋模型强调风险分析,往往适应于内部的大规模软件开发。
- 风险分析影响项目的利润,因此,螺旋模型只适合于大规模软件项目。
- 开发人员应该擅长寻找可能的风险,准确地分析风险,否则,将会带来更大的风险。
- 每个作业估计需要使用的时间。箭头长度和它代表的作业持续时间没有关系,箭头仅表示依赖关系,它上方的数字才表示作业的持续时间。
- 最早时刻EET。该事件可以发生的最早时间。
- 最迟时刻LET。在不影响竣工时间的前提下,该事件最晚可以发生的时刻。
-
最迟时刻(LET)的计算
- 事件的最迟时刻是在不影响工程竣工时间的前提下,该事件最晚可以发生的时刻,工程 络中最后一个事件的最迟时刻就是它的最早时刻。其他事件的最迟时刻在PERT图上从右至左按逆作业流的方向计算。
- 计算最迟时刻LET使用下述3条规则:
- 考虑离开该事件的所有作业。
- 从每个作业的结束事件的最迟时刻中减去该作业的持续时间。
- 机动时间 =(LET)结束-(EET)开始-持续时间
= 右下角 - 左上角 - 持续时间 - 0层数据流图只有1张图,1个加工(系统自身);
- 图中只需要指明数据源、输入流、输出流及数据终点;
- 1层数据流图中也只有1张图;
- 把0层数据流图中的一个加工分解成若干个加工,这些加工之间可以有0条或多条数据流;
- 1层数据流图中包括0层数据流程图中的输入数据流和输出数据流、各个加工之间数据流以及1个以上加工需要读或写的文件。
- 代码检查法
- 静态结构分析法
- 逻辑覆盖法
- 控制结构测试法(基本路径测试、条件测试和循环测试)等
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 判定/条件覆盖
- 条件组合覆盖
- 路径覆盖
机动时间
某些作业有一定程度的机动余地,即实际开始时间可以比预定时间晚一些,或者实际持续时间可以比预定的持续时间长一些,但并不影响工程的结束时间。一个作业的全部机动时间的计算公式如下所示:
11.1、数据流图的符 表示
数据流。是数据在系统内传播的路径,因此,数据流由一组成分固定的数据组成。数据流必须有流向,除了与数据存储之间的数据流不用命名外,数据流应该用名词或名词短语命名。
数据源或终点。数据源或终点则代表系统之外的实体,可以是人、物或其他软件系统(不能是自身系统)。
对数据的加工。加工就是对数据进行处理,它接收一定的数据输入,对其进行处理,并产生输出。通常,在数据流图中忽略出错处理,基本要点是描绘“做什么”,而不是“怎么做”。
数据存储。数据存储表示信息的静态存储,可以代表文件、文件的一部分、数据库的元素等。
11.2、数据流图的绘制
1)顶层(0层)数据流图的绘制:
2)1层数据流图的绘制:
1、测试技术
1.1、白盒测试(结构测试)
定义:
把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。
白盒测试法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否能按预定要求正确工作。因此,白盒测试又称结构测试。逻辑覆盖法
定义:
是以程序内部的逻辑结构为基础的设计测试用例的技术。从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准:
这六种覆盖标准按照测试路径覆盖能力由弱到强排列。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
缺点:
适应于:
6.2.1、探索型原型
把原型用于开发的需求分析阶段,目的是要弄清用户的需求,确定所期望的特性,并探索各种方案的可行性。它主要针对开发目标模糊,用户与开发都对项目都缺乏经验的情况,通过对原型的开发来明确用户的需求。
6.2.2、实验型原型
主要用于设计阶段,考核实现方案是否合适,能否实现。对于一个大型系统,若对设计方案心中没有把握时,可通过这种原型来证实设计方案的正确性。
6.2.3、演化型原型
这种原型主要用于及早向用户提交一个原型系统,该原型系统或者包含系统的框架,或者包含系统的主要功能,在得到用户的认可后,将原型系统不断扩充演变为最终的软件系统。将原型的思想扩展到软件开发的全过程。
6.3、增量模型(渐增模型)
是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。
运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。
优点:
缺点:
适用于:
6.5、喷泉模型
是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。
该模型中,软件开发过程自下而上周期的各阶段是相互迭代和无间隙的。
在喷泉模型中,软件的某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的软件成分。无间隙指在各项活动之间无明显边界,如分析和设计活动之间没有明显的界限。因此,易于实现软件的复用。
绘制出工程 络后,系统分析员就可以借助它估算工程进度。为此,需要在PERT图上增加一些必要的信息。