软件工程学概述可行性分析与需求分析总体设计详细设计实现
软件工程概要设计和详细设计

•过程设计则是把结构成份转换成软件的过程性描述。
•界面设计是对系统边界的描述,用户界面是用户和 系统进行交互的工具,人机接口直接影响软件的寿命。
ClientA
ClientB
ClientC
ClientD
第三级
客
户 机
business logic node(商业逻辑结点)
Security
(安全)
Event
(事件)
Search
(搜索)
服
务
器
Database management node
(数据库管理结点)
第二级 第一级
软件工程概要设计和详细设计
现在越来越多的应用采用多层结构,以适应不断 变化的用户需求。
软件工程概要设计和详细设计
四、分布式对象结构(Distributed Objects Architecture)
在C/S模型中,客户和服务器在服务/请求上的差别, 在一定程度上限制了系统的灵活性和可扩展性。
采用分布式对象结构 :
“对象(Object)”——提供服务的系统组件(System Component)。
② 安全性:网络环境面临着各种威胁,如病毒、 木马、非法访问,安全问题十分突出
③ 可管理性:开放性造成异构性,造成管理困难 ④ 不可预知性:系统响应时间受网络负载等网络
环境的影响。
软件工程概要设计和详细设计
三、 客户机/服务器模型(Client/Server Architectural Model) C/S结构是一种分布式模型,采用发请求、得结
软件工程总体设计

软件工程总体设计软件工程总体设计1. 引言在软件开发过程中,总体设计是一个重要的阶段。
通过总体设计,软件工程师可以定义系统的整体结构、功能模块的划分以及模块间的关系,从而为后续的详细设计和实现提供指导。
本文将介绍软件工程总体设计的基本概念、重要内容和步骤,并通过一个示例来说明如何进行总体设计。
2. 总体设计概述总体设计是在需求分析的基础上进行的,其目标是确定软件系统的整体结构和模块划分,并定义模块间的接口和交互规则。
总体设计要考虑系统的可扩展性、模块的复用性以及系统的性能等方面。
在总体设计过程中,需要完成以下几个主要任务:- 软件系统结构的定义:确定软件系统的整体结构,包括模块的层次关系、控制流程等。
- 模块划分:将系统划分为多个功能模块,每个模块负责完成特定的功能。
- 接口设计:定义模块间的接口和数据交互规则。
- 数据结构设计:设计系统中需要使用的数据结构,包括数据库表设计、数据流图等。
- 性能优化:考虑系统的性能需求,进行必要的性能优化设计。
3. 总体设计步骤总体设计的过程可以分为以下几个步骤:3.1 需求分析在进行总体设计之前,首先要对用户需求进行分析和理解。
这包括与用户进行需求沟通,澄清用户需求,明确系统的功能和性能需求等。
只有清楚了用户需求,才能进行后续的总体设计。
3.2 系统结构设计系统结构设计是总体设计的核心内容之一。
在这一阶段,需要确定系统的整体结构,包括模块和数据流之间的关系。
可以使用层次化的方式来设计系统结构,将系统分为若干个层次,每个层次负责不同的功能。
3.3 模块划分在系统结构确定之后,需要对系统进行模块划分。
每个模块负责完成特定的功能,并且模块之间要有清晰的接口和数据交互规则。
模块划分要考虑系统的可扩展性和模块的复用性,避免模块之间的耦合度过高。
3.4 接口设计接口设计是模块划分的基础,它定义了模块之间的接口和数据交互规则。
在接口设计中,需要明确定义每个模块暴露给其他模块的功能接口和输入输出参数。
软件工程之系统设计概述

