软件工程概述(下)

4、软件工程原理

(1)什么是软件工程?

  • 软件工程是指导计算机软件开发和维护的一门学科。
  • 采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。

上面是从学科和应用两个层面对软件工程的定义,这就表明软件工程不但是一门学科,而且是用于解决软件开发和维护实际问题的一系列概念、原理、技术和方法的集合。

以下是NATO和IEEE给出的软件工程定义:

  • NATO(1968):为了经济地获得可靠的且能在实际机器上运行的软件,而建立和使用完善的工程原理。
  • IEEE(1993):1)把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,即把工程应用于软件;2)研究1)中的途径。软件工程是开发、运行、维护和修复软件的系统方法。

(2)软件工程的本质特性

从前面的定义可以看出,软件工程从本质上就是为了解决软件危机。具体可总结为如下几条:

  • 软件工程关注于大中型程序的构造。大中型程序相对比较复杂,因此有必要采用系统的工程理论与方法,规范软件的开发和维护过程,以保障软件的质量。
  • 软件工程的中心课题是控制复杂性。软件所解决的问题十分复杂,以致于不能把问题作为一个整体通盘考虑,只能采用模块化分解的方法解决。模块化方法并不能降低问题的整体复杂性,但是却使它变成可以管理的。许多软件的复杂性主要不是由问题的内在复杂性造成的,而是由必须处理的大量细节造成的。

  • 提高开发软件的效率。现实世界在不断的变化,软件为了不被很快的淘汰,必须随着所模拟的现实世界一起变化。如何更快的适应需求的变化,是软件工程面临的重要挑战。

  • 注重团队合作。软件处理的问题十分庞大,必须许多人协同工作才能解决这类问题。纪律是成功地完成软件开发项目的一个关键,良好的团队合作有利于项目的成功。软件开发人员必须学会合作与沟通,才能保证软件的质量和开发效率。

  • 充分了解用户需求。在软件工程领域中是由具有一种文化背景的人为另一种文化背景的人创造产品。缺乏应用领域的相关知识,是软件开发项目出现问题的常见原因。软件工程师不仅缺乏应用领域的实际专业知识,还缺乏该领域的文化知识。因此有必要通过访谈、阅读书面文件等方法了解用户组织的工作流程,然后用软件实现。 

(3)Boem软件工程原理

著名的软件工程专家巴利.玻姆(Barray W. Boehm)总结了七条软件工程基本原理并指出这七条原理是保证软件产品质量和开发效率的原理的最小集合。

  • 用分阶段的生命周期计划严格管理
  • 坚持进行阶段评审
  • 实行严格的产品控制
  • 采用现代程序设计技术
  • 结果应能清楚地审查
  • 开发小组的人员应少而精
  • 不断改进软件工程实践

注:巴利.玻姆(1935-2022)是一位美国计算机科学家和软件工程师,曾在多家知名机构工作,包括IBM、美国国家航空航天局和南加州大学(USC)。他对软件工程领域做出了重大贡献(开发软件工程经济学模型、螺旋模型等),并因其工作获得了许多奖项,包括软件工程研究所的史蒂文斯奖和IEEE哈兰·D·米尔斯奖。详细介绍可参阅百度百科

(4)二八定律(帕雷托法则)

二八定律是一种经济学原理,也被称为帕累托定律。该定律认为,在一个系统中,大约80%的结果是由20%的原因所决定。这个原则也可以应用于软件工程领域,即:

  • 对软件项目进度和工作量的估计:一般主观上认为已经完成了80%的,往往实际上只完成了20%;
  • 对程序中存在的问题的估计:80%的问题往往存在于20%的程序之中;
  • 对模块功能的估计:20%的模块实现了80%的功能;
  • 对人力资源的估计:20%的人解决了软件中80%的问题;
  • 对投入资金的估计:企业信息系统中80%的问题,可以用20%的资金来解决。

