软件工程-理论与实践(精装版)课件 毛新军 第9-16章 用户界面设计 - 软件项目管理_第1页
软件工程-理论与实践(精装版)课件 毛新军 第9-16章 用户界面设计 - 软件项目管理_第2页
软件工程-理论与实践(精装版)课件 毛新军 第9-16章 用户界面设计 - 软件项目管理_第3页
软件工程-理论与实践(精装版)课件 毛新军 第9-16章 用户界面设计 - 软件项目管理_第4页
软件工程-理论与实践(精装版)课件 毛新军 第9-16章 用户界面设计 - 软件项目管理_第5页
已阅读5页,还剩532页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用户界面设计内容用户界面基础人机交互方式用户界面的组成元素及UML表示用户界面设计任务、过程和原则具体的设计步骤及方法用户界面输出及评审用户界面的输出用户界面的评审计算机软件与外界的二种不同交互方式用户软件接口软件人机交互通过软件接口与其他的软件系统进行交互通过人机交互与软件用户进行输入和输出其它软件接口访问用户界面设计元素1.1人机交互的常见方式文本通过文本方式进行输入和输出,如DOS、Linux下的文本命令,特点:须记忆命令、不友好图形化界面通过图形化界面进行输入和输出,如窗口、按钮、对话框,特点:直观、简洁、友好语音通过语音来进行输入和输出,如与机器人的交互、Siri、手机导航软件等,特点:将双手解放出来,需要麦克风手势通过姿势(gesture)来进行交互,如与无人机交互等,特点:准确性不高,需要视频传感器示例:基于文本输入的用户界面DOS中的用户命令的文本输入以及文本的输出基于文本的交互方式有何局限性?示例:“腾讯会议”的图形化用户界面图标展示软件名称按钮点击完成相关的操作加入会议注册/登录基于图形化界面的交互方式有何优势?示例:基于语音的人机交互设计基于语音交互设计的友好性和满意度计算机能够准确地理解用户的语音用户能否听得到、听得清计算机反馈的语音信息能否在不同的环境(如嘈杂、安静)下具有不同的音亮能否针对用户的位置来定向式地播放语言……什么情况下用语音交互方式比较合适?思考和讨论除了图形化界面之外,人和计算机之间还有哪些交互手段,并列举典型的软件示例。1.2人机交互的关键用户的满意度用户通常将用户界面视为软件本身,用户界面是用户接触软件的主体要素用户界面设计的质量直接决定了用户对软件系统的评价,影响用户对软件系统的满意度方便输入快速、便捷、准确、友好的输入;鼠标、点击、选择等直观输出直观、显式、可理解、简洁的输出;所见即所得、图形展示等以用户为中心设计用户界面将用户特征作为用户界面设计决策的依据识别用户及其特征;用户是谁,有何特点如操作习惯、文化背景、教育程度分析用户与计算机系统之间的交互信息及合适的手段尽可能获得用户反馈并以此来改进和优化设计如何来获得用户反馈?软件原型从用户立场出发、便于用户理解和操作以用户体验感受和满意度为依据评审交互设计1.3用户界面元素及实现方式静态元素与软件系统的运行状态无关,没有变化如文本、图标、图形、图像动态元素与软件运行状态和业务逻辑相关,不允许用户修改如不可编辑文本、表格、图标、图形等用户输入元素由用户填写或者选择如编辑文本、单选按钮、多选框等用户命令元素点击后激活后端的业务处理或者刷新界面如按钮、菜单、超链接等用户界面元素示例用户输入元素静态元素用户命令元素动态元素????思考和讨论静态、动态、命令、输入界面元素有哪些?1.4用UML类图表示用户界面元素窗口或对话框

对象类静态和动态元素

类属性输入元素

类属性命令元素

类方法ClassName:PrinterSettingProperty: PrinterName: PrinterStatue: PrinterType: ……Methods: SetProperty() OK() Cancel()……用类图表示用户界面用UML顺序图表示界面的跳转关系跳转用顺序图表示用户界面的跳转内容用户界面基础人机交互方式用户界面的组成元素及UML表示用户界面设计任务、过程和原则具体的设计步骤及方法用户界面输出及评审用户界面的输出用户界面的评审2.1用户界面设计的任务根据软件需求及其操作流程,为其设计出与用户进行交互的界面,支持用户对软件的操作和使用2.2用户界面设计原则(1/2)直观性界面元素贴近业务领域,具有简洁、明确、直观特性界面中屏幕间的跳转关系简单、自然易操作性简单、简洁、不繁琐尽量减少用户输入的次数和信息量反应性界面必须在合理时间内对用户操作做出响应对耗时较长的内部处理过程必须提供及时的进度反馈用户界面设计原则(2/2)一致性保持一致的界面风格和操作方式与业界相关的用户界面规范和操作习惯相一致容错性界面设计应降低用户的误操作率、容忍用户的误操作对所有可能造成损害的动作,必须在用户确认后才进行允许用户对尽可能多的界面操作反悔(Undo)人性化在适当时机给用户提供需要的帮助或建议在任何情况用户均能理解软件系统的当前状态和响应信息界面的布局和色彩应使用户感觉舒适、自然思考和讨论是否以用户为中心是否遵循以上原则存在哪些不足缺陷有何改进意见建议讨论和分析软件界面设计中存在的问题和不足,提出改进意见2.3用户界面设计过程用户界面初步设计建立界面跳转关系精化各个界面设计评审界面设计用户界面设计以软件需求模型为依据,基于用例模型、用例交互模型等,采用自顶向下、逐步求精的设计原则2.3.1用户界面初步设计根据需求确定用户界面基于用例模型和用例交互模型确定界面中包含的元素设计静态元素、动态元素、输入元素、命令元素注意点关注界面元素及内容,不追求布局和美观(1)确定用户界面的设计元素分析软件需求的用例模型及用例交互模型用户向用户界面发送消息参数意味着用户需要提供某些信息,对应于用户需要输入信息,因此在用户界面上必须对应有相应的输入界面元素,并需提供配套静态界面元素以帮助和支持用户输入信息,这些设计元素就构成了用户界面类的相关属性如果用户界面类对象要向其他的类对象反馈信息,那么这些信息对应于用户界面需要输出的信息,此时在用户界面上必须对应有相应的动态元素以向用户显示信息处理的结果,这些动态元素就构成了用户界面类的相关属性(2)确定用户界面的操作分析软件需求的用例交互模型用户界面类对象向其他类对象发送的消息表示用户向后端业务处理系统提交的命令,它们对应于用户界面中的用户命令界面元素以及相应的操作这些操作大体表现为以下几种形式用户命令元素触发的操作(如点击“确认”按钮)动态元素的值的改变导致的操作(如显示的系统状态发生了变化)思考和讨论用例交互顺序图该用户界面应该有哪些输入和输出信息?有哪些方面的操作?示例:“空巢老人看护系统”用户界面概念设计引导界面“GuidingUI”登录界面“LoginUI”监视老人状况界面“MonitoringUI”控制机器人运动界面“MotionCtrlUI”