软件工程之系统设计概述1. 引言系统设计是软件工程的重要阶段之一,它是在需求分析的基础上,对软件系统进行总体架构设计和详细设计的过程。
系统设计的目标是定义系统的功能、性能、安全性、可靠性、可维护性等方面的要求,确定系统的组成部分和模块间的接口,为软件的实现和测试提供指导。
2. 系统设计流程系统设计通常包括以下几个阶段:2.1 需求分析和需求规格说明书在系统设计开始之前,需要进行详细的需求分析工作。
需求分析的目标是理解用户的需求,并将其转化为可操作的需求规格说明书。
需求规格说明书包括功能需求、性能需求、界面需求等方面的要求。
2.2 总体架构设计总体架构设计是系统设计的第一步,它确定系统的整体结构和模块间的关系。
在总体架构设计阶段,需要定义系统的各个子系统和模块,并确定它们之间的接口和通信方式。
2.3 详细设计详细设计是系统设计的核心部分,它针对总体架构设计给出的模块和接口进行详细的设计。
在详细设计阶段,需要定义每个模块的功能、数据结构、算法、接口等细节,以及模块间的通信和数据流程。
2.4 用户界面设计用户界面设计是系统设计的重要组成部分,它关注用户与系统之间的交互方式。
在用户界面设计阶段,需要考虑用户的使用习惯和心理需求,设计出符合用户期望的界面布局、操作流程和交互方式。
2.5 数据库设计如果系统需要使用数据库来存储和管理数据,那么在系统设计阶段还需要进行数据库设计。
数据库设计包括确定数据模型、数据表结构、数据关系等方面的内容。
3. 系统设计原则和方法在进行系统设计时,需要遵循一些原则和方法,以确保设计的质量和可行性。
3.1 模块化设计模块化设计是将系统划分为相互独立、具有明确功能的模块的过程。
模块化设计可以降低系统的复杂性,提高系统的可维护性和扩展性。
在模块化设计中,需要考虑模块的耦合度和内聚度,使得模块之间的耦合度尽量低,模块内部的内聚度尽量高。
3.2 面向对象设计面向对象设计是一种以对象为中心的设计方法。
第一章软件工程学概述选择题

第一章软件工程学概述选择题1.软件是一种( )产品。
A.有形 B.逻辑C.物质 D.消耗2.软件工程学的目的应该是最终解决软件生产的( )问题。
A.提高软件的开发效率 B.使软件生产工程化C.消除软件的生产危机 D.加强软件的质量保证3.与计算机科学的理论研究不同,软件工程是一门( )学科。
A.理论性 B.工程性 C.原理性 D.心理性4.软件危机的主要原因有( )。
①软件本身的特点②用户使用不当③硬件可靠性差· ④对软件的错误认识⑤缺乏好的开发方法和手段A.③④ B.①②④C.①⑤ D.①③5.在计算机软件开发和维护中所产生的一系列严重的问题通常称为软件危机,这些问题中相对次要的因素是( )。
A.文档质量 B.开发效率C.软件功能 D.软件性能6.软件工程与计算机科学性质不同,软件工程着重于( )。
A.原理探讨 B.理论研究C.建造软件系统 D.原理的理论7.软件工程学科出现的主要原因是( )。
A.计算机的发展B.其他工程科学的影响C.软件危机的出现D. 程序设计方法学的影响8.软件工程方法学的研究内容包含软件开发技术和软件工程管理两个方面,其期望达到的最终目标是( )。
A.软件开发工程化B.消除软件危机C.实现软件可重用D.程序设计自动化9.由于软件生产的复杂性和高成本性,使大型软件的生存出现危机,软件危机的主要表现包括了下述( )方面。
①生产成本过高②需求增长难以满足③进度难以控制④质量难以保证A.①② B.②③ c.④ D.全部10.软件工程方法学中的软件工程管理是其中的一个重要内容,它包括软件管理学和软件工程经济学,它要达到的目标是( )。
A.管理开发人员,以开发良好的软件B.采用先进的软件开发工具,开发优秀的软件c.消除软件危机,达到软件生产的规模效益D.以基本的社会经济效益为基础,工程化生产软件11.软件工程方法学的目的是使软件生产规范化和工程化,而软件工程方法得以实施的主要保证是( )。
软件工程课件(全)

