计算机软件

计算机软件是指计算机系统中的程序及其文档。程序是计算任务的处理对象和处理规则的描述。任何以计算机为处理工具的任务都是计算任务。处理对象是数据(如数字、文字、图形、图像、声音等,它们只是表示,而无含义)或信息(数据及有关的含义)。处理规则一般指处理的动作和步骤。文档是为了便于了解程序所需的阐述性资料。

按照软件的应用领域,可以将计算机软件分为十大类∶系统软件、应用软件、工程/科学软件、嵌入式软件、产品线软件、Web 应用、人工智能软件、开放计算、网络资源和开源软件。

软件工程基本原理

美国著名的软件工程专家 B.W.Boehm 于1983年提出了软件工程的7条基本原理。Boehm认为这7条原理是确保软件产品质量和开发效率的原理的最小集合。





1. 用分阶段的生命周期计划严格管理

有统计表明,50070以上的失败项目是由于计划不周造成的。在软件开发与维护的漫长生命周期中,需要完成许多各种各样的工作。这条基本原理意味着应该把软件生命周期划分成若干个阶段,并相应地制订出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。Boehm 认为,在软件的整个生存周期中应该制定并严格执行六类计划∶项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划和运行维护计划。

2. 坚持进行阶段评审

据统计结果显示,大部分错误是在编码之前造成的。根据Boehm等人的统计,设计错误占软件错误的63070,编码错误仅占37%,而且错误发现与改正得越晚,所需付出的代价越高。因此,在每个阶段都应进行严格的评审,以便尽早发现在软件开发过程中所犯的错误。

3. 实现严格的产品控制

在软件开发过程中不应随意改变需求,因为改变一项需求需要付出较高的代价
但是,在软件开发过程中改变需求又是难免的,由于外部环境的变化,相应地改变用户需求是一种客观需要,这就要采用科学的产品控制技术来顺应这种要求。在改变需求时,为了保持软件各个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。基准配置又称为基线配置,它是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码)。基准配置管理也称为变动控制,一切有关修改软件的建议,特别是涉及基准配置的修改建议,都必须按照严格的规程进行评审,在获得批准以后才能实施修改。

4. 采用现代程序设计技术

从20世纪60年代和70年代的结构化软件开发技术到面向对象技术,从第一代、第二代语言到第四代语言,人们已经充分认识到∶方法大于力气。采用先进的技术既可以提高软件开发的效率,又可以降低软件维护的成本。

5.结果应能清楚地审查

软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况可见性差,难以评价和管理。为了更好地进行管理,应根据软件开发的总目标及完成期限尽量明确地规定开发小组的责任和产品标准,从而使所得到的结果能够清楚地审查。

6. 开发小组的人员应少而精