注:帕累托定律又称帕累托分析法或巴雷托分析法、柏拉图分析、主次因分析法 、ABC分析法、分类管理法、物资重点管理法、ABC管理法、abc管理、巴雷特分析法,平常我们也称之为“80对20”规则是由意大利经济学家维尔弗雷多·帕累托首创的。帕雷托通过长期的观察发现:美国80%的人只掌握了20%的财产,而另外20%的人却掌握了全国80%的财产,而且很多事情都符合该规律。于是他应用此规律到生产上。详细介绍可参阅百度百科

(5)软件工程三要素

过程、方法和工具是软件工程的三个要素。

  • 过程:软件工程过程是一系列有序的步骤和活动,用于支持软件开发各个环节的控制和管理。过程包括需求分析、设计、编码、测试、部署和维护等阶段。
  • 方法:软件工程方法是指用于解决软件开发过程中各个阶段的问题和挑战的技术和工具。常见的软件工程方法包括结构化分析和设计(SSAD)、面向对象分析和设计(OOAD)、敏捷开发等。
  • 工具:软件工程工具是指为软件开发方法提供自动的或半自动的软件支撑环境。常见的软件工程工具包括集成开发环境(IDE)、代码版本控制系统、自动化测试工具等。

无论是过程、方法,还是工具,其最终目标都是提高软件的质量。

注:后续文章的内容将以过程(即:软件生存期经历的各个主要阶段)为主线,介绍各阶段工作中用到的方法和工具。

(6)软件生存期模型

为了更好的理解软件工程过程,软件工程领域的专家们把软件比作生物体,就像其他生物体一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程,我们称其为软件的生命周期(或生存期)

通常我们把软件生存期的活动划分为以下6个阶段:

  • 问题定义与可行性研究:弄清楚“要解决的问题是什么?该问题有行得通的解决办法吗?”
  • 需求分析:弄清楚“目标系统必须做什么?”,确定系统必须具备的功能、性能要求及其他需求。
  • 软件设计:“应该如何解决这个问题?”。软件设计包括概要设计和详细设计。

  • 软件实现:如何把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”。程序应正确、容易理解、容易维护。

  • 软件测试目的就是通过各种测试使软件达到预定要求。

  • 软件运行与维护:通过各种维护使系统持久地满足用户需要。通常包括改正性、适应性、完善性和预防性维护。

对这六个阶段的工作可以采用不同的组织过程,这便是软件生存期模型,也称作软件生命周期模型或软件过程模型。典型的软件生存期模型包括:

  • ​​​​​瀑布模型1970年 由W.Royce提出的生命周期模型。20世纪80年代之前,瀑布模型一直是唯一被广泛采用的生命周期模型。现在它仍然是软件工程中应用得最广泛的过程模型。传统软件工程方法学的软件过程,基本上可用瀑布模型来描述。

瀑布模型是传统的开发策略,软件过程分为若干个阶段,阶段间具有顺序性、依赖性,它的目的是为了推迟实现。随着瀑布模型的应用推广,人们发现为了解决软件维护过程中发现的问题,还需要对前面的工作进行改进,同时每一个阶段都会为前一阶段反馈问题。于是就有了下图所示的改进后的瀑布模型 

瀑布模型的优点是结构清晰、易于理解和管理,适用于较小规模的项目。它适合需求明确、不易变动的项目,且开发人员能够准确预估项目进度和资源需求。

然而,瀑布模型也存在一些缺点。由于各个阶段的边界严格,一旦某个阶段出现问题或变动,可能会导致整个项目延期或失败。另外,瀑布模型对于客户需求变化较为敏感,难以应对快速变化的市场需求和技术变革。

因此,在实际项目中,瀑布模型通常会与其他模型相结合,如迭代模型或敏捷开发模型,以弥补其局限性,并提高软件开发的灵活性和适应性。

  • 原型模型:原型模型是基于这样一个假设,即“在项目开发的初始阶段,对软件的需求认识常常不够清晰,往往需要做多次修正才能使得项目取得成功。第一次只是试验开发,其目标只是在于探索可行性,弄清软件需求。下一次则是在此基础上获得较为满意的软件产品。”。

原型模型属于演化模型。每一次演化都会完成一个原型系统,它是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品的一个子集。原型模型的工作流程如下图所示:

  • 增量模型把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。其工作流程如下图所示:

