软件工程之软件工程概述

软件工程

什么是软件?

1.软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。

2.程序是按事先设计的功能和性能要求执行的指令序列

3.数据是使程序能正常操纵信息的数据结构

4.文档是与程序开发,维护和使用有关的图文材料

 

软件的特点

1.软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性

2.软件的生产与硬件不同,在它的开发过程中没有明显的制造过程

3.在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题

4.软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性

5.软件的开发至今尚未完全摆脱手工艺的开发方式

6.软件本身是复杂的

          (1)实际问题的复杂性

          (2)程序逻辑结构的复杂性

7.软件成本相当昂贵

8.相当多的软件工作涉及到社会因素

 

发展图示

软件工程之软件工程概述

 

 软件的分类

1.按软件的功能进行

——系统软件

       (1)操作系统

       (2)数据库管理系统

       (3)设备驱动程序

       (4)通信处理程序等

——支撑软件

       (1)文本编辑程序

       (2)文件格式化程序

       (3)磁盘向磁带向数据传输的程序

       (4)程序库系统

       (5)支持需求分析、设计、实现、测试和支持管理的软件

——应用软件

      (1)商业数据处理软件

      (2)工程与科学计算软件

      (3)计算机辅助设计/制造软件

      (4)系统仿真软件

      (5)智能产品嵌入软件

      (6)医疗、制药软件

      (7)事物管理、办公自动化软件

      (8)计算机辅助教学软件

2.按软件规模进行划分

软件工程之软件工程概述

 

3.按软件工作方式划分:

(1)实时处理软件

(2)分时软件

(3)交互式软件

(4)批处理软件

4.按软件服务对象的范围划分

(1)项目软件

(2)产品软件

5.按使用的频度进行划分

(1)一次使用

(2)频繁使用

6.按软件失效的影响进行划分

(1)高可靠性软件

(2)一般可靠性软件

软件的发展阶段

1.程序设计阶段      ——50至60年代

2.程序系统阶段      ——60至70年代

3.程序工程阶段      ——70年代以后

软件工程过程

1.软件规格说明:规定软件的功能及其运行的限制

2.软件开发:产生满足规格说明的软件

3.软件确认:确认软件能够完成客户提出的要求

软件工程过程的特性

1.易理解性

2.可见性

3.可支持性

4.可接受性

5.可靠性

6.健壮性

7.可维护性

8.速度

软件工程定义

Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料

IEEE:软件工程是开发、运行、维护和修复软件的系统方法。 
Fritz Bauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。

软件工程是知道计算机软件开发可维护的工程学

软件工程是为了经济的获得可靠的和能在实际计算机上高效运行的软件而建立和使用的好的工程原则

软件工程三要素:方法、工具和过程

软件工程项目的基本目标

1.付出较低的开发成本

2.达到要求的软件功能

3.取得较好的软件性能

4.开发的软件易于移植

5.需要较低的维护费用

6.能按时完成开发工作,及时交付使用

软件工程之软件工程概述

 

软件生存周期

 

软件生存期  life cycle

1.软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存期

2.软件生存期的六个步骤为:

(1). 制定计划

(2). 需求分析

(3). 设计

(4). 程序编码

(5). 测试

(6). 运行与维护

 

制定计划

1.确定要开发软件系统的总目标

2.给出功能、性能、可靠性以及接口等方面的要求

3.完成该软件任务的可行性研究

需求分析和定义

1.对待开发软件提出的需求进行分析并给出详细的定义

2.编写软件需求说明书或系统功能说明书及初步的系统用户手册

3.提交管理机构评审

4.估计可利用的资源(硬件、软件、人力等)、成本、效益、开发速度

5.制定出完成开发任务的实施计划,连同可行性报告,提交管理部门审批

 

软件设计

1.概要设计——把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应。

2.详细设计——对每个模块要完成的工作进行具体的描述,为源程序编写打下基础。

3.编写设计说明书,提交评审。

程序编码

1.把程序设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”

2.写出的程序应当是结构良好、清晰易读的,且与设计相一致的

软件测试

1.单元测试:查找各模块在功能和结构上存在的问题并加以纠正

2.组装测试:将已测试过的模块按一定顺序组装起来

按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用

运行与维护

1.改正性维护:运行中发现了软件中的错误需要修正

2.适应性维护:为了适应变化了的软件工作环境,需做是适当的变更

3.完善性维护:为了增强软件的功能需要做变更

 

 

软件开发模型

瀑布模型

软件工程之软件工程概述

 

1.思想:

           (1).从制作时间上按工序把问题化简,将功能实现与制作分开便于分工协作

2.优点:

          (1).奠定了软件工程方法的基础

          (2).流水依赖,便于分工协作

          (3).推迟物理实现,易于修改文档,有复审质量保证

3.不足:

          (1).与用户见面晚,成功率低,一般为25%

4.适用范围:

          (1).适用与系统要求明确的系统,各种应用软件的开发均可使用

5.开发方法:

           (1).遵循软件生命周期的划分,明确规定每个阶段的任务,上一阶段完成确定的任务后就产生一定格式的文档给下一阶段,不同阶段的任务一般有不同级别的软件人员承担

6.开发特点:

           (1).时间的顺序性和依赖性

           (2).推迟实现的观点

           (3).质量保证的观点

 

b模型软件工程之软件工程概述

 

快速原型模型

软件工程之软件工程概述

 

软件工程之软件工程概述

快速原型的开发途径有3种:

(1):仅模拟软件系统的人机界面和人机交互方式。

(2):开发一个工作模型,实现软件系统中重要的或容易产生误解的功能。

(3):利用一个或几个类似的正在运行的软件向用户展示软件需求中的部分或全部功能。

 

增量模型

软件工程之软件工程概述

 

渐增模型