与老人交互界面“BiCallUI”系统设置界面“SettingUI”示例:用户界面“MonitoringUI”设计动态元素动态元素用户命令元素用户输入元素示例:用户界面的设计类图用户界面设计类图示例:登录用例的顺序图及其用户界面设计登录用例的顺序图登录用户界面用户输入元素用户命令元素示例:“LoginUI”的设计类图登录界面的设计类图登录用户界面2.3.2建立用户界面间的跳转关系目标确定主界面,用户刚使用某项用例时系统呈现的界面,其他界面均源自于主界面,且用户对其他界面操作后一般会回归到主界面确定界面间的跳转关系,即一个界面在何种情况下,或者在响应何种用户操作命令后将跳转至另一界面原因单个屏幕空间容量有限,不足以表现所有必要的界面元素用户在主屏幕上的界面操作可能导出新的屏幕,以便在新屏幕上进行面向特定业务功能的界面交互用UML图来表示用户界面的跳转关系交互图表示特定场景下的跳转及跳转发生时的消息传递类图表示界面间所有可能发生的跳转及跳转的原因示例:“空巢老人看护系统”用户界面跳转关系表示界面跳转的顺序图示例:“空巢老人看护系统”用户界面跳转关系表示界面跳转的类图示例:界面跳转实际的界面跳转2.3.3精化用户界面基于概念设计和界面流设计,给出目标软件产品界面的完整、详细的设计从界面概念设计成果出发进行细化、补充等,将界面流中每次跳转动作与具体的事件或界面动作关联起来在软件系统的全局范围内对屏幕的设计和界面流进行优化将精化后的界面设计成果提交给美工设计师,由其进行必要的装饰、美化工作精化内容补齐概念设计遗漏或者故意忽略的界面元素采用最合适的界面元素来组织信息的呈现或录入树形结构还是Tab、用什么样的选择按钮将哪些界面集结于一个区域,哪些界面元素应对齐将界面操作与UML类方法对应起来精化界面时同步修改、补充界面设计的UML类图考虑合并某些界面或者拆分某些界面确保界面设计风格的一致性内容用户界面基础人机交互方式用户界面的组成元素及UML表示用户界面设计任务、过程和原则具体的设计步骤及方法用户界面输出及评审用户界面的输出用户界面的评审3.1用户界面设计的输出用户界面原型可运行和演示、可操作和评估用户界面设计的UML模型顺序图类图3.2用户界面评审的内容和原则用户界面是否符合用户的操作习惯和要求,用户能够接受用户界面的展示形式用户界面的风格是否一致用户界面及其设计元素是否美观所有用户界面布局是否合理,跳转是否流畅,界面跳转与用例中的交互动作序列在逻辑上是否协调用户界面与其UML模型描述二者之间是否一致,用户界面的类图和顺序图二个模型之间是否一致用户界面的不同元素之间是否一致,如静态/动态元素描述与用户的输入/命令元素之间是否一致等等总结用户界面设计以用户为中心遵循理解性、易操作性、一致性、容错性和人性化等原则用户界面设计的过程以软件需求为依据概念设计、跳转关系设计、界面精化、设计评审用户界面设计的结果用户界面原型UML类图、交互图等模型课程实践1:设计开源软件的用户界面任务:开源软件的用户界面设计方法针对开源软件新增加的软件需求,考虑软件的用例模型和用例交互模型,对开源软件的用户界面进行设计,以支持用户与开源软件的输入和输出,进而实现开源软件的新功能要求基于开源软件新构思的软件需求,针对其用例模型和用例交互模型,要以用户为中心进行设计和优化结果:用户界面原型,用户界面的UML类图模型以及界面跳转的顺序图模型课程实践2:设计新开发软件的用户界面任务:软件用户界面设计方法基于用户的软件需求,针对软件系统的用例模型和用例交互模型,设计软件系统的用户界面,明确每个用户界面的设计要素,界面之间的跳转关系,以支持用户与软件系统之间的输入和输出要求针对所构思的软件需求,包括用例模型和用例交互模型,要以用户为中心开展用户界面的设计结果:用户界面原型,用户界面的UML类图模型以及界面跳转的顺序图模型思考和讨论你认为哪个软件的用户界面你最喜欢?为什么?问题和讨论软件详细设计内容软件详细设计概述任务、过程和原则详细设计的UML模型软件详细设计活动用例设计类设计数据设计子系统和构件设计详细设计文档化和评审1.1软件设计过程及关注点的变化结构性全局性关键性粗粒度过程性局部性细节性细粒度设计模型和文档体系结构设计人机界面设计详细设计整合与验证迭代设计、反复精化、持续优化1.2详细设计的任务输入:软件体系结构设计、用户界面设计、软件需求任务:对体系结构设计和用户界面设计成果进行细化和精化,获得高质量、面向实现的设计模型面向实现:直接支持编码和程序设计精化和细化的具体对象:子系统、构件、关键设计类和界面类软件详细设计软件需求软件详细设计模型体系结构设计模型用户界面设计模型实现约束和限制何为面向实现?详细设计是高层设计和底层实现间的桥梁高层软件体系结构设计软件详细设计软件实现辅助和支持落实和细化详细设计的定位体系结构设计与软件实现间的“桥梁”基于体系结构设计和用户界面设计后续程序设计的基础和依据确保体系结构设计得到落实的“关键”基于体系结构设计和用户界面设计,关注于体系结构中设计元素的内部细节设计更加关注软件的“实现”与体系结构设计相比较,详细设计抽象层次更低、粒度更小、更加关注实现细节1.3详细设计过程软件详细设计的活动(1/2)用例设计给出用例的具体实现解决方案,描述用例是如何通过各个设计元素(包括子系统、软构件、设计类等)的交互和协作来完成的类设计给出每个设计类的具体实现细节,包括类的属性定义、方法的实现算法等,使得程序员能够基于类设计给出这些类的实现代码软件详细设计的活动(2/2)数据设计对软件所涉及的持久数据及其操作进行设计,明确持久数据的存储方式和格式,细化数据操作的实现细节子系统/软构件设计针对粗粒度的子系统和软构件,给出其细粒度的设计元素,如子子系统、设计类等,明确这些设计元素之间的协作关系,使得它们能够实现子系统/软构件接口所规定的相关功能和服务1.4软件详细设计的要求和原则针对软件需求从软件需求出发,确保每一项软件需求都有相应的详细设计元素加以实现深入优化设计精心设计,以充分优化软件系统的性能、效能等,提高软件系统的可靠性、可重用性和可维护性等设计足够详细得到详实程度足以支持程序员编码的软件设计模型充分软件重用从多个不同的维度和层次进行充分的软件重用,以提高软件开发的效率和质量,减低开发成本活动图©CopyrightXinjunMao56视点图(diagram)说明结构

包图(packagediagram)从包层面描述系统的静态结构类图(classdiagram)从类层面描述系统的静态结构对象图(objectdiagram)从对象层面描述系统的静态结构构件图(componentdiagram)描述系统中构件及其依赖关系行为