在增量模型中,软件开发按照一系列的增量进行,每个增量代表软件系统的一个部分。每个增量开发完成后,都可以独立运行,并且可以在此基础上进行下一轮的增量开发。

增量模型的优点是可以快速地开发出可用的软件功能,并且可以及时获取用户的反馈。同时,增量模型也可以降低开发过程中的风险,因为每个增量都经过了测试和验证,可以及时发现和解决问题。

然而,增量模型也存在一些局限性。首先,由于每个增量都需要进行独立的开发和测试,因此可能增加开发成本和时间。其次,增量模型可能不适用于一些需要一次性交付完整功能的项目。

总的来说,增量模型是一种逐步递增地开发软件的方法,可以快速地获取软件功能和用户反馈,但也需要权衡开发成本和时间的局限性。

  • 螺旋模型:1988年,巴利.玻姆(Barray W. Boehm)正式发表了软件系统开发的“螺旋模型”,它将瀑布模型和快速原型模型结合起来,强调了风险分析,使用原型及其他方法来尽量降低风险。其工作流程如下图所示:

如图所示,螺旋模型是一种迭代的增量模型,它将软件开发过程划分为多个循环,每个循环包含四个主要阶段:计划、风险分析、工程构建和评审。每个循环都是前一个循环的增量,并且每个循环的目标是针对风险进行评估和缓解,以及开发软件的一部分功能。

螺旋模型的主要特点是强调风险管理和迭代开发。在每个循环中,团队会对风险进行评估,并根据评估结果制定相应的风险缓解计划。这种风险驱动的方法可以在项目早期就识别和解决潜在的问题,从而降低了项目失败的风险。

螺旋模型的优点包括能够灵活应对需求变化、提高软件质量、降低开发成本和缩短开发时间。然而,螺旋模型也有一些缺点,比如较高的复杂性和管理难度。

总的来说,螺旋模型适合于大型和复杂的软件项目,特别是在风险较高的情况下。它可以帮助项目团队更好地管理和控制项目风险,并以迭代的方式逐步开发和交付软件功能。

  • 喷泉模型:是1990年,B.H.Sollers J.M.Edwards 提出的一种面向对象方法模型,由于它以喷泉的形态来比喻软件开发的过程,因此又称喷泉模型。其工作流程如下图所示:

喷泉模型认为软件开发是一个持续不断的循环过程,类似于喷泉的水源不断循环往上冒泡、落下的过程。喷泉模型强调了软件开发过程中的迭代和持续改进。

在喷泉模型中,软件开发过程被划分为多个阶段,包括需求收集、面向对象分析、面向对象设计、编码、集成测试、部署和维护等阶段。喷泉模型是一种以用户需求为动力,以对象为驱动的模型。每个阶段都是一个循环,每次循环都会有新的需求被收集和分析,然后进行设计、编码、测试和部署。

喷泉模型的主要特点包括以下几点:

a.迭代循环:软件开发是一个不断迭代的过程,在每个阶段都会有新的需求被引入和分析,不断推进软件开发的进程。

b.持续改进:喷泉模型强调了软件开发过程中的持续改进,每次循环都可以对前一次循环的结果进行反馈,不断改进软件的质量和性能。

c.高度交互性:喷泉模型鼓励开发团队和用户之间的紧密合作和交流,以确保软件的需求和用户的期望能够得到充分的理解和满足。

喷泉模型的优点在于能够快速适应需求变化和不断改进软件的质量和性能。然而,它也存在一些挑战,包括对开发团队的要求较高、开发过程中的交互和反馈需要及时和有效等。因此,在使用喷泉模型时需要注意灵活性和沟通效率的问题。

  • 统一模型:即统一软件开发过程(Rational Unified Process,简称RUP),由IBM的Rational Software Corporation提出并推广。RUP基于面向对象的软件开发方法,强调迭代和适应性,提供了一套可重用的软件开发过程模板和指导原则,以帮助开发团队在软件开发的各个阶段进行有效的管理和控制。其工作流程如下图所示:

如图所示,RUP将软件生命周期分解为四个阶段:初始阶段、细化阶段、构造阶段和交付阶段。 RUP的核心理念是将软件开发过程分解为一系列迭代的阶段,每个阶段都包括业务建模、需求获取、分析与设计、实现、测试和部署等活动且会综合考虑配置与变更管理、项目管理及环境因素。每个迭代周期都会生成一个可运行的软件版本,通过不断反馈和验证来逐步完善系统。

RUP具有以下特点:

a.迭代和增量: RUP将软件开发过程分解为若干个迭代周期,每个周期都会增加新的功能或改进现有功能。这种迭代和增量的开发方式有助于逐步完善系统,并在早期发现和解决问题。

b.面向体系结构: RUP强调软件系统的整体架构,通过定义和建立适合项目需求的体系结构,提高软件系统的可维护性、可扩展性和可重用性。

c.风险驱动: RUP认为项目中存在潜在的风险,并提供了一套风险管理的方法和实践。通过对风险的识别、评估和控制,能够及时应对和解决问题,确保项目的成功。

d.适应性和可定制性: RUP提供了一套灵活的工具和方法,使开发团队能够根据具体项目的需求进行定制和适应,从而提高开发效率和质量。

RUP的优点是能够提高软件开发的可控性和可重用性,能够快速响应需求的变化,并且能够提供详细的开发指导和文档支持。同时,RUP也有一些缺点,例如需要较大的人力和时间投入,以及对团队的组织和管理能力要求较高。

总的来说,RUP是一种灵活、可扩展的软件开发方法论,通过迭代和适应性的方式来管理软件开发过程,提高开发团队的协同效率和软件质量。

  • 敏捷过程:敏捷软件开发方法其实不是一个具体的过程,而是一个涵盖性术语,用于概括那些应需而生的具有类似价值观的软件开发方法。

敏捷方法的主要特点包括以人为核心、循环迭代、响应变化等,高质量地快速交付客户满意的工作软件。

敏捷方法的价值观集中体现在下图所示的敏捷宣言中。

敏捷宣言是由一群软件开发领域的专家于2001年在美国犹他州的一次会议上共同制定的。当时,这些专家对于传统的软件开发方法感到不满,认为其注重过程和文档,而忽视了快速响应变化和实际交付价值的重要性。因此,他们决定制定一份新的宣言来推动一种更灵活、快速和高效的软件开发方法。

敏捷宣言的核心内容如下:

a.个体和互动胜过过程和工具(Individuals and interactions over processes and tools)

b.可以工作的软件胜过详尽的文档(Working software over comprehensive documentation)

c.客户合作胜过合同谈判(Customer collaboration over contract negotiation)

d.响应变化胜过遵循计划(Responding to change over following a plan)

值得注意的是,在宣言的最后提到:“That is, while there is value in the items on the right, we value the items on the left more.”(虽然右面的内容也具有价值,但我们认为左面的内容具有更大的价值)。这也充分体现了一种继承发展的创新理念:推出新的方法,并不意味着必须要完全推倒旧的方法,而是要通过创新来弥补过去的不足,继往开来,创新发展。

敏捷宣言强调了个体和团队之间的交流与合作,以及快速交付可用的软件,与客户进行积极的合作,并灵活地响应变化。这些原则成为了敏捷开发方法的核心理念,并得到了广泛的应用和推广。

代表性的敏捷开发方法包括:极限编程(XP),特征驱动软件开发(FDD),动态系统开发( DSDM),自适应软件开发( ASD),SCRUMCrystal等。

扩展阅读:

什么是极限编程 • Worktile社区

极限编程_百度百科

Scrum(迭代式增量软件开发过程)_百度百科

(7)软件工程方法学

软件工程方法学是指在软件开发过程中采用的一种系统化的方法和指导原则。它包括了一系列的开发活动、工具、技术和过程,旨在提高软件开发的效率和质量。软件工程方法学主要分为传统方法学和面向对象方法学两大类。

  • 传统方法学生命周期方法学,或结构化方法。它强调把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成各个阶段的任务。采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务。
  • 面向对象方法学传统方法把数据和对数据的操作人为地分离成两个独立的部分,要么面向数据,要么面向对数据的操作。而客观世界是由对象构成的,对象是一个属性(数据)和对数据操作的封装体。数据和对数据的处理原本是密切相关的,因此面向对象方法是把数据和对数据的操作紧密结合起来的方法