原型(渐增型)

1.基本思想

允许从部分需求出发,先建立一个不全面的系统通过测试这个系统,进一步使系统扩充和完善

2.优点:

开发的始终开发人员和用户都共同参与,有问题可以随时修改.从而很好的满足了用户的需求

3.适用范围:

适用与那些知识型软件系统的开发

4.特点:

(1).从整体结构上不如瀑布型清晰;

(2).软件的文档不如瀑布型的划分严格;

(3).周期长,成本高;

(4).与用户见面快,开发效率高

软件工程之软件工程概述

 

螺旋模型

1.螺旋模型沿着螺线旋转,在四个象限上分别表达了四个方面的活动,即:

(1).制定计划——确定软件目标,选定实施方案,弄清项目开发的极限条件

(2).风险分析——分析所选方案,考虑如何识别和消除风险

(3).实施工程——实施软件开发

(4).客户评估——评价开发工作,提出修正建议

软件工程之软件工程概述

 

 

喷泉模型

——迭代

     ——重复

     ——演进

.无间隙

     .各阶段间无明显界限

软件工程之软件工程概述

 

变换模型

1.思想:

            从软件需求的形式规格说明出发,经过一系列的程序变化、得到最终结果。

2.特点:

            有严格的数学理论和形式化的技术支持,但目前在研究和实验阶段,不能实用

喷泉型:
            认为软件的各个周期是相互重叠的和多次反复的

螺旋型:

            多次原型反复并增加风险评估的开发模型

软件工程之软件工程概述

 

软件开发方法和软件开发工具

软件开发方法的概念

1.明确的工作步骤:

                              研制一个软件系统要考虑并解决许多问题,如果同时处理这些问题,将会束手无策或造成混乱。正确的方式是将这样的问题排好先后次序,每一步集中精力解决-一个问题。像为加工机械产品规定-道道工序那样,软件方法也提出了处理问题的基本步骤,这包括每一步的目的、产生的工作结果、需具备的条件以及要注意的问题等。
 

2.具体的描述方式:

                              工程化生产必须强调文档化,即每人必须将每一步的工作结果以一定的书面形式记录下来,以保证开发人员之间有效地进行交流,也有利于维护工作的顺利进行。软件方法规定了描述软件产品的格式,这包括每- -步应产生什么文档、文档中记录哪些内容、采用哪些图形和符号等。
 

3.确定的评价标准

 

软件开发的基本方法

1.结构化方法:

                       结构化方法是较为传统的软件开发方法。

2.面向对象方法:

                          面向对象方法是针对结构化方法的缺点,为了提高软件系统的稳定性,可修改性和可严重性而逐渐产生的。

      面向对象方法的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程,将客观世界中的实体抽象为问题域中的对象。它主要有以下几个特点:
      (1)认为客观世界是由各种对象组成的,任何事物都是对象。
      (2)把所有对象都划分为各种对象类,每个类定义一组数据和一组方法。

      (3)按照子类与父类的关系,把若干对象类组成一一个层次结构的系统。

      (4)对象彼此之间仅能通过传递消息相互联系。
      面向对象方法的主要优点是使用现实的概念抽象地思考问题,从而自然地解决问题,保证软件系统的稳定性和可重用性以及良好的维护性。但是面向对象方法也不是十全十美的,在实际的软件开发中,常常要综合地应用结构化方法和面向对象方法。

 

软件开发工具 

软件开发工具也是软件工程的主要内容之一。软件开发工具为软件开发方法提供自动的或半自动的软件支撑环境。
 

 

传统软件工程和面向对象软件工程

传统的软件工程

                              传统的软件工程采用瀑布模型作为软件工程的基本模型,把软件开发和运行过程划分为6个阶段:软件计划、需求分析、软件设计、程序编码、软件测试、运行和维护等,强调各阶段的完整性和先后顺序,根据不同阶段的工作特点,运用不同的手段完成各阶段的任务。

面向对象的软件工程

                                      面向对象方法出现之前的各种软件工程称为传统的软件工程方法,它是一种结构化的软件工程方法,把面向对象方法在软件工程领域中的全面运用称作面向对象的软件工程方法。

 

1.面向对象方法的基本思想
                         面向对象方法的基本思想是从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式。开发-一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。面向对象方法强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。因此,面向对象方法可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。
                        面向对象方法学的出发点和基本原则是:尽可能模拟人类所习惯的思维方式,使开发软件的方法和过程尽可能接近人类认识世界、解决问题的方法和过程,即使描述问题的问题域与实现解法的求解域在结构.上尽可能一致。
                      面向对象的软件工程包括面向对象的分析、面向对象的设计、面向对象的编程和面向对象的测试。

 2.面向对象方法的主要优点
                     面向对象方法在某种程度上可以克服传统方法学的缺陷,缓解软件危机,它具有许多特点,主要表现在以下几点。

             (1).符合人们通常的思维方式

                面向对象方法强调把问题域的概念直接映射到对象之间的接口,符合人们通常的思维方式,减少了结构化方法从问题域到分析阶段的映射误差。

             (2).高度连续性

                面向对象方法从分析到设计再到编码采用一直的模型表示,后一阶段可以直接利用前一阶段的工作成果,弥合了结构化方法从数据流图到模块结构图转换的鸿沟,减少了工作量并降低映射误差。

             (3).重用性好

                面向对象方法具有的继承性和封装性支持软件复用,并易于扩充,能较好地适应复杂大系统不断发展和变化的要求。

             (4).可维护性好

                在客观事件以及作为它的映射的软件系统中,实体的结构是相对稳定的。面向对象方法通过吧属性和服务封装在“对象”中,当外部功能发生变化时,保持了对象结构的相对稳定,使改动局限于一个对象的内部,减少了改动所引起的系统波动效应。