基于iOS的软件工程工作流

  • 我是一名iOS开发者,专业为软件工程,以下主要是一些基于iOS的软件工程工作流总结和感悟,不仅限于iOS,在使用Mac做开发或做其他开发的都可以一起来讨论,总结出最高效的方法。以下全部为手打原创,欢迎大家和我一起讨论,共同进步。

在传统的软件项目开发中,通常使用瀑布模型进行开发,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段。
但在现如今移动应用盛行的时代,若将瀑布模型应用于移动应用的开发,就会稍显尴尬,以下将从软件项目周期的各个阶段进行分析和论述,包括在我看来一些实用的技术和软件建议。

可行性分析

  • 在传统的软件项目中,可行性分析是首当其冲的,当然在现在的敏捷开发、极限编程中也不可或缺。首先最容易被忽略的问题便是做出来的软件是否会有人用,现如今创业就等于做APP,大多数客户都是想通过做APP来创业,都想搞个平台或者商城,希望很多人来使用这个平台。但大多客户并不会推广和运营,只是有一个创业的想法,大多数软件公司不会说客户的想法哪里不好,毕竟软件公司都需要存活,那么客户的任何需求也就都顺理成章的成为了可行。

  • 除开软件业务的可行性,客户最关心的便是软件制作的价格、工期以及软件公司是否有能力做出软件。客户往往会毫无依据的开始压工资和压价格。公司本该需要对项目的工作范围、时间、质量、成本进行全方位的评估,但根据客户的要求软件公司就只有被动的考虑技术上是否能实现,在技术能实现的情况下能否满足客户的时间和价格需求。只要以上的都满足,以做出来为原则,就会认为是可行,公司便会立马和客户签合同。往往这就会忽略掉其他因素,这类软件做出来过后的可行性就大打折扣,客户往往也是走一步看一步,最后走向失败。

  • 对一个项目来说当然最理想的情况就是“多、快、好、省”。“多”指工作范围大,“快”指时间短、“好”指质量高,“省”指成本低。但是,这4者之间是相互关联的,提高一个指标的同时会降低另一个指标,所以实际上这种理想的情况很难达到。

需求分析

  • 在与客户沟通的过程中要把确定的和需要做的事情都记录下来形成文档。可以用图沟通就不要用文字,可以用文档沟通就不要用口。需求获取可以用OmniOutliner或者Excel来记录,到最终确定需求的时候便就是需求文档或项目报表,需求获取到过后可以用Xmind构建出项目基本模块和架构并输出产品原型,整个过程采用敏捷开发模型,迅速迭代,整个过程所有人都可以查看和提出建议,最终由产品经理(需求工程师)修订产品原型和文档,项目经理(技术大牛)根据需求原型和需求文档整理出项目报表和工期表。

  • 如果客户也懂得软件方面的知识,那么肯定是严格按照标准走是最好的。但现在大多数客户并不懂得软件,甚至连自己也不知道自己真正的需求是什么,他们只说出一个大概,比如要一个直播或者一个商场,然后便让开发商报价和估计工期,然后便毫无依据的开始压价格和工期。这就好比客户说要修一栋别墅,也没说这栋别墅需要多大,多少层,每层多少个房间。所以通常只有通过制作原型来直观地体现客户的想法,传统的需求文档过于抽象,并没有界面原型来的直观。如果需求分析再规范一些的话,还需要通过UML建模,然后再制作界面原型。但是因为客户的需求时刻都在变化,用UML建模跟不上时刻变化的需求。所以就直接用原型将需求体现出来,让客户也能更直观地看到界面及功能上的变化。在原型设计方面比较流行的是Axure,但是Axure对APP原型的制作不太友好,相比较而言Justinmind就是专门针对移动设计的,在线的原型设计网站墨刀也很不错,还能实时分享查看,还有就是Flinto,它还有可供Sketch用的插件,Balsamiq Mockups也不错,但仅仅只是草图,没有交互设计,特点就是快速。还有Facebook最近开源的御用原型工具Origami Stdio,也能在手机上实时查看,潜力无穷,具体如何选择,可以根据具体的需求来。界面尺寸和颜色的标注也可以使用Mark Man,使用起来非常方便,缺点是只能基于px进行标注,而iOS更希望是pt。

设计

  • 当原型确定过后就要进行界面具体设计了,说到界面设计,当然首推Sketch,它不仅是基于矢量的,而且操作简便,上手也非常快,还有非常丰富的插件,可以和flinto、framer、principle等交互设计软件无缝衔接,能够一键导出SVG、Png、PDF等常用格式,也有可供标注的插件使用,非常方便,是移动设计的不二之选。当交互设计完成后可以使用Kap来录制Gif图进行分享。

  • 当界面设计完成后便将完全设计好的界面发布,让前端可以开始搭建项目架构和界面,后台人员则开始设计数据库和数据接口,并形成API文档。

  • 整个过程可以使用Git进行版本管理,Github很不错,不过需要收费,git.oschina是免费的,不是特别重要的项目可以使用,有时候可能会漏掉一些更改,不是很稳定,coding.net也很不错,正在发展中,潜力很大推荐使用。

