西门子KP900
究软件工程的专家学者们陆续提出了100多条关于软件工程的准则或信条。美国**的软件工程专家巴利·玻姆(Barry Boehm)综合这些专家的意见,并总结了美国天合公司(TRW)多年的开发软件的经验,于1983年提出了软件工程的七条基本原理。
玻姆认为,这七条原理是确保软件产品质量和开发效率的原理的西门子小集合。它们是相互独立的,是缺一不可的西门子小集合;同时,它们又是相当完备的。人们当然不能用数学方法严格证明它们是一个完备的集合,但是可以证明,在此之前已经提出的100多条软件工程准则都可以由这七条原理的任意组合蕴含或派生。
在Internet平台上进一步整合资源,形成巨型的、高效的、可信的虚拟环境,使所有资源能够高效、可信地为所有用户服务,成为软件技术的研究热点之一。软件工程领域的主要研究热点是软件复用和软件构件技术,它们被视为是解决“软件危机”的一条现实可行的途径,是软件工业化生产的必由之路。而且软件工程会朝着开放性计算的方向发展,朝着可以确定行业基础框架、指导行业发展和技术融合的“开放计算”。
西门子近几年产生了一种观点——“软件即是一种服务”,软件不再在本地计算机上运行,而是将它放在所谓的“计算云”中。云计算(Cloud Computing)是基于互联网的相关服务的增加、使用和交付模式。云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用
行很少的交互。云计算是继1980年代大型计算机到客户端—服务器的大转变之后的又一种巨应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本和改进算法。其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。
ISO 9000对软件工程过程的定义是:软件工程过程是输入转化为输出的一组彼此相关的资源和活动。
其他定义:①运行时,能够提供所要求功能和性能的指令或计算机程序集合;②程序能够满意地处理信息的数据结构;③描述程序功能需求以及程序如何操作和使用所要求的文档。以开发语言作为描述语言,可认为软件=程序+数据+文档。
综上,软件工程可以概括为:软件工程采用工程学的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的西门子好的技术方法结合起来,研究和应用如何以系统性的、规范化的、可定量的过程化方法开发和维护软件的学科。
软件工程的目标是:在给定成本、进度的前提下,开发出具有适用性、有效性、可修改还可以通过一些方法和人类活动,来改进质量。针对以上问题,可以在软件开发过程中实施能力成熟度模型来改进软件质量、控制软件生产过程、提高软件生产者组织性和软件生产者个人能力和开发效率。
能力成熟度模型(Capability Maturity Model,CMM)是一种开发模
国际公认的对软件公司进行成熟度等级认证的重要标准。CMM的目标是改善现有软件开发过程,也可用于其他过程。CMM的基本思想是,因为软件危机问题是管理软件过程的方法引起的,所以新软件技术的运用不会自动提高生产率和利润率。CMM有助于组织建立一个有规律的、成熟的软件过程。改进的过程将会生产出质量更好的软件,使更多的软件项目免受时间和费用的超支之苦。软件过程包括各种活动、技术和用来生产软件的工具。因此,它实际上包括了软件生产的技术方面和管理方面。CMM策略力图改进软件过程的管理,而在技术上的改进是其必然的结果。CMM致力于软件开发过程的管理和工程能力的提高与评估。该模型在美国和北美地区已得到广泛应用,同时越来越多的欧洲和亚洲等国家的软件公司正积极采纳CMM,CMM实际上已成为软件开发过程改进与评估事实上的工业标准。设计、编码到测试、维护全过程)都能在管理者的控制之下,以预定成本按期、按质地完成软件交付用户使用。研究软件项目管理要从已有的成功或失败的案例中总结出能够指导今后开发的通用原则、方法,同时避免前人的失误。软件工程学的一个重要目标就是结合软件开发技术和先进管理技术,以提高软件的可维护性,减少软件维护的代价。1.1.4 消除软件危机的途径
软件工程作为一个新兴的工程学科,主要研究软件生产的客观规律性,建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件生产成本、改进软件产品质量、提高软件生产率水平的目标。软件工程学从硬件工程和其他人类工程中吸收了许多成功的经验,明确提出了软件生命周期的模型,发展了许多软件开发
机,首先应该对计算机软件有一个正确的认识。软件设计者应该彻底消除在计算机系统早期发展阶段形成的“软件就是程序”的错误观念。一个软件必须由一个完整的配置组成,事实上,软件是程序、数据及相关文档的完整集合。其中,程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当处理信息的数据结构;文档是
(8)软件开发生产率跟不上计算机应用系统迅速普及深入的速度。软件开发是一种高强度的脑力劳动,理论性和实践性都很强,软件开发人员的生产效率也对开发的周期和质量有很大影响。特别是软件工程,对软件开发的成功(按质按量,按期完成)有决定性作用。
(9)软件产品的特殊性和人类智力的局限性,导致人类无力处理“复杂问题”。“复杂问题”的概念是相对的,一旦人们采用先进的组织形式、开发方法和工具提高了软件开发效率和能力,新的、更大的、更复杂的问题又摆在人们的面前,所以“复杂问题”的解决需要诸多学科知识及技术的协同发展。
以上举例的仅仅是软件危机的一些典型表现,与软件开发和维护有关的问题远不止这些。1.1.3 产生软件危机的原因
开发软件系统需要投入大量的人力和物力,但软件系统的质量却难以保证,也就是说,开发软件所需的高成本同产品的低质量之间有着尖锐的矛盾,这种现象就是所谓的“软件危机”。在软件开发和维护的过程中存在这么多严重问题,一方面与软件本身的特点有关,而另一方面的主要原因是软件开发和维护的方法不正确有关。
软件开发不同于一般的加工制造业、机械工业以及一般的加工业,这些行业都已经有了改程序;