状态图(statechartdiagram)描述状态的变迁活动图(activitydiagram)描述系统活动的实施通信图(communicationdiagram)描述对象间的消息传递与协作顺序图(sequencediagram)描述对象间的消息传递与协作部署部署图(deploymentdiagram)描述系统中工件在物理运行环境中的部署情况用例用例图(usecasediagram)从外部用户角度描述系统功能1.5何为活动图描述实体为完成某项功能而执行的操作序列,其中某些操作或其子序列存在并发和同步示例:活动图活动决策点信息流和控制流泳道活动图的构成活动点:表示计算过程决策点:根据条件进行活动决策边:表示控制流或信息流控制流:表示一个操作完成后对其后续操作的触发信息流:刻画操作间的信息交换并发控制控制流经此节点后分叉(Fork)成多条可并行执行的控制流,或多条并行控制流经此节点后同步合并(Join)为单条控制流泳道将活动图用形如游泳池中的泳道分隔成数个活动分区,每个区域由一个对象或一个控制线程负责泳道将活动图用形如游泳池中的泳道分隔成数个活动分区,每个区域由一个对象或一个控制线程负责每个活动节点应位于负责执行该活动的对象或线程所在的区域内带泳道的活动图更清晰地表示了对象或线程的职责、它们之间的分工、协同和同步活动图的绘制原则从决策点出发的每条边上均应标注条件,且这些条件必须覆盖完整且互不重叠必须确保分叉和汇合节点之间的匹配性对任一分叉节点,其导致的并发控制流必须最终经由一个汇合节点进行控制流的同步和合并一张活动图可以浓缩成另一活动图中的单个活动节点,前者称为子活动图,后者称为父活动图内容软件详细设计概述任务、过程和原则详细设计的UML模型软件详细设计活动2.1用例设计2.2类设计2.3数据设计2.4子系统和构件设计详细设计文档化和评审思考和讨论需求分析阶段的用例描述了软件功能,那么这些功能是如何实现的?需求分析阶段描述了用例的交互图,它刻画了用例哪些方面的信息?其中的对象类称之为分析类,为什么?需求用例及其实现用例反映了软件需求,基于需求来指导和细化设计用例描述了业务逻辑的实施流程用例设计要明确需求是如何实现的软件要素实现需求2.1用例设计的任务任务针对需求分析模型中的每个用例,基于体系结构和用户界面设计模型给出的设计元素,设计用例的软件实现方案设计和建模各个设计元素如何通过协作完成用例关联各个设计元素,包括子系统、构件、对象类、界面等产生详细的设计信息,如新的设计元素、细节、关联结果描述用例设计的顺序图、类图等设计模型用例设计的任务用例设计用例模型用例交互模型分析类模型软件体系结构设计模型用户界面模型用例设计模型(用例实现交互图、设计类图等)用例的实现方案用例如何通过各个设计元素来实现的子系统、构件、设计类、界面元素类等这些设计元素之间在用例实现过程中的协同和交互消息传递精化各个设计元素的设计如接口、实现细节等设计元素最终需要通过代码加以实现用例设计原则以软件需求为基础以需求模型为前提,包括用例模型、交互模型、分析类模型等不能抛开软件需求来给出用例的实现方案通过整合设计元素来实现用例整合软件体系结构设计、用户界面设计等产生了一系列设计元素,包括:子系统、构件、关键设计类等等不能抛开前期设计工作成果精化软件设计用例设计不仅要给出用例实现的解决方案,也要依此为目的进一步精化软件设计,以获得更为详实的设计信息为后续的详细设计奠定基础用例设计的过程设计用例实现方案构造设计类图优化和评审用例设计方案用例设计子系统/构件设计类设计数据模型设计设计整合与验证2.1.1设计用例实现方案基础分析每个用例的UML交互图,它是开展用例设计的依据考虑体系结构和用户界面设计要素,它们是用例实现参与者明确各个设计元素(如对象类、构件等)的职责方法在分析阶段用例交互图的基础上,将交互图的分析类转化为用例实现的设计类,同时引入体系结构设计和用户界面设计所生成的设计元素,共同形成关于用例实现的交互模型结果生成用例实现的顺序图引入更多的设计元素,如构件、子系统、类等精化更多的设计细节,如接口、方法、交互等示例:需求分析阶段的用例交互图分析阶段的用例交互图说明了什么?其中的类是分析类!分析类与设计元素间对应关系(1/3)一个分析类的一项职责由一个设计元素的单项操作完整地实现分析类和设计类有何本质的区别?分析类与设计元素间对应关系(2/3)一个分析类的一项职责由一个设计元素的多项操作来实现细化和分解的过程分析类与设计元素间对应关系(3/3)一个分析类的一项职责由多个设计元素协同完成细化和分解的过程示例1:“用户登录”用例顺序图(需求)示例2:“用户登录”用例设计方案(设计)设计元素及其交互所有设计元素最终通过代码加以实现示例2:“系统设置”用例的顺序图(需求)示例2:“系统设置”用例设计方案(设计)所有设计元素最终通过代码加以实现设计元素及其交互示例3:“提醒服务”用例的顺序图(需求)示例3:“提醒服务”用例设计方案(设计)所有设计元素最终通过代码加以实现设计元素及其交互示例4:”远程控制机器人”用例顺序图(需求)示例4:“远程控制机器人”用例设计方案(设计)所有设计元素最终通过代码加以实现设计元素及其交互2.1.2构造设计类图基于用例实现方案给出详细设计模型中的设计类图类图中的设计元素可以为子系统、构件和UML类用不同的构造型或者相应图符来表示对UML类图稍作扩充以表示详细设计类图允许在类图中出现子系统和构件,它们的类别可以采用不同的UML构造型或者不同的图元符号来表示构造设计类图的方法创建初始的设计类从分析类图、体系结构图、用例实现的顺序图寻找确定设计类的职责每个设计类都有职责,取决于对交互图中消息的响应确定设计类间的关系如果A与B有消息,那么它们间有关系:关联、聚合和组合确定设计类的属性需要保存哪些数据项、其他对象类信息形成整体设计类图模块化、职责和功能单一化原则,调整和优化注意事项确保设计类图与分析类图之间、设计类图与用例设计模型之间的一致性分析类图中的类在设计类图中有相应的对应物用例设计模型中的设计元素(主要是指参与用例实现的对象、对象间的消息传递)在设计类图中要有相应的对应物(主要是指设计类及其方法)示例:“用户登录”用例实现的设计类图用例设计的交互图示例:“用户登录”用例实现的设计类图用例设计对应的设计类图2.1.3优化和评审用例设计方案尽可能重用已有软件资产来实现用例并依此构建用例实现方案如开源软件、云服务、遗留系统、软件开发包等等合并设计元素将具有相同或相似职责的多个设计元素(包括类、子系统和构件等)进行整合,归并为一个设计元素。将设计元素(如类等)中具有相同或相似功能的多个方法整合为一个方法,以减少不必要的冗余设计。重组设计元素借助继承或代理机制,对设计元素进行必要的组织和重组,以发现不同类之间的一般和特殊关系,抽象出公共的方法。确保所有用例实现方案在软件系统中和谐共存,无逻辑冲突用例设计的输出用例设计的顺序图用例设计的类图用例设计小结任务:为需求模型中每个用例设计软件实现方案原则:整体性、正确性、优化性等输出:用例实现方案的交互图、设计类图设计用例实现方案构造设计类图优化和评审设计方案思考与讨论为什么需要用例设计?需求阶段的用例交互模型与详细设计阶段的用例设计模型有何本质区别?内容软件详细设计概述任务、过程和原则详细设计的UML模型软件详细设计活动2.1用例设计2.2类设计2.3数据设计2.4子系统和构件设计详细设计文档化和评审类设计的任务任务对界面类、关键设计类、设计类等进行设计优化和精化,明确设计类的内部实现细节精化到可以提交软件实现的程度设计与建模明确类的可见范围,类的操作和属性,类之间的关系等对类设计进行建模结果类图、状态图、活动图等类设计的任务类设计用例模型用例交互模型分析类模型软件体系结构设计模型用户界面模型类设计模型(类图、活动图、状态图等)用例设计模型类设计的地位和作用“承上”类设计要充分考虑软件需求,基于体系结构设计、用户界面设计、用例设计、子系统/构件设计的成果“启下”类设计要为后续阶段的编码和实现奠定基础,需要产生足够详细的设计结果类设计示例精化类图还不够精化,需要更多的详细设计模型基于该类图,程序员指导如何进行编码吗?精化到什么程度类的可见范围属性的数据类型方法的实现算法类间关系状态变化或者活动情况类设计原则准确化对类的内部结构、行为等给予准确的表达,以支持程序员精准地理解类设计,进而编写出类的程序代码细节化对类的接口、属性、方法等方面给予足够详细的设计,以便程序员能够对类进行编程一致性要确保类的关系、属性、方法等的设计是相互一致的,类的内部属性、方法等设计与类的职责、关系等是相互一致的遵循软件设计的基本原则按照模块化、高内聚度、低耦合度、信息隐藏等基本原则来进行类设计,必要时需要基于这些原则对所设计的类进行必要的拆分和合并,以提高类设计的质量类设计过程确定类的可见范围精化类间关系构造状态图和活动图精化类属性和方法评审和优化类设计用例设计子系统/构件设计类设计数据模型设计设计整合与验证2.2.1确定类的可见范围可见范围如果类仅仅被其所在的包所使用,那么该类是“私有的”,否则是“公开的”原则尽量缩小类的可见范围,除非确有必要,否则应将类“隐藏”于包的内部public:公开级范围,软件系统中所有包中的类均可见和可访问该类protected:保护级范围,只对其所在包中的类以及该类的子类可见和访问private:私有级范围,只对其所在包中的类可见和访问为什么要缩小类的可见范围?2.2.2精化类间的关系明确类间的语义关系类间关系的语义强度从高到低依次是:继承,组合,聚合,(普通)关联,依赖类间关系定义的原则“自然抽象”原则,类间关系应该自然、直观地反映软件需求及其实现模型“强内聚、松耦合”的原则,即、尽量采用语义连接强度较小的关系精化类间的关系1:1,即一对一1:n,即一对多0:n,即0对多n:m,即多对多等等示例1:精化类间的关系示例2:精化类间的关系精化用户界面类间的关系示例3:精化类间的关系精化关键设计类间的关系2.2.3精化类的属性和方法精化类属性的设计精化类方法的设计(1)精化类属性的设计类属性的命名用业务领域的名词或者名词短语来命名类属性的可见范围public,对软件系统中的所有类均可见protected:仅对本类及其子类可见private:仅对本类可见遵循“信息隐藏”