开发人员的素质和数量是影响软件质量和开发效率的重要因素,应该少而精。这一条基于两点原因∶高素质开发人员的效率比低素质开发人员的效率要高几倍到几十倍,开发工作中犯的错误也要少得多;当开发小组为N人时,可能的通信信道为N(N-D/2。可见,随着人数N的增大,通信开销将急剧增大。

7. 承认不断改进软件工程实践的必要性

遵循上述6条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产。但是它们只是对现有经验的总结和归纳,并不能保证软件开发与维护的过程能赶上时代前进的步伐,能跟上技术的不断进步。因此,Boehm提出应把“承认不断改进软件工程实践的必要性”作为软件工程的第7条原理。根据这条原理,用户不仅要积极采纳新的软件开发技术,还要注意不断总结经验,收集进度和消耗等数据,进行出错类型和问题报告统计。这些数据既可以用来评估新的软件技术的效果,也可以用来指明必须着重注意的问题和应该优先进行研究的工具和技术。

软件生存周期

同任何事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程,被称为计算机软件的生存周期。通常,软件生存周期包括可行性分析与项目开发计划、需求分析、设计(概要设计和详细设计)、编码、测试、维护等阶段。


(1)可行性分析与项目开发计划。这个阶段主要确定软件的开发目标及其可行性。必须要回答的问题是∶要解决的问题是什么?该问题有可行的解决办法吗?若有解决的办法,需要多少费用?需要多少资源?需要多少时间?要回答这些问题,就要进行问题定义、可行性分析,制订项目开发计划。
可行性分析与项目计划阶段的参加人员有用户、项目负责人和系统分析师。该阶段所产生的文档有可行性分析报告和项目开发计划。


(2)需求分析。需求分析阶段的任务不是具体地解决问题,而是准确地确定软件系统必须做什么,确定软件系统的功能、性能、数据和界面等要求,从而确定系统的逻辑模型。该阶段的参加人员有用户、项目负责人和系统分析师。产生的文档有软件需求说明书。

(3)概要设计。概要设计就是设计软件的结构,明确软件由哪些模块组成,这些模块的层次结构是怎样的,这些模块的调用关系是怎样的,每个模块的功能是什么。同时,还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据、这些数据是什么样的结构,它们之间有什么关系。概要设计阶段参加的人员有系统分析师和软件设计师。该阶段的主要文档有概要设计说明书。


(4) 详细设计。详细设计阶段的主要任务就是对每个模块完成的功能进行具体描述,要把功能描述转变为精确的、结构化的过程描述。即该模块的控制结构是怎样的,先做什么,后做什么,有什么样的条件判定,有哪些要重复处理等,并用相应的表示工具把这些控制结构表示出来。详细设计阶段参加的人员有软件设计师和程序员。该阶段的主要文档有详细设计文档。


(5)编码。编码阶段就是把每个模块的控制结构转换成计算机可接受的程序代码,即写成某种特定程序设计语言表示的源程序清单。


(6) 测试。测试是保证软件质量的重要手段,其主要方式是在设计测试用例的基础上检查软件的各个组成部分。测试阶段的参加人员通常由另一部门(或单位)的软件设计师或系统分析师承担。该阶段产生的文档有软件测试计划、测试用例和软件测试报告。


(7)维护。软件维护是软件生存周期中时间最长的阶段。已交付的软件投入正式使用后,便进入软件维护阶段,它可以持续几年甚至几十年。软件运行过程中可能由于各方面的原因,需要对它进行修改,也就是维护的过程。

软件过程

在开发产品或构建系统时,遵循一系列可预测的步骤(即路线图)是非常重要的,它有助于及时交付高质量的产品。软件开发中所遵循的路线图称为“软件过程”。过程是活动的集合,活动是任务的集合。软件过程有3层含义∶


一是个体含义,即指软件产品或系统在生存周期中的某一类活动的集合,如软件开发过程、软件管理过程等;


二是整体含义,即指软件产品或系统在所有上述含义下的软件过程的总体;


三是工程含义,即指解决软件过程的工程,应用软件的原则、方法来构造软件过程模型,并结合软件产品的具体要求进行实例化,以及在用户环境下的运作,以此进一步提高软件的生产率,降低成本。







1. 能力成熟度模型(CMM)

CMM将软件组织的过程能力分成五个成熟度级别∶初始级、可重复级、已定义级、已管理级和优化级。由低到高,软件开发生产精度越来越高,每单位工程的生产周期越来越短。

(1)初始级。软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。


(2)可重复级。建立了基本的项目管理过程来跟踪费用、进度和功能特性;制定了必要的过程纪律,能重复早先类似应用项目取得的成功。


(3)定义级。已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件。


(4)管理级。收集对软件过程和产品质量的详细度量,对软件过程和产品都有定量的理解和控制。


(5)优化级。过程的量化反馈和先进的新思想、新技术促使过程不断改进。

2. 能力成熟度模型集成(CMMI)

CMM的成功导致了适用不同学科领域的模型的衍生,如系统工程的能力成熟度模型,适用于集成化产品开发的能力成熟度模型等。而一个工程项目又往往涉及多个交叉的学科,因此有必要将各种过程改进的工作集成起来。1998年,由美国产业界、政府和卡内基·梅隆大学软件工程研究所共同主持CMMI项目。CMMI是若干过程模型的综合和改进,是支持多个工程学科和领域的、系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率。


CMMI提供了两种表示方法∶阶段式模型和连续式模型。
1) 阶段式模型
阶段式模型的结构类似于CMM,它关注组织的成熟度。CMMI-SE/SW/PPD1.1版中有5个成熟度等级。

初始的:过程不可预测且缺乏控制。
已管理的:过程为项目服务。
已定义的:过程为组织服务。
定量管理的:过程已度量和控制。
优化的:集中于过程改进。
2) 连续式模型
连续式模型关注每个过程域的能力, 一个组织对不同的过程域可以达到不同的过程域能力等级(Capability Level,CL)。CMMI中包括6个过程域能力等级,等级号为0-5。能力等级包括共性目标及相关的共性实践,这些实践在过程域内被添加到特定目标和实践中。当组织满足过程域的特定目标和共性目标时,就说该组织达到了那个过程域的能力等级。
能力等级可以独立地应用于任何单独的过程域,任何一个能力等级都必须满足比它等级低的能力等级的所有准则。对各能力等级的含义简述如下。

CLo(未完成的):过程域未执行或未得到CLi中定义的所有目标。


