2-2 软件构造的流程和工具

2-2 软件构造的流程和工具

广义的软件构造:Design ==> Programming/refactoring ==> Debugging ==> Testing ==> Build ==> Release

狭义的软件构造:Validate ==> Compile ==> Link ==> Test ==> Package ==> Install ==> Deploy

一.软件构造流程

构造语言的3部分:

  1. 编程语言: C++, Java, Python...
  2. 模型语言: UML等
  3. 配置语言: XML等

1.编程语言

静态语言: 变量创建时必须声明类型

如c语言中: int a =5;

动态语言:变量创建时不需要生命类型,程序运行时自行判断

如python中: a = 5

编译型语言:先源代码编译生成机器语言,再由机器运行机器码

编译型语言有:C/C++、Pascal/Object Pascal

解释型语言:源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。

解释型语言有:JavaScript、VBScript、Perl、Python、Ruby、MATLAB

比较:

编译型语言,执行速度快、效率高;依靠编译器、跨平台性差些。 解释型语言,执行速度慢、效率低;依靠解释器、跨平台性好。

Java语言具备以上两种类型的性质: 既要编译又要运行.

强类型定义语言:一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了

弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值

2.建模语言和工具

建模语言是一种人工语言,用于表达信息、知识或系统,以一套一致的规则定义来可视化、推理、验证和交流系统的设计。最常用的建模语言是UML(Unified Modeling Language,统一建模语言)。建模语言的关键在于能够实现模型概念的传递。

统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言。UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。

类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。

类图的3个基本组件:类名、属性、方法。

1.泛化,即继承(generalization):表示is-a的关系,是对象之间耦合度最大的一种关系,子类继承父类的所有细节。直接使用语言中的继承表达。在类图中使用带三角箭头的实线表示,箭头从子类指向父类。

2.实现(Realization):在类图中就是接口和实现的关系。这个没什么好讲的。在类图中使用带三角箭头的虚线表示,箭头从实现类指向接口。

3.依赖(Dependency):对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。一个类调用被依赖类中的某些方法而得以完成这个类的一些职责。在类图使用带箭头的虚线表示,箭头从使用类指向被依赖的类。

4.关联(Association) : 对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。关联又分为一般关联、聚合关联与组合关联。后两种在后面分析。在类图使用带箭头的实线表示,箭头从使用类指向被关联的类。可以是单向和双向

4.聚合(Aggregation) : 表示has-a的关系,是一种不稳定的包含关系。较强于一般关联,有整体与局部的关系,并且没有了整体,局部也可单独存在。如公司和员工的关系,公司包含员工,但如果公司倒闭,员工依然可以换公司。在类图使用空心的菱形表示,菱形从局部指向整体。

5.组合(Composition) : 表示contains-a的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。是一种更强的聚合关系。部分不能脱离整体存在。如公司和部门的关系,没有了公司,部门也不能存在了;调查问卷中问题和选项的关系;订单和订单选项的关系。在类图使用实心的菱形表示,菱形从局部指向整体。

6.多重性(Multiplicity) : 通常在关联、聚合、组合中使用。就是代表有多少个关联对象存在。使用数字..星号(数字)表示。如下图,一个割接通知可以关联0个到N个故障单。

聚合和组合的区别

这两个比较难理解,重点说一下。聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

聚合关系图:

组合关系图:

小结:对象之间的联系

继承 inheritance :一般与特殊的关系 is a kind of组合 composition :部分与整体的关系,彼此不可分 is part of聚合 aggregation :部分与整体的关系,但彼此可分 owns a关联 association :对象之间的长期静态联系 has a依赖 dependence :对象之间的动态的、临时的通信联系 use a类间联系的强度:继承 >>> 组合 >> 聚合 >> 关联 >>> 依赖

3.配置语言

配置程序的参数和初始设置,应用应提供工具支持配置文件的维护

如: XML, YAML, JSON

XML:可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

什么是可扩展标记语言?

  • 可扩展标记语言是一种很像超文本标记语言的标记语言。
  • 它的设计宗旨是传输数据,而不是显示数据。
  • 它的标签没有被预定义。您需要自行定义标签。
  • 它被设计为具有自我描述性。
  • 它是W3C的推荐标准。

YAML是“YAML不是一种标记语言”的外语缩写 ;但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

二.代码走查

一种结构化的检查代码和文档缺陷的过程

代码静态分析:

定义:是在不执行计算机程序的条件下,对源代码进行分析,找出代码缺陷。

执行方式:一般配合静态程序分析工具进行,如CheckStyle, FindBugs, PMD for Java

可检测类型:死锁,空指针,资源泄漏,缓存区溢出,安全漏洞,竟态条件。

用途:程序翻译/编译,程序优化重构,软件缺陷检测等。

1.能够检测所有的代码级别可执行路径组合,快速,准确。

2.直接面向源码,分析多种问题。

3.在研发阶段开始找到并修复多种问题,节省大量时间,人力成本

动态调试技术

动态调试技术在软件逆向工程领域也是一个很热门的概念,他是与静态分析技术相对而言的。静态分析技术是指破解者利用反汇编工具将二进制的可执行文件翻译成汇编代码,通过对代码的分析来破解软件。而动态调试则是指破解者利用调试器跟踪软件的运行,寻求破解的路径。

代码动态调试技术,一般是通过观察程序在运行过程中的状态,如寄存器内容,函数执行结果,内存使用情况等等,分析函数功能,明确代码逻辑,挖掘可能存在的漏洞。

