计算机软件是指计算机系统中的程序以及文档,程序是计算任务处理对象和处理规则的描述.html
最靠近硬件的一层,好比操做系统.编程
软件开发,维护与运行的软件,好比各类IDE等.架构
应用于特定领域的软件.并发
软件语言主要包括需求定义语言,功能性语言,设计性语言,程序设计语言与文档语言.框架
用于书写软件需求定义的语言,包括功能需求与非功能需求.典型的语言有PSL.编程语言
书写软件功能规约的语言,描述软件作什么以及只作什么.典型语言有广谱语言,Z语言.模块化
书写软件设计规约的语言,是软件设计的严格而完整的描述.典型语言有PDL.性能
即编程语言,能够分为低级语言与高级语言,过程式语言与非过程式语言,通用语言与专用语言,交互式语言与非交互式语言,顺序语言与并发语言与分布语言.单元测试
书写软件文档使用的语言,好比Z语言.测试
软件工程是创建和使用一套合理的工程原则,以便得到经济的软件,这种软件是可靠的,能够在实际机器上高效地运行.软件工程是应用计算机科学理论以及工程管理原则的方法,按预算与进度实现知足用户要求的软件产品的工程,或以此为研究对象的学科.
选用适宜的开发规范,以保证软件开发的可持续性,并使最终的软件产品知足客户的需求.
要考虑软件的模块化,信息隐藏,局部化,一致性以及适应性等问题,采用合适的设计方法有助于支持问题的解决与实现.
须要提供高质量的工程支持,例如配置管理,质量保证等.
软件工程的管理直接影响可用资源的有效利用,以提升软件组织的生产能力.
软件生存周期分为6个阶段:
计算机系统工程的任务是肯定待开发软件的整体要求与范围,以及该软件与其余计算机系统元素之间的关系,进行成本估算,做出进度安排,并进行可行性分析.
需求分析主要解决待开发软件要作什么的问题,肯定软件的功能,性能,数据,界面等要求,生成软件需求规约.
软件设计主要解决待开发软件怎么作的问题,一般能够分为系统设计与详细设计,系统设计的任务是设计软件系统的体系结构,详细设计的任务是设计各个组成成分的实现细节.
利用程序设计语言进行编码.
发现并纠正软件中的错误与缺陷,包括单元测试,集成测试,确认测试与系统测试.
软件运行期间须要进行维护,对软件进行修改.
CMM是能力成熟度模型,定义了5个软件过程成熟度等级,包括初始级,可重复级,已定义级,已管理级,优化级.
软件过程的特色是无秩序的,甚至是混乱的,几乎没有什么过程是通过妥善定义的.
创建了基本的项目管理过程来跟踪成本,进度与功能特性.制定了必要的过程纪律,能重复早先相似应用项目取得的成功.
已将管理和工程活动两方面的软件过程文档化,标准化,并综合成该组织的标准软件过程.全部项目均使用经批准,剪裁的标准软件过程来开发与维护软件.
收集对软件过程和产品质量的详细度量值,对软件过程和产品都有定量的理解与控制.
过程的量化反馈和先进的新思想,新技术促使过程不断改进.
CMMI是若干过程模型的综合与改进,是支撑多个工程学科和领域的系统的,一致的过程改进框架,能适应现代工程的特色与须要,能提升过程的质量与工做效率.CMMI有两种表示法:阶段式模型与连续式模型.
阶段式模型的结构相似于CMM,分为5个成熟度等级:
过程不可预测且缺少控制.
过程为项目服务.
过程为组织服务.
过程已度量和控制.
集中与过程改进.
连续式模型关注每一个过程域的能力,一个组织对不一样的过程域能够达到不一样的过程域能力等级. CMMI包含了6个过程域能力等级,等级号为0-5,能力等级代表了单个过程域中组织执行的好坏程度.能力等级包括共性目标及相关的共性实践,能够独立地应用于任何单独的过程域,各能力等级的含义:
未完成的,过程域未执行或未达到CL1中定义的全部目标.
已执行的,其共性目标是过程能够将标识的输入工做产品转换成可标识的输出工做产品,以实现支持过程域的特定目标.
已管理的,共性目标是集中于已管理的过程的制度化.根据组织政策规定过程的运做将使用哪一个过程,项目遵循已文档化的计划和过程描述,全部正在工做的人都有权使用足够的资源,全部工做任务和工做产品都被监督,控制和评审.
已定义的,共性目标是集中于已定义的过程的制度化.过程是按照组织的剪裁指南从组织的标准过程集中剪裁获得的,还必须收集过程资产和过程的度量,并用于未来对该过程的改进上.
定量管理的,共性目标是集中于可定量管理的过程的制度化.使用测量与质量保证来控制和改进过程域,创建和使用关于质量和过程执行的定量目标做为管理准则.
优化的,使用量化手段改变和优化过程域,以应对客户的要求的改变与持续改进计划的过程域的功效.
软件过程模型习惯上也叫软件开发模型,是软件开发所有过程,活动和任务的结构框架.
1970年由W.Royce提出,给出了软件生存周期活动的固定顺序,上一阶段的活动完成后向下一阶段活动过渡,最终获得开发的软件产品.瀑布模型中上一阶段的活动完成并通过评审后才能开始下一阶段的活动,特征是:
最先出现应用最普遍的模型,确保软件开发的顺利进行,对提升软件项目的质量和开发效率起到重要做用.
增量模型将软件的开发过程分红若干个日程时间交错的线性序列,每一个线性序列产生一个可发布的增量版本,后一个版本是对前一个版本的修改和补充,重复增量发布的过程,直至产生最终的完善产品.
适用于需求常常发生变化的软件开发,之后的增量中能够逐渐加入需求,另外能够有计划地管理技术风险.
须要良好的架构设计,避免加入的构件破坏已构造好的系统部分,须要对系统有好的全盘分析,不然容易退化成边作边改模型.
原型是预期系统的一个可执行版本,反映了系统性质的一个选定的子集.一个原型没必要知足目标软件的全部约束,目的是能够快速,低成本地构建原型.步骤是:
定义整体目标 --> 标识需求 --> 指定原型开发计划--> 肯定原型目标和范围--> 快速设计建模--> 构建原型 --> 交付使用--> 收集反馈意见 -- > 下一轮原型迭代开发--> 定义整体目标
用户与开发者在原型上达成一致,减小错误,缩短开发周期,加快进度,下降成本.
不利于原型系统做为最终产品,原型被建造仅仅是用户用来定义需求,以后便会被部分或所有抛弃,准确的原型设计比较困难,不利于开发人员创新.
螺旋模型将原型实现的迭代特征与瀑布模型中的控制的和系统化的方面结合起来,增长了风险分析.螺旋模型沿着螺线自内向外旋转,4个任务区域(4个象限)内分别完成如下任务:
(图片来源:https://www.itread01.com/content/1544588849.html)
设计灵活,成本计算容易,客户始终参加每一个阶段的开发,能够进行有效的互动.
周期长,须要丰富的风险评估经验以及专门知识,若是未能及时标识风险,势必形成重大损失.
喷泉模型是一种支持面向对象开发的过程模型.喷泉体现了面向对象的迭代与无间隙特性.
各个阶段没有明显的边界,开发人员能够进行同步开发,提升软件项目的开发效率,节省开发时间.
不利于项目管理,要求严格编写文档,审核难度大.
利用预先包装的构件来构造应用系统.构件能够是内部开发的构件,也能够是商业化的构件.
构件可重用,易于维护,对提升软件生产率,提升软件质量,下降成本有很大的帮助.
很难找到100%合适的构件,就是现有的构件不必定很适合使用,但基于已有构件构造出的构件未必通过100%的测试,难以保证质量.
形式化方法是创建在严格的数学基础上的一种软件开发方法,用严格的数学语言和语义描述功能规约与设计规约,经过数学的分析与推导,易于发现需求的歧义性,不完整性与不一致性,易于对分析模型,设计模型和程序进行验证.经过数学的演算,使得从形式化功能规约到形式化设计规约,以及从形式化设计规约到程序代码的转换成为可能.
用数学语言解决了规格说明的二义性问题,提升了精确性用数学提供了确认手段,使得证实与验证软件按程序知足用户和系统的需求成为可能,能够可视化地模拟/执行模型.
形式化的方法比其余技术的抽象级别要低,容易陷入细节,须要提前肯定系统边界,一般限于正确一致的模型,但大多数状况下模型并不是正确与一致.