diff --git a/Ch1-4-SoftwareEngineering.tex b/Ch1-4-SoftwareEngineering.tex index b753eaf..4b12c83 100644 --- a/Ch1-4-SoftwareEngineering.tex +++ b/Ch1-4-SoftwareEngineering.tex @@ -186,7 +186,7 @@ \subsection{软件工程工具} 软件工程工具,或软件工具,是用来辅助计算机软件的开发、运行、维护、管理、支持等过程中活动或任务的一类软件。早期的软件开发所用到的引导程序、装入程序、编辑程序等都可以看作是最早的软件工具。在汇编语言和高级程序设计语言出现以后,汇编程序、解释程序、编译程序、连接程序和排错程序构成了早期的软件工具集。在软件工程出现后,支持软件需求分析、设计、编码、测试、维护和管理等活动的软件工具逐渐发展起来,从各个阶段支持着软件开发过程,并且自然而然出现了工具集成的需要,使得各个工具能够协同操作。 - 软件开发环境由软件工具和环境集成机制构成,是支持软件产品开发的软件系统~\cite{张效祥2005计算机科学技术百科全书}。软件开发环境在工具集成的需求中开始萌芽,上世纪70年代中后期出现了软件工具箱(Toolkit)的思想,在软件开发过程中使用成套的多个软件工具。80年代起,软件生产技术的研究和实践得到更多关注,计算机辅助软件工程(CASE)的研究和实践得到开展,并出现了可用的CASE工具和环境,以及支持图形设计方式的第二代软件工具和集成这些工具为一体的软件开发环境。这些环境的特点是采用环境信息库,支持软件开发模型和开发方法,并且集成机制有了较大发展,出现了集成型软件开发环境。80年代后期,美国国家标准与技术研究院(National Institute of Standards and Technology, NIST)/欧洲计算机制造商协会(European Computer Manufacturers Association, ECMA)提出的集成化环境参考模型,被欧洲信息技术研究战略计划的PCTE采用,并于1990年成为ECMA的标准。90年代开始出现支持面向对象方法和技术的软件开发环境。我国“七五”“八五”“九五”科技攻关中研制的青鸟软件开发环境\index{青鸟软件开发环境},是当时先进的软件开发环境,具有较为完善的集成化软件开发支撑能力。 + 软件开发环境由软件工具和环境集成机制构成,是支持软件产品开发的软件系统~\cite{张效祥2005计算机科学技术百科全书}。软件开发环境在工具集成的需求中开始萌芽,上世纪70年代中后期出现了软件工具箱(Toolkit)的思想,在软件开发过程中使用成套的多个软件工具。例如,开发人员使用文本编辑工具编写代码后,使用代码解释或编译工具将源代码转换为操作系统可以识别的代码,进而完成预期的程序动作。文本编辑器和编译器组成了成套使用的软件工具箱。80年代起,软件生产技术的研究和实践得到更多关注,计算机辅助软件工程(CASE)的研究和实践得到开展,并出现了可用的CASE工具和环境,以及支持图形设计方式的第二代软件工具和集成这些工具为一体的软件开发环境。这些环境的特点是采用环境信息库,支持软件开发模型和开发方法,并且集成机制有了较大发展,出现了集成型软件开发环境。例如,通用编程语言Ada自带的编程支持环境APSE提供了编辑界面、编译器、测试器、连接加载器等功能模块,极大提升了开发调试效率。80年代后期,美国国家标准与技术研究院(National Institute of Standards and Technology, NIST)/欧洲计算机制造商协会(European Computer Manufacturers Association, ECMA)提出的集成化环境参考模型,被欧洲信息技术研究战略计划的(Portable Common Tool Environment, PCTE)采用,并于1990年成为ECMA的标准。90年代开始出现支持面向对象方法和技术的软件开发环境。我国“七五”“八五”“九五”科技攻关中研制的青鸟软件开发环境\index{青鸟软件开发环境},是当时先进的软件开发环境,具有较为完善的集成化软件开发支撑能力。进入21世纪,随着软件日益复杂和开发过程的不断演进,仅提供代码编辑、调试能力不足以支撑丰富的软件工程活动。开放式架构的开源集成开发环境以插件的形式提供各类辅助支持,包括在开发环境中提供各类代码静态扫描功能、代码重构功能、代码自动补全和框架自动生成功能等,大大扩展了集成开发环境的能力范围,使之能服务于不同的开发过程活动。例如,最初由IBM公司主导开发的Eclipse开发环境在2001年开源转入非盈利组织Eclipse基金会管理后,开源社区的大量开发者为其开发了众多实用的功能,进而衍生出了MyEclipse、IBM Rational Software Architect等多种工具软件,服务于代码编写、开发框架支持、代码生成、架构设计、配置管理等不同层次和复杂程度的软件开发需求。 21世纪以来,随着互联网和移动通信的普及,软件工具和软件开发环境的用途和种类进一步拓展,出现了支持软件国际化、软件开发协同工作、开源软件库和开源社区环境以及支持互联网、物联网和云计算的基础软件和应用测试支撑工具。软件开发环境不仅支持时间上的松耦合开发,还支持空间上的分布开发,并且开始以协同开发思想为基础,更强调多相关方、多工具、多活动的协同开发支撑,使得软件产品相关的所有利益相关方能在互动的软件开发协作过程中,实现包括需求管理、项目管理、软件部署和运行监控等活动在内的完整的软件生存周期过程支撑。 @@ -272,6 +272,9 @@ \section{结束语} - 综观软件工程的起源和发展,可以发现,软件成为独立存在的人工制品,因此需要一种系统化的方法以及相应的技术,第一使得这种人工制品的功能能满足应用需求,第二使得其开发和生产能高效地完成,第三能提供手段以保证其质量。因此软件工程的发展总是围绕需求、软件方法学和软件开发技术、以及软件质量体系和保障等几个方面展开,这形成了软件工程学科的内涵。 - 但是,软件又和其它人工制品不同,它在需求和表现形式上具有极大变化性,它承载在看上去非常容易修改的代码上,随着软件和物理设备以及人的越来越深度的融合,通过软件作为核心支撑来解决的问题也越来越复杂。这也使得软件工程方法和技术不断面临新的挑战,面对的问题(需求)越来越复杂、软件操作的交互对象越来越多样,人们寄予越来越高的可靠性等等,这些是软件工程方法和技术发展的不竭动力。 +软件工程研究用工程化方法构建和维护有效的、实用的和高质量的软件。其目的有两个方面,其一是提高软件开发效率;其二是保证软件的质量。软件工程从诞生到现在,一直都是围绕软件产品的形态及应用场景的变迁,研究与之相应的与时俱进的系统化开发方法和技术,包括如何根据应用场景发现和确定软件能解决的问题、如何高效地设计和生产软件产品、以及如何确保最终产品达到质量要求等等。 +纵观软件工程的发展历程,可以看出如下一些规律: +\begin{itemize} + \item 寻求从问题领域到软件领域的映射。软件工程过程从需求到设计到编码,实际上就是根据问题领域的任务求解方法和策略,提出可用的软件求解方案,一方面不断从问题领域中抽象出来,另一方面又按照系统框架和可计算的角度不断细化,知道编码实现问题求解的目的,形成需求-设计-编码这样的软件工程过程。比如面向对象方法就通过“对象”将问题领域实体映射为软件领域的实体,并诠释了这个映射的完整过程。软件复用的思想可以大大提高建立问题领域到软件领域的映射的效率,其基本前提是进行领域工程,建立特定领域软件工程各个阶段的可复用。\item 不变的特性有变化的内涵,导致质量关注点不断演化。与其它人工制品相比,软件产品的无形性、嵌入性(或适应性)、易变性是其独有的特点,软件产品这些表面不变的性质,随着软件应用场景的变化却被附上不断变化的内涵,从而使得软件工程需要不断面临新的质量关注点,比如从正确性、可靠性,到可信性、安全性等,这些不断涌现的新的关注点是软件工程一直面临的挑战,也是促进软件工程方法和技术不断发展的动力。随着信息技术的不断发展,软件系统越来越渗透到人类生产生活的各个方面,促使软件未来将置身于基于人机物互联的社会性普适应用场景,软件工程也将继续坚持其与时俱进向前发展的道路。 +\end{itemize} diff --git a/fig1-2/2-2.png b/fig1-2/2-2.png index 862f223..89a302f 100644 Binary files a/fig1-2/2-2.png and b/fig1-2/2-2.png differ