【网络工程-软件工程概述】


前言

第一章内容

一、第二章软件工程概述

1.软件定义

由以下三部分组成:
(1) 在运行中能提供所希望的功能和性能的指令集(即程序);
(2) 使程序能够正确运行的数据;
(3) 描述程序研制过程、方法所用的文挡。

2.软件的特点:

①软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。
② 软件是通过人们的智力活动,把知识与技术转化成信息的一种产品,是在研制、开发中被创造出来的。
③在软件的运行和使用期间,没有硬件那样的机械磨损、老化问题。
④软件的开发和运行经常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。
⑤软件的开发至今尚未完全摆脱手工的开发方式。
⑥软件的开发费用越来越高,成本相当昂贵。

3.软件的分类

软件依据不同的标准,可划分为不同的分类。

4.软件工程

是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
软件工程准则可以概括为六条基本原理:
(1)用分阶段的生存周期计划严格管理;
(2)坚持进行阶段评审;
(3)实行严格的产品控制;
(4)采用现代程序设计技术;
(5)应能清楚地审查结果;
(6)合理安排软件开发小组的人员。

5.软件危机

指的是软件开发和维护过程中遇到的一系列严重问题。

6.软件工程的基本内容

软件工程学的内容可包括理论、结构、方法、工具、环境、管理、规范等。

7.软件生存周期

一个软件从定义到开发、使用和维护,直到最终被弃用,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生存周期。软件生存周期一般可分为以下阶段:
·问题定义
·需求分析与可行性研究
·设计
·编码
·测试
·运行与维护
软件生存期也可以分为三个大的阶段:
计划阶段、开发阶段和维护阶段。

8.软件开发模型

软件开发模型是跨越整个软件生存周期的系统开发、运作、维护所实施的全部工作和任务的结构框架。瀑布模型即生存周期模型,由B.M.Boehm提出,是软件工程的基础模型。其核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作。采用结构化的分析与设计方法,将逻辑实现与物理实现分开。此外,还有螺旋模型、第四代技术模型、原型模型、构件组装模型、混合模型等软件开发模型。

二、第三章 软件需求

1.可行性分析

1.1系统流程图

系统流程图是描绘物理系统的传统工具。它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件(程序,文件,数据库,表格,人工过程等等)。系统流程图表达的是部件的信息流程,而不表示对信息进行加工处理的控制过程。

1.2系统流程图的功能

1.制作系统流程图的过程是系统分析员全面了解系统业务处理概况的过程,它是系统分析员作进一步分析的依据。
2.系统流程图是系统分析员、管理人员、业务操作人员相互交流的工具。
3.系统分析员可直接利用系统流程图画出可以实现计算机处理的部分。
4.可利用系统流程图来分析业务流程的合理性。

1.3可行性研究的任务

是用最小的代价在尽可能短的时间内确定问题是否能够解决。一般说来,应从经济可行性、技术可行性、运行可行性、法律可行性和开发方案等方面研究可行性。

2.需求分析

2.1需求分析的方法

需求分析方法由对软件的数据域和功能域的系统分析过程及其表示方法组成,它定义了表示系统逻辑视图和物理视图的方式,大多数的需求分析方法是由数据驱动的,也就是说,这些方法提供了一种表示数据域的机制,分析员根据这种表示,确定软件功能及其他特性,最终建立一个待开发软件的抽象模型,即目标系统的逻辑模型。

2.2面向数据流的需求分析方法

结构化分析方法是面向数据流进行需求分析的方法。结构化分析方法使用数据流图DFD与数据字典DD来描述,面向数据流问题的需求分析适合于数据处理类型软件的需求描述。其核心思想是分解化简问题,将物理与逻辑表示分开,对系统进行数据与逻辑的抽象。具体来说,结构化分析方法就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止。重点掌握结合实例画数据流图和定义数据字典。

2.1需求分析阶段的任务

①确定对系统的综合需求
对系统的综合需求主要有:系统功能需求、系统性能需求、运行需求、将来可能提出的需求。
②分析系统的数据需求
③导出系统的逻辑模型
就是在理解当前系统“怎样做”的基础上,抽取其“做什么”的本质,明确目标系统要“做什么”,可以导出系统的详细的逻辑模型。具体做法是:首先确定目标系统与当前系统的逻辑差别;然后将变化部分看作是新的处理步骤,对功能图(一般为数据流图)及对象图进行调整;最后由外及里对变化的部分进行分析,推断其结构,获得目标系统的逻辑模型。通常用数据流图、数据字典和主要的处理算法描述这个逻辑模型。
④修正系统开发计划
在经过需求分析阶段的工作,分析员对目标系统有了更深入更具体的认识,因此可以对系统的成本和进度做出更准确的估计,在此基础上应该对开发计划进行修正。
⑤开发原型系统
使用原型系统的主要目的是,使用户通过实践获得关于未来的系统将怎样为他们工作的更直接更具体的概念,从而可以更准确地提出和确定他们的要求。

