软件设计与工程项目特点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件设计
软件设计是一个创造性的过程,对一些设计者来说需要一定的资质,而最后设计通常都是由一些初步设计演变而来的。
从书本上学不会设计,只能经过实践,通过对实际系统的研究和实践才能学会。
对于高效的软件工程,良好的设计是关键,一个设计得好的软件系统应该是可直接实现和易于维护、易懂和可靠的。
设计得不好的系统,尽管可以工作,但很可能维护起来费用昂贵、测试困难和不可靠,因此,设计阶段是软件开发过程中最重要的阶段。
直到最近,软件设计在很大程度上仍是一个特定过程。
一般用自然语言给定一需求集,预先作非正式设计,常常用流程图的形式说明,接着开始编码,当系统实现时设计还需修改。
当实现阶段完成后,设计往往已与起初形式相去甚远以至于设计的原始文档完全不适合对系统的描述。
软件设计的这种方法导致了许多动态的和非常昂贵的工程失败。
现在已经认识到一些完全非正规的表示法,诸如接近于编程语言的流程图,不适用于系统设计的描述和表达。
大家认识到,精确的(尽管并不一定是正规的)说明是设计过程的必要部分。
软件设计是一个反复的、不能用任何单一表示法来表示的多层次活动。
相应地,大量的设计表示法,如数据流图、层次式输入-处理-输出结构图和设计描述语言已经开发出来,这些表示法能比流程图更好地表达软件设计。
给定一个需求定义,软件工程师必须以此导出满足这些需求的程序系统的设计,此导出过程是通过下述步骤来完成的:
1.必须建立组成程序系统的子系统。
2.必须把每个子系统分解成分离的成分,并且子系统规范通过定义这些成分的操作来建立。
3.每个程序可以用相互作用的子成分设计。
4.每个成分还须进行优化,这通常需要将每个成分规范化成层次式的子成分。
5.优化过程中的某个阶段,各成分中的算法必须详细说明。
除了程序系统设计中的这些阶段之外,软件工程师也可能需要设计允许系统中各进程之间进行通信的通信机制。
他们或许要设计文件结构,并且很可能要设计用于程序的数据结构,他们还需要设计确认程序的测试事例。
确定何为“成功”的设计无一定之规,取决于其应用和特定的工程要求。
一个成功的设计应该是:能生成高效的代码,实现尽量紧凑的最小设计,或是一个最易维护的设计。
最后一个标准是本文采用的质量标准,可维护性设计意指系统修改费用最低,设计可懂度高和修改是局部性的。
只有逻辑上高度结合而相互间松散地耦合的软件设计才能实现以上两个因素。
有效的软件设计最好利用一致性设计方法。
有大量的在不同应用环境中开发并使用的设计方法,其中有些是由皮特森(1980)、布兰克和克瑞境(1983)描述的。
实质上,这些方法大多数可划分为三类:
1.由上至下的功能设计:从功能的观点设计系统,从高层的观点着手将系统逐步地提炼成更具体的设计。
结构化设计和阶梯式优化就是使用此方法的例子。
2.面向目标设计:把系统作为目标集合而不是功能的集合,信息在目标与目标之间传送,每个目标有它自己的相互关联操作集。
面向目标的设计方法是基于信息隐藏的观点,该观点由巴拿斯(1972)最先提出,最近又由罗滨逊(1981)和保什(1983)描述。
3.数据驱动设计:此方法由杰克逊(1975)和万勒尔(1977)提出,认为软件系统的结构应该反映该系统所处理数据的结构。
因此,软件设计应由对系统输入、输出数据进行分析后而导出。
软件工程项目的特点:
1、软件产品不可见。
2、不存在标准的软件过程。
3、大型项目往往是一次性项目,无经验可以借鉴。
以对软件项目的管理比其他项目的管理更为困难。
为了使软件项目开发成功,必须对软件开发项目的工作范围、可能遇到的风险、需要的资源(人、硬件、软件)、要实现的任务、经历的里程碑、花费的工作量(成本),以及进度的安排做到心中有数。
软件工程的管理便是对以上提到的几点提供信息。
管理工作开始于技术工作之前,结束于软件工程过程结束。
软件工程项目管理的任务如下:
1、启动一个软件项目:软件人员和用户在系统工程阶段确定项目的目标和范围。
目标标明软件项目的目的但不涉及如何去达到这些目的。
范围标明软件要实现的基本功能,并尽量以定量的方式界定这些功能。
2、度量:度量的作用是为了有效的定量的进行管理。
3、估算:在软件项目管理的过程中一个关键的活动是制定项目计划。
在做计划时,必须对需要的人力、项目的持续时间、成本作出估算,这种估算大多参考以前类似的项目而作出的。
4、风险分析:风险分析是贯穿软件工程过程中的一系列风险管理的步骤,其中包括风险识别、风险估计、风险管理策略、风险解决和风险监督,它能让人们主动攻击风险。
5、进度安排:对于进度安排,需要考虑的是预先对进度如何计划?工作怎么就位?如何识别定义好的任务?管理人员对结束时间如何掌握,如何识别和监控关键路径以确保结束?对进展如何度量?以及如何建立分割任务的里程碑。
首先识别一组项目任务,建立任务之间的相互关联,然后估算各个任务的工作量,分配人力资源制定进度计划。
6、追踪和控制:由项目管理人员负责追踪在进度安排中标明的每一个任务,并根据实际完成情况对资源重新定向、对任务重新安排,从而较好的控制软件开发。