编码

  • 在设计完成后,开发人员便可根据界面图和接口文档开始进行编码,在编码之前需要制定一个时间周期表,可以使用OmniPlan来管理项目的进度,coding.net在近期也推出了项目进度管理的功能,团队协作产品Tower.im也非常值得使用。在编码时因为会进行团队多人开发,所以需要使用Git或SVN等版本管理工具,Sourcetree是个非常好用的Git管理客户端,可以不用使用命令行。在iOS端编码的时候,可以使用Reveal界面分析工具实时分析界面,可以节省大量的时间,减少出现BUG的几率。在团队开发中,需要规定好规范并严格遵守,包括项目前缀和代码注释。在Xcode 8之后,VVDocumenter被继承在了Xcode中,只需要在需要注释的代码上方按(⌥ Option + ⌘ Command + /)便可快速生成固定格式的注释。

  • 在项目中经常会使用到第三方库如AFN,Masonry之类的,CocoaPods提供了方便的第三方库管理功能,只需要编辑Podfile便可随意管理第三方库,CocoaPods会直接创建和修改项目的workspace配置,一切都是为了便捷,我们只需要修改pod文件并不需要过多的关心其他事情,CocoaPods创建的是高度集成的项目。相对于CocoaPods,另一款第三方库管理工具Carthage的特点是灵活,耦合度不高,集成时不需要集成相应的project,不需要创建workspace,而仅仅需要依赖打包好的framework文件即可。两者也可配合使用。

  • 在多人开发时最好把自己写好的东西封装起来,进行组件化开发,要测试的时候只需要取消注释掉封装的那一行代码便可以进行测试。

  • Charles是Mac上的抓包神器,Charles可以截取 Http 和 Https 网络封包。支持重发网络请求,方便后端调试。支持修改网络请求参数。支持网络请求的截获并动态修改。支持模拟慢速网络。在进行网络编程、测试和调试的时候非常有用。

  • 每天最常见的动作就是查看各种API文档,Dash是一个API文档浏览器,可以查询不同语言和不同框架的API,使用起来非常方便,并且反应迅速。它还具有代码片段管理功能,

  • 利用Dash的代码片段管理功能,我们可以把日常使用频繁(也就是你经常需要复制粘贴)的代码保存起来,然后为其设置一个独一无二的缩写,这样一来原本需要一遍又一遍的敲击键盘重复录入的繁琐工作,就可以交给Dash来帮你搞定。

测试

  • Instruments是Xcode自带的强大的测试工具,可以好好利用。

  • 蒲公英可以很好的进行应用托管,并进行App应用众测分发,关键还是免费的,还能生成Crash报告和数据统计,非常好用。

  • 腾讯 Bugly,是腾讯公司为移动开发者开放的服务之一,面向移动开发者提供专业的 Crash 监控、崩溃分析等质量跟踪服务。Bugly 能帮助移动互联网开发者更及时地发现掌控异常,更全面的了解定位异常,更高效的修复解决异常。针对移动应用,腾讯 Bugly 提供了专业的 Crash、Android ANR ( application not response)、iOS 卡顿监控和解决方案。移动开发者 ( Android / iOS ) 可以通过监控,快速发现用户在使用过程中出现的 Crash (崩溃)、Android ANR 和 iOS 卡顿,并根据上报的信息快速定位和解决问题。

  • iOS单元测试,OCUnit(即用XCTest进行测试)其实就是苹果自带的测试框架,我们主要讲的就是这个。GHUnit是一个可视化的测试框架。(有了它,你可以点击APP来决定测试哪个方法,并且可以点击查看测试结果等。)OCMock就是模拟某个方法或者属性的返回值,你可能会疑惑为什么要这样做?使用用模型生成的模型对象,再传进去不就可以了?答案是可以的,但是有特殊的情况。比如你测试的是方法A,方法A里面调用到了方法B,而且方法B是有参数传入,但又不是方法A所提供。这时候,你可以使用OCMock来模拟方法B返回的值。(在不影响测试的情况下,就可以这样去模拟。)除了这些,在没有网络的情况下,也可以通过OCMock模拟返回的数据。UITests就是通过代码化来实现自动点击界面,输入文字等功能。靠人工操作的方式来覆盖所有测试用例是非常困难的,尤其是加入新功能以后,旧的功能也要重新测试一遍,这导致了测试需要花非常多的时间来进行回归测试,这里产生了大量重复的工作,而这些重复的工作有些是可以自动完成的,这时候UITests就可以帮助解决这个问题了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • 先说项目开发过程中团队人员的分工协作。 一 人员安排 毕业至今的大部分项目都是独立完成,虽然也有和其他同事协作的时...
    SnowflakeCloud阅读 10,735评论 3 59
  • 抓住青春的尾巴,我是风中的野子,迎风飘扬。 坚持原创,转载请务必联系本人,谢谢!
    珠海红叶原创阅读 203评论 1 1
  • 昨天孩子不舒服,我熬了一晚上没睡,总觉得今晚上肯定能睡个好觉了,孩子争气,没吵我,自己睡了,我呢?许是错过了困劲儿...
    紫云英_6936阅读 178评论 0 0
  • 还有什么比这更美好 梦想与花蕾 在希望的田野上绽放 在云端,在心中 在蓝色的肌肤上 如果梦是蓝色的 月光将轻吻你我...
    晓晓老师Y阅读 291评论 0 0