2.3需求分析的步骤

1.调查研究;2.分析与综合;3.书写文档;4.需求分析评审

2.1需求分析的原则

其基本原则可概括为:
(1)必须能够表达和理解问题的数据域和功能域;
(2)按自顶向下、逐层分解问题;
(3)要给出系统的逻辑视图和物理视图;

第四章 结构化方法

1.结构化分析模型

(1)定义
结构化分析方法(Structured Method,结构化方法)是一种软件开发方法,一般利用图形表达用户需求,强调开发方法的结构合理性以及所开发软件的结构合理性。
结构是指系统内各个组成要素之间的相互联系、相互作用的框架。结构化开发方法提出了一组提高软件结构合理性的准则,如分解与抽象、模块独立性、信息隐蔽等。针对软件生存周期各个不同的阶段,它有结构化分析(SA)和结构化程序设计(SP)等方法。
结构化分析方法给出一组帮助系统分析人员产生功能规约的原理与技术。它一般利用图形表达用户需求,使用的手段主要有数据流图、数据字典、结构化语言、判定表以及判定树等。
(2)研究对象
结构化设计方法给出一组帮助设计人员在模块层次上区分设计质量的原理与技术。它通常与结构化分析方法衔接起来使用,以数据流图为基础得到软件的模块结构。
(3)模型
分析时期建立软件模型的作用是多方面的,可以通过模型实现由用户需求向系统需求的过渡,并可通过模型获得对系统需求的更具细节性的推论。实际上,分析时期产生的模型还可以被引用到系统设计中去,作为设计前导。 为了开发复杂的软件系统,往往需要从不同角度去构造系统模型。例如,用于描述系统功能组织结构的层次模型,用于描述系统中数据加工流程的数据流模型,用于描述数据实体及其关系的数据关系模型,用于描述系统行为过程的系统状态模型等。
结构化分析过程
结构化分析的步骤如下:
①分析当前的情况,做出反映当前物理模型的DFD;
②推导出等价的逻辑模型的DFD;
③设计新的逻辑系统,生成数据字典和基元描述;
④建立人机接口,提出可供选择的目标系统物理模型的DFD;
⑤确定各种方案的成本和风险等级,据此对各种方案进行分析;
⑥选择一种方案;
⑦建立完整的需求规约。

1.1.DFD(数据流图)

数据流图是SA方法中用于表示逻辑系统模型的一种工具,它从数据传递和加工的角度,以图形的方式来刻画数据流从输入到输出的变换过程。数据流图用于描述系统对数据的加工过程,其图形符号是一些具有抽象意义的逻辑符号。
数据流图也能够方便系统物理模型与逻辑模型之间的转换。

1.2.数据字典

数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素定义的集合。数据字典是结构方法的核心。数据字典有以下几个条目:数据项条目(数据流)、数据流条目(数据流分量)、文件条目(数据存储)和加工条目(处理)。

1.3.数据关系模型(E-R图)

许多应用软件系统往往需要通过数据库来存储数据。数据库系统是独立于软件系统之外的专门系统,因此,在系统建模过程中,数据库需要进行专门的分析与设计。其中,需求分析时期建立的数据库模型称为概念模型。
数据关系模型图也称为 E-R 图,是应用最广泛的数据库分析建模工具。它以现实数据为建模依据,通过从现实数据中抽取数据实体、数据关系和数据属性这三类图形元素,建立数据库的概念模型。

1.4.系统状态模型

状态图使用状态、事件等图形符号来描述系统的行为活动,用以反映系统因某个外部事件的干预而由一个可能的状态转换到另一个状态。
概要设计任务:
①系统分析员审查软件计划、软件需求分析提供的文档,提出最佳推荐方案,用系统流程图,组成系统物理元素清单,成本效益分析,系统的进度计划,供专家审定,审定后进入设计。
②确定模块结构,划分功能模块,将软件功能需求分配给所划分的最小单元模块。确定模块间的联系,确定数据结构、文件结构、数据库模式,确定测试方法与策略。
③ 编写概要设计说明书,用户手册,测试计划,选用相关的软件工具来描述软件结构,结构图是经常使用的软件描述工具。选择分解功能与划分模块的设计原则,例如模块划分独立性原则,信息隐蔽原则等。