原则,尽可能地缩小作用范围结合类关系来精化类属性设计如果类A与类B间存在1:1关联或聚合(非组合)关系,那么在A中设置类型为B的指针或引用(reference)的属性如果类A到类B间存在1:n关联或聚合(非组合)关系,那么在A中设置一个集合类型(如列表等)的属性,集合元素的类型为B的指针或引用如果类A与类B间存在1:1的组合关系,那么在A中设置类型为B的属性如果类A到类B间存在1:n的组合关系,那么在A中设置一个集合类型(如列表等)的属性,集合元素的类型为B示例:精化User类属性的设计二项属性:用户名“name”和用户密码“password”类型均为String可见范围均为“private”属性的初始值均为空串示例:精化LoginUI类属性的设计静态元素、用户输入元素和命令界面元素“loginPicture”

类型为静态元素“account”类型为用户输入元素,如文本框“password”

类型为用户输入元素(如文本框)可见范围均为“private”初始值“loginPicture”属性的初始值不为空,要有一个预加载的图标;“account”和“password”的初始值为空串示例:精化Robot类属性的设计privateintvelocity表示机器人的速度privateintangle表示运动角度privateintdistance表示与老人的距离privateintstate表示运动状态,包括“IDLE”空闲状态、“AUTO”自主跟随状态、“MANNUAL”手工控制状态(2)精化类方法的设计细化和明确类中各个方法的以下设计信息方法名称参数表(含参数的名称和类型)返回类型作用范围功能描述实现算法前提条件(pre-condition)、出口断言(post-condition)等示例:用活动图描述的Login()方法的详细设计关注特殊方法的设计对象创建方法在实例化类对象时会被执行,其职责能通常是完成类对象的初始化工作,包括初始化属性值等等对象删除方法在类对象生命周期结束前被执行,其职责通常是完成对象生命周期结束前的一些事务性工作,如释放对象所占用的资源等等对象比较方法比较类的两个实例对象,判断它们是否相同对象复制方法将类的一个实例对象的属性值复制到另一对象示例:精化detectFallDown()方法的详细设计分解和合并类方法优化类方法的设计实现类对象间的消息传递OOP提供四种手段支持对象间实现消息传递引用全局对象:obj1直接引用作为全局对象的obj2,依赖关系通过参数传递:obj2作为obj1的某项操作中的实在参数,依赖关系引用局部对象:在obj1的某项操作的函数体中创建或获取obj2,依赖关系通过类的成员变量:obj2作为obj1所属类的属性的取值,聚合与组合关系2.2.4构造类对象的状态图状态图如果一个类的对象具有较为复杂的状态,在其生命周期中需要针对外部和内部事件实施一系列的活动以变迁其状态,那么可以考虑构造和绘制类的状态图活动图如果某个类在实现其职责过程中需要执行一系列的方法、与其他的对象进行诸多的交互,那么可以考虑构造和绘制针对该类某些职责的活动图示例:Robot类对象的状态图2.2.5评审和优化类设计根据“强内聚、松耦合”的原则,判断设计的模块化程度,必要时可以对类及其方法进行拆分和组合评判类设计的详细程度,是否足以支持后续的软件编码和实现,依此为依据对类设计进行细化和精化按照简单性、自然性等原则,评判类间的关系是否恰如其分地反映类与类之间的逻辑关系,是否有助于促进软件系统的自然抽象和重用按照信息隐藏的原则,评判类的可见范围、类属性和方法的作用范围等是否合适,以尽可能地缩小类的可见范围,缩小操作的作用范围,不对外公开类的属性类设计输出的软件制品详细的类属性、方法和类间关系设计的类图描述类方法实现算法细节的活动图必要的状态图(可选)内容软件详细设计概述任务、过程和原则详细设计的UML模型软件详细设计活动2.1用例设计2.2类设计2.3数据设计2.4子系统和构件设计详细设计文档化和评审为什么要进行数据设计软件系统涉及各种信息,需要将其抽象为计算机可以理解和处理的数据有些数据需要持久保存的,存放在永久存储介质中开展数据设计,以支持信息的抽象、组织、存储和读取有些数据则需要存放在内存空间中,由运行的进程对其进行处理在类设计中抽象和封装为类属性及其数据类型数据设计任务设计需要持久保存的数据以及这些数据之间的关系数据组织方式(例如关系数据库中的表、关键字、外键等)之间进行映射为提高数据存储、操作性能而设计持久存储机制优化设施设计与建模设计数据的结构、存储、组织和访问对数据设计的结果进行建模数据设计的任务数据设计用例模型用例交互模型分析类模型软件体系结构设计模型用户界面模型数据设计模型(类图、活动图等)用例设计模型类设计模型数据设计过程确定持久数据确定数据存储和组织方式评审和优化数据设计设计数据访问操作用例设计子系统/构件设计类设计数据模型设计设计整合与验证示例:数据模型设计数据设计的原则可追踪根据软件需求、体系结构设计、用例设计等模型开展数据设计无冗余尽可能不要产生一些冗余、不必要的数据设计。考虑和权衡时空效率反复折中数据的执行效率(如操作数据需要的时间)和存储效率(如存储数据所需的空间),以满足非功能性需求贯穿整个软件设计阶段针对关键性、全局性的数据条目建立最初的数据模型数据模型应该不断丰富、演进、完善,以满足用例、子系统、构件、类等设计元素对持久数据存储的需求验证数据的完整性2.3.1确定永久数据根据对需求的理解来确定哪些数据需要永久保存如用户的账号和密码系统设置信息2.3.2确定持久数据的存储和组织方式将数据存储在数据文件中确定数据存储的组织格式,以便将格式化和结构化的数据存放在数据文件之中将数据存储在数据库中设计支持数据存储的数据库表确定持久数据条目确定设计模型中需要持久保存的类的对象及其属性面向对象设计模型与关系数据库模型的对应关系类对应于

