软件工程课程设计小论文之软件设计

时间:2024.4.7

logo

软件工程小论文

题目《软件设计》

专业班级:                     

小组成员:                     

                               

                               

                               

授课教师:                     

完成时间:    xx  xx   

xxxx学院


目录

摘要................................................................................................................................. 1

引言................................................................................................................................. 2

第一章 软件设计概述....................................................................................................... 3

1.1 软件设计定义...................................................................................................... 3

1.2 设计要素............................................................................................................. 3

1.3 设计原则............................................................................................................. 3

1.4 设计过程............................................................................................................. 4

1.5 指导方针............................................................................................................. 4

1.6 设计基础............................................................................................................. 5

第二章 设计方法.............................................................................................................. 6

2.1 模块设计............................................................................................................. 6

2.2 数据设计............................................................................................................. 6

2.3 体系设计............................................................................................................. 7

第三章 框架设计.............................................................................................................. 7

3.1 瀑布模型............................................................................................................. 7

3.1.1 概述.......................................................................................................... 7

3.1.2 瀑布模型优缺点........................................................................................ 8

3.1.3 客户需求................................................................................................... 8

3.2 增量模型............................................................................................................. 9

3.2.1 概述.......................................................................................................... 9

图3-2 增量模型............................................................................................... 10

3.2.2 增量模型优缺点....................................................................................... 10

小结............................................................................................................................... 11

个人感想................................................................................................................. 11

参考文献................................................................................................................. 13


摘要

软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。建议用数学语言来抽象事务和问题,因为数学是最好的抽象语言,并且它的本质就是抽象。将复杂的问题分解成可以管理的片断会更容易。将问题或事物分解并模块化这使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。

关键字:抽象语言  模块化  耦合度


引言

软件设计方法论的这套基本原理已经经过了多年的进化,在软件开发的生命周期中,软件设计是在软件描述提供的的基础上,对软件需求进行分析以形成软件内部结构的描述说明的活动之一。耦合和内聚是两个用来评估软件设计质量的方法。每种概念的影响程度不尽相同,但它们都经历了时间的洗礼。基于这些基本原理设计者可以采用更多更成熟的设计方法。


第一章软件设计概述

1.1 软件设计定义

软件设计即应用各种各样的技术和原理,并用它们足够详细的定义一个设备、一个程序或系统的物理实现的过程。”对任意的工程产品或系统,开发阶段绝对的第一步是确定将来所要构建的制造原型或实体表现的目标构思。这个步骤是由多方面的直觉与判断力来共同决定的。这些方面包括构建类似模型的经验、一组引领模型发展的原则、一套启动质量评价的标准、以及重复修改直至设计最后定型的过程本身。计算机软件设计与其他工程学科相比还处在幼年时期,仍在不断变化中,例如更新的方法、更好的算法分析、以及理解力的显著进化。软件设计的方法论的出现也只有三十年多一点,仍然缺乏深度、适应性和定量性质,通常更多的与经典工程设计学科相联系。尽管如此,现今的软件技术已经存在、设计质量的标准也可使用、设计符号亦可以应用。软件设计是一种在设计者计划中通过诸如软件如何满足客户的需要,如何才能容易地实现和如何才能方便地扩展功能以适应新的需求等不同的考虑的创造性活动。软件设计有很多设计方法或技巧,通过借鉴他人的经验让这件事完成得更好。同时,设计者们也可以利用成熟的标记法将他们的想法和计划传达给开发者以及其他相关人员,使他们更好地了解这个系统。带着这些意见,我们一起来看看什么有助于程序员们找到他们的软件涅盘。

1.2 设计要素

软件设计包括软件的结构设计,数据设计,接口设计和过程设计。

结构设计是指:定义软件系统各主要部件之间的关系。

数据设计是指:将模型转换成数据结构的定义。

接口设计是指:软件内部,软件和操作系统间以及软件和人之间如何通信。

过程设计是指:系统结构部件转换成软件的过程描述。

1.3 设计原则

(1).设计对于分析模型应该是可跟踪的:软件的模块可能被映射到多个需求上。

(2).设计结构应该尽可能的模拟实际问题。

(3).设计应该表现出一致性。

(4).不要把设计当成编写代码。

(5).在创建设计时就应该能够评估质量。

(6).评审设计以减少语义性的错误。