2.概要设计过程

概要设计要先进行系统设计,复审系统计划与需求分析,确定系统具体的实施方案;然后进行结构设计,确定软件结构。
软件设计的概念与原则:
①将软件划分成若干独立成分的依据。
②如何表示不同的成分内的功能细节和数据结构。
③如何统一衡量软件设计的技术质量。
其中有几个概念:
1.模块化:就是把程序划分成若干个模块,每个模块具有一个子功能,把这些模块集总起来组成一个整体,可以完成指定的功能,实现问题的要求。
2. 抽象:就是抽出事物的本质特性而暂时不考虑它们的细节。
3. 信息隐蔽: 模块中所包括的信息不允许其它不需要这些信息的模块调用。
4. 信息局部化:是指把一些关系密切的软件元素物理地放得彼此靠近。
5. 模块独立性:是软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中其他的模块接口是简单的。模块独立的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果。
6. 耦合:是对一个软件结构内各个模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,调用模块的方式,以及通过接口的信息。
7. 内聚:标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。

3.结构化设计

   SD方法尤其适用于变换型结构和事务型结构的目标系统。在设计过程中,它从整个程序的结构出发,利用模块结构图表述程序模块之间的关系。是一种软件开发活动,定义实现需求规约所需的软件结构。

3.1.结构化设计的步骤

①评审和细化数据流图;
②确定数据流图的类型;
③把数据流图映射到软件模块结构,设计出模块结构的上层;
④基于数据流图逐步分解高层模块,设计中下层模块;
⑤对模块结构进行优化,得到更为合理的软件结构;
⑥描述模块接口。

3.2.结构化设计原则

—高内聚,低耦合
使每个模块执行一个功能(坚持功能性内聚);
每个模块用过程语句(或函数方式等)调用其他模块;
模块间传送的参数作数据用;
模块间共用的信息(如参数等)尽量少;

3.3.设计目标

依据需求规约,在一个抽象层上建立系统软件模型,包括软件体系结构(数据和程序结构),以及详细的处理算法,产生设计规格说明书. 即:要回答如何解决问题一给出软件解决方案。
结构化设计分为:
(1)总体设计:确定系统的整体模块结构,即系统实现所需要的软件模块以及这些模块之间的调用关系。
(2)详细设计:详细描述模块。

3.4概要设计的方法

面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。面向数据流的设计要解决的任务,就是上述需求分析的基础上,将DFD图映射为软件系统的结构。换句话说,这类设计方法允许把用DFD图表示的系统逻辑模型方便地转换成对于软件结构的初始设计描述。理解基本概念:信息流(包括变换流和事务流)、抽象与逐步求精;模块化与信息隐藏;软件总体结构、数据结构与软件过程。

3.5面向数据结构的分析设计方法:

②Jackson系统开发方法(JSD)
② Warnier方法

第五章 面向对象的分析和设计方法

1.面向对象的基本概念

面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,以什么观点来研究问题并进行求解,以及如何进行系统构造的软件方法学。而面向对象方法是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。面向对象方法的基本思想是,从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式。面向对象的几个重要概念:对象、消息、方法性、继承性、封装性等。

2.面向对象方法的基本特征

①从问题域中客观存在的事物出发来构造软件系统,用对象作为对这些事物的抽象表示,并以此作为系统的基本构成单位。
②事物的静态特征(即可以用一些数据来表达的特征)用对象的属性表示,事物的动态特征(即事物的行为)用对象的服务(或操作)表示。
③对象的属性与服务结合为一体,成为一个独立的实体,对外屏蔽其内部细节(称作封装)。
④对事物进行分类。把具有相同属性和相同服务的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。
⑤通过在不同程度上运用抽象的原则(较多或较少地忽略事物之间的差异),可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与服务,面向对象方法支持对这种继承关系的描述与实现,从而简化系统的构造过程及其文档。
⑥复杂的对象可以用简单的对象作为其构成部分,称作聚合。
⑦对象之间通过消息进行通信,以实现对象之间的动态联系。
⑧通过关联表达对象之间的静态关系。

第六章 代码实现