“表格”(table)对象对应于“记录”(record)属性对应于表格中的“字段”(field)1:1、1:n关联关系的映射假设类C1、C2对应的表格分别为T_C1、T_C2,只要将T_C1中关键字段纳入T_C2中作为外键,就可表示从T_C1到T_C2间的1:1、1:n关联关系n:m关联关系的映射在T_C1、T_C2间引进新交叉表格T_Intersection,将T_C1、T_C2关键字段纳入T_Intersection中作为外键,在T_C1与T_Intersection之间、T_C2与T_Intersection之间建立一对多关系继承关系的数据库表设计(1/2)假设C1是C2的父类,将T_C1中的所有字段全部引入至T_C2弊端:浪费了持久存储空间,容易因数据冗余而导致数据不一致性继承关系的数据库表设计(2/2)假设C1是C2的父类,仅将T_C1中关键字字段纳入T_C2中作为外键获取C2对象的全部属性,需要联合T_C2中的记录和对应于外键值的T_C1中的某条记录避免数据冗余,但在读取C2对象时性能不如前种方法示例:设计持久数据保存“User”类对象的数据库表“T_User”示例:设计持久数据2.3.3设计数据操作写入、查询、更新和删除四类基本操作以及由它们复合而成的业务数据操作写入操作将数据从运行时的软件系统保存至数据库查询操作按照特定的选择准则从数据库提取部分数据置入运行时软件系统中的指定对象更新操作以运行时软件系统中的(新)数据替换数据库中符合特定准则的(旧)数据删除操作将符合特定准则的数据从数据库中删除数据验证操作该操作验证操作负责验证数据的完整性、相关性、一致性等等示例:设计永久数据的操作booleaninsertUser(User)booleandeleteUser(User)booleanupdateUser(User)UsergetUserByAccount(account)booleanverifyUserValidity(account,password)UserLibrary()