有关这两类方法涉及的核心思想、方法、过程及工具,我们会在后续的章节里作详细介绍。

(8)软件工程工具                                                                                                   

“子贡问为仁。子曰:‘工欲善其事,必先利其器。居是邦也,事其大夫之贤者,友其士之仁者。’”

                                                                                                                    --《论语·卫灵公》

无论采用什么样的方法学,都需要用到合适的工具,才能事半功倍。我们前面提到,软件工程的本质特性之一就是要提高软件开发的效率,而要提高效率,其中一个重要的途径就是软件工程工具的使用。

  • 从狭义上理解,软件工程工具是指用于辅助软件生命周期过程的基于计算机的工具,其目的在于将重复并明确定义的动作自动化,减少了软件工程师的认知负担,使软件工程师可以集中在开发过程的创造性方面。 比如各种IDE(Integrated Development Environment,集成开发环境)、测试工具等。
  • 从广义上理解,软件工程工具还应包括在软件开发或建模过程中用到的各种图表,如数据流图、E-R图、思维导图、甘特图、流程图等等。

(9)关于软件的质量

无论是采用什么方法、用到什么工具,其最终目标都是为了提高软件的质量,这也是软件工程的目标。对于质量,不同的人或组织对其有不同的定义,以下是一些经典的定义:

  • 对于Philip Crosby,质量就是“遵从用户需求”。
  • Watts Humphrey认为质量就是“达到适合使用的卓越层次”。IBM发明了术语“市场驱动的质量”,它基于达到全面的客户满意,关于组织质量的Baldrige准则使用了一个类似的短语“客户驱动的质量”,将客户满意作为主要的考虑。
  • ISO9001:2000中,质量被定义为“一组内在特征满足需求的程度”。

注:a. Philip Crosby(菲利普·克罗斯比1926-2001),是一位美国商人和质量管理专家。他最为人所知的是他在质量管理领域的工作和他的“零缺陷”哲学,该哲学强调第一时间把事情做好以防止错误和缺陷的重要性。详细可参见克劳士比管理哲学_360百科b.‌Watts S. Humphrey‌(1927-2010)被誉为“软件质量之父”。他在软件工程领域的影响深远,特别是在软件质量控制和软件过程改进方面做出了巨大贡献。Humphrey的职业生涯主要集中在软件工程研究所(SEI),致力于推广软件过程的改进和优化。他的工作主要集中在软件开发的质量控制上,强调通过遵循高度规范的过程来开发出高质量的软件产品。Humphrey提出了一种软件成熟度模型(CMM),这是一种集中了软件开发优秀实践的模型,被广泛应用于美国军工、印度软件外包公司以及中国的软件公司。他的工作不仅影响了软件开发的方法和实践,还深刻影响了软件质量管理的理念和实践。详细可参见软件质量之父——Watts Humphrey_工作c.ISO9001:2000质量管理体系是ISO(国际标准化组织)推行的一种国际通用的质量管理标准,旨在帮助组织建立、实施、维护和改进质量管理体系,以确保产品或服务的质量和性能符合相关要求。详细参见iso质量体系认证_百度百科

5、软件工程的相关规范

(1)软件工程知识体系

这里的软件工程知识体系,我们以IEEE发布的《软件工程知识体系指南》为参照,最新的版本是3.0,即2014年发布的《SWEBOK v3.0》。在该版本的指南中,将软件工程知识体系划分为以下15知识领域。

  • 软件需求(Software Requirements)
  • 软件设计(Software Design)
  • 软件构造(Software Construction)
  • 软件测试(Software Testing)
  • 软件维护(Software Maintenance)
  • 软件配置管理(Software Configuration)
  • 软件工程管理(Software Engineering Management)
  • 软件工程过程(Software Engineering Process)
  • 软件工程模型和方法(Software Engineering Models and Methods)
  • 软件质量(Software Quality)
  • 软件工程专业实战(Software Engineering Professional Practice)
  • 软件工程经济学(Software Engineering Economics)
  • 计算机基础(Computing Foundations)
  • 数学基础(Mathematics Foundations)
  • 工程基础(Engineering Foundations)