运行程序以分析代码;利用测试度量技术(如覆盖率)确保代码的可能功能均被充分测试到

Profiling 用来测量程序的时空复杂度,特定指令或函数的调用频率或持续时间

三.调试和测试(Debugging and Testing)

测试(test): 判断软件是否存在错误

调试(debug): 找到错误(bug)并改正的过程

注意: 测试和调试不会提升软件质量,而是发现缺陷的主要手段,软件质量应通过认真的分析需求、良好的设计、高质量的编码来确保。

四.重构(Refactoring)

重构是在不改变代码外部行为的前提下,改善其内部结构。

五.编译

For Java:
– Make
– Ant
– Maven
– Gradle
– Eclipse

原文地址:https://www.cnblogs.com/lee3258/p/11994069.html

时间: 2024-11-08 18:44:13

2-2 软件构造的流程和工具的相关文章

【软件构造】第二章第二节 软件构造的过程、系统和工具

第二章第二节 软件构造的过程.系统和工具 Outline 广义的软件构造过程 编程 静态代码分析 动态代码分析 调试与测试 重构 狭义的软件构造过程 构造系统:经典BUILD场景 构造系统的组件 构造过程和构造描述 Java编译工具 子目标和结构变体 构造工具 Notes ## 广义的软件构造过程 [编程(Coding)] 开发语言:如Java.C.Python 使用IDE(集成开发工具)的优势(组成) 方便编写代码和管理文件(有代码编辑器,代码重构工具.文件和库(Library)管理工具) 能

20个可以帮你简化iOS app开发流程的工具

这里推荐20个可以帮你简化iOS app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是立刻编程,而是设计UI和创建原型,这样你才能知道app如何运行,根据用户体验需要做哪些调整. App Cooker AppCooker 不仅是一个创建原型的优秀工具,它提供的许多功能还可以帮助你将程序发布到App store中.它集成了Dropbox,Box.net和photo roll,你可以直接

iOS开发之工具篇-20个可以帮你简化移动app开发流程的工具

本文转载至 http://www.cocoachina.com/ios/20130402/5926.html 如果想进入移动app开发这个领域,你总能从别的开发者或者网上或者书上找到各种各样的方法和工具,对于新手来说,还没有摸清门路就已经陷入迷茫了.这里推荐20个可以帮你简化app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是立刻编程,而是设计UI和创建原型,这样你才能知道app如何

麻省理工18年春软件构造课程阅读04“代码评审”

本文内容来自MIT_6.031_sp18: Software Construction课程的Readings部分,采用CC BY-SA 4.0协议. 由于我们学校(哈工大)大二软件构造课程的大部分素材取自此,也是推荐的阅读材料之一,于是打算做一些翻译工作,自己学习的同时也能帮到一些懒得看英文的朋友.另外,该课程的阅读资料中有许多练习题,但是没有标准答案,所给出的答案均为译者所写,有错误的地方还请指出. 译者:李秋豪 审校: V1.0 Thu Mar 8 22:58:41 CST 2018 本次课

软件构造 第一章

一.课程简介 1.软件构造课程的目标 ①程序设计与实现能力 ②系统设计与实现能力 ③系统分析与评价能力 ④利用现代软件构造工具的能力 2.传统软件设计步骤 ①讨论需要写的软件并实现②测试代码并改错③重复②.图示如下 3.更好的软件设计 ①未雨绸缪②考虑非功能质量属性③考虑多种设计选择④把设计决策明确写下来 4.设计的目标.原则和模式 设计目标:编程的视野 设计原则:编程的标尺 设计模式:编程的经验 二.软件构造多维视图 1.什么是软件 (1)构成: ·程序Program:UI, Algorith

面向对象软件构造 (Bertrand Meyer 著)

Part A: The Issues 议题 第一章 软件品质 第二章 面向对象的标准 Part B: The Road To Object Orientation 通向面向对象之路 第三章 模块性 第四章 复用性方法 第五章 走进对象技术 第六章 抽象数据类型 Part C: Object-Oriented Techniques 面向对象技术 第七章 静态结构: 类 第八章 运行时结构: 对象 第九章 内存管理 第十章 泛型 第一章 软件品质 1.1 外部和内在的因素 1.2 外部因素介绍 1.

记录Linux启动流程的工具bootchart

/*********************************************************************  * Author  : Samson  * Date    : 04/28/2014  * Test platform:  *              3.11.0-12-generic #19-Ubuntu  *              GNU bash, version 4.2.45  * ****************************

小型软件项目开发流程探讨

一.导言 国内很多项目都是小型项目, 参与人员少(两到五个人), 要快速交付(一两个月) . 要成功完成这种项目, 除了使用成熟且被团队成员熟练使用的技术之外, 有一个良好的开发流程, 也是很必要的. 二.小型软件项目开发流程 下图是我对小型软件项目开发流程的一个设想: 需求分析的重要性想必大家都应该清楚, 对于项目来说, 满足用户的需求是第一位的. 因为时间紧, 系统设计经常被忽略. 这会留下很大的隐患, 国内很多项目的需求通常是很简略的, 还需要在系统设计阶段把一些需求进一步的明确. 不然会

cheatsheet——mac 上的一款可以显示软件所有快捷键的小工具

https://www.mediaatelier.com/CheatSheet/ 发现一款可以显示 mac 上各种软件所有快捷键的小工具:cheatsheet,只要长按 command 键就可以了~ 快快下载下来试试吧!!