软件工程的本质问题是由软件固有的复杂性、一致性、可变性和不可见性所导致的。软件是一种创造性开发行为的产品。

1. 软件开发的不变事实

  一些重要的软件特性不易受到人为因素的影响,这些特性在所有的软件项目中都保持不变,并需要在项目中得到承认。软件开发的任务是确保不变的事实不会失去控制,并且不要对项目施加任何过多的负面影响。
  软件本身就是复杂的。在现在软件系统中,复杂性不过是软件规模的函数,以及组成软件产品的构件之间相互依存关系的函数。软件的复杂性随着软件应用领域的性质不同而不同。通常情况下,计算密集型应用领域的软件系统比数据密集型应用领域的软件系统的复杂性要低。数据密集型应用系统包括电子商务。这样的系统处理大量数据和业务规则,而这些数据和业务规则往往是不一致或不明确的。构建能够容纳所有业务数据、规则和特殊情况的软件一贯是困难的。而软件的一致性、可变性和不可见性加重了这种困难。
  软件是开发出来的,而不是成批制造出来的。为了降低软件开发的工作量和成本,软件产业以可复用软件构件的形式提供了部分解决方案,在开发过程中可以利用这些构件。在各种情况下,开发过程都应该利用构件技术。构件是软件的一个可执行单元,具有明确定义的功能及与其他构件之间的通讯协议。可以对构件进行配置来满足应用需求。最具影响力和最直接的竞争构件技术标准是Sun的J2EE/EJB和Microsoft的.NET。
  面向服务的体系结构(Service-Oriented Architecture,SOA)的相关技术提倡由服务(也就是运行的软件实例,必须在运行构件之前加载、安装、组合、部署和初始化)来构建系统。
  软件包、构件、服务以及类似的技术并没有改变软件生产的本质问题,尤其是需求分析与系统设计的原则和任务保持不变。能够把标准的和客户定制的构件组装成最终的软件产品,而这个“组装”过程仍然是一门艺术。

2. 软件开发的“意外事件”

  软件开发中的“意外事件”并不会增加软件产品的复杂性,也不会产生软件产品的可支持性的潜在缺陷。可支持性(适应性)有3个系统特征组成的集合来定义,包括软件的可理解性、可维护性和可伸缩性(可扩展性)。
  软件开发的意外事件大部分可以归因于信息系统即社会系统的事实。它的成功或失败依赖于:人、他们对系统的接受或支持、用于开发的过程、管理措施、软件模型技术的利用等。

2.1. 利益相关者

  利益相关者是在软件项目中存在利害关系的人。任何受到系统影响或系统开发产生影响的人,都是利益相关者。有两组主要的利益相关者:
– 客户(用户或系统所有者)
– 开发者(分析员、设计员、程序员等)

  信息系统是社会系统,它们是由人(开发者)为人(客户)开发的。软件项目的成功由社会因素所决定,技术则是次要的。在典型的情况下,软件失败的主要原因可以追溯到利益相关者。在客户端,项目失败是因为:
– 客户的需求被误解,或者没有完全被捕获
– 客户的需求改变得过于频繁
– 客户没有准备为项目提供足够的资源
– 客户不想与开发者合作
– 客户怀有不切实际的期望
– 系统不再对客户有利

  项目也会因为开发者不能胜任而失败。软件组织必须对开发者使用正确的管理措施:
– 雇佣最好的开发者
– 为现有的开发者提供持续的培训和教育
– 鼓励开发者之间进行信息交流和互动,使他们互相促进
– 通过排除阻力以及将他们的精力引导到生产性工作中,来激励开发人员
– 提供一个令人振奋的工作环境
– 将个人目标同组织策略和目标统一起来
– 强调团队工作

2.2. 过程

2.3. 建模

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注