上面以红色标注的内容,在我们后面都会介绍到。有关SWEBOK的进一步介绍,可参考:Software Engineering Body of Knowledge (SWEBOK)

(2)软件项目的开发流程

我们开发软件大多是以项目的形式进行的,作为软件项目,其组织是按一定的流程进行的。

如图所示,软件项目的开发流程主要包括:

  • 招投标:由客户(业主)根据企业自身的需求情况,制定招标文件。委托招标公司进行招标或投标邀请,软件企业向招标公司报名,购买招标文件,完成投标文件的制作。经过招投标评审流程,确定中标企业。客户与中标企业签订软件开发合同。

  • 调研与需求分析:通过深入了解和分析,组织项目开发团队,制定软件开发计划,进行任务分解、人员分配、制定开发进度等。开发者获取用户需求,编写软件需求规格说明书文档。

  • 软件设计:首先需要对软件系统进行概要设计,包括系统的基本处理流程、系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等。在此基础上,进行软件系统详细设计,描述实现具体模块所涉及到的主要算法流程、数据结构、类的层次结构及调用关系。

  • 编码与测试:根据详细设计的具体要求,编写程序,实现对目标系统的功能、性能、接口、界面等方面的要求。测试是项目研发中一个相当重要的步骤,测试编写好的系统。发现软件中存在的问题。

  • 软件交付:在软件测试证明软件达到要求后,软件开发者应向用户提交开发的程序、数据库的数据字典、用户安装手册、用户使用指南、需求报告、设计报告、测试报告等双方合同约定的产物。

  • 验收:用户进行确认验收,查看软件是否完成合同所规定的各项任务。当软件项目较大时,用户往往聘请第三方软件测试机构进行验收测试。

  • 运行维护:根据用户需求的变化或环境的变化,对应用程序进行全部或部分的修改。

(3)软件工程的标准化

软件工程的标准化主要关注的是软件过程(即:软件生存周期过程)标准化,也就是在软件生存期各个阶段的工作均建立标准或规范。

2014年发布的国家标准系统与软件工程 软件生存周期过程GB/T 8566-2022为软件生存周期过程规定了一个公共框架,给出了软件系统、组织和项目、生存周期及过程等相关概念和应用描述,并将软件生存周期过程划分为协定过程组(含2个过程)、组织的项目使能过程组(含6个过程)、技术管理过程组(含8个过程)、技术过程组(含14个过程)4个过程组及对应过程

  • 标准的类型:我们可根据标准编号前的代码来区分标准的类型,根据标准的适用范围可将其分为国际标准、国家标准、行业标准、企业规范和项目规范

a.国际标准由国际联合机构制定和公布,提供各国参考的标准。

比如在业界有着广泛代表性和权威性的国际标准化组织(ISO),它所公布的标准在世界范围有较大的影响。ISO建立了“计算机与信息处理技术委员会”,简称ISO/TC97,专门负责与计算机有关的标准化工作。这一标准通常冠有ISO字样。

b.国家标准:顾名思义,是由国家制定和公布的标准,用于指导国内各个行业的工作。常见的代码包括:

GB :中华人民共和国国家技术监督局公布实施的标准,简称“国标”。
ANSI :美国国家标准协会。
FIPS NBS :美国商务部国家标准局联邦信息处理标准。
BS :英国国家标准。
DIN :德国标准协会。
JIS :日本工业标准。

c.行业标准:由国家或行业协会等机构制定的针对特定行业的标准。常见的代码包括:

IEEE :美国电气与电子工程师学会。有个软件标准分技术委员会,负责软件标准化活动。
GJB :中华人民共和国国家军用标准。适合于国防部门和军队使用的标准。
DOD_STD :美国国防部标准,适用于美国国防部门。
MIL_S:美国军用标准,适用于美军内部。