03
识别项目中的关键路径,确保项目按计划进 行
04
及时调整项目计划,应对项目变更和不确定 性
风险管理策略制定
识别项目中的潜在风险, 包括技术风险、市场风险、 资源风险等
制定相应的风险应对策略 和措施,如风险规避、减 轻、转移和接受等
评估风险的概率和影响程 度,制定风险优先级列表
监控风险状态,及时调整 风险管理计划
质量改进
根据质量评估结果,制定相应的改进措施, 如优化性能、增强安全性等。
经验教训总结
对测试过程中遇到的问题进行总结,形成经 验教训,为后续项目提供参考。
06
项目管理与团队协作
项目计划制定与监控
01 制定详细的项目计划,包括项目目标、范围 、时间表、资源需求、成本估算等
02 设立项目里程碑,对项目进度进行阶段性监 控
开发方向。
持续集成和测试
03
迭代增量模型强调持续集成和测试的重要性,以确保每个迭代
周期都能交付高质量的软件产品。
03
需求分析与管理
需求获取与整理
确定需求来源
与客户、利益相关者、业务领 域专家等进行沟通,收集原始
需求。
需求分类
将收集到的需求按照功能、性 能、安全、易用性等方面进行 分类。
需求筛选
去除重复、模糊、不切实际的 需求,确保需求的准确性和可 行性。
处理变更请求
根据实际情况,决定是否接受变更请求,并 制定相应的实施计划。
跟踪和验证变更
对实施的变更进行跟踪和验证,确保变更的 正确性和完整性。
04
系统设计与实现
系统架构设计
分层架构
将系统划分为表示层、业务逻辑层和数据访问层,实现高内聚、 低耦合的设计。
软件工程-张海藩 编著 复习提纲1-6章