CLi(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。



CL2(已管理的):其共性目标集中于已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都被监控、控制和评审。



CL3(已定义级的):其共性目标集中于已定义的过程的制度化。过程是按照组织的剪裁指南从组织的标准过程集中剪裁得到的,还必须收集过程资产和过程的度量,并用于将来对过程的改进。
CL4(定量管理的):其共性目标集中于可定量管理的过程的制度化。使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的定量目标作为管理准则。




CLs(优化的):使用量化(统计学)手段改变和优化过程域,以满足客户要求的改变和持续改进计划中的过程域的功效。

未完待续。。。

更多知识传送:

计算机操作系统–基础知识
计算机操作系统–进程管理
计算机操作系统–存储管理
计算机操作系统–设备管理
计算机操作系统–文件管理
计算机操作系统–作业管理
计算机操作系统–网络操作系统和嵌入式操作系统
计算机操作系统–UNIX操作系统

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以上内容整理参考《软件设计师教程(第5版)》和《软件设计师考试同步辅导(第四版)》(忘记是哪个老师的了,侵删)。本文章内容旨在帮助更多想要进军软考,给自己镀金的小伙伴。有兴趣的小伙伴可以共勉。

软件工程基础知识--认识软件工程相关推荐

  1. 软件工程基础知识--运行和维护

    在系统测试.调试中,使用的是系统测试数据,有些实际运行中可能出现的问题很难通过这些数据被发现.所以,一个系统开发后,让它实际运行一段时间,是对系统最好的检验和测试方法. 系统转换 系统试运行阶段的主要 ...

  2. 软件工程基础知识--软件过程模型

    软件过程模型习惯上也称为软件开发模型,它是软件开发全部过程.活动和任务的结构框架.典型的软件过程模型有瀑布模型.增量模型.演化模型(原型模型.螺旋模型).喷泉模型.基于构件的开发模型和形式化方法模型等 ...

  3. 软件设计师教程(九)计算机系统知识-软件工程基础知识

    软件设计师教程 软件设计师教程(一)计算机系统知识-计算机系统基础知识 软件设计师教程(二)计算机系统知识-计算机体系结构 软件设计师教程(三)计算机系统知识-计算机体系结构 软件设计师教程(四)计算 ...

  4. 软件设计师(五)——软件工程基础知识

    软件工程基础知识 软件工程基础知识部分分为五部分,如下图所示: 1. 软件工程概述 软件工程 1)含义:指使用计算机科学.数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程 2)目的:提高 ...

  5. 软件工程---基础知识

    目录 软件工程的基础知识 软件开发的基本过程 软件开发的基本方法 软件测试的分类标准 常见的软件分层体系结构 面向对象设计需要做哪些工作 软件工程的基础知识 软件工程专业非常基础的知识: 编程语言:掌 ...

  6. 【软件工程】软件工程基础知识

    软件工程 一.软件工程概述 1.背景 软件工程诞生于60年代末期,它作为一个新兴的工程学科,主要研究软件生产的客观规律性,建立与系统化软件生产有关的概念.原则.方法.技术和工具,指导和支持软件系统的生 ...

  7. mcq 队列_MCQ | 软件工程基础知识/简介(1)

    mcq 队列 Q1. Which of the following is a part of the software? Q1. 以下哪个是软件的一部分? Programs 程式 Documentat ...

  8. 软件工程基础知识复习宝典

    前言:此文档为个人大学时期应付期末考试时自行总结,用于理解并背诵相应的基本概念.一些计算和画图之类的内容需要结合书本例题进行复习,多做习题深刻掌握.中间大标题为老师给出的考纲中建议每一章需要掌握的一些 ...

  9. 软件设计师-5.软件工程基础知识

    5.1 软件工程概述 5.1.1 软件生存周期 软件:包含程序.数据及相关文档. 软件工程:涉及到软件开发.维护.管理等多方面的原理.工具与环境.最终的目的是开发高质量的软件. 目的:提高软件生产率. ...

最新文章

  1. 安全的开源Linux Kodachi 5.7 发布啦
  2. Spring IOC 容器源码分析 - 获取单例 bean
  3. 阅读目录(置顶)(长期科技领域知识)
  4. 第二:Pycharm设置配置(非常详细)
  5. get_json_object与json_tuple 的解析
  6. Name Mangling and extern “C” in C++
  7. EndnoteX8教程学习(一)
  8. 开wifi微信定位服务器,企业微信wifi定位
  9. 苹果电子邮件怎么注册_电子邮件地址怎么写
  10. 发音问题纠正:边音l和鼻音n,前鼻音与后鼻音的区别与发音
  11. 公有云、私有云及混合云应用场景辨析
  12. 【中学提纲】必修一——细胞的生命历程
  13. 获取电信天邑TEWA-700E光猫超级密码相近系列通用方法
  14. 国内TCP单边“加速”的“正确”做法
  15. Python写入和读取Excel表格数据
  16. 《听后感-罗振宇2023“时间的朋友”跨年演讲》
  17. php伪协议实现命令执行,任意文件读取
  18. Selenium:浏览器及鼠标、键盘事件
  19. UnityShader实现简单的体积光
  20. 【数据挖掘】期末复习模拟题(暨考试题)

热门文章

  1. 为什么学完这个他们都跳槽/涨薪了?
  2. GitHub年度报告,爆全球程序员画像!
  3. 操作系统第一章 --导论
  4. 【Java基础】Java的继承和多态
  5. Git Stash 贮藏命令
  6. dev c++怎么设置断点_斑马进度计划软件可以检查计划中是否存在逻辑断点和错误逻辑关系...
  7. 随笔:教育、兴趣 与 职业
  8. flag = true和flag == true
  9. 北京防灾科技学院计算机怎么样,防灾科技学院
  10. 我与程序员不得不说的二三事——一天一天