(7).设计应该模块化,将软件逻辑地划分为元素或子系统,并包含数据、体系结构、接口和构件的清晰表示。

1.4 设计过程

软件的设计是一个将需求转变为软件陈述(表达)的过程。这种陈述给一个对软件的全局观点。系统通过逐步求精使得设计陈述逐渐接近源代码。这里有两个基本步骤;

第一步是初步设计 Preliminary design ,关注于如何将需求转换成数据和软件框架。

第二步是详细设计Detail design ,关注于将框架逐步求精细化为具体的数据结构和软件的算法表达。发生中的设计行为、数据、算法和程序设计都需要由现代程序所需的界面设计这一清晰的行为来结合起来。界面设计Interface design建立程序布局和人机交互机制。贯穿设计过程的质量由一系列的正式技术评定formal technical reviews或设计排演 design walkthroughs来评价。

1.5 指导方针

(1).设计应该展现层次结构使得软件各部分之间的控制更明智。

(2).设计应当模块化;这就是说,软件应在逻辑上分割为实现特定的功能和子功能的部分。

(3).设计应当由清晰且可分离的数据和过程表达来构成。

(4).设计应使得模块展现独立的功能特性。

(5).设计应使得界面能降低模块之间及其与外部环境的连接复杂性。

(6).设计应源自于软件需求分析期间获得的信息所定之可重复方法的使用。要拥有良好的设计特征不是靠碰运气,而在设计过程中通过综合运用基础设计原理、系统方法论、彻底的评定回顾可以有助于良好的设计。软件设计方法每天都在进化,作为已经经过测试和细化的方法,良好的设计应具有以下的四种特性,并在所有这些特性之间保持一致。

A.将信息领域的表达转换为软件设计的表达的机制。

B.表示功能组件及其界面的符号。

C.逐步求精和分割的试探。

D.质量评估的指导方针。开发软件的时候,不管采用何种设计方法您必须能够熟练运用一套关于数据、算法和程序设计的基本原理。

(7).设计应该导出降低模块和外部环境间复杂连接的接口。

1.6 设计基础

抽象Abstraction在最高层次上指的是使用待解决的问题领域内的术语描述的解决方案。相对较低层次的抽象则更多的面向程序语言,最低层的抽象则是解决方案的可直接实现的方式描述。软件设计的每一个步骤都是对相应层次解决方案的抽象的逐步求精。

求精 Refinement 又叫做逐步求精指的是通过程序细节连续细化来开发程序体系的策略。分步骤的对程序抽象进行分解直至成为编程语言的过程同时造就了程序的层次结构。在这一点上要对细节多做考虑,这也展示了求精实际上是个苦心经营的过程。

模块化 Modularity 指的是软件可被分割为分别命名并可寻址的组件(也叫做模块),将模块综合起来又可以满足问题的需求的性质。“软件的模块化是允许智能化管理程序的唯一属性。”换句话说,当您将一个复杂问题分解为一些小问题时会更容易解决。需要重点解释的是即使一个系统必须象“单片机”一样来实现,它也可以采用模块化设计。

软件体系(架构)Software Architecture涉及到程序的两个重要特性:1)模块的层次结构。 2)数据结构 。这源自于需求分析时将真实世界问题的含蓄定义与软件解决方案的要素关联起来的分割过程。当问题的每个部分通过一个或多个软件要素得到解决后,与问题的定义和解决相一致软件和数据结构的进化就开始了。这个过程代表了软件的需求分析和设计之间的位置。

控制层级Control Hierarchy也称作程序结构,描述程序组件的组织并意味着控制层级。它并不描述软件的程序方面,比如进程顺序、决定的事件/命令、或工作循环。

数据结构Data structure描述了单个数据间的逻辑关系。数据结构规定了数据的组织、访问方法、关联程度、和信息的选择处理。数据结构的组织和复杂性只受限于设计者的灵活性。唯一的限制就是经典数据结构的数量阻碍了更多的久经考验的结构出现。

软件程序Software Procedure着重于处理每个模块的细节并必须提供一个精确的处理规范,包括事件顺序、准确的判定点、重复操作、甚至数据结构。软件的程序表现是分层的,处理方法应该包括其所有子模块的参考。