1.程序的编码

1.1四个方面:

(1)设计语言:
程序设计语言的发展:从最早的机器语言,到汇编语言,到现在的高级语言,从发展的方面看,语言的发展也是越来越规范,简单,代码的复用性越来越高,使得程序员逐渐从复杂的编码中解放出来,而把精力专注在别的事情上面。
(2)设计方法:
程序的设计方法主要采用自顶向下的设计方法,在结构设计的时候,要尽量使用三大结构,即:顺序,选择(分支),循环结构,因为三大结构的组合嵌套能实现所有的程序结构设计,另外,要避免使用GOTO语句,造成多出口的情况,这样会使程序不容易理解。
(3)设计风格:
在设计方法里面,主要是数据,文档,输入输出,语句结构在具体实现时应该有什么注意实现,怎么做更好一点,这部分的内容为我们在动手编写程序时提供了个参考。
(4)复杂性度量:
在编写某一复杂结构时,如果有多种可选方案,但是有时因为这些过程或模块过于复杂,不知道那种方法更好,更适合的时候,可以用复杂性度量来帮助自己选择。另外,在程序编写完成后,也可以用这一准成测试,评价程序。

1.2源代码管理

源代码控制 (又称为版本控制) 是指跟踪和管理代码的更改。源代码控制管理 (SCM) 系统提供代码开发的运行历史,有助于在合并来自多个源的内容时解决冲突。
无论是自己编写简单的应用程序,还是与团队成员协作完成大型软件开发项目,源代码控制都是开发过程中的重要组成部分。借助源代码管理系统,可以跟踪代码更改、查看代码的修订历史记录,并在需要时恢复到项目的之前版本。使用源代码管理系统,可以与团队一起协作编写代码,在准备就绪之前隔离您的工作,并通过识别谁做出了更改以及做出了哪些更改来快速解决问题。源代码管理系统可帮助简化开发流程,并为所有代码提供集中式源代码。

ps:了解Git:Git 是一个开源的分布式源代码管理系统。

第七章 软件测试和维护

1.程序设计语言的特点

程序设计语言是人与计算机交流的媒介。软件工程师应该了解程序设计语言各方面的特点,以及这些特点对软件质量的影响,以便在需要为一个特定的开发项目选择语言时,能作出合理的技术抉择。其特点表现为九个方面:①名字说明;②类型说明;③初始化;④程序对象的局部性;⑤程序模块;⑥循环控制结构;⑦分支控制结构;⑧ 异常处理;⑨独立编译。
源程序文档化:源程序文档化又可从四个方面来阐述,①符号名的命名;②程序的注释;③标准的书写格式;

1.1数据说明

数据说明的次序应当规范化。使数据属性容易查找,也有利于测试,排错和维护。

1.2语句结构

语句构造力求简单、直接,不能为了片面追求效率而使语句复杂化。可从以下几方面注意:
1.使用标准的控制结构;
2.尽可能使用库函数;
3.程序编写首先应当考虑清晰性;
4.注意使用GOTO语句;
输入/输出方法:输入/输出的方式和格式应当尽量作到对用户友善(User Friendly),尽可能方便用户的使用。

1.3程序效率

程序效率是指程序的执行速度及程序占用的存储空间。影响程序效率的因素是多方面的。

1.4面向对象程序设计步骤

面向对象的设计方法一般适用于软件设计和实现阶段。其基本步骤是:①建立软件系统的动态模型;②建立软件系统的静态模型;③实现。

第八章 敏捷开发

敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。
它不是一门技术,它是一种开发方法,也就是一种软件开发的流程,它会指导我们用规定的环节去一步一步完成项目的开发;而这种开发方式的主要驱动核心是人;它采用的是迭代式开发。
特点是:
(1)以人为中心。传统的瀑布模型是以文档为中心,每个阶段要写大量的文档;敏捷开发它只写有必要的文档,或尽量少写文档,敏捷开发注重的是人与人之间,面对面的交流,它强调以人为核心。
(2)迭代。指把一个复杂且开发周期很长的开发任务,分解为很多小周期可完成的任务,这样的一个周期就是一次迭代的过程;同时每一次迭代都可以生产或开发出一个可以交付的软件产品。
它的两种实践方法:
敏捷是一种指导思想或开发方式,那到底采用什么样的流程进行开发,Scrum和XP就是敏捷开发的具体方式了,你可以采用Scrum方式也可以采用XP方式;Scrum和XP的区别是,Scrum偏重于过程,XP则偏重于实践,但是实际中,两者是结合一起应用的。

