软件工程的技术问题

原创 2003年01月22日 09:46:00

软件工程的技术问题

1.             范畴

说起软件工程,往往令人想起CMMRUP、印度模式等。管理的因素,在软件开发过程中起着非常重要的作用,然而,软件工程并非只指软件开发的管理工作,而是一个范围很广的综合性学科。在软件工程中,大约一半的内容是专业性很强的,涉及到软件分析、设计甚至编码的技术。所谓的结构化、面向对象,都在软件工程的范畴内。“软件工程范围极为广泛。软件工程的某些方面属于数学或计算机科学,其他方面可归入经济学、管理学或心理学中。”1

本文不准备讨论软件工程过程的问题,而只是对软件工程中可用的技术,以及其产生的影响作一些探讨。这并不意味作者对管理的忽视,而是因为本文并非是软件工程的教科书,只是一篇专业论文,必须将准备探讨的问题划定在一个确定的范围内。

本文同样不会讨论软件工程的所有技术问题,准备探讨的议题包括:

l         软件工程的问题

l         接口

l         应用软件系统架构

l         软件设计技术

 

2.             软件工程的问题

软件业一直在探讨,如何使软件实现如同传统产业一样的大规模生产。软件工程的提出,便是为了实现这个愿望。然而,虽然软件工程至今已经有了很大的发展,然而,软件的大规模工业化生产仍然没有实现。原因何在?

从软件的本质属性来说,软件的复杂性是软件的本质属性,在这个属性没有改变之前,软件便不会实现同传统产业一样的工厂化生产。

从软件生产的介质来说,传统产业生产都是有形的物质产品,人的生产活动都受制于生产资料这些物质介质;然而,软件生产的介质,却是无形的人类的思维。物质资料的生产,受制于物质本身的属性,不容易为人类的思维所左右,并且容易被大量复制,这使得工业化大生成为可能。而人类的思维,却是如此的容易变化,更关键的是不能被复制,甚至同一个人,不同时期思维的复制都不可能,这使得软件这个纯粹依赖人的思维活动的生产实现大规模工业化生产是如此的困难。实际上,不仅仅是软件产业,凡是主要生产介质是人本身的活动的产业,都很难实现工业化生产,如咨询、演艺等。

从生产过程来看,对于传统产业来说,产品的设计和生产是分开的。在设计阶段,主要的工作是人的思维,因此,在这个阶段,同软件一样,不是批量生产的。而在生产阶段,主要的对象便是物质资料,并且一切标准已经制定,只需要在流水线上大量复制。对于传统产业来说,设计和生产的界限是如此的明确,并且,生产和设计的比重是如此的悬殊。然而,对于软件产业来说,软件的生产过程便是设计的过程,纯粹的生产过程几乎不存在(或许,光盘的复制算是),这使得软件的生产形态同传统产业必然存在区别。

对于软件的开发过程来说,从业务模型、需求分析、系统架构、系统分析和设计、到最后代码实现,越往前,抽象层次越高,可控性越小,越往后,越接近实际,可控性越大,因此,在软件开发中,核心团队的作用是如此巨大,一个软件产品的成败,核心团队的核心人员的作用在很大程度上是决定性的。对于软件开发来说,如果软件开发要实现工业化生产,必定是从后向前推进,从编码开始。印度模式或许给出了这么一个例子。

因此,我们在软件工程的路上,只是在不断的向工程化的目标迈进,但是,要达到这个目标,可能会花很长的时间。技术上的每一次进步,都使我们向这个目标迈进了一步。在软件工程的发展过程中,技术进步起了非常大,甚至可以说是决定性的作用。随着采用的技术的不同,所采用的管理方法也在不断变化。软件工程技术的很多方面,也是为管理做准备的。优秀的软件开发技术的采用,能够弥补我们在工程化方面的不足,从而使得软件开发更加可控,软件质量更加有保障。

下面,我们来具体探讨一下软件工程的技术的使用。

      

3.              接口

软件由各个不同的功能模块所组成,各个不同的部分既相互独立,又互相影响。所以,在软件系统中,保证各个部分的独立性和互相无错调用就成了一对矛盾。