信息隐藏Information Hiding的法则建议 由设计决定所刻划的模块特性应该对其余的模块不可见 。换句话说,模块应被设计和指定为包含在模块内部且其他模块不可访问的内容对其他模块来说是无需的。隐藏意味着有效的模块性能够通过定义一套独立的模块来实现,这些模块相互之间的通信仅仅包括实现软件功能的所必须的信息。将使用信息隐藏作为设计标准在测试或今后的维护期间需要修改系统时带来了最大的好处。

第二章设计方法

设计过程中用以促成模块化设计的四个区域:模块、数据、体系 和程序设计。

2.1 模块设计

模块设计减低了复杂性、便于修改、且使得支持系统不同部分的并行开发实现起来更容易。模块类型提供的操作特性通过结合时间历史、激活机制、和控制模式来表现。在程序结构内部,模块可以被分类为:

(1).顺序 sequential模块,由应用程序引用和执行,但不能从表观上中断。

(2).增量 incremental模块,可被应用程序先行中断,而后再从中断点重新开始。   (3).并行 parallel 模块,在多处理器环境下可以与其他模块同时执行。单独的模块更容易开发,因为功能可以被划分出来,而界面只是用来确保功能的独立。功能的独立性可以使用两个定性的标准来衡量: 凝聚性 cohesion -衡量模块的功能强度的相关性,和耦合性 coupling -衡量模块间的相互依赖的相关性。

2.2 数据设计

 数据设计Data design首先并且有些人也坚信,是最重要的设计行为。数据结构的影响和程序上的复杂性导致数据设计对软件质量有着深远的影响。这种质量由以下的原理来实施:

(1).适用于功能和行为分析的系统分析原理同样应该适用于数据。

(2).所有的数据结构,以及各自所完成的操作都应该被确定。

(3).创建数据词典并用来详细说明数据和程序的设计。

(4).底层的数据设计决定应该延迟至设计过程的后期。

(5)数据结构的陈述(具体说明)应该只被那些直接使用包含在此结构内的数据的模块所知道。

(6).用的数据结构和操作库可以在适当的时候使用。

(7).软件设计和编程语言应该支持抽象数据类型的规范和实现。

2.3 体系设计

体系设Architectural Design的主要目标是开发模块化的程序结构并表达出模块间的控制相关性。另外,体系设计融合了程序结构与数据结构,以及使得数据得以在程序中流动的界面定义。这种方法鼓励设计者关注系统的整体设计而不是系统中单独的组件。选用不同的方法会采用不同的途径来接近体系的原点,但所有这些方法都应该认识到具有软件全局观念的重要性。程序设计Procedural Design在数据、程序结构、和陈述详细算法的说明都已使用类似英语的自然语言来呈现后,再确定程序设计。使用自然语言来陈述的原因是当开发小组的绝大多数成员使用自然语言来交流的话,那么小组外的一个新手在不经学习的情况下会更容易理解这些说明。这里有个问题:程序设计必须毫无歧义的来详细说明程序,但我们都知道不含糊的自然语言也就不自然了。

第三章 框架设计

为了获得高质量的软件所需要完成的一系列的任务框架,它规定了完成各项任务的工作步骤。

3.1 瀑布模型

3.1.1 概述

1970年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被广泛采用的软件开发模型。

瀑布模型是最早出现的软件开发模型,在软件工程中占有重要的地位,它提供了软件开发的基本框架。其过程是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容给出该项活动的工作成果,并作为输出传给下一项活动。同时评审该项活动的实施,若确认,则继续下一项活动;否则返回前面,甚至更前面的活动。对于经常变化的项目而言,瀑布模型毫无价值。(采用瀑布模型的软件过程如图所示)

图3-1 瀑布模型

3.1.2 瀑布模型优缺点

1.优点

1)为项目提供了按阶段划分的检查点。

2)当前一阶段完成后,您只需要去关注后续阶段。

3)可在迭代模型中应用瀑布模型。

增量迭代应用于瀑布模型。迭代1解决最大的问题。每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。

2.缺点

1)在项目各个阶段之间极少有反馈。

2)只有在项目生命周期的后期才能看到结果。

3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。

4)瀑布模型的突出缺点是不适应用户需求的变化

3.1.3 客户需求

尽管瀑布模型招致了很多批评,但是它对很多类型的项目而言依然是有效的,如果正确使用,可以节省大量的时间和金钱。对于您的项目而言,是否使用这一模型主要取决于您是否能理解客户的需求以及在项目的进程中这些需求的变化程度,对于经常变化的项目而言,瀑布模型毫无价值,对于这种情况,您可以考虑其他的架构来进行项目管理,比如名为螺旋模型(spiral model)的方法。

