作业(总)
第一章
1.结合你之前的工程经验以及任正非致员工信,谈谈你对软件工程的看法?
软件工程就是按照工程学的管理方式,有组织、有计划的,在一定的质量基础、时间限度和成本范围内,实现功能明确的软件系统。
2.软件开发就是编码么?谈谈你对软件开发的本质的认识
软件开发不单单是编码,软件开发是一个软件从设计到全部功能实现的这个过程。这其中需要先搞清楚客户的需求,写需求分析,再建模,最后才是编写代码。所以,编码只是软件开发的一部分。
3.举例说明软件的特点有哪些?
复杂性,一致性,退化性,易变形,移植性,高成本
4.什么是软件危机?软件危机出现的原因及解决手段有哪些?
计算机硬件技术的不断进步,要求软件能与之相适应。然而,软件技术的进步一直未能满足形势发展提出的要求,致使问题积累起来,形成了日益尖锐的矛盾,最终导致了软件危机。
原因:一是如何开发软件,以满足对软件日益增长的顾客需求;二是如何维护数量不断膨胀的现有软件。
解决办法:重视需求分析,与客户的沟通,确切表达需求
重视设计和实现过程的资料
充分的测试工作
维护和管理工作
统一的、公认的方法论和规范指导
5.软件工程的要素有哪些?各有什么作用?
软件工程的三要素:办法,过程,工具
作用:软件工程办法为软件开发提供了“如何做”的技术;软件工具为软件工程办法提供了自动的或半自动的软件支撑环境;过程是为了获得高质量的软件所需要的一系列任务框架,规定了完成各项任务的工作步骤。
第三章
1.简述软件过程、软件生存周期、软件过程模型(软件生存周期模型)三者之间的概念区别。
软件过程:软件生存周期中的一系列相关过程所涉及的活动。过程是活动的集合。活动是任务的集合。任务是将输入转换为输出的操作。
软件生成周期:软件从生到死的过程,这个过程一般称之为软件的软件生存周期或生命周期。软件生存周期可划分为定义、开发和运行三个时期,每个时期又细分为若干个阶段。软件生存周期包括可行性分析、项目计划、需求分析、软件设计、编码与测试、运行与维护等阶段,每个阶段又包含一系列的活动。
软件过程模型(软件生存周期模型):一个包括软件产品开发、运行和维护中有关过程、活动和任务的框架,覆盖了从系统的需求定义到系统的使用终止。软件生存周期模型是一种软件过程的抽象表示,也称为软件开发模型。软件生存周模型一般使用直观的图形标识软件开发的过程,主要根据软件的类型、规模,特别是软件的开发方法、开发环境等多种因素确立过程模型。
2.软件过程就是软件开发过程么?为什么?
不是,软件过程是软件生存周期中的一系列相关过程所涉及的活动。软件开发过程只是其中一部分。
3.请选择两个常见的软件过程模型,谈谈你对它们的理解?并对它们进行比较。
瀑布模型( Waterfall Model )将软件生命周期划分为软件计划、需求分析和定义、设计、实现、测试、运行和维护这6个阶段,规定了它们自上而下、相互衔接的固定次序,如同瀑布流水逐级下落。从本质来讲,它是一个软件开发架构,开发过程是通过一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈.
增量模型(Incremental Model)也称为渐增模型。软件被作为一系列的增量构件来设计、实现、集成和测试构件——由多个相互作用的模块组成、能够完成特定功能且可以独立配置的单元。每一个构件的内容不断递增,实现的功能逐渐扩充,其过程是迭代式的。
瀑布模型特点:
顺序性和依赖性
推迟实现
质量保证的观点
是一种线性模型
强调文档的作用
局限性:
软件生存周期的末期才能看到开发成果,风险大,错误代价大
不能很好的适应需求变化
增量模型特点:开发中用户可以及早看到部分软件功能,发现问题
4.瀑布模型和其他常见模型有什么关联和区别?
瀑布模型是一种线性模型,文档驱动的模型。增量模型采用一系列的增量方式开发系统。螺旋模型结合瀑布模型和快速原型,是一种风险驱动的开发模型构件集成模型利用模块化方法将整个系统模块化,复用构件库中的软件构件,通过组合手段提高应用软件系统过程的效率和质量。统一过程模型是以用例驱动的,以架构为中心,迭代和增量的过程。瀑布模型是结构化模型的基础,其他模型都有参考它,但是都有改进,可以适应需求的更改。与面向对象的模型关系不大。
5.根据你当前所在的团队项目,你更倾向于选择哪一种软件过程模型?为什么?
构件集成模型,我们的软件开发使用的是python语言,更加适合面向对象的方法。
第五章
1.需求分析的目的是什么,有什么作用?
目的:要求开发人员准确地理解用户需要什么,进行细致地调查分析,将用户的需求陈述转化为完整的需求定义,再由需求定义转化为相应的软件需求规格说明。
作用:深入描述软件的功能和性能,确定软件设计的限制和软件同其它系统元素的接口细节,定义软件的其它有效性需求。需求分析虽处于软件开发的初期阶段,但它对于整个软件开发过程以及产品质量至关重要。
2.软件需求有哪些分类?请举例说明。
业务需求(Business requirement):反映了组织机构或客户对系统、产品高层次的目标要求。从组织或者客户的角度,实质就是业务的建设方;比如房地产市场的开发商
用户需求(user requirement):用户的目标,或用户要求系统必须能完成的任务。从使用产品的用户的角度;比如买房的人
功能需求( functional requirement):规定开发人员必须在产品中实现的软件功能,用户利用这些功能来完成任务,满足业务需求。从产品本身的角度,即产品要具备怎样的功能,才能满足相应的业务需求和用户需求;比如房子。
非功能需求(non-functional requirements):非功能需求主要与系统的总体特征相关,是一些限制性要求,是对实际使用环境所做的要求。
3.需求分析过程有哪些步骤?
步骤包括:沟通、导出需求、与客户和用户协商、可行性研究、精化需求、编写需求规格说明、验证需求、管理需求
4.需求获取方法有哪些?
会谈技术、调查技术、场景分析技术、快速原型法
5.你所在的项目团队会选择采用哪些需求获取方法?请具体实践获取需求,在博客中展示(问卷调查表或会谈照片、小视频等)。并总结获取的功能需求以及非功能需求。
调查技术:功能需求为确定调查内容,非功能需求为可靠可信分析
第六章
1.结构化分析的特点是什么?
采用自顶向下、逐层分解的方法求解复杂问题
2.数据流图的建模元素有哪些?如何构建数据流图?有哪些注意事项?
数据流图的建模元素有:
(1)→:数据流。数据流是数据在系统内传播的路径,因此由一组成分固定的数据组成。
(2) □:数据源(终点)。
(3)○:对数据的加工(处理)。
(4)〓:数据存储。表示信息的静态存储。
如何构建数据流图:
(1)构建顶层数据流图
(2)构建0层数据流图 (细化顶层数据流图)
(3)逐层细化数据流图
注意事项:
命名:数据流图中每个元素必须有名字,且命名合。
(2) 画数据流不是画控制流。
(3) 每个加工至少有一个输入数据流和一个输出数据流,反映出此加工数据的来源与加工的结果。
3.数据字典有哪些要素(条目)定义?
数据流条目、数据存储条目、数据项条目(数据流或数据存储分量)、加工条目
第七章
1.软件设计的目标及主要任务有哪些?
软件设计的基本目标:构造系统“怎么做”的模型描述。主要任务包括:总体设计和软件详细设计
2.什么是模块(构件)化设计思想?
把一个大型软件系统的全部功能,按照一定的原则合理地划分为若干个模块,每个模块完成一个特定子功能,所有的这些模块以某种结构形式组成一个整体,这就是软件的模块化设计(Modular Design)。分解、抽象、逐步求精、信息隐蔽和模块独立性,是软件模块化设计的指导思想。
3.模块独立性的两个度量标准是什么?
模块自身的内聚(Cohesion),也称为块内联系,指一个模块内部元素彼此结合的紧密程度。
模块之间的耦合(Coupling),也称为块间联系。
4.内聚和耦合的含义是什么?各有那些种类?请举例说明每一类型。
内聚性:是从功能的角度对模块内部聚合能力的量度。
其中包括功能性内聚、顺序性内聚、通信性内聚、过程性内聚、时间性内聚、逻辑性内聚和偶然性内聚。
过程性内聚:模块内的各个任务必须按照某一特定次序执行。在函数级别的模块比较常见。例如:读/写文件操作:判断文件是否存在、判断文件是否有相应权限、打开文件、读(或写)文件
耦合性:是对一个软件结构内不同模块之间互连程度的度量
其中包括非直接耦合、数据耦合、特征耦合、外部耦合、公告耦合和内容耦合。
公共耦合:若允许一组模块访问同一个全局性的数据结构,则称它们为公共耦合。全局性的数据结构可以是共享的通信区、公共的内存区域、任何存储介质文件、物理设备等
5.为什么要高内聚和低耦合?高内聚低耦合是否意味着内聚越高越好,耦合越低越好呢?
一般来说,在系统较高层次上的模块功能复杂,内聚要低一些;而较低层次上的模块内聚程度较高,达到功能内聚的可能性比较大。耦合性是对一个软件结构内不同模块之间互连程度的度量。耦合性的强弱取决于模块间接口的复杂程度,以及通过接口的数据类型和数目。
第八章
1.软件结构图的形态特征有哪些指标?各有什么含义?
(1)深度:指结构图控制的层次,即模块的层数。
(2)宽度:指一层中最大的模块个数。
(3)扇出:指一个模块直接下属模块的个数。如模块M的扇出为3.
(4)扇入:指一个模块直接上属模块的个数。
2.软件结构有哪些优化原则?
(1)模块独立性准则
划分模块时,尽量做到高内聚、低耦合,保持模块相对独立性,以此原则优化初始的软件结构。
(2)软件结构的形态特征准则
软件结构的深度、宽度、扇入数和扇出数都要适当。
(3)模块的大小准则
按模块的独立性,即根据模块的功能来决定模块的大小。
过大的模块应该进行分解。过小的模块会增加模块间接口的复杂性,可以进行适当的合并,但不应降低模块的独立性。
(4)模块控制域与作用域之间的准则
一个模块的作用域应在其控制范围之内,且条件判定所在的模块应与受其影响的模块在层次上尽量靠近。
(5)模块的接口准则
模块的接口要简单、清晰,力求降低模块接口的复杂程度,设计单入口、单出口的模块
3.数据流模型的类型有哪些?各有什么特点?
有三种数据流类型:
(1)变换流:整个数据流体现了以输入、变换、输出的顺序方式,沿一定路径前行的特征,这就是变换型数据流,简称变换流。
(2)事务流:具有根据条件选择处理不同事务的数据流,就是事务型数据流,简称事务流。
(3)混合流:具有将事务流和变换流组合出现,就是混合型数据流,简称混合流。
4.简述面向数据流的变换以及事务设计方法的步骤。
第一步:复查基本系统模型,并精化系统数据流图
第二步:分析数据流类型,确定数据流具有变换流特征还是事务流特征
如果是变换流特征,确定输入流和输出流的边界(也分别称为最高输入/输出抽象点),输入流边界和输出流边界之间就是变换流,也称为“变换中心”。变换流加工处理的是某些形式的内部数据。
如果是事务流特征,则可确定一个接收分支和一个发送分支。其中发送分支包含一个“事务中心”和各个事务动作流。
5.结构化详细设计工具有哪几种?各有什么特点?
(1)图形工具:把过程的细节表示成一个图的组成部分,在这个图上,逻辑构造用具体的图形来表示。
(2)列表工具:用一个表来表示过程的细节,这个表列出了各种操作及其相应的条件,即描述了输入、处理和输出信息。
(3)语言工具:用伪代码来表示过程的细节,这种伪代码很接近于编程语言。
6. 请使用面向数据流的设计方法对你的团队项目进行总体设计,将数据流图(DFD)变换得到系统的模块结构图(MSD)。
7.请选择合适的结构化详细设计工具对你的团队项目的模块进行详细设计。
第十一章
1.面向对象的分析与设计方法与结构化的分析设计方法有什么不同?
主要区别是思维上的区别。
结构化设计是面向过程设计,是从计算机处理问题的角度来工作:即“输入——运算——输出”的模式。
面向对象的分析设计是以对象为单位,考虑对象的属性和方法,分析问题时以一个具体的流程(事务过程)为单位,考虑它的实现。
2.面向对象的分析与设计之间有什么样的联系?
面向对象的需求分析对下列步骤进行动态迭代:
需求流:对功能建模,使用UML用例图及用例场景描述、辅以其他UML动态模型( 如活动图)
分析流:
(1)领域与业务建模,从用例描述中应用名词抽取、CRC卡片等方法建模实体类,建立业务类图模型(包括实体类、边界类、控制类等分析类,类
的属性与操作,类与类之间的关系。
(2)系统动态行为建模,使用UML动态模型(如顺序图、通信图、状态图等)对对象间交互行为进行动态建模,进一步精化用例实现。
面向对象的设计以面向对象分析所产生的需求规格说明书为基础,设计出描述如何实现各项需求的解决方案。面向对象的设计是将分析所创建的分析模型转换为设计模型,同时通过进一步细化需求,对分析模型加以修正和补充。
因此,需要在分析模型中为系统实现补充或调整一些新的类、属性或操作。使用合适的设计原则和设计模式。在设计时同样遵循 模块化、抽象、信息隐蔽、功能独立(高内聚低耦合)、可复用等设计准则 。
3.请使用面向对象的设计方法对你的团队项目进行总体设计,构建逻辑体系结构图(包图、类图)。

包图

类图
4.请使用面向对象的构件设计方法对你的团队项目进行详细设计,对构件内部的属性、操作进行建模(顺序图、通信图、状态图、活动图等),并构建物理体系结构图(构件图、部署图)。
线上打印系统顺序图

线上打印系统活动图

浙公网安备 33010602011771号