为了保证系统各个部分的独立性,高内聚、低耦合是系统设计必须遵循的基本准则。高内聚、低耦合的要求,不仅仅是在横向的各个模块之间的要求,也是系统纵向的各个层次之间设计所必须遵循的准则。关于系统层次设计的问题,在后面的应用软件系统架构部分会给与论述。

同时,为了保证各个部分的互相无错调用,必须对调用制定一系列规则,这些规则便是接口。因此,这里所指的接口,不是程序语言上的interface语法的含义,而是一个广泛的概念。

从本质上来说,接口就是一个契约,他规定了接口的实现者(服务提供者)和调用者(客户)之间的交互规范。接口的引入给系统设计带来了很大的灵活性,在对象、模块之间解藕、设计模式的运用等地方,都可以看到妙用接口的身影。可以比较夸张的说,接口技术是面向对象设计的灵魂所在。

“面向接口编程,而不是面向实现编程”2。为了使软件架构更加合理,同时,也为了团队之间的合作,以及后续软件开发工作的顺利展开,软件设计的第一个工作,便是为软件的各个横向和纵向的部分制定调用接口。

未完待续

注:1《软件工程Java语言实现》 Stephen Schach  McGraw-Hill

       2《设计模式》

三年Java软件工程师应该掌握的技能

关于项目经验关于专业技能 1、基本语法 static、final、transient等关键字的作用 foreach循环的原理等等static: 1.静态变量 2.静态方法 ...
  • jieinasiainfo
  • jieinasiainfo
  • 2016年04月18日 10:31
  • 2654

我最喜爱的十大技术文档写作工具

转载 老实说,我爱死微软的Word了!Adobe FrameMaker也曾辉煌过,不过你懂的,这东西有时候会令人抓狂。过去5年来,我一直使用同一套写作工具。我也曾尝试过一些新的工具,可我最终...
  • SiberiaWolf
  • SiberiaWolf
  • 2013年01月24日 00:13
  • 1546

软件工程师必读技术书籍推荐

转自:http://my.oschina.net/vakinge/blog/181885 书籍推荐——按角色划分 一、软件工程师 --Clean Code《代码整洁之道》 --Impl...
  • tomisaboy
  • tomisaboy
  • 2016年06月19日 09:09
  • 1198

或工程技术问题,一般按如下途径进行

  • 2009年10月19日 18:16
  • 502KB
  • 下载

怎么解决开源软件中的黑洞问题-技术问题解决的最佳实践

一、概述 笔者将介绍怎么解决遇到的一些开源软件的问题。这些问题一般是开发人员在用开源软件遇到的,是开发人员所不熟悉的,不像是开发人员自己写的代码,有全盘的掌握。开发人员遇到的开源软件的问题,姑且叫做...
  • bxyz1203
  • bxyz1203
  • 2011年11月19日 08:18
  • 1711

大三软件工程小项目-小技术集合-tcp服务器搭建及客户端

大三软件工程小项目-小技术集合-tcp服务器搭建及客户端
  • qq78442761
  • qq78442761
  • 2017年03月07日 23:04
  • 1177

大三软件工程小项目-小技术集合-客户端界面重画

大三软件工程小项目-小技术集合-客户端界面重画
  • qq78442761
  • qq78442761
  • 2017年03月08日 21:38
  • 988

软件工程之八——面向对象技术

面向对象=对象+类+继承+通信,是现实世界存在的客观事物。按客观事物来构造程序,符合我们的思维。         面向对象技术可以保证软件的可复用性。对象指的是一个独立的、异步的、并发的实体,它能存...
  • liutengteng130
  • liutengteng130
  • 2012年11月05日 16:15
  • 2112

大三软件工程小项目-小技术集合-服务端连接MySQL及对表插入、删除、查询

大三软件工程小项目-小技术集合-服务端连接MySQL
  • qq78442761
  • qq78442761
  • 2017年03月02日 22:29
  • 1689

软件工程-白盒测试技术

这是傻der的我第一次xjb写blog,写个软件工程的小玩意玩玩 - -!,求指点,求指正。 说明:输入三个整数a、b、c,分别作为三角形的三条边,通过程序判断这三条边是否构成一般三角形、等...
  • zhyfruit
  • zhyfruit
  • 2018年01月11日 17:29
  • 18
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:软件工程的技术问题
举报原因:
原因补充:

(最多只允许输入30个字)