d.企业规范和项目规范:一些大型企业或公司,由于软件工程工作的需要,制定适用于本部门的规范。有时,软件开发项目组织会针对一些特定的项目制定、为该项目专用的软件工程规范。 

  • 中国的软件标准:1983年起,我国已陆续制定和发布了20多项国家标准。

 a.基础标准:描述软件工程的一些概念、术语等。常见的基础标准:软件工程术语、软件生命周期过程、软件工程标准分类法、程序构造及其表示法的约定、计算机系统配置图符号及其约定、软件开发规范、软件维护指南等。

b.文档标准:主要是描述软件开发过程中产生的一些文档。常见的文档标准:计算机软件文档编制规范、软件文档管理指南等。

c.管理标准:管理标准主要是描述软件开发过程中用来控制软件质量等的一些文档。常见的文档标准:计算机软件配置管理计划规范、计算机软件质量保证计划规范、计算机软件可靠性和可维护性管理等。

有关中国的软件标准,可进一步参考全国信息技术标准化网 - 信标委NITS

  •  ISO 9000标准及软件质量认证

ISO 9000国际标准发源于欧洲经济共同体,已有70多个国家在企业中采用和实施这一系列标准。我国发布了与其相应的质量管理国家标准系列GB/T 19000(现行的标准是:GB/T 19000-2016)。ISO 9000系列标准适用领域广阔,涵盖硬件、软件、流程性材料和服务等。

a.强调质量并非在产品检验中得到,而是形成于生产的全过程。

b.为把握产品的质量,ISO 9000-3要求“必须使影响产品质量的全部因素在生产全过程中始终处于受控状态”。

c.ISO 9000标准要求证实“企业具有持续提供符合要求产品的能力”。

d.ISO 9000标准强调“质量管理必须坚持进行质量改进”。

详细介绍可参考GB/T19000—ISO9000系列标准_百度百科

(4)软件文档的作用与规范

作为软件的组成部分,文档具有重要的作用。 

  • 提高软件开发过程的可见度:可以把开发过程中发生的事件以某种可阅读的形式记录在文档中。作为检查软件开发进度和开发质量的依据,实现对软件开发的过程管理。
  • 提高开发效率:对各个阶段的工作进行周密思考。在开发早期发现错误和不一致性,便于及时加以纠正。同时记录开发过程中有关信息,便于协调以后的软件开发、使用和维护。

  • 提供运行、维护和培训相关信息:便于管理人员、开发人员、用户之间的协作、交流和了解。使软件开发活动更科学、更有成效。便于用户了解软件的功能、性能等各项指标。

为了规范软件开发过程的文档,国家标准局在19881月发布了计算机软件开发规范软件产品开发文件编制指南等,2006年重新修订发布了计算机软件文档编制规范GB/T 8567-2006),该标准对软件开发过程中涉及的25种文档制定了相应的规范。详细可参见在线预览|GB/T 8567-2006

(5)软件知识产权

知识产权就是人的智力劳动成果所依法享有的权利,是一种无形财产。包括两大部分:工业产权和版权。

  • 工业产权是指涉及工业领域的创造性智力劳动成果享有的专有权利,是知识产权的主要部分。包括专利权、商标权等;
  • 版权也称著作权,是指作者对其创作的作品依法享有的专有权利,包括发表权、署名权、修改权等。

计算机软件与一般知识产品相比,具有更为突出的知识密集和智力密集的特点,而且难开发、易复制。

中华人民共和国著作权法计算机软件保护条例计算机软件登记办法实施国际版权条约的规定等构成了我国软件知识产权保护的法律体系。这里我们主要介绍一下软件著作权,简称“软著”。

著作权人可以根据计算机软件著作权登记办法申请著作权注册、登记,由登记机构发放有关登记证明文件。

计算机软件著作权登记程序如下:

  • 著作权登记申请。
  • 软件著作权登记受理。
  • 软件著作权登记申请的审查。
  • 软件著作权登记注册。
  • 软件著作权登记的异议与复审。