Scrum开发模型

Scrum包含3个角色、3个工件、5个价值观、5个事件
(1)角色:Product Owner、 Scrum Master、Team
(2)工件:Product Backlog、Sprint Backlog、 Burndown chart
(3)价值观:专注、勇气、公开、承诺、尊重
(4)事件:Sprint、Sprint planning meeting、 Daily standup meeting、Sprint review

第九章 项目计划与管理

软件项目特点

软件产品与其他任何产品不同,它是无形的,完全没有物理属性。其特点表现为:
①智力密集,可见性差;
②单件生产:在特定机型上,利用特定硬件配置,由特定的系统软件或支撑软件的支持,形成了特定的开发环境;
③劳动密集,自动化程度低;
④使用方法繁琐,维护困难;
⑤软件工作渗透了人的因素。

软件管理的功能

软件管理的主要功能包括:
①制定计划:规定待完成的任务、要求、资源、人力和进度等;
②建立组织项目:为实施计划,保证任务的完成,需要建立分工明确的责任机构;
③配备人员:任用各种层次的技术人员和管理人员;
④指导:鼓励和动员软件人员完成所分配的情况。
软件配置管理的过程:软件配置管理SCM除了负担控制变化之外,它还要担负标识单个的SCI和软件各种版本、审查软件配置以保证开发得以正常进行,以及报告所有加在配置上的变化等任务。
关于SCM需要考虑这样一些问题:
(1)采用什么方式标识和管理许多已存在的程序的各种版本?使得变化能够有效地实现。
(2)在软件交付用户之前和之后,如何控制变化?
(3)谁有权批准和对变化安排优先级?
(4)如何保证变化得以正确地实施?
(5)利用什么办法估计变化可能引起的其它问题?
这些问题归结到SCM的五个任务,即标识、版本控制、修改控制、配置审计和配置报告
①标识配置对象
为了控制和管理的方便,所有SCI都应按面向对象的方式命名并组织起来。此时,对象分为基本对象和组合对象,基本对象指在分析、设计、编码或测试阶段由开发人员创建的某个“单位正文描述”,复合对象指由若干基本对象和复合对象组合而成的对象,它由“数据模型”和“模块N”等基本对象组合而成。
每个配置对象都拥有名字、描述、资源列表和实际存在体四个部分。对象名一般为字符串;对象描述包括若干数据项,它们指明对象的类型(例如,文档、程序还是数据)、所属工程项目的标志及变动和版本的有关信息;资源列表给出该对象要求、引用、处理和提供的所有实体,如数据类型、特殊函数等,有时变量也被看作资源;只有基本对象才有实际存在体,它是指向该对象“单元正文描述”的一个指针,复合对象此项取null值。
除了标识配置对象外,还必须指明对象之间的关系,一个对象可标识为另一复合对象的一部分,即此两对象之间存在一个关系。若干关系可定义出对象之间的分层结构。例如: “E-R图1.4” “数据模型”。
②版本控制
配置管理的版本控制主要解决下列问题:
(1)根据不同用户的需要配置不同的系统;
(2)保存系统老版本,为以后调查问题使用;
(3)建立一个系统新版本,使它包括某些决策;
(4)支持两为位以上工程师同时在一个项目工作;
(5)高效存储项目的多个版本。
③修改控制
所谓修改控制,即把人的努力与自动工具结合起来,建立一套机制,有意识地控制软件修改。
④配置审计
确认修改是否已正确实施有两种措施,一种是正式的技术复审,另一种是软件配置审计。
正式的技术复审着重考虑所修改对象在技术上的正确性,复审人员应对该对象是否与其他SCI协调以及在修改中可能产生的疏忽和副作用进行全面的评估。软件配置审计作为一种补救措施,主要考虑下列在正式技术复审中未被考虑的因素:
(1)控制变动命令指出的修改是否都已完成?还另加了哪些修改?
(2)是否做过正式技术复审?
(3)是否严格遵守软件工程标准?
(4)修改过的SCI是否做了特别标记?修改的日期和执行修改的人员是否已经注册?该SCI的属性是否能够反映本次修改的结果?
(5)是否完成与本次修改有关的注释、记录和报告等事宜?
(6)所有相关的SCI是否已一并修改?

Selenium自动化测试

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成.Net、Java、Perl等不同语言的测试脚本。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值