在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果,实施完成所需的工作内容。当前活动的工作结果需要进行验证,如果验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改。瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。但是,这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:

1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;

  2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;

3)早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。   按照瀑布模型的阶段划分,软件测试可以分为单元测试,集成测试,系统测试。

3.2 增量模型

3.2.1 概述

增量模型融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。当使用增量模型时,第1个增量往往是核心的产品,即第1个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。

增量模型(incremental model)与原型实现模型和其他演化方法一样,本质上是迭代的,但与原型实现不一样的是其强调每一个增量均发布一个可操作产品。早期的增量是最终产品的“可拆卸”版本,但提供了为用户服务的功能,并且为用户提供了评估的平台。

图3-2 增量模型

3.2.2 增量模型优缺点

1.特色

增量模型的特点是引进了增量包的概念,无须等到所有需求都出来,只要某个需求的增量包出来即可进行开发。虽然某个增量包可能还需要进一步适应客户的需求并且更改,但只要这个增量包足够小,其影响对整个项目来说是可以承受的。

2.优点

采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源。如果核心产品很受欢迎,则可增加人力实现下一个增量。当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径。这样即可先发布部分功能给客户,对客户起到镇静剂的作用。此外,增量能够有计划地管理技术风险。

3.缺点

1).由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。

2).在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而使软件过程的控制失去整体性。

3).如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程。

小结

个人感想

曾听老师说过,如果,某个科目的结束了,你做了一个课程设计或者小论文,只要是认真完成了。那么你对这门课至少掌握了70%。写完这个小论文,我深有感触。曾经认为,软件就是写程序,一个软件工作组就是由程序员组成。在这次写小论文的过程中,我了解到软件工程对于软件设计的重要性,因为软件是为了给用户使用而研发的,所以这其中必须有用户的需求分析,当知道开发方向后,还要知道这其中可能出现的问题,以及怎样解决这些问题。之后就要设计出这个程序的大体框架,然后再写出程序,经过调试,纠错后交付使用。后期需要大量的维护。也许就像不了解软件的人永远想不通软件为什么要跟新一样,没有学过软件工程的人,是很难写出一个软件的,他们写出的只是程序,而不是一个可以使用的软件。

段晓强 1032104108

经过课程设计这段时间老师地教诲和自己地努力,我发现了自己的不足,积累了一些经验。我们在学习的过程中对自己要有信心。一个人能力发挥的程度并不完全取决于周围环境,而在很大程度上决定于自身的努力。我们在学习的过程中不能只学而不去总结归纳。当然,在总结中,随着新旧知识不断地融合与相撞,同时也会产生新的东西,启发人的大脑,从而不断地创新,丰富学习内容。创新是在一定的学习积累的基础上的,因此,它不仅要求我们只学会现有的知识,更重要地是创新,这样,学习才更有意义,更有价值。

胡  明 1032104114

本次期末论文到此已经顺利结束,通过这次的期末论文,我学到了很多。在以前的2年时间内我学习了很多的课程及编程语言,虽然通过学习对这些课程有所了解和掌握,但是始终处于理论知识的掌握阶段,并没有真正应用于实践设计开发,所以对知识的掌握还不够全面和熟练。而且并不能真正独立的开发出一个完整的应用于实际的系统。通过这次的小论文,我已经可以完成这一任务,对自身的编程能力也有了很大的提高。整个写作过程对我来说是一次能力的真正提高的过程;是一次将理论应用于实践的过程;是将以前所学知识充分利用的过程,比如管理信息系统,数据库概论等等;是一次真正的实践过程。总体说来,这次我真正学到了很多有用的东西,是一些在课堂内所学不到的知识,收获很大。

马  强 1032104127

通过此次学习,我对软件工程有了进一步的了解。它需要经过定义、开发、使用和维护这样一个漫长的过程,需配置程序、文档和数据等成分。在软件开发的过程中,传统的生命周期方法学和对象方法学是应用的最广泛的软件工程方法,我们既要要求每一步的正确性又要确定每一步的精简性,根据生命周期全过程中应完成的任务性质,在概念上分为问题定义、可行性研究、需求分析、概要分析、详细设计、编码和单元测试、综合测试以及维护等,这其实实质性的证明我以前对软件工程完全错误认识,它不是简单指编码程序。它是经管理和技术相结合,由一组组织良好、管理严密、各类人员协调配合完成的工程项目。

                                                        张朝阳 1032104154