第一章软件工程学概述第一节软件危机1.为了消除软件危机,20世纪60年代后期形成了新学科:计算机软件工程学。
2.软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
(这些问题不是不能运行的软件才仅仅具有的,几乎所有的软件都不同程度存在这些问题。
)3.软件危机包含两个方面的问题:1.如何开发软件,以满足对软件日益增长的需求。
2.如何维护数量不断膨胀的已有软件。
4.产生软件危机的原因(page4—图1.1)1.一方面与软件本身的特点有关2.另一方面也和软件开发与维护的方法不正确有关。
5.软件不同于一般程序,它的一个显著特点是:“规模庞大”。
6.软件开发流程:1. 问题定义:(确定要求解决的问题是什么)2. 可行性研究:(决定该问题是否存在一个可行的解决办法)3. 需求分析:(深入具体的了解用户需求)进入开发时期:对软件设计概要设计详细设计编写程序(全部工作量10%—20%)测试交付使用7.软件产品的配置:包括:程序、文档、数据8.软件危机的一些典型表现:1.对软件开发成本和进度的估计常常不准确2.用户对“已完成的”软件系统不满意的现象经常发生3.软件产品的质量往往靠不住4.软件常常是不可维护的5.软件通常没有适当的文档资料。
6.软件成本在计算机系统总成本中所占的比例逐年上升。
7.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
第二节软件工程1.软件工程定义软件工程是:把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;2. 软件工程方法学包含3个要素:方法、工具和过程。
3. 软件工程方法学: 1. 传统方法学2. 面向对象方法学4. 面向对象方法学的4个特点:(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。
(2)把所有的对象都划分成类(class)。
(3)按照父类(基类)与子类(派生类)的关系,把若干个相关类组成一个层次结构的系统(也成为类的等级)。
软件工程中的需求分析与系统架构设计实践

软件工程中的需求分析与系统架构设计实践需求分析与系统架构设计是软件工程中非常重要的两个环节。
需求分析是软件开发的第一步,它确定了软件系统需要解决的问题,并将这些问题转化为明确且可验证的需求。
而系统架构设计则是在需求分析的基础上,按照合理的结构和设计原则,对软件系统的整体架构进行规划和设计。
在需求分析阶段,软件工程师与业务部门紧密合作,从用户、系统、环境等多个角度收集和分析需求。
其目的是了解软件系统的目标、功能、性能、界面等要求,以便在后续的开发工作中能够清晰地定义这些需求。
需求分析的主要任务包括需求获取、需求建模、需求验证和需求管理。
首先,需求获取通过对用户、业务和系统的交流,以及现有的文档和资料进行调研,收集和整理需求。
在需求获取过程中,软件工程师需要运用适当的技术和工具,如面谈、问卷调查、观察等,确保收集到全面、准确的需求。
接下来,需求建模将收集到的需求进行整理、归类和建模,以帮助开发团队更好地理解和分析需求。
建模可以采用用例图、活动图、状态图等各种图形化表示的方法,以及类图、序列图等面向对象的设计方法,来将需求转化为可视化的模型,使得需求更加清晰明了。
然后,需求验证是为了确保收集到的需求是正确的、完整的且可验证的。
验证可以通过多种方法进行,如需求评审、原型验证、模拟实验等。
验证的目的是发现和纠正需求中的错误和缺陷,以提高软件的质量和用户满意度。
最后,需求管理是对需求进行跟踪、变更和控制的过程。
由于需求通常在软件开发的过程中会发生变化,软件工程师需要建立一个有效的需求管理机制,及时处理和跟踪需求变更,并确保所有变更都经过合理的评估和批准。
需求分析完成后,接下来是系统架构设计。
系统架构设计是在需求分析的基础上,将功能和非功能需求转化为一个具体的、可实现的系统架构。
一个好的系统架构能够确保软件系统具备良好的可扩展性、可维护性和可靠性。
系统架构设计通常包括四个主要的工作:系统总体设计、子系统设计、数据设计和界面设计。
软件工程—课程1

8.软件维护
关键任务:持久地满足用户需要的软件。 四种类型: 改正性维护 完善性维护 适应性维护 预防性维护
结束标准:完整准确的维护记录。
1.4 软件过程
软件过程是为了获得高质量软件所需 要完成的一系列任务的框架,它规定了 完成各项任务的工作步骤。
通常使用软件生命周期模型简洁地描
述软件过程。 是描述软件开发过程中各种活动执行顺 序的模型。也称为过程模型。
一个项目工程完成的必要条件
• ITTA :Idea Team Timing Action,
•
创意,团队,时间,运作。
岳实家园
张东岳----LKNG
团队
• 什么是团队: • 1、共同价值观 • 2、共同奋斗目标 • 3、一个能够领导人,并且尊重人,被 人尊重的队长
岳实家园
张东岳----LKNG
团队的规模
件并有效地维护它。
软件工程的特性
1.关注于大型程序(系统)的构造
2.中心课题是控制复杂性
3.软件经常变化 4.开发软件的效率非常重要 5.和谐的合作是开发软件的关键 6.软件必须有效的支持它的用户 7.由不同文化背景的人创造产品
1.2.2 软件工程的基本原理
1.用分阶段的生命周期计划严格管理 2.坚持阶段评审 3.实行严格的产品控制 4.采用现代化程序设计技术 5.结果应能清楚地审查 6.开发小组的人员应该少而精
开发 维护 实际的瀑布模型是 带反馈环的。
设 计 验证
编 码 验 证 综合测试 维护
优点: • 强迫开发人员采用规范方法;
• 每个阶段必须提交相应的文档;
岳实家园
张东岳----LKNG
作为项目经理的愚公
• 选择技术人员和管理人员 • 遂率子孙荷担者三夫 • 找一些外部的技术支援 • 邻人京城氏之孀(shuāng)妻有遗男, 始龀(chèn),跳往助之
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. 信息隐藏和局部化
信息隐藏原理:应该这样设计和确定模块,使得一个模块内包含的信息(过 程和数据)对于不需要这些信息的模块来说,是不能访问的。 局部化: 把一些关系密切的软件元素物理地放得彼此靠近。
5. 模块独立
每个模块完成一个相对独立的子功能,并且与其它模块间的接口简单。 模块独立性的衡量标准
◆过程设计的工具(重点是画图)
● 程序流程图 ● 盒图 ● PAD图 ● 判定表
2019/1/14 上海大学计算机学院 21
详细设计
◆程序流程图的基本符号
A B T S T P P F S F
(1) 顺序结构
F
A
(3) 先判定型循环结构
(4) 后判定型循环结构
P
T
B
(2) 选择结构
2019/1/14
上海大学计算机学院
18
总体设计
◆结构图
● 描述软件系统的模块层次结构,清楚地反映出程序中各模块之 间的调用关系和数据传递。
调用模块 输入 数据 被调用模块
A
输出 数据
B
选择调用
循环调用
上海大学计算机学院 19
2019/1/14
总体设计
◆面向数据流的设计方法
●基本思想: DFD 结构图 ●两种信息流类型
◆ 具体任务
● 确定对系统的综合要求
功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求、约束、逆向 需求、扩展需求
● 分析系统的数据要求
● 导出系统的逻辑模型 ● 书写软件需求规格说明书 ● 修正系统开发计划
2019/1/14 上海大学计算机学院 11
需求分析
◆数据流图
● 数据流图(DFD)符号
缺点
• 需要一个开放的结构,方便构 件的加入。
2019/1/14 上海大学计算机学院 9
软件工程学概述
生命周期模型 瀑布模型 快速原型模型 增量模型 螺旋模型 优点 文档驱动的有序方法 确保交付的产品符合客户的要求 增大投资的早期回报 结合上述所有模型的特性 缺点 交付产品可能不符合客户 的要求 还没有证明无懈可击 要求开放的结构,可能退 化为建造-修补模型 只能用于大型的内部软件 产品,开发者必须精通风 险分析和风险排除
2019/1/14
上海大学计算机学院
10
可行性分析与需求分析
◆ 需求分析的任务
1. 准确地回答“系统必须做什么?” 2. “分析软件需求和书写软件需求规格说明书”
◆ 软件需求
● 用户解决问题或达到目标所需要的条件或能力; ● 系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具 有的条件或能力 ● 反映上述两个定义中所描述的条件或能力的文档说明 ● 需求层次:业务需求用户需求功能与非功能需求
●产生软件危机的原因
软件的规模加大、复杂性提高、性能增强; 软件是逻辑产品, 尚未完全认识其本质和特点; 缺乏系统的开发、维护大型软件项目的技术手段和管理方法; 用户和软件开发人员的理解鸿沟; 错误的认识和作法
2019/1/14 上海大学计算机学院 2
软件工程学概述
◆ 软件工程
● 定义
软件工程是指导计算机软件开发和维护的一门工程学科。采用工程 的概念、原理、技术和方法来开发与维护软件,把经过时间考验而 证明正确的管理技术和当前能够得到的最好的技术方法结合起来, 以经济地开发出高质量的软件并有效地维护它。
4. 螺旋模型(Spiral model) 5. 喷泉模型
6. 其它模型
极限编程XP(eXtreme Programming) RUP(Rational Unified Process) 建造—修补模型(Build-and-fix model)
2019/1/14
上海大学计算机学院
7
软件工程学概述
5. 力争降低模块接口的复杂程度 6. 设计单入口单出口的模块 7. 模块功能应该可以预测
2019/1/14
上海大学计算机学院
17
Байду номын сангаас 总体设计
TOP TOP TOP
A
B
A
B
A
B
C
D
C
D
C
D
E
(a)
F
E
(b)
F
E
(c)
F
(a) 差的结构图; (b) 不理想的结构图; (c) 理想的结构图
2019/1/14
数据源点/数据终点 数据流 数据存储 加工/处理
● 根据描述画数据流图
2019/1/14
上海大学计算机学院
12
总体设计
◆ 总体设计的任务
1. “概括地说,系统应该如何实现?”
2. 系统划分:即确定组成系统的程序、文件、数据库、人工过程和文
档等
3. 设计软件的结构:即确定每个程序是由哪些模块组成,以及这 些模块相互间的关系。
◆ 瀑布模型 特点
1. 阶段间具有顺序性和依赖性 2. 推迟实现的观点 – 清楚地区分逻辑设计与物理设计, 尽可能推迟程序的物理实现。 3. 质量保证的观点(文档驱动) – 每个阶段都必须完成规定的文档 – 每个阶段结束前都要对所完成的文 档进行评审
缺点
1. 开发过程一般不能逆转,否则代价太大。 2. 规格说明很难理解:“我知道这是按我 的要求做的,但不是我想要的样子。” 3. 软件的实际情况必须到项目开发的后期 客户才能看到。
2019/1/14 上海大学计算机学院 8
软件工程学概述
◆ 增量模型
● 把软件产品作为一系列增量构件来 设计、编码、集成和测试。
优点
• 每个阶段交付一个可用的产品。 • 减少一个全新产品给客户带来 的心理上的影响。 • 分阶段地交付产品不需要大的 资金支出。 • 需求经常变化,增量模型的灵 活性使其具有更加优越的适用 性。
2019/1/14 上海大学计算机学院 6
软件工程学概述
生命周期模型规定了把生命周期划分成哪些阶段及各个 阶段的执行顺序,因此,也称为过程模型。
典型的过程模型
1. 瀑布模型(Waterfall model) 2. 快速原型开发模型(Rapid Prototyping model)
3. 增量模型(Incremental model)
变换流:掌握从变换流到初始结构图的转换 事务流
2019/1/14
上海大学计算机学院
20
详细设计
◆详细设计的任务
● 不是具体地编写程序,而是设计程序的“蓝图”,确定每个模 块的处理过程。
◆结构程序设计
● 自顶向下逐步求精; ● 具有单入、单出的控制结构(取消GOTO语句); ● 结构化定理:任何单入口单出口的程序都可以由“顺序”、 “选择”和“循环”三种基本结构实现。
2019/1/14 上海大学计算机学院 15
总体设计
◆ 内聚
1. 2. 3. 4. 5. 6. 7. 8. 偶然性内聚 逻辑性内聚 时间性内聚 过程性内聚 通信性内聚 顺序内聚 功能性内聚 信息性内聚
内 聚 程 度
低
高
◆各种内聚的含义 ◆设计时力争做到高内聚,并且能够辨认出低内聚 的模块,通过修改设计提高模块的内聚程度。
总体设计、详细设计、编码和单元测试、综合测试
3. 软件维护: 使软件持久地满足用户的需要
2019/1/14
上海大学计算机学院
5
软件工程学概述
◆ 生命周期中各阶段的任务
1. 问题定义: “要解决的问题是什么?”; 确定用户要求解决的性质、工 程的目标和规模。 2. 可行性研究: “对于上一个阶段所确定的问题有行得通的解决办法吗?”, 经济可行性、技术可行性、法律可行性、不同的方案 3. 需求分析: “为了解决这个问题,目标系统必须做什么”, 确定系统 必须具有的功能和性能,系统要求的运行环境,并且预测系统发展的前 景。 4. 总体设计(概要设计): “概括地说,应该怎样实现目标系统?”; 设 计出实现目标系统的几种可能的方案。推荐一个最佳方案。 5. 详细设计: “应该怎样具体地实现这个系统呢?”; 设计出程序的详细 规格说明。 6. 编码和单元测试: 写出正确的容易理解、容易维护的程序模块; 仔细 测试编写出的每一个模块。 7. 综合测试: 集成测试和验收测试,现场测试或平行运行 8. 软件维护: 使系统持久地满足用户的需要。包括: 改正性维护,适应 性维护,完善性维护,预防性维护。
2019/1/14
上海大学计算机学院
4
软件工程学概述
软件生命周期是软件产品或系统一系列相关活动的全周 期。 软件生命周期的3个大阶段
1. 软件定义: 确定软件开发总目标;确定工程的可行性;导出实现策略
及系统功能;估计资源和成本,并且制定工程进度表。 问题定义、可行性研究、需求分析
2. 软件开发: 具体设计和实现在前一个时期定义的软件
风格良好的代码更容易阅读和理解,错误更少; 使用一致和有意义的标识符名 用缩进显示程序结构 用加括号的方式排除二义性 避免大量使用循环嵌套和条件嵌套 当心运算符的副作用 把数定义称常量 利用sizeof()计算对象的大小 清晰的代码,而非最巧妙的代码 程序的注释
序言性注释和功能性注释 对一段程序注释,而不是每一个语句
复习
软件工程学概述 可行性分析与需求分析 总体设计 详细设计 实现 维护 面向对象方法学引论 面向对象分析 面向对象设计
2019/1/14 上海大学计算机学院 1
软件工程学概述
◆软件危机
●定义:指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 ●典型表现:
开发成本和进度的估计常常很不准确; 用户对“已完成的”软件系统不满意; “闭门造车”; 软件质量不可靠; 软件常常是不可维护的; 软件成本的比例逐年上升; 软件产品“供不应求”;