UserLibrary()voidopenDatabase()voidcloseDatabase()2.3.4评审和优化数据设计正确性数据设计是否满足软件需求一致性数据设计尤其是是数据的组织是否与相关的类设计相一致时空效率分析数据设计的空间利用率,以此来优化数据的组织根据数据操作的响应时间来分析数据操作的时效性,优化数据库以及数据访问操作可扩展性数据设计是否考虑和支持将来的数据持续保存的可能扩展设计输出描述数据设计的类图描述数据操作的活动图内容软件详细设计概述任务、过程和原则详细设计的UML模型软件详细设计活动2.1用例设计2.2类设计2.3数据设计2.4子系统和构件设计详细设计文档化和评审为什么需要子系统/构件设计体系结构设计和用例设计引入了子系统或者构件从软件封装和重用的角度需要将设计元素重组为子系统或者构件尚未对子系统/构件进行深入的设计子系统设计任务确定子系统内部结构,设置包含于其中的更小粒度子系统、构件和设计类,明确它们之间的协作关系确保它们能够协同实现子系统接口规定的所有功能和行为设计和建模细化子系统内部的细节,如设计元素、关联和交互对子系统内部的结构进行建模对子系统内部各个设计元素之间的协作进行建模结果包图、构件图、顺序图、活动图、类图子系统设计的示例构件设计任务定义构件内部的设计元素及其协作方法内部设计元素可以是子构件,也可以是粒度更细的类设计与建模细化构件的内部细节,如子构件、类等对构件内部的结构进行建模对构件内部各个设计元素之间的协作进行建模结果构件图、类图、顺序图、活动图等构件是可独立部署和运行的设计元素构件设计的示例子系统设计的任务确定子系统内部的结构设计包含于其中的、粒度更小的子系统、构件和设计类设计它们之间的接口和协作关系确保它们能够协同实现体系结构模型中该子系统的服务提供接口所规定的全部功能和行为子系统设计软件体系结构子系统接口和职责精化子系统,细化其内部设计元素子系统设计过程精化子系统内部设计元素导出子系统的设计类图构造子系统的状态图活动图评审子系统设计用例设计子系统/构件设计类设计数据模型设计设计整合与验证子系统设计的原则将分析模型中一个或一些较复杂、职责粒度较大的分析类抽象为一个子系统,并对此进行单独设计考虑软件非功能性需求,思考实现非功能需求的方法确保将子系统的职责分解到各个设计元素之中确保子系统设计元素能够完整地实现整个子系统职责不仅将注意力集中在子系统内部元素的设计上,还要思考所设计的子系统如何通过接口与其外部的设计元素(如构件、设计类、其他子系统等)进行交互和协作。结合已有软件资产、考虑实现约束等因素来进行子系统的设计,尽可能地通过重用开源软件、集成遗留系统2.4.1精化子系统内部设计元素在子系统中设置哪些设计元素构件、设计类或子系统它们各自的职责是什么提供什么功能和服务它们间如何协作实现子系统的职责、接口和功能子系统内部设计的方法理解和分解子系统的职责通过一系列交互图来进一步分析子系统的职责采用自顶向下和自底向上相结合的方式将子系统职责交由一组相对独立的设计元素(如设计类、构件等)来完成重用已有的软件资产(如开源软件、遗留系统)如果它们能够承担部分职责,那么将相关的软件资产作为构成子系统的成分之一绘制一系列UML交互图刻画子系统中软件元素如何通过交互来实现子系统的职责选择合适的设计模式有助于重用和优化子系统设计重用一些有效的问题求解和职责实现方式输出组描述子系统内部设计元素交互的UML顺序图示例:精化“RobotController”子系统的设计元素“RobotController”子系统实现“自主跟随老人”功能和职责的顺序图示例:精化“RobotController”子系统的设计元素“RobotController”子系统实现“远程控制机器人”功能和职责的顺序图2.4.2构造子系统的设计类图基于子系统设计的UML交互图详细描述了子系统功能和职责的实现方式推导出子系统的设计类图显式区分子系统内部的设计元素与位于子系统之外、为子系统提供服务的其他设计元素推导子系统设计类图的方法针对顺序图中对象所对应的类,将其抽象为设计类图中的类如果顺序图中对象a给对象b发消息m并附带参数p目标对象对应的类具有相应的职责和方法,以处理消息m目标对象对应的类具有相应的属性以存储p根据顺序图中对象间消息来确定设计类间的关系如果一个对象a向对象b发消息,那么对应的类A与类B之间存在关联或者依赖关系如果子系统外的设计元素通过子系统的接口与子系统进行交互,那么这些设计元素与子系统之间存在依赖关系如果多个设计类之间具有一般和特殊的关系,那么它们之间存在继承关系示例:“RobotController”子系统的设计类图“RobotController”子系统的类图2.4.3构造子系统的状态图和活动图如果子系统或其内部设计元素具有明显状态特征,那么绘制和分析其UML状态图状态及其变化构造子系统及其设计元素的活动图来理解和分析子系统是如何实现的子系统内部的设计元素协同完成子系统的某些功能子系统与外部设计元素协同完成更大范围内的功能子系统设计的输出制品子系统设计方案交互图设计类图可能的状态图、活动图评审子系统设计完整性子系统内部各设计元素所承担的职责完整覆盖了子系统的职责设计质量是否体现了软件工程的基本原则各个设计元素的职责划分是否合理、功能和接口封装是否恰当可满足性子系统设计是否实现了所赋予子系统的软件需求,是否存在多余的设计元素,是否引入了不必要的软件资产正确性是否正确地使用UML图符和模型来描述子系统设计的软件制品一致性多个软件制品间是否一致,模型和文字表述是否一致内容软件详细设计概述任务、过程和原则详细设计的UML模型软件详细设计活动用例设计类设计数据设计子系统和构件设计详细设计文档化和评审3.1软件详细设计的输出模型用UML类图、构件图、包图、状态图、顺序图等描述的详细设计模型文档软件详细设计规格说明书3.2设计整合汇总迄今获得的所有设计模型包括体系结构模型、界面设计模型、用例设计模型、子系统/构件/类设计模型、数据模型等形成系统、完整的软件设计方案3.3设计验证验证整个设计的正确性、优化性和充分性等验证设计模型之间的不一致性、冗余性等发现设计方案中的问题并进行整改3.4撰写设计文档1、引言1.1编写目的1.2读者对象1.3软件系统概述1.4文档概述1.5定义1.6参考资料2、软件设计约束和原则2.1软件设计约束2.2软件设计原则3.软件设计方案3.1体系结构设计3.2用户界面设计3.3用例设计3.4子系统/构件设计3.5类设计3.6数据设计3.7部署设计4.实施指南3.5设计评审人员用户(客户)评估和分析软件设计是否正确地实现了他们所提出的软件需求软件设计人员根据评审的意见来修改设计方案程序员能否正确理解设计文档、是否提供足够详细的设计方案以指导编码软件需求分析人员是否实现了他们所定义的软件需求质量保证人员发现软件设计模型和文档中的质量问题,并进行质量保证测试工程师以软件设计文档为依据,设计软件测试用例,开展软件测试配置管理工程师对软件设计规格说明书和设计模型进行配置管理3.6评审设计文档(1)规范性是否遵循文档规范,是否按规范的要求和方式来撰写文档简练性语言表述是否简洁不啰嗦、易于理解。正确性设计方案是否正确实现了软件功能性需求和非功能性需求可实施性设计元素是否已充分细化和精化,模型是否易于理解,所选定的程序设计语言是否可以实现该设计模型评审设计文档(2)可追踪性各项需求是否在设计文档中都可找到相应的实现方案,设计文档中的设计内容是否对应于需求条目一致性设计模型间、文档不同段落间、文档的文字表达与设计模型间是否一致。高质量是否充分考虑了软件设计原则,设计模型是否具有良好的质量属性,如有效性、可靠性、可扩展性、可修改性等评审步骤阅读和汇报软件设计规格说明书收集和整理问题讨论和达成一致,并进行修改纳入配置小结详细设计是要给出可指导编码的详细设计方案依据软件需求、体系结构和用户界面设计模型详细设计的任务用例设计、子系统设计、构件设计、数据设计、类设计详细设计的描述和输出UML的顺序图、类图、状态图、活动图、构件图等软件设计规格说明书软件设计的整合、验证与评审形成系统的软件设计方案发现和修改方案中存在的问题综合实践一任务:开源软件的详细设计方法针对开源软件新增加的软件需求,考虑软件的体系结构设计和用户界面设计,对开源软件进行详细设计,以实现开源软件新功能要求基于开源软件新构思的软件需求,结合体系结构设计和用户界面设计的成果,要详细到足以支持编码结果:用类图、顺序图、活动图、状态图等描述的详细设计模型综合实践二任务:软件详细设计方法基于软件系统的用例模型、用例交互模型和分析类图,开展用例设计、类设计、数据设计、子系统/软构件设计,产生软件详细设计模型要求基于软件需求分析、体系结构设计、用户界面设计的具体成果,所产生的详细设计成果要详实到足以支持编码结果:用类图、顺序图、活动图、状态图等描述的详细设计模型问题和讨论软件实现基础内容软件实现概述软件实现的任务、过程与原则软件实现语言编程语言的类别和选择高质量编码编码的原则和要求1.1何为软件实现根据软件设计模型,编写出目标软件系统的程序代码,并对代码进行必要的测试,以发现和纠正代码存在中的缺陷,并将可运行的目标代码部署到目标计算机上运行软件实现不仅要编写出程序代码,还要确保代码的质量,因此软件实现涉及多方面的开发工作,如编码、测试、调试等软件实现的任务软件实现软件体系结构设计模型用户界面设计模型软件详细设计模型高质量的程序代码软件实现兼具创作和生产生产性活动需要根据软件设计规格说明书和软件设计模型,生产出与之相符合的软件制品,即程序代码遵循设计文档和模型来编写程序,而且还要求程序员遵循编码原则和风格来编写出高质量的程序代码,并通过单元测试、集成测试、确认测试等一系列的软件测试活动来保证代码质量创作性活动发挥软件开发工程师的智慧和主观能动性,创作出目标软件系统的程序代码。这一过程高度依赖于程序员的编程经验、程序设计技能和素养,以及软件测试工程师的软件测试水平1.2软件实现需考虑多方面的因素与多类不同的人员相关包括程序员、软件测试工程师等程序员要考虑的因素不仅要对照设计来编写代码,还需要通过遵循编码规范、程序设计原则等来提高代码的质量软件测试工程师需要考虑的因素针对代码开展测试,不仅要发现代码中存在的功能性缺陷,如代码功能实现不正确,还要发现代码中存在的非功能性缺陷软件实现与软件设计之间的关系基于软件设计来开展软件实现照软件设计模型和文档来进行编码根据实现中发现的问题来纠正和完善软件设计设计不够详细,程序员需要进行进一步的软件设计和程序设计,才能编写出程序代码设计考虑不周全,软件设计时没有认真考虑编码实现的具体情况(如程序设计语言和目标运行环境的选择),导致有些软件设计不能通过程序设计语言加以实现1.3软件实现的过程软件实现包含编码、测试、调试等一系列的开发活动编码+单元测试+调试这三项工作均由程序员负责完成编码基于软件设计模型和文档,采用选定的程序设计语言,编写出目标软件系统的程序代码单元测试对自己编写的各个基本模块进行单元测试,以发现模块单元中存在的缺陷和问题调试发现产生缺陷原因,定位缺陷位置,进而对代码缺陷进行修复软件测试包括多项的软件测试工作集成测试、确认测试、系统测试等这项工作由软件测试工程师来完成1.4软件实现要遵循的原则基于设计来编码切忌“拍脑袋”写程序质量保证贯穿全过程要有非常强的“质量”意识既要重视外部质量,也要重视内部质量程序员的职责和能力要求自我学习能力独立解决问题的能力良好的编程习惯质量意识学会软件测试阅读和学习他人的代码善于利用CASE工具团队合作和沟通内容软件实现概述软件实现的任务、过程与原则软件实现语言编程语言的类别和选择高质量编码编码的原则和要求程序设计语言提供的支持提供了语法、语义和语用三方面的要素支持程序员来编写程序代码人们提出了二千多种的程序设计语言,不同的语言适合于不同的应用开发2.1程序设计语言的类别(1/3)机器语言由“0”、“1”所组成的机器指令极为繁琐、费时费力的工作;软件开发效率非常低,而且程序代码可读性非常差,极容易出错,不易于维护、移植性差;但程序代码的执行效率会非常高汇编语言一种低级语言,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址较为低级和复杂,程序可读性差,代码编写的效率低,对代码进行维护非常困难,程序调试也不容易,代码兼容性差程序代码占用存储空间少、运行速度快、执行效率高程序设计语言的类别(2/3)结构化程序设计语言以过程或函数作为基本的编程单元,采用三类控制结构(顺序、条件和循环)来刻画模块的处理过程和流程属于高级程序设计语言,程序可读性、可理解性、可维护性等有了明显的提升;配套CASE工具较为完善,有结构化程序设计方法学的指导不足:以过程和函数作为基本模块,模块的粒度小,可重用性差;程序代码抽象层次低,无法对问题域及其求解进行自然抽象如C、Fortran、Pascal等程序设计语言的类别(3/3)面向对象程序设计语言以类作为基本的模块单元,借助于面向对象的一组概念和机制来进行程序设计,有系统的方法学指导,建立起可直观反映问题域、模块粒度更大、可重用性更好的程序代码,已经成为计算机领域的主流编程语言如Java、C++等描述性程序设计语言描述程序需要解决什么样的问题,无需在程序中显式地定义如何来解决问题如Prolog、Lisp、ML等2.2程序设计语言的表达能力编程语言的类别平均代码量编程语言平均代码量机器语言320C128汇编语言107Fortran107高级语言80C++/Java53一个功能点用不同的语言来实现所需的平均代码量2.3程序设计语言的选择(1/3)软件的应用领域不同应用领域的软件通常会选择不同的程序设计语言来加以实现科学和工程计算领域选用Fortran、C等程序设计语言,数据库应用软件开发会选用Delphi、VisualBasic、SQL等程序设计语言,机器人等嵌入式应用选用C、C++、Python等程序设计语言,互联网应用开发选用Java、ASP等程序设计语言与遗留软件系统的交互考虑待开发软件系统是否需要与遗留软件系统存在交互。如果有该方面的实际需要,那么程序员需要解决二个系统之间的互操作问题程序设计语言的选择(2/3)软件的特殊功能及需求是否需要与底层的硬件系统进行交互,如果需要,可以考虑采用诸如C、汇编语言是否需要丰富的软件库来支持功能的实现,如果需要,可以考虑具有丰富软件库的编程语言,如Python、Java等是否需要对相关的知识进行表示和推理,如果需要,可以考虑选用描述性的程序设计语言,如Prolog、Lisp等程序设计语言的选择(3/3)软件的目标平台如果目标软件系统需要运行在特定的软件开发框架、软件中间件、基础设施之上,那么程序员还需要考虑目标平台对程序设计语言的支持,并依此来选定所需的编程语言如果目标软件系统需要部署在J2EE架构之上,那么就需要选择Java编程语言;如果需要借助于ROS来开发机器人软件,那么建议选择C、C++和Python等编程语言程序员的编程经验应该选择对于自己而言较为熟悉的语言,尽量避免选择没有使用过的程序设计语言2.4流行的程序设计语言2021年7月份程序设计语言的使用排行榜排名语言名称使用占比1C11.62%2Java11.17%3Python10.95%4C++8.01%5C#4.83%6VisualBasic4.5%7JavaScript2.71%8PHP2.58%9汇编语言2.4%10SQL1.53%C/C++语言面向过程、通用的结构化(面向对象)程序设计语言简洁的语言结构化的控制语句丰富的数据类型和运算符良好的可移植性目标代码执行效率高Java语言纯粹的面向对象编程语言简单性分布性兼具编译和解释性以及可移植性强类型语言和健壮性安全性,没有指针,使用字节码验证策略,防止恶意代码Python语言面向对象、解释型、通用的脚本编程语言功能强大,Python类库极其丰富语法简单,入门容易开源和免费,可移植性解释性混合型语言,既支持面向过程的编程也支持面向对象的编程内容软件实现概述软件实现的任务、过程与原则软件实现语言编程语言的类别和选择高质量编码编写代码的原则和要求3.1编写代码的原则(1/3)易读,一看就懂能够理解代码的语义和内涵,了解相关语句和代码的实现意图,方便修改和维护代码采用缩进的方法来组织代码的显示,用括号来表示不同语句的优先级,对关键语句、语句块、方法等要加以注释易改,便于维护或者在适当的位置增加新的代码以完善代码功能,或者对某些代码进行修改以便纠正代码中的缺陷和错误对将来可能需要进行修改和维护的代码(包括常元、变量、方法等)进行单独的抽象、参数化和封装,以便将来对其修改时不会影响其他部分的代码编写代码的原则(2/3)降低代码的复杂度将一个类代码组织为一个文件,并用统一的命名规则来命名文件在代码中适当的增加注释以加强对代码的理解,不用“goto”语句,慎用嵌套或者减少嵌套的层数,尽量选用简单的实现算法尽可能地开展软件重用和编写可重用的程序代码尽可能地重用已有的软件制品,如函数库、类库、软构件、开源软件、甚至代码片段等等在编码时要考虑所编写代码的可重用性,使得所编写的代码能为他人或者在其它软件系统开发中被再次使用编写代码的原则(3/3)要有处理异常和提高代码的容错性编写必要的异常定义和处理代码,使得程序能够对异常情况进行必要的处理,防止由于异常而导致的程序终止或崩溃编写程序代码以支持故障检测、恢复和修复,确保程序在出现严重错误时仍然能够正常运行,或者当崩溃时能尽快恢复执行代码要与模型和文档相一致程序员在编写代码的同时要同步修改和完善相应的软件设计模型和文档,确保代码、模型和文档三者之间保持一致3.2遵循编码风格(1/4)格式化代码的布局,尽可能使其清晰、明了充分利用水平和垂直两个方向的编程空间来组织程序代码,便于读者阅读代码适当地插入括号“{}”,使语句的层次性、表达式运算次序等更为清晰直观有效地使用空格符,以显式地区别程序代码的不同部分(如程序与其注释)遵循编码风格(2/4)尽可能提供简洁的代码,不要人为地增加代码的复杂度使用简单的数据结构,避免使用难以理解和难以维护的数据结构(如多维数组、指针等)采用简单而非复杂的实现算法简化程序中的算术和逻辑表达式不要引入不必要的变元和动作防止变量名重载避免模块的冗余和重复遵循编码风格(3/4)对代码辅之以适当的文档,以加强程序的理解有效、必要、简洁的代码注释代码注释的可理解性、准确性和无二义性确保代码与设计模型和文档的一致性遵循编码风格(4/4)加强程序代码的结构化组织,提高代码的可读性按一定的次序来说明数据按字母顺序说明对象名避免使用嵌套循环结构和嵌套分支结构使用统一的缩进规则确保每个模块内部的代码单入口、单出口3.3支持软件实现的CASE工具编辑器编译器调试器测试工具集成开发环境Eclipse集合开发环境3.4软件实现的输出源程序代码部署在不同计算节点上的可执行程序代码软件测试报告等小结软件实现软件实现包括编码、测试、调试、部署等一系列的活动基于软件设计模型,编写出目标软件系统的程序代码,并对代码进行必要的测试,以发现和纠正代码存在中的缺陷,并将目标代码部署到计算机上运行编程语言的选择要根据软件所属的应用领域、与遗留软件系统的交互、程序员的经验等多个方面,考虑选择什么样的程序设计语言来进行编程程序员遵循编码的原则和规范来编写出高质量的程序代码综合实践一任务熟练掌握开源软件的编程语言,熟练掌握支撑开源软件开发的CASE工具及其使用方法针对开源软件的编程语言,熟练掌握其使用及编程规范;基于开源软件的维护要求,选择并熟练掌握相应的CASE工具要求熟练掌握并能有效使用开源软件维护的编程语言及CASE工具结果:无综合实践二任务:选定软件开发的编程语言及CASE工具。方法针对待开发软件系统的特点和要求,考虑程序员的实际能力和编程经验,选择软件开发的编程语言;结合软件开发的具体要求,选择CASE软件工具或环境。要求数量掌握编程语言和CASE工具及环境的使用。结果:无。思考和讨论编程实现面临的主要挑战是什么?它对程序员和测试工程师提出什么样的要求?问题和讨论编写代码内容编写代码任务、过程和方法代码片段的重用软件缺陷和调试软件缺陷、错误和失效代码缺陷的应对方法及调试解决编程和调试问题开源技术问答社区群智知识的利用1.1编写代码的任务根据软件设计信息,借助于程序设计语言,编写出目标软件系统的源程序代码,开展程序单元测试、代码审查等质量保证工作编写代码既是一个生成代码的过程,也是对生成的代码进行质量保证的过程兼具软件创作和软件生产的过程自由地开展代码创作,编写出满足要求的程序代码,发挥其创新性和主观能动性,创作出算法精巧、运行高效的代码按照软件质量保证的规范和要求,生产出高质量的代码。程序员需要约束其编程行为,防止随意性、自由性的编程活动,确保其编程活动及其所产生的程序代码满足工程化开发的要求编写代码的任务编写代码软件体系结构设计模型用户界面设计模型软件详细设计模型高质量的程序代码1.1.1编写类代码编写实现类的代码编写实现类方法的代码编写实现类间关联的代码编写实现设计类间聚合和组合关系的代码编写实现接口关系的代码编写实现继承关系的程序代码编写实现包的代码(1)编写实现类的代码设计模型(如设计类图)详细描述了软件系统中类的详细设计信息,包括可见性、类名、属性、方法等等程序员需要将这些设计信息直接转换为用程序设计语言表示的实现结构和代码(2)编写实现类方法的代码基于类方法的设计描述(UML的活动图表示),程序员可以依此为依据来编写类方法的实现代码(3)编写实现类间关联的代码将类间关联关系的语义信息具体落实到相应类的程序代码中,即综合考虑关联关系的方向性、多重性、角色名和约束特性等信息来编写相关的类程序代码(4)编写实现设计类间聚合和组合关系的代码可以采用类似于实现关联关系的方法来编写实现聚合和组合关系的代码根据多重性来设计相应类属性的数据结构(5)编写实现接口关系的代码类设计模型可能包含有表征类与接口之间实现关系的语义信息诸多面向对象程序设计语言(如Java、C++等)提供了专门针对接口实现的语言机制,因而可以直接将接口设计信息转换为相应的程序代码如“Implement”机制(6)编写实现继承关系的程序代码面向对象程序设计语言(如Java、C++)提供了继承机制以及相应的语言设施Java支持单重继承,C++支持多重继承如“extends”机制将设计模型中的类间继承关系用程序设计语言提供的语言机制来表示(7)编写实现包的代码用包(package)来组织和管理软件系统中的类包是对软件系统中模块的逻辑划分,也可以将包视为是一种子系统面向对象程序设计语言(如Java)提供了对包进行编程的语言机制,每个包对应于代码目录结构中的某个目录1.1.2编写用户界面代码用户界面设计模型描述了构成用户界面的各个界面设计元素(包括静态元素、动态元素、用户输入元素、用户命令元素等)用户界面之间的跳转关系编码实现编写界面类属性的代码以定义界面设计元素编写界面类的方法以对界面操作或者对界面事件进行响应处理示例:“LoginUI”的编码实现示例:“LoginUI”的编码实现1.1.3编写数据设计代码数据设计定义了软件系统中需要持久保存数据及其组织(如数据库的表、字段)和存储(如数据库中的记录)方式设计了相应的类及其方法来读取、保存、更新和查询持久数据编码实现创建相应的数据库关系表格及其内部的各个字段选项等,确保它们满足设计的要求和约束编写相应的程序代码来操作数据库,如增加、删除、更改、查询数据记录等示例:“T_User”表的创建示例:连接和关闭数据库的代码示例:操作数据库的程序代码示例:判断用户账号和密码合法性的代码1.2代码片段的重用何为代码片段对应于类代码中所包含的一组语句序列实现了类中的一个具体、细粒度的功能代码片段示例与远端数据库服务器建立连接向远端的Socket程序发送一段数据开源社区中的代码片段开源技术问答社区(如StackOverflow、CSDN)中,大量的程序员在其中分享了许多形式多样、极有价值的代码片段通常这些代码片段都经过实践检验,因而表现出较高的代码质量在编写代码的工程中,程序员可以针对其代码编写要求,到开源技术问答社区中去寻找相关的代码片段,然后通过对代码片段的理解,选定和重用所需的代码片段,进而完成相应的编程任务示例:重用开源社区中的代码片段完成与MySQL数据库服务器连接的代码片段内容编写代码任务、过程和方法代码片段的重用软件缺陷和调试软件缺陷、错误和失效代码缺陷的应对方法及调试解决编程和调试问题开源技术问答社区群智知识的利用2.1何为软件缺陷软件缺陷是指软件制品中存在不正确的软件描述和实现存在缺陷的软件制品不仅包括程序代码,而且还包括需求和设计的模型和文档软件缺陷产生于软件开发全过程,只有有人介入的地方就有可能产生软件缺陷任何人都有可能在软件开发过程中犯错误,进而引入软件缺陷无论是高层的需求分析和软件架构缺陷还是底层的详细设计缺陷,它们最终都会反映在程序代码之中,导致程序代码存在缺陷软件缺陷带来的问题:错误存在缺陷的程序代码在运行过程中会产生不正确或者不期望的运行状态,将这种情况称程序出现了错误经过计算后某个变量的取值不正确接收到的消息内容不正确打开一个非法的文件引发程序报错错误带来的问题:失效运行错误的程序无法为用户提供所需的功能和行为,在此情况下我们称程序出现了失效如用户无法正常登录到系统中无法正确地分析出老人是否处于摔倒的状态等等。程序错误的根源在于程序中存在缺陷,程序的错误运行必然导致软件失效错误和失效是程序缺陷在程序运行时的内部展示和外在表现2.2

软件缺陷的描述(1/2)标识符每个软件缺陷都被给予一个唯一的标识符。类型说明软件缺陷的类型,如需求缺陷、设计缺陷、代码缺陷代码缺陷还可以进一步区分为是逻辑缺陷、计算缺陷、判断缺陷严重程度危急程度是指缺陷会影响软件的正常运行甚至危及用户安全严重程度的缺陷是指会导致软件丧失某些重要功能,或出现错误一般程度的缺陷是指缺陷会使得软件丧失某些次要的功能轻微程度是指缺陷会导致软件出现小毛病,但不影响正常运行软件缺陷的描述(2/2)症状:软件缺陷所引发的程序错误是什么,有何运行表现修复优先级:缺陷应该被修复的优先程度,包括:非常紧迫、紧迫、一般和不紧迫等几种状态:描述缺陷处理的进展状态,如已经安排人员

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论