参考文献

[1]  张海藩.软件工程导论(第三版).清华大学出版社.1998

[2]  张海藩.软件工程导论[M].北京:清华大学出版社.2003

[3]  张海藩,牟永敏.面向对象程序设计实用教材.清华大学出版社.2001

[4]  张海藩.软件工程[M]北京:人民邮电出版社.2011

更多相关推荐:
《软件工程》课程设计个人报告

软件工程课程设计报告海天一色网上书店软件工程课程设计个人报告题目网上书店学院名称信息科学与工程学院专业班级计算机092班报告人姓名梁宏报告人学号20xx01051413承担角色网页设计员同组组长安文龙同组其他成...

软件工程课程设计报告

滨江学院软件工程课程设计报告(20**--20**年度第一学期)课程名称:软件工程课程设计题目:个人电子相册的设计与实现院系:计算机科学与技术系班级:软件工程(3)班学号:***姓名:**指导教师:***设计周…

软件工程课程设计报告 之 总结性报告

总结性报告1.时间飞Q20xx项目从拟定好课题起,经过问题定义,可行性研究,需求分析,概要设计,详细设计,主要编程,分布测试,总体测试,到整体装配完成历时一个半月。2.人员主程序员(组长):王昌帅辅程序员:司吉…

软件工程课程设计报告

福建农林大学金山学院课程设计报告课程名称:软件工程课程设计题目:旅游信息管理系统姓名:系:信息与机电工程系专业:计算机科学与技术专业承担角色:辅助程序员20##年12月9日课程设计结果评定目录1.课程设计概述.…

《软件工程》课程设计报告模板

软件工程课程设计报告课程设计题目电子科技大学中山学院组长其他成员指导教师实验地点完成起止日期116计算机学院班级1目录一系统可行性研究报告31引言32现行系统调查33新系统概述34可行性综合评述35方案选择46...

软件工程课程设计总结

专业:08计本2班姓名:张敬宇学号:20806032039在我们整个软件工程过程中,我体会到了许多,也学到了许多。在项目要进行自由分组后,我们的项目小组便诞生了。我们小组由3个成员组成,在相互商量后我们也确定了…

软件工程课程设计实验报告

重庆邮电大学软件工程课程设计实验报告网上选课系统姓名雷雷学号专业计算机科学与技术班级0410801指导老师邹洋教室S331A时间一实验题目网上选课系统主要功能描述系统首先维护校内所有课程的信息课程分为研究生本科...

软件工程课程设计报告模板

《软件工程》综合设计报告题目:学院:信息科学与技术学院班别:软件工程1-4班组长:学号:指导老师:完成时间:20##-6-10成都大学信息与科学技术学院提要软件工程综合设计报告是软件工程的六个实验报告文档的汇总…

20xx年软件专业《软件工程综合课程设计》报告模版

长沙理工大学软件工程综合课程设计报告项目或系统课题名称子课题如果存在专业软件工程班级软件20xx0班姓名学生姓名报告日期20xx年11月30日目录1背景与意义11背景与现状12趋势与前景13工作基础条件与优势2...

软件工程课程设计报告

西安科技大学软件工程课程设计报告题目文本聊天室TalkRoom班级计科0902班学号0908030201姓名梁利锋联系方式1580920xx9220xx年7月6日目录1绪论11选题目的及意义12系统概述2可行性...

软件工程课程设计报告

沈阳理工大学课程设计专用纸沈阳理工大学沈阳理工大学课程设计专用纸沈阳理工大学沈阳理工大学课程设计专用纸沈阳理工大学沈阳理工大学课程设计专用纸沈阳理工大学沈阳理工大学课程设计专用纸沈阳理工大学沈阳理工大学课程设计...

软件工程---课程设计 报告模版

软件工程课程设计报告题目院系信息科学与工程学院专业班级软件工程120x班学生姓名学号指导教师2015年8月31日至2015年9月11华中科技大学武昌分校制日软件工程课程设计任务书目录1系统需求分析页码11问题描...

软件工程课程设计报告(25篇)