根据计算机软件保护条例,软件著作权人享有以下五项权利:

  • 权利1:发表权,即决定软件是否公之于众的权利。
  • 权利2:开发者身份权,即表明开发者身份的权利以及在其软件上署名的权利。
  • 权利3:使用权,即在不损害社会公共利益的前提下,以复制、发行、修改、翻译、注释等方式使用其软件的权利。
  • 权利4:使用许可权和获得报酬权,即许可他人以权力3中部分或全部方式使用其软件的权利和获得报酬的权利。
  • 权利5:转让权,即向他人转让由权力3和权力4规定的使用权和使用许可的权利。

(6)软件工程师职业道德规范

职业道德就是指从事一定职业的人,在工作或劳动中所应遵循的、与其职业活动紧密联系的道德规范的总和。 

中共中央关于加强社会主义精神文明建设若干问题的决议规定了我们今天各行各业都应共同遵守的职业道德的五项基本规范,即“爱岗敬业、诚实守信、办事公道、服务群众、奉献社会”。其中,为人民服务是社会主义职业道德的核心规范,它是贯穿于全社会共同的职业道德之中的基本精神。

  • 爱岗敬业是社会主义职业道德比较基本、比较起码、比较普通的要求。爱岗,就是热爱自己的工作岗位,热爱自己的本职工作。敬业,就是以极端负责的态度对待自己工作。敬业的核心要求是严肃认真,一心一意,精益求精,尽职尽责。
  • 诚实守信是做人的基本准则,也是社会道德和职业道德的一个基本规范。诚实就是表里如一,说老实话,办老实事,做老实人。守信就是信守诺言,讲信誉,重信用,忠实履行自己承担的义务。诚实守信是各行各业的行为准则,也是做人做事的基本准则,是社会主义比较基本的道德规范之一。
  • 办事公道是指对于人和事的一种态度,也是千百年来人们所称道的职业道德。它要求人们待人处世要公正、公平。
  • 服务群众就是为人民群众服务,是社会全体从业者通过互相服务,促进社会发展、实现共同幸福。服务群众是一种现实的生活方式,也是职业道德要求的一个基本内容。
  • 奉献社会就是积极自觉地为社会做贡献。这是社会主义职业道德的本质特征。奉献社会自始至终体现在爱岗敬业、诚实守信、办事公道和服务群众的各种要求之中。奉献社会并不意味着不要个人的正当利益,不要个人的幸福。恰恰相反,一个自觉奉献社会的人,他才真正找到了个人幸福的支撑点。奉献和个人利益是辩证统一的。 

软件工程师作为一种新型的职业,有许多特殊性,例如,从业者主要是年轻人,其智力水平和技术水平较高,但社会经历较少,易偏激等。软件从业者可参考的职业道德规范包括:

  • 有关机构制定的行为准则:关于科技工作者行为准则的若干意见科技工作者科学道德规范等文件。
  • IEEE和美国计算机协会(ACM)成立的联合委员会制订的“软件工程师道德与职业行为规范”

软件工程师道德与职业行为规范简明版

1. 公众:软件工程师的行为应当以公众利益为目标。

2. 客户和雇主:在保持与公众利益一致的原则下,软件工程师的行为应当满足客户和雇主的最高利益。

3. 产品:软件工程师应当确保他们的产品和相关的改进符合最高的专业标准。

4. 判断:软件工程师应当维护他们职业判断的完整性和独立性。

5. 管理:软件工程的经理和领导人员应赞成和促进对软件开发和维护合乎道德规范的管理方式。

6. 职业:在与公众利益一致的原则下,软件工程师应当推进其职业的完整性和声誉。

7. 同事:软件工程师对其同事应当持平等和支持的态度。

8. 自我:软件工程师应当终生参与和职业实践有关的学习,并促进合乎道德的实践方法。

参考自:IEEE-CS ACM 软件工程道德和职业实践联合工作组软件工程职业道德规范和实践要求 5.2

 至此,有关软件工程的概述就到这里。下一篇,我们将一起了解一下主要的软件工程方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值