设为首页 收藏本站
查看: 590|回复: 0

[经验分享] 软件开发流程安排(以Python语言为例说明)

[复制链接]

尚未签到

发表于 2017-5-4 09:56:27 | 显示全部楼层 |阅读模式
  下面以Python语言为例来说明软件开发流程的安排
  对于软件开发,编写实现功能的代码只是软件开发的很小的一部分,其前前后后还要包括很多的内容,下面具体来列出了设计,编码,静态代码分析,测试,调优这四步来说
  1)设计
  这涉及到系统设计,实现设计,当然这里面涉及到架构,涉及到模式等
  2)编码
  就是使用编辑器来编写代码,具体不同的语言有着不同的编译器,像python就有pydev+eclipse, pyscripters等等,c++有visual c++, slickedit等。
  假设我们使用pydev写出如下的测试代码:

#!/usr/bin/env python
"""
A simple test
"""
import os
import sys
def myprint(start):
"""Print the numbers"""
for item in range(10):
print 'item=', start * 10 + item
def mysum(first, second):
"""Get the sum of a and b"""
return first + second
def main():
"""The main function"""
for i in range(10):
myprint(i)
if __name__ == '__main__':
print 'OS: ', os.name
print 'Arguments: ', sys.argv
main()

   3)静态代码分析
  编写完代码之后,必须要进行静态代码分析,这包括编码规范、静态代码逻辑分析。python中有静态代码分析pylint, c++代码有非常有名的代码分析工具pc-lint
  4)写完代码必须要进行单元测试,python代码可以使用标准库里面提供的unittest来进行测试,c++可以使用google test框架来测试。
  下面是对上面test.py编写的单元测试代码:

import unittest
import test
class TestTest(unittest.TestCase):
"""Test Cases"""
def setUp(self):
pass
def tearDown(self):
pass
def testmyprint(self):
test.myprint(1)
def testmysum(self):
self.assertEquals(test.mysum(10, 20),30,'mysum')
  为了支持更多的代码自动化单元测试,在测试模块中(主要是__init__文件)添加如下的代码

def suite():
"""
Return the test suite
it should in Module File __init__
"""
tests = ['testmyprint','testmysum']
return unittest.TestSuite(map(TestTest, tests))
  然后在最上面的一个python文件,假设为testAll.py文件中添加如下代码:

import unittest
import testTest
suite1 = testTest.suite()
suite = unittest.TestSuite()
suite.addTest(suite1)
if __name__ == '__main__':
unittest.TextTestRunner(verbosity=2).run(suite)
  这假设的是引入模块testTest, 还可以引入其他的不同的模块,这样将所有的测试case都包括进来了
  最后在命令行中输入python testAll.py就可以测试所有的测试case了
  D:\Works\Eclipse\FirstPython\test>python testAll.py
testmyprint (testTest.TestTest) ... item= 10
item= 11
item= 12
item= 13
item= 14
item= 15
item= 16
item= 17
item= 18
item= 19
ok
testmysum (testTest.TestTest) ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.016s
OK
  5)将单元测试通过的话基本上就没有什么问题了,但是不一定保证写出的代码是最优的,所有有些时候我们需要进行调优,这样我们使用python的profiler来分析程序的执行性能
  首先我们执行后python -m cProfile test.py -o test.out
  就是获取test.py的执行性能结果,并且将结果输出到test.out文件中
  然后使用pstats来获取test.out中的性能数据,可以使用下面的代码来解析数据:

"""Get and analyze the cProfile output file """
import pstats
import sys
if len(sys.argv) != 2:
print '%s <profile_out_file>' % __file__
sys.exit()
else:
FILENAME = sys.argv[1]
PROFILE = pstats.Stats(FILENAME)
PROFILE.sort_stats('time').print_stats()

  这样可以看到按执行时间排列的函数调用
  下面是解析数据之后的结果
  Thu Apr 02 20:39:03 2009    test.out
         26 function calls in 0.012 CPU seconds
   Ordered by: internal time
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       10    0.011    0.001    0.011    0.001 test.py:10(myprint)
        1    0.001    0.001    0.012    0.012 {execfile}
        1    0.000    0.000    0.011    0.011 test.py:5(<module>)
        1    0.000    0.000    0.011    0.011 test.py:16(main)
       11    0.000    0.000    0.000    0.000 {range}
        1    0.000    0.000    0.012    0.012 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
最后,在确认程序运行无误,并且性能能够达到要求的情况下,将代码提交到版本控制服务器中去,如SVN,这样完成了一个软件开发的过程,进行下一个循环吧!
  祝你好运,呵呵

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-372843-1-1.html 上篇帖子: python与协程(1/3):生成器与协程 下篇帖子: 也说 支付宝即时到帐接口的python实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表