软件工程

    技术2022-06-26  45

      这是一门经过了理论但还未经我实践的课程,不可否认,软件工程已然是一门工程必备科目。为软件开发提供了合适的方法和引导。

      软件工程产生的背景基于软件危机,指在计算机软件的开发和维护过程中所遇到的一系列严重问题。因而产生了一门指导计算机软件开发和维护的工程学科---软件工程。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。这使得我们必须认识到,软件不单单只程序代码,而是 程序、数据和相关文档的完整集合。

      软件工程的方法学3个要素为:方法、工具和过程。方法学主要有:1.传统方法学:结构化范型,采用结构化技术完成软件开发,把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。2.面向对象方法学:主动地多次反复迭代的演化工程,将数据和行为看成是同等重要,以数据为主线,把数据和对数据的操作紧密地结合起来。当软件规模庞大或者对软件的需求模糊易变时,采用生命周期方法学开发往往不成功,面向对象方法简化了软件开发和维护,提高了软件的可重用性。

      软件是有生命周期的,可以概括的划分为:软件定义,软件开发和运行维护阶段。软件过程是为了获得高质量软件所需要完成的一系列任务的框架,规定了完成各项任务的工作步骤。

      对于软件定义阶段,分为:问题定义、可行性研究、需求分析。

      问题定义:尽量准确的定义问题的必要性,明确需要解决的问题是什么。通过对客户的访问调查,系统分析员要扼要的写出对问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告还应该得到客户的确认。

      可行性研究:用最小的代价在尽可能短的时间内确定问题是否能够解决。分析员对问题定义阶段的进行进一步分析,如果问题不可解,则应该建议停止软件开发;若问题可行,分析员应该研究正在使用的旧系统并导出新系统的逻辑模型,然后从系统的逻辑模型出发,探索若干种可选的主要解法,即系统实现方案,对每种解法都应该仔细研究其可行性,主要从技术可行性、经济可行性和操作可行性分析。需要用到的工具有:数据流程图(表达分析员对现有系统的认识和描绘他对未来的物理系统的设想,描绘组成系统的主要物理元素以及信息再这些元素之间流动和处理的情况),数据字典(精确定义数据流程图中每个元素)。

      需求分析:确定系统必须完成哪些工作,也就是对系统提出完整、准确、清晰、具体的要求。分析方法应该遵循:

    必须理解并描述问题的信息域,建立数据模型(E-R图)必须定义软件应完成的功能,建立功能模型(数据流图)必须描述作为外部事件结果的软件行为,建立行为模型(状态转换图)必须对描述信息、功能和行为的模型进行分解,用层次的方式展现细节。

    在需求分析结束之前,需要写出软件需求规格说明书。并从一致性、完整性、现实性和有效性 4个方面验证。

    并且导出新系统的逻辑模型,用数据流图、E-R图、状态转换图、数据字典和主要的算法描述。

    其他工具:层次方框图(描绘数据层次结构)、Warnier图(描述信息层次结构)和IPO图(描述输入数据、数据处理和输出数据之间关系)

     

     

      对于软件开发阶段,分为:总体设计,详细设计, 编码和单元测试 和 综合测试。

      总体设计:确定系统的具体实现方案(物理配置),组成系统的物理元素,同时设计软件的结构,确定系统每个程序是由哪些模块组成的,以及模块之间的相互关系。

    设计原理有:模块化、抽象、逐步求精、信息隐藏和局部化、模块独立。

    工具(描绘软件结构的图形工具):层次图,HIPO图(层次图加工、处理、输出图);结构图;

      详细设计:对目标系统精确描述,从而使之能在编码阶段吧这个描述直接翻译成某种程序设计语言书写的程序。(逻辑上正确的实现模块的功能)。

    工具(描述程序处理过程的工具):程序流程图,N-S图(盒图),PAD图,判断表,判定树,PDL(process design language).

    面向数据结构的设计方法:得出对程序处理过程的描述,在完成了结构设计之后,可以使用面向数据结构的方法来设计每个模块的处理过程。

    Jackson方法 和 Warnier方法。

    程序复杂程度的定量度量:McCabe方法:流图,环形复杂度。 Halstead方法:根据运算符和操作数的总数来度量程序的复杂程度。

    编码和单元测试:用某种程序设计语言写出正确的容易理解、容易维护的程序模块,并对模块进行测试。

    测试的根本目的:尽可能多的发现并排除软件中潜藏的错误。

    单元测试主要使用:白盒测试(结构测试)。

    综合测试:主要有集成测试(子系统测试和系统测试)和验收测试。

    集成测试:测试和组装软件的系统化技术。

    确认测试:验证软件的有效性,即按照软件规格说明书的规格,由用户对目标系统进行验收。主要使用黑盒测试(功能测试)。

    调试:发生在测试之后,排除错误的过程。

    软件可靠性。

    对于软件维护阶段,其实就是经历了一次压缩和简化了的软件定义和软件开发过程。

    软件维护:在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。主要有:改正性维护、适应性维护、完善性维护 和 预防性维护。

    维护过程:维护组织,维护报告,维护的事件流,保存维护记录,评价维护活动。

    软件的可维护性:维护人员理解、改正、改动或者改进这个软件的难易程度。

     

     

    对于一个完整的使用软件工程方法开发的软件,应该包括 软件配置 和 硬件配置。

    软件系统本质上是信息处理系统。

     

    学习这门课程主要学习的是软件工程的思想,即软件开发的指导方法。运用抽象和逐步求精设计软件。还要学习好面向对象方法学。

    以后有空再补充。

     

     

     

     

     